Как настроить и общаться с последовательным портом?

голоса
41

Мне нужно, чтобы отправлять и принимать данные через последовательные соединения (RS-232 и RS-422).

Как настроить и общаться с такой связью? Как я могу выяснить, что параметры конфигурации (например, скорость передачи данных) должна быть и как установить их?

В частности, я ищу, чтобы сделать это в Java, C / C ++, или один из основных Unix оболочек, но у меня также есть некоторый интерес к серийным программирования с использованием Windows / HyperTerminal.

Задан 06/08/2008 в 04:19
источник пользователем
На других языках...                            


11 ответов

голоса
28

Построить машину времени и вернуться в 1987 году? Хо-хо.

Хорошо, не более придирчивые комментариев.

Как я могу выяснить, какими должны быть параметры конфигурации (например, скорость передачи) ...

Прочитайте техническое описание? Ладно ладно. Серьезно, последний. Если вы не знаете, скорости передачи данных устройства вы пытаетесь общаться, у вас есть два варианта. Начните гадать, или, возможно, бюст уплотнительной рамки. Если вам нужна хорошая отправная точка, позвольте мне предложить 9600-8-N-1. Мое подозрение, что вы можете получить там с грубой силой относительно быстро. Там еще третий вариант, имеющий старой школы ниндзя, который может сказать, просто внешний вид бессмысленных символов в некоторой стандартной скорости передачи данных, что фактическая скорость передачи данных. Внушительная партия трюк, чтобы быть уверенным.

Надеюсь, если у вас есть доступ к этой информации. В UNIX / Linux, вы можете получить Ахольд Minicom играть с последовательным портом напрямую. Это должно сделать это довольно быстро, чтобы получить конфигурацию выяснили.

один из основных Unix оболочек

В Unix последовательный порт (ы) является / являются файла отображается в / Dev / подкаталог. ttyS0, например. Если установка правильная скорость передачи данных и этажерку с помощью Minicom, вы можете даже кошка материал в этот файл, чтобы отправить вещи там.

На мясу вопроса, вы можете получить к нему доступ программным способом через заголовки POSIX. termios.h является большой.

См: http://www.easysw.com/~mike/serial/serial.html#3_1 (не доступен)

но у меня также есть некоторый интерес к серийным программирования с использованием Windows / HyperTerminal.

Гипертерминал и Миник в основном та же программа. Что же касается, как Windows, давайте вы получите доступ к последовательному порту, я оставлю этот вопрос для кого-то другого. Я не сделал, что в Windows, так как дни Win95.

Ответил 06/08/2008 в 04:27
источник пользователем

голоса
10

Если вы хотите , чтобы код в Java я очень рекомендую SerialIOs SerialPort . Она очень проста в использовании и экономит ваши дни работы. Я никогда не нашел библиотеку с открытым исходным кодом , как хорошо , как SerialIO, РЕАЛЬНО!

Мой совет: не используйте серийные рамки IO Солнца! Именно с 1998 года и полна ошибок. Вы можете использовать RXTX но serialio лучше!

Ответил 23/08/2008 в 09:15
источник пользователем

голоса
8

Для C / C ++ на Windows, у вас есть (по крайней мере) два варианта:

  1. Используйте класс SerialPort предоставляемые .NET.
  2. Используйте API Win32. Существует обширная статья MSDN начиная с 1995 года, и многие бесплатные библиотеки и примеры в Интернете , чтобы вы начали.

Опция .NET будет намного проще.

Ответил 13/08/2008 в 13:44
источник пользователем

голоса
4

Если он должен быть кросс кроссплатформенного, я хотел бы предложить , глядя на Boost , Asio .

Ответил 03/09/2008 в 13:12
источник пользователем

голоса
3

Некоторое время назад я написал заявление приличного размера для маршрутизации соединений от фермы модемов до адреса TCP / IP сети.

Изначально я искал неизрасходованного (бесплатно) Серийный библиотеки ввода-вывода. Я пытался от Sun, IBM, и RxTx. Они были хороши для разработки приложения, и в первоначальном тестировании, но в производстве они каждый оказались неустойчивыми.

В конце концов я заплатил за SerialPort SerialIO в. Преобразование над буквально упражнением в меняющемся импорте, а библиотека была абсолютно скала - я не могу рекомендовать его достаточно. Мое приложение уже работает в поле 24/7 в течение нескольких лет, с ни одной проблемы , с которыми сталкиваются несколькими клиентами.

Если начать разработку с помощью SerialPort, они лучше API, и я хотел бы использовать его.

Если вам нужна поддержку кросс-платформенный, Java с SerialPort был лучший выбор, который я смог найти.

И, наконец, их лицензирование является довольно штопать разумно до тех пор, пока вы не программное обеспечение предварительной установки на оборудовании для клиента (ов).

Ответил 15/09/2008 в 20:16
источник пользователем

голоса
3

В работе мы используем TeraTerm и realterm для проверки последовательных данных в правильном формате. Также у нас есть аппаратный разветвитель с выключателем, чтобы мы могли контролировать движение к нашему приложению через кабель обратно к другому порту.

Окна позволяют получить доступ к последовательному порту через CreateFile. Это дает вам ручку и оттуда можно настроить доступ.

Ответил 06/08/2008 в 06:04
источник пользователем

голоса
3

С другой стороны, если вы хотите сделать это с помощью C #, который будет работать как на Windows , и Linux - с некоторыми ограничениями (EDIT:. , Которые могут устаревают у меня нет способа проверить это.). Просто создайте SerialPort объект, установите его BaudRate, порт и любые другие нечетные настройки, вызовите открыть на нем, и написать ваш Byte [] с. После того, как все настройки, объект SerialPort действует очень похож на любой сетевой поток, поэтому она должна быть достаточно легко выяснить.

И как ibrandy штатов, вы должны знать все эти параметры, как скорость передачи данных, прежде чем даже начать пытаться связаться с любым последовательным устройством.

Ответил 06/08/2008 в 04:35
источник пользователем

голоса
2

От Java RXTX ( не доступен ) библиотека довольно хорошо. Он поднимает , где серийные рамки IO Солнца кончили.

Ответил 08/08/2008 в 21:24
источник пользователем

голоса
1

Если вы не обязаны использовать конкретный компилятор я предлагаю использовать Qt и в новой версии 5.3 вы найдете класс, посвященный последовательные порты:

http://qt-project.org/doc/qt-5/qserialport.html

Код, который вы будете писать будет работать на всех платформах supprited Qt, по крайней мере, те, которые имеют последовательные порты.

Ответил 06/09/2014 в 14:01
источник пользователем

голоса
1

В зависимости от устройства Вы пытаетесь связаться, может быть больше параметров, чем скорость передачи данных, количество бит данных, типа проверки четности и количество стоп-бит, чтобы рассмотреть. Если я правильно помню, модемы используют девять линий интерфейса RS-232C. Некоторые устройства, такие как, например, кассовых аппаратов, могут использовать аппаратное квитирование на RTS / CTS линии или DTR / STR линии.

В общем, это хорошо, чтобы знать, как работает интерфейс. Вы не можете общаться, если скорость передачи не совпадает, но неправильная настройка других параметров может рода работу. Например Вы можете легко передавать данные на устройство ожидающей 1 стоповый бит 2 стоповых битов. Проблемы начинаются, когда Вы пытаетесь получить данные в таком случае. Вы можете также использовать надлежащим образом установить бит четности в качестве одного из стоп-битов и т.д.

Ответил 23/09/2008 в 02:21
источник пользователем

голоса
0

Я использую purejavacomm: Это реализация javax.comm написана на чистом Java + ЮНА

В отличие от RxTx, вам не нужно устанавливать DLL. Она написана на чистом Java + ЮНА, что позволило решить проблему переносимости между Windows, и Linux для меня. Это должно быть легко портировать на другую ОС-эс, которая поддерживает ЮНА, такие как Solaris и FreeBSD, но я не пробовал.

Можно ожидать, что чистая библиотека Java отставать от собственной реализации, таких как RxTx в исполнении, но с современными процессорами, узкое место, весьма вероятно, будет битрейтом последовательного порта, а не циклы CPU. Кроме того, это гораздо проще отлаживать, чем смешанный Java / Native библиотеки или чистого скомпилированный машинный код.

Ответил 18/03/2013 в 11:59
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more