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

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

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

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

6.08.2008 03:19:19
10 ОТВЕТОВ
РЕШЕНИЕ

Собрать машину времени и вернуться в 1987? Хо хо

Ладно, больше никаких язвительных комментариев.

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

Прочитать таблицу? Ладно ладно. Серьезно, последний. Если вы не знаете скорость передачи устройства, с которым пытаетесь установить связь, у вас есть два варианта. Начните угадывать, или, возможно, разрушить сферу. Если вам нужна хорошая отправная точка, позвольте мне предложить 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.

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

28
28.01.2016 17:59:11

С другой стороны, если вы хотите сделать это с помощью C #, который будет работать как в Windows, так и в Linux - с некоторыми ограничениями (РЕДАКТИРОВАТЬ: это может быть устаревшим. У меня нет возможности проверить это.). Просто создайте объект SerialPort , установите его скорость передачи, порт и любые другие нечетные настройки, вызовите open для него и запишите свои байты [] s. После всей установки объект SerialPort действует очень похоже на любой сетевой поток, поэтому его должно быть достаточно легко выяснить.

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

2
6.08.2008 03:35:50

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

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

3
6.08.2008 05:04:57

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

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

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

9
13.08.2008 12:44:34

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

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

11
7.04.2014 08:29:25

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

5
3.09.2008 12:12:46

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

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

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

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

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

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

3
15.09.2008 19:16:28
Когда вы в последний раз использовали RxTx и SerialPort? Мне интересно, улучшился ли RxTx.
Gili 9.02.2009 23:33:48
@Gili: это было несколько лет назад для RxTx - я никогда не возвращался к нему после покупки SerialPort, так как у нас никогда не было проблем с SerialPort и нет лицензионных платежей, поэтому нет мотивации тратить время на RxTx.
Lawrence Dol 10.02.2009 04:22:29
@Gili: SerialPort в настоящее время используется нашими клиентами.
Lawrence Dol 10.02.2009 04:24:05
какова их максимальная скорость обмена данными с USB-конвертерами? Я посмотрел на их сайте, там написано 230400, но я, возможно, что-то неправильно прочитал. (230 кбод недостаточно для моего приложения)
Jason S 20.02.2009 22:42:08
IIRC, максимальный бод был эффективно ограничен только H / W - я написал свою конфигурацию, чтобы разрешить до 1,3 Мб, но я нацеливался на модемы по RS-232, так что 115K был максимум, который мне был нужен, и, вероятно, максимум, который я когда-нибудь будет.
Lawrence Dol 20.02.2009 22:45:49

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

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

1
23.09.2008 01:21:20

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

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

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

0
18.03.2013 10:59:35

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

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

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

1
6.09.2014 13:01:36