Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Хорошо, больше никаких комментариев.

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

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

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

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

В Unix последовательный порт отображается в файл /dev/subdir. ttyS0, например. Если вы настроите правильную скорость передачи в бодах и еще не используете minicom, вы можете даже поместить вещи в этот файл, чтобы отправить туда материал.

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

Смотрите: http://www.easysw.com/~mike/serial/serial.html#3_1 (НЕ ДОСТУПНО ЛЮБОЙ)

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

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

Ответ 2

Если вы хотите закодировать на Java, я действительно рекомендую SerialIOs SerialPort. Он очень прост в использовании и экономит ваши дни работы. Я никогда не нашел библиотеку с открытым исходным кодом так же хорошо, как SerialIO, ДЕЙСТВИТЕЛЬНО!

Мой совет: не используйте Sun IO-рамки! Это с 1998 года и полный ошибок. Вы можете использовать rxtx, но serialio лучше!

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

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

Ответ 8

Из Java rxtx (НЕ ДОСТУПНА ЛЮБОЙ) библиотека довольно хорошо. Он забирает место, где остановился Sun serial IO framework.

Ответ 9

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

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

Ответ 10

Я использую purejavacomm: Это реализация javax.comm, написанная в чистой java + JNA

В отличие от rxtx, вам не нужно устанавливать DLL. Он написан на чистом Java + JNA, который решил для меня проблему переносимости между Windows и Linux. Легко переносить на другие ОС, поддерживаемые JNA, такие как Solaris и FreeBSD, но я не пробовал.

Вы можете ожидать, что чистая библиотека java будет отставать от собственной реализации, такой как rxtx в производительности, но с современными процессорами узкое место, скорее всего, будет битрейтом вашего последовательного порта, а не циклов ЦП. Кроме того, это намного легче отлаживать, чем смешанная Java/Native библиотека или чистый скомпилированный собственный код.

Ответ 11

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

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

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