Прозрачный канал связи (шлюз) к подключенному к контроллеру прибору

Здравствуйте!
Если возможность организовать прозрачный канал связи (шлюз) к подключенному к контроллеру прибору? Например, подключить к COM-порту контроллера электросчетчик Меркурий, далее запустив сервисную программу счетчиков Меркурий и указав IP адрес (и порт подключения) контролера опросить его удаленно этой программой.

Добрый день.
да, например так: Утилита socat — Wiren Board

В описании утилиты смутило следующее:
++++
socat — утилита, которая может переадресовывать сокеты с хостовой машины, на клиентскую. Работает только с протоколом Modbus over TCP.
++++
Получается что утилита работает только с протоколом Modbus over TCP? И использовать ее для опроса частных специфических протоколов обмена не получится?

Нет. это, в описании только при доступе к внешнему аппаратному шлюзу ethernet/RS-485.

утилита socat работает - попробовал подключится к Сигнал-10 Bolid по UDP. В usb порт контроллера подключил флешку она определилась корректно как и винде CP210.
Команда в терминале для UDP - опрашивал с Uprog

socat -d -d -d -x /dev/ttyUSB0,rawer,b9600,parenb=0,cstopb=0,cs8 UDP-LISTEN:10012&

Как сделать порт постоянно открытым (если в терминале нет активной команды он не работает) и что бы он в терминал не писал весь обмен ?
Или может другую утилиту порекомендуете для контроллера?

Так, а задчача-то в чем? Обеспечить разовое подключение для настройки или постоянное?

Например запустить как сервис

Так вы явно указываете параметры d

  1. сделал без вывода информации в терминал убрав -d, так же ограничил доступ к порту из сети по одному IP адресу:

socat UDP-LISTEN:10012,range=192.168.0.9/32 /dev/ttyUSB0,rawer,b9600,parenb=0,cstopb=0,cs8&

в моей команде доступ ttyUSB0 контроллера будет только с 192.168.0.9/32.

  1. автозапуск пока нет получается разбираюсь создал файл udpttyusb.service
    в /etc/systemd/system/udpttyusb.service

[Unit]
Description=udpttyusb
After=serial-getty@ttyS0.service.d

[Service]
ExecStart=socat UDP-LISTEN:10012,range=192.168.0.9/32 /dev/ttyUSB0,rawer,b9600,parenb=0,cstopb=0,cs8&
Type=forking

[Install]
WantedBy=multi-user.target

А что в логе при запуске? не вижу, как минимум указания пути к socat.

В логе ругался на знак & в коде.

Итого порядок действий может кому пригодится.

  1. Создаем файл например с названием udp-usb

nano /etc/systemd/system/udp-usb.service

  1. В файле пишем следующее, в зависимости от того какой номер порта, сам порт UDP или TCP, скорость, четность и др.:

[Unit]
Description=udp-usb

[Service]
ExecStart=socat /dev/ttyUSB0,rawer,b9600,parenb=0,cstopb=0,cs8 UDP-LISTEN:10012
Type=simple

[Install]
WantedBy=multi-user.target

  1. Pазрешаем и проверяем статус и запускаем файл

systemctl enable udp-usb
systemctl -l status udp-usb
systemctl start udp-usb

  1. Перезагрузился и проверил статус еще раз systemctl -l status udp-usb , получаем:

● udp-usb.service - udp-usb
Loaded: loaded (/etc/systemd/system/udp-usb.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-11-08 15:32:19 UTC; 2min 8s ago
Main PID: 313 (socat)
Tasks: 1 (limit: 4790)
Memory: 1.8M
CPU: 41ms
CGroup: /system.slice/udp-usb.service
└─313 socat /dev/ttyUSB0,rawer,b9600,parenb=0,cstopb=0,cs8 UDP-LISTEN:10012


Все работает. Теперь после перезагрузке контроллера порт мой UDP всегда открыт. Теперь контроллер как прозрачный шлюз работает.

1 лайк

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.