Утилита socat
This is the approved revision of this page, as well as being the most recent.
Общие сведения
socat — утилита, которая может переадресовывать сокеты с хостовой машины, на клиентскую. Работает только с протоколом Modbus over TCP.
Установка
Для установки socat на контроллер Wiren Board выполните в консоли:
apt install socat
С последовательным портом может работать только один процесс, поэтому убедитесь перед запуском socat, что нужный вам порт никто не занимает:
fuser -v /dev/ttyRS485-1
USER PID ACCESS COMMAND
/dev/ttyS2: root 32296 F.... wb-mqtt-serial
В нашем случае порт занят драйвером wb-mqtt-serial — остановим его командой:
systemctl stop wb-mqtt-serial
socat в контроллере Wiren Board
В контроллере Wiren Board утилиту socat можно использовать для следующих задач:
- обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E,
- конфигурирование устройств, подключенных к шлюзам WB-MGE и WB-MIO-E, через консоль,
- доступ к портам RS-485 контроллера из консоли компьютера.
Конфигурирование устройств с помощью modbus_client
В последних релизах ПО контроллера конфигурирование Modbus-устройств, подключенных к WB-MGE (WB-MIO-E) по сети RS-485, выполняется из веб-интерфейса контроллера. Настоящая инструкция может быть полезна, если вы используете устаревшую версию контроллера или у вас нет доступа к веб-интерфейсу.
Утилита modbus_client не умеет работать с протоколом Modbus over TCP, который используется для коммуникации с модулями WB-MGE и WB-MIO-E по сети Ethernet. Поэтому для конфигурирования Modbus-устройств, подключенных к WB-MGE и WB-MIO-E по сети RS-485 нужно cоздать виртуальный порт с помощью утилиты socat.
Чтобы создать виртуальный порт:
- Остановите сервис wb-mqtt-serial:
service wb-mqtt-serial stop
- Запустите перенаправление:
socat -d -d -d -x PTY,raw,b115200,parenb=0,cstopb=1,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23&
- если у вас стабильный релиз до wb-2207 включительно, вместо параметра
b115200
, используйтеispeed=9600,ospeed=9600
.
В системе появится виртуальный порт /dev/ttyRS485-5
, с которым можно работать как с локальным.
Теперь можно открыть второй терминал и, с помощью утилиты modbus_client читать и записывать значения в регистры устройств, подключенных к шлюзу по сети RS-485. В качестве адреса используется Modbus-адреса устройств. При этом в первом терминале остается запущенной команда socat.
Получение доступа к порту RS-485 контроллера Wiren Board с компьютера
Внимание! Инструкцию следует выполнять только в закрытой подсети. Не следует давать доступ к RS-485 портам по TCP, если Wiren Board доступен по реальному IP снаружи.
Допустим, контроллер Wiren Board имеет IP 192.168.3.12. Выполните в консоли:
socat -d -d -d -x /dev/ttyRS485-1,raw,b9600,parenb=0,cstopb=1,cs8 TCP-LISTEN:10010&
socat -d -d -d -x /dev/ttyRS485-2,raw,b9600,parenb=0,cstopb=1,cs8 TCP-LISTEN:10011&
если у вас стабильный релиз до wb-2207 включительно, вместо параметра b9600, используйте ispeed=9600,ospeed=9600
.
Обратите внимание на кодирование количества стоп-битов: cstopb=1 — 2 стоп-бита, cstopb=0 — 1 стоп-бит. Параметр cstopb имеет булевский тип; подробнее смотрите в интернете man socat. Выполните на компьютере под Linux:
socat -d -d -d -x PTY,raw,b9600,parenb=0,cstopb=1,cs8,link=/dev/ttyRS485-1 tcp:192.168.3.12:10010&
socat -d -d -d -x PTY,raw,b9600,parenb=0,cstopb=1,cs8,link=/dev/ttyRS485-2 tcp:192.168.3.12:10011&
sudo ln -fs /tmp/ttyRS485-{1,2} /dev
если у вас стабильный релиз до wb-2207 включительно, вместо параметра b9600
, используйте ispeed=9600,ospeed=9600
.
После выполнения этих команд в системе компьютера появляются специальные файлы /dev/ttyRS485-1 и /dev/ttyRS485-2, соответствующие RS-485 портам Wiren Board.
Последняя команда для удобства создаёт в /dev символические ссылки на файлы портов. Опции -d и -x в обоих случаях можно опустить — они нужны для вывода диагностики и шестнадцатеричных дампов передаваемых данных.