Создание и тестирование виртуальных последовательных портов с com0com и hub4com

Я работаю над отправкой данных через COM в C++ для ESPA 4.4.4. Программа B, подключенная к COM-порту, обычно определяет, передает ли программа A данные. Чтобы проверить это, я создал две пары виртуальных портов с com0com, COM1/CNCB1, COM2/CNCB2. С hub4com я подключился как объяснил тут

Но когда я пытаюсь подключиться к COM1 или COM2 с помощью A или B, это невозможно сделать, поскольку порт уже используется.

Так что моя проблема в том, что я хочу, чтобы два порта связывались. -> Первый вопрос: хороша ли архитектура в этом уроке? Я имею в виду нормально ли иметь дело с COM1 / CNCB1 и COM2/CNCB2? -> Второй вопрос: команда для соединения двух портов - это "hub4com options \.\ Input_COM \.\ Output_COM1" \.\ Output_COM2"... ТАК я попытался сделать: "hub4com -baud=9600 \.\COM1 \.\COM2". Команда действительна, и я получаю следующее возвращение:

Open("\\.\COM1", baud=9600, data=8, parity=no, stop=1, octs=off, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\COM2", baud=9600, data=8, parity=no, stop=1, octs=off, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Route data COM1(0) --> COM2(1)
Route data COM2(1) --> COM1(0)
Route flow control COM1(0) --> COM2(1)
Route flow control COM2(1) --> COM1(0)
Started COM1(0)
Started COM2(1)

Итак, дорога установлена, и данные должны сообщаться. Но я не могу подключиться к COM-портам с моими программами. Поэтому я попытался подключиться к CNCB1 и CNCB2. Я могу подключиться к COM-портам. Но я не знаю, пришли ли данные.

-> Итак, третий вопрос: есть ли надежный способ узнать, отправляет ли COM1 данные в COM2? Просто немного программного обеспечения было бы здорово, чтобы проверить архитектуру:)

3 ответа

  1. Это должно быть хорошо, они просто имена. Если вы хотите, чтобы в среднем типе приложения был человек, вы бы хотели, чтобы данные передавались как... (ProgramA -> COM1 -> CNCB1 -> ProgramB -> COM2 -> CNCB2 -> Destination.) Поэтому в ProgramB должны быть открыты порты как для CNCB1, так и для COM2.

  2. Я не слишком знаком с hub4com, чтобы дать вам ответ на этот вопрос. Похоже, что hub4com открывает порты, и ваше приложение также пытается открыть порт. Только одно приложение может иметь доступ к порту.

  3. Похоже, вам нужен монитор порта. http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx

Вам не нужен hub4com, если у вас всего две программы, которые общаются друг с другом. Просто используйте com0com для настройки пары портов, например: COM1<>COM2. Теперь выберите Com1 в программе A и Com2 в программе B, и это должно сработать. (Это «Один-на-один-общение»)


Для "One-To-Many-Comms" вам понадобится hub4com:

Пример 1:

Программа A является вашим источником данных, и программа B и программа C должны получать данные от A. Затем вы поступаете следующим образом:

      com0com :  COM1<>CNCB0  ;  COM2<>CNCB1  ;  COM3<>CNCB2
hub4com --route=0:All \\.\CNCB0 \\.\CNCB1 \\.\CNCB2

Примечание: используйте Com1,2,3 в ProgramA, B, C.


Пример 2:

COM7 - это настоящий компьютер с подключенным к нему внешним источником данных, например, GPS-приемником. Программа A, B и C должна получить данные от COM7. Тогда вы идете так:

      com0com :  COM1<>CNCB0  ;  COM2<>CNCB1  ;  COM3<>CNCB2
hub4com --octs=off --route=0:All \\.\COM7 \\.\CNCB0 \\.\CNCB1 \\.\CNCB2

Примечание. Команда «--octs = off» необходима при работе с реальными COM-портами. Кроме того, если реальный COM-порт должен работать со скоростью, скажем, 4800 бод, вам нужно добавить команду: «--baud = 4800».


Пример 3:

Вам нужна двунаправленная связь между 3 программами: программа A отправляет B и C; B отправляет A и C; и C отправляет A и B. Затем вы делаете это так:

      com0com :  COM1<>CNCB0  ;  COM2<>CNCB1  ;  COM3<>CNCB2
hub4com --route=All:All \\.\CNCB0 \\.\CNCB1 \\.\CNCB2

Примечание. «Realterm» - хорошая бесплатная программа для тестирования вашей связи. (откройте его 3 раза для этого теста)


Пример 4:

Hub4com также хорош для соединения Com-TCP. Нравится:

      com0com :  COM1<>CNCB0  
hub4com \\.\CNCB0 --use-driver=tcp 192.168.20.3:4353

Примечание. Измените IP-адрес в соответствии с вашим устройством в сети Ethernet или WiFi.

Portmon больше не поддерживается и не работает в последних (x64) версиях Windows...

Так что теперь в Windows вы можете использовать эту замечательную программу: Serial-Lab

У меня была похожая проблема, и я также использовал com0com в сочетании с вышеупомянутым SerialLab. Когда com0com был установлен, он создал порты COM3 и COM4, ​​и я использовал эти два для тестирования. В вашем случае кажется, что у вас есть COM1 и COM2, созданные com0com?

В моем приложении (Java) я отправлял данные на COM4, ​​а в SerialLab я подключался к COM5 и мог читать данные, отправленные из моего приложения Java. Вы также можете отправлять данные из SerialLab, чтобы вы могли проверить симуляцию связи во всех направлениях.

Еще одна похожая программа также MyTerm.

Другие вопросы по тегам