Создание и тестирование виртуальных последовательных портов с 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 ответа
Это должно быть хорошо, они просто имена. Если вы хотите, чтобы в среднем типе приложения был человек, вы бы хотели, чтобы данные передавались как... (ProgramA -> COM1 -> CNCB1 -> ProgramB -> COM2 -> CNCB2 -> Destination.) Поэтому в ProgramB должны быть открыты порты как для CNCB1, так и для COM2.
Я не слишком знаком с hub4com, чтобы дать вам ответ на этот вопрос. Похоже, что hub4com открывает порты, и ваше приложение также пытается открыть порт. Только одно приложение может иметь доступ к порту.
Похоже, вам нужен монитор порта. 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.