Как расшарить com порт по сети
Перейти к содержимому

Как расшарить com порт по сети

  • автор:

Как расшарить com port по сети?

Добрый день. Есть 2 ПК.
Первый из них принимает по ком порту от приемника сигналы в программу. В этой программе есть функция дублирования сигналов дальше (в другую программу/устройство), но дублировать может только в ком порт.
Второй также обладает программой, который принимает сигналы с других приемников и только по ком портам.

Подскажите, есть ли свободное ПО под винду, с помощью которых можно на обоих ПК создать виртуальные ком порты и транслировать сигналы через сеть?
Платные точно есть, пример — www.fabulatech.com/network-serial-port-kit.html

  • Вопрос задан более трёх лет назад
  • 6134 просмотра

Комментировать
Решения вопроса 0
Ответы на вопрос 1

gbg

Армянское Радио @gbg Куратор тега Сетевое администрирование
Любые ответы на любые вопросы

Четыре варианта:
com0com — опенсорс
VSPE — закрытый исходник, вроде как без лицензии при использовании на 32 битах.
ТБН Редиректор — эта программа может только создавать TCP-клиент связанный с com-портом.
socat под cygwin

Ответ написан более трёх лет назад
Нравится 1 4 комментария

gravl

Владимир @gravl Автор вопроса

com0com — что то страшное. Посмотрел, потыкал, что то вообще не въехал как там что. VSPE — у меня как раз x64. ТБН — нужен и клиент и сервер.

gbg

Армянское Радио @gbg Куратор тега Сетевое администрирование

Владимир остался вариант — гибрид из socat и ТБН, вместе они работают — на машине с портом запустить socat, на машине, куда пробрасывать — ТБН

gravl

Владимир @gravl Автор вопроса

Армянское Радио: боюсь я не настолько умен для socat и cygwin. Почитал я о них и чет как то печально все стало

gbg

Армянское Радио @gbg Куратор тега Сетевое администрирование

Владимир: Там всех дел скачать и одну строчку набрать, ничего сложного. У меня гибридная сеть RS232 / Ethernet как раз на socat работает. Будут трудности — уточняйте.

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

Столкнулся на днях с очень интересной задачей, на работе, мною же, внедрялась Система Быстрых Платежей по QR коду.

Задача не сложная, у банков представлены достаточно удобные API для интеграций и собственно первый этап интеграции, с самописной CRM системой, работающей на web сервере – прошел гладко и быстро.

Работая в браузере можно было легко сформировать QR код и отправить его клиенту для последующей оплаты или показать в окошке на новой вкладке, как удобно…

Но как оказалось это не слишком удобно и есть специальные девайсы – дисплеи для вывода именно QR кода.

Собственно, не раздумывая был заказан один такой дисплей для интеграции в CRM и упрощения действий для менеджеров, ну и конечно же большего удобства клиентов.

Буквально через 3 дня курьер принес посылку с заказанным дисплеем (в интернете не так много контор которые предлагают подобное решение) и вот этот чудо девайс на рабочем столе.

Далее при распаковке посылки оказалось, что кроме самого дисплея и пупырки в которую он был упакован, больше ничего не было, от слова совсем, ни драйверов, ни инструкций, ничего, даже гарантийного талона, только талон на доставку…

После переписки с менеджерами, где был куплен сей девайс, на почту прилетело письмо с краткой инструкцией:

А дальше в папочке лежал текстовый файл с примером команд и программка (Terminal v1.9b by Bray) для проверки что сие чудо работает.

На законный вопрос о существовании какого-либо API или приложения для интеграции был следующий ответ:

Достаточно странный ответ для компании, которая продает не запчасти для последующего самостоятельного сбора, а готовый продукт, продает, по сути, полурабочий девайс, вокруг которого нужны еще танцы с бубном чтобы он заработал. Хотя еще более интересно посмотреть на «ПО которое будет работать с банками с внешним API» …

Но делать нечего, надо как-то интегрировать, что-то придумывать.

Набор команд у девайса не большой:

[QL]Вывод QR кода с логотипом

[CQ]Стирание QR кода с экрана

[CQL]Стирание QR кода с экрана без стирания логотипа

[T1]Вывод текста в верхней зоне экрана над QR кодом

[T2]Вывод текста в нижней зоне экрана под QR кодом

Поддерживает UTF-8, команда должна завершаться переводом строки.

После изучения списка команд, тестового формирования QR кода, начались поиски каких-либо решений на просторе интернета.

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

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

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

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

Быстро была сверстана страничка для теста, на компьютере включен XAMPP и простенький PHP код который должен был получать POST запрос с параметрами, после чего создавался текстовый файл и уже после этого PHP запускал BAT файл который посылал команду в COM порт.

На удивление все сработало, на дисплее появилось заветное сообщение!

На самом деле на этом можно было бы и остановиться, на каждой машине тихонечко поднять локальный сервер XAMPP, добавить в автозагрузку службы и в принципе все бы работало, но внутренняя тяга к максимальному удобству заставила подумать еще чуть-чуть и найти более красивое решение.

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

Приложение, выполняет те же функции, как и сервер XAMPP – просто слушает на локальном хосте 80 порт, создается небольшой сервер, но уже без всяких BAT файлов отправляет нужные команды в COM порт, дисплей работает…

Конечно, там еще есть очень много к чему приложить руки, но данное решение лично мне нравится гораздо больше, оно более лаконично.

Если вдруг кто-то знает еще варианты как решить проблему интеграции браузера и COM порта, напишите пожалуйста, буду благодарен.

SerialPortOverIP

Как пробросить (расшарить) последовательный порт по сети

Этот документ написан Гришей Баталовым (bga@)

Предлагаю вариант решения академической задачи «проброски

RS-232" через TCP/IP. Вопросы и поправки крайне приветствуются.

Задача в следующем:

- имеются два устройства, работающие друг с другом по RS-232 - желательно разнести их в пространстве, а тянуть физически

пару проводов от одного к другому неудобно

- есть локальная сеть вблизи обоих устройств

Схематично это можно изобразить так:

.----, RS-232 RS-232 .----, | У1 |--------> ( среда ) -------->| У2 | `----' `----'

Вариант решения: Оба устройства подключаются через COM-порты к низко-бюджетным

Линукс-машинам:
.----, RS-232 .-------, TCP/IP TCP/IP .-------, RS-232 .----, | У1 |-------->| Linux |--------> ( среда ) --------> | Linux |-------->| У2 | `----' `-------' `-------' `----'

На машинах запускаются COM-порт-сервер и COM-порт-клиент,

причём клиент ставится на машине, инициирующей соединение.
ttyS0-->getty-->ckermit/telnet-->sredird-->ttyS1

Sredird is a serial port redirector that is compliant with the RFC 2217 «Telnet Com Port Control Option» protocol. This protocol lets you share a serial port through the network. RFC 2217 was orginally implemented in Cisco Terminal Servers in IOS version 11.x.

Клиентом к нему может выступать обычный telnet, хотя

1. Скомпилируем sredird, скопируем его в /usr/sbin/sredird

на второй машине. Для работы с xinetd понадобится файл

/etc/xinetd.d/sredir:
# default: off # description: sredir allows to share serial port on the net service sredir < disable = no socket_type = stream wait = no user = root server = /usr/sbin/sredird server_args = 5 /dev/ttyS1 /var/lock/LCK..ttyS1 >

/dev/ttyS1 — порт на Устройстве-2, /var/lock/LCK..ttyS1 —

файл блокировки, 5 - log level.

В /etc/services добавим строку:

sredir 7200/tcp # serial port redirector
Порт может быть любой не занятый.

Делаем ‘#service xinetd reload’ и проверяем:

'$telnet localhost 7200'. Видим в логах:
Feb 22 13:23:01 bga xinetd[1111]: START: sredir pid=2353 from=127.0.0.1 Feb 22 13:23:01 bga sredird[2353]: SRedird started. Feb 22 13:23:01 bga sredird[2353]: Client doesn't support Telnet COM Port Protocol Option (RFC 2217), trying to serve anyway.

На консоли:

Trying 127.0.0.1. Connected to localhost. Escape character is '^]'.

Если мы подключались к модему, то команда ‘at’ ответит

'OK'. Выход: 'Ctrl-]', 'telnet> quit', в логах видим:
Feb 22 13:24:04 bga sredird[2353]: Error reading from network. Feb 22 13:24:04 bga sredird[2353]: Unlocked lock file /var/lock/LCK..ttyS1. Feb 22 13:24:04 bga sredird[2353]: SRedird stopped. Feb 22 13:24:04 bga xinetd[1111]: EXIT: sredir status=0 pid=2353 duration=63(sec)
2. Скомпилируем C-Kermit, либо возьмём с сайта готовый.

Скопируем его (wermit при компиляции) в /usr/bin/ckermit

на первой машине. Можно его запустить и ещё раз проверить:

C-Kermit> telnet 193.125.167.57 7200

где 193.125.167.57 - IP адрес второй машины, 7200 - назначенный нами порт. Выход по 'Ctrl-|', 'C', 'C-Kermit> exit'.

В /etc/inittab на первой машине добавим строку:

s0:345:respawn:/sbin/getty ttyS0 DT9600 tty

Таким образом, при активности на линии ttyS0 будет вызываться /sbin/getty. В /etc/gettydefs должно присутствовать описание DT9600 или другого DTxxxxx, если нам мало скорости 9600. У меня вот так:
# 9600 baud Dumb Terminal entry DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S login: #DT9600

Getty первым делом запросит логин и передаст его в

/bin/login. Нам это не нужно, по этому вместо /bin/login напишем свой скрипт /usr/bin/ckermit-login:
/usr/bin/ckermit -0 -8 -q -J 193.125.167.57 7200

При его вызове будет запускаться C-Kermit и обращаться

telnet-ом на 193.125.167.57:7200. Ctrl-последовательности отключены параметром '-0'.

Пропишем этот скрипт в /etc/conf.getty.ttyS0 на первой

машине:
LOGIN=/usr/bin/ckermit-login ISSUE=/dev/null
ISSUE - это заставка перед логином, нам она тоже не нужна. Естественно, скрипт должен иметь права на запуск.

Теперь реинициализируем init: ‘#init q’.

В процессах должна появиться строка вроде:

2562 ttyS0 S 0:00 /sbin/getty ttyS0 DT9600 tty

После подключения клиента:
2562 ttyS0 S 0:00 sh -c /usr/bin/ckermit-login 2564 ttyS0 S 0:00 /usr/bin/ckermit -0 -8 -q -J 193.125.167.57 7200

Теперь о том, как я это проверял. Рассчитано данное решение

на подключение датчиков, работающих по RS-232, к контроллеру. Датчики эти мне ни кто не давал, и, думаю, не даст.

По этому я водрузил всё это хозяйство на один единственный

компьютер с IP 193.125.167.57, инициирующим устройством сделал ноутбук с терминалкой от Norton Commander, отвечающим устройством - внутренний модем компьютера.

Терминалка была настроена на 9600 бод, без аппаратного

или программного управления потоком. Тип терминала: tty.

Строка инициализации: «at^MATZ^M». Дело в том, что getty

передаёт управление в LOGIN только после получения некоего логина, завершающегося возвратом каретки. Иначе ругается. Пусть это будет "at" маленькими буквами. Если мы используем этот ноутбук на настоящем модеме, то это "at" также должно правильно обработаться.

При включении терминалки идёт ругань на ошибку инициализации

модема. Не знаю, что она ожидает получить, этот вопрос я не разбирал. Можно эти сообщения игнорировать. После них я попадал прямо на модем, 'at', 'ati4' нормально отрабатывали.

При выходе из терминалки процесс ckermit оставался

запущенным, по этому при следующем входе отрабатывала уже и строка инициализации, поскольку передавалась сразу в модем.

На этом всё. Буду рад комментариям от более грамотных

товарищей, поскольку вполне мог где-то свалять дурака.
Баталов Григорий, системный администратор АО "Ковдорский ГОК"

Как расшарить com порт по сети

Мой старый логгер перестал меня удовлетворять и я решил «переехать» на новый. Спасибо за советы Alex UR5NMZ, Аркадию UT9UR, Саше AG2T. Вариантов даже бесплатных логов так много что я до сих пор «перевариваю» и выбора не сделал. Однако нет худа без добра — возникли проблемы которые надо было решать и они решились. Делюсь опытом. В обкатке log4OM, который соединяется с трансивером по CAT на базе OMNI, Может обслуживать два радио, в общем лог толковый и мне симпатичный. Еще не добрался до той части где распечатываются наклейки на QSL карточки, но, во-первых, карточки ко мне не доходят, от QSL обмена меня отлучила ЛРУ, а во-вторых, проьлема возникла не там 🙂 В последние пару лет я поделил свою любовь напополам между КВ и УКВ. Точнее радиосвязью с космическими объектами. Трансивер (TS2000) и Орбитрон успешно управляют частотами приёма-передачи (коррекция эффекта Допплера) по каждому спутнику через COM порты: один на трансивер, другой на ротатор (G5500).

Но логгер log4OM тоже хочет дружить с трансивером. Получается что по тому же порту, только через OMNIRIG. Надобно разрешить хождение битиков CAT и в логгер, и в Орбитрон, и в трансивер и еще в обоих направлениях. Поэтому нужно разрешить и трансиверу и Орбитрону использовать один и тот же порт. Вернее один и тот же трансивер через один порт. Из того что мне ведомо лучшее — бесплатная (только для 32 битных машин) версия Virtual Serial Port Emulator — VSPE Запускаем, Device, Create, Splitter и «расшариваем» например 3-й COM порт, например, в 7-й. И теперь и Орбитрону и логгеру указываем что трансивер разговаривает с ними через 7-й порт. И обе программы послушно принимают условия трансивера и успешно с ним работают.

vspe wisp

В окне VSPE, если нажать кнопочку «I» можно будет видеть как соединились трансивер, WISPDDE (Орбитрон) и логгер log4OMю

You have no rights to post comments Недостаточно прав для комментирования

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *