Здравствуйте!
Если возможность организовать прозрачный канал связи (шлюз) к подключенному к контроллеру прибору? Например, подключить к 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
- сделал без вывода информации в терминал убрав -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.
- автозапуск пока нет получается разбираюсь создал файл 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.
В логе ругался на знак & в коде.
Итого порядок действий может кому пригодится.
- Создаем файл например с названием udp-usb
nano /etc/systemd/system/udp-usb.service
- В файле пишем следующее, в зависимости от того какой номер порта, сам порт 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
- Pазрешаем и проверяем статус и запускаем файл
systemctl enable udp-usb
systemctl -l status udp-usb
systemctl start udp-usb
- Перезагрузился и проверил статус еще раз 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 всегда открыт. Теперь контроллер как прозрачный шлюз работает.
Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.