Разработка электроники,

Систем автоматики,

Программного обеспечения

8(981)186-50-82

ООО "Антех ПСБ",
Санкт-Петербург

anteh@bk.ru

antehru@gmail.com

©

com0com hub4com несколько примеров использования

22.10.2015 Сайт https://anteh.ru

Рассматриваются 2 частных случая использования:
1. Эмуляция программного виртуального нуль модемного кабеля с помощью open source сcom0com, в системе появляется 2 COM порта с нуль модемным соединением. 2 программы, работающие с COM портом можно соединить вместе как через реальные COM порты.
2. Эмуляция нуль модемного соединения для 2х и более реальных и/или виртуальных COM портов. Например в системе есть 2 физических COM порта, к ним подключены внешние устройства, которые должны обмениваться данными, нужно соединить эти 2 физических COM порта програмно, чтобы обмен происходим между ними. Можно конечно COM порты внешних устройств напрямую соединить, без подключения к компьютеру. Но допустим нужно "засниферить" обмен между устройствами. Или разветвить данные одного физического COM порта на много виртуальных COM портов для дальнейшего подключения разных программ к этим виртуальным COM портам.

Рассмотрим первый случай, 2 виртуальных COM порта представляющих нуль модемнымное соединение:

Устанавливаем com0com, запускаем, добавляем, например, две пары портов:com0com конфигурация

Добавили COM4, COM14, установили флаги Use Ports class и emulate baud rate. COM4, COM14 определены в системе как физические. COM40 COM41 без этих флагов, в системе как физические не определены:com0com конфигурация физических портов

Получили физические COM порты в системе. Для проверки результата, например к COM4 и COM14 подключаем по терминальной программе и наблюдаем, когда передача данных с одной терминальной программы отображается приёмом этих данных в другой.

Рассмотрим второй, более интересный случай, когда нужно 2 физических COM порта соединить между собой. И прослушать трафик терминальной программой.

Соединение 2х и более физических и/или виртуальных COM портов делаем через hub4com.exe

В командной строке набираем:

<Путь к hub4com.exe>\hub4com --baud=2400 --route=All:All \\.\COM1 \\.\COM15 \\.\COM4hub4com запуск

baud понятно, что такое. Здесь объёдинены 4ре COM порта в некоторую сеть. COM1 и COM 15 являются реальными физическими COM портами. COM4 это виртуальный COM порт, который совместно с COM14 образуют нуль модемное соединение. COM4 COM14 -это пара виртуальных COM портов, созданных через com0com.

Вместо командной строки можно использовать .bat файл.

Получилось следующее, есть некие 2 физических устройства, не подключённых к компьютеру, они между собой обмениваются по RS интерфейсу, нужно мониторить трафик. Разрываем соединение между физическими устройствами и каждое подключаем к физическому COM порту компьютера COM1 и COM15. Создаём нуль модемную пару COM4 COM14. Через команду "<Путь к hub4com.exe>\hub4com --baud=2400 --route=All:All \\.\COM1 \\.\COM15 \\.\COM4" объединяем COM1 COM15 и COM4. Таким образом весь обмен между физическими COM1 и COM15 будет на COM4 и соответственно COM14. К COM14 и подключаем терминальную программу, через которую будем видеть весь трафик.

Есть особенность, если в вышеприведённом примере COM14(пара COM4) не подключить/открыть в терминальной программе, то обмен между COM1 COM15, секунды через 4ре прекращается baudrate 2400. Или если в процессе обмена, в описаной выше конфигурации, отключить COM14 то секунды через 4 обмен между физическими COM1 COM15 прекращается, если подключить обратно, то возобновляется снова. Терминальная программа -демо версия ComPortToolkit. Явно видно, что есть какой-то буфер, при переполнении которого обмен прекращается. Т.е., если COM14 отключаем от терминальной программы, буфер относящийся к hub4com переполняется и прекращается обмен, после подключения COM14 обратно, буфер очищается в окно вывода терминальной программы и обмен возобновляется.

Ещё одна особенность: рассмотренная схема включения снифера канала RS интерфейса замедляет передачу в 2 раза, между физическими COM1 и COM15. Сначала посылка данных принятая на физический COM1 компьютера заносится в некоторый буфер в памяти компьютера, затем начинается передача этой посылки на физический COM15 и виртуальный COM4<->COM14 и если есть другис COM порты то и на них. Если соединить напрямую то, что подсоединялось к COM1 и COM15 то передача одной стороны сопровождается одновременным приёмом на другой.

В любом случае, обязательно, чтобы все COM порты из связки "...--route=All:All \\.\COM1 \\.\COM15 \\.\COM4" были открыты. Разумеется COM14, как пара COM4 также должен быть открыт.

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

Ещё одна неприятность: на скорости 115200 вышеприведённая схема снифера не работает. Обмен прекращается после пересылки нескольких пакетов данных между физическими COM1 и COM15. Возможно это связано с ограничением быстродействия компьютера.


Copyright ©Новиков Алексей Александрович,

2012-2017 Санкт-Петербург, 197372, ООО "Антех ПСБ",

anteh собака bk.ru