Socat: различия между версиями
Matveevrj (обсуждение | вклад) |
Matveevrj (обсуждение | вклад) |
||
(не показано 18 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
{{Draft}} | |||
{{DISPLAYTITLE: Утилита socat}} | {{DISPLAYTITLE: Утилита socat}} | ||
Строка 23: | Строка 24: | ||
===socat в контроллере Wiren Board=== | ===socat в контроллере Wiren Board=== | ||
В контроллере Wiren Board утилиту socat можно использовать для следующих задач: | В контроллере Wiren Board утилиту socat можно использовать для следующих задач: | ||
* | * обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E, | ||
* [[ | * конфигурирование устройств, подключенных к шлюзам WB-MGE и WB-MIO-E, через консоль, | ||
* [[Socat# | * доступ к портам RS-485 контроллера из консоли компьютера. | ||
==Обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E== | |||
Для обновления прошивки устройства требуется доступ контроллера к интернету. Поэтому вам придется задействовать оба Ethernet порта контроллера: один со статическим IP-адресом — для подключения шлюза, второй — для доступа к интернету. Порты можно легко сконфигурировать в [[Networks | веб-интерфейсе контроллера]]. | |||
Для обновления прошивки используется утилита wb-mcu-fw-updater. Она будет работать, только если выполнены два условия. | |||
#Режим шлюза должен быть TCP Server/None (для WB-MGE v2, WB-MIO-E v2) или TCP Server (для WB-MGE v1, WB-MIO-E v1). | |||
#Modbus-устройства и шлюз должны иметь следующие настройки обмена по интерфейсу RS-485: | |||
#*скорость — 9600 бит/с, | |||
#*биты данных — 8, | |||
#*бит четности — нет, | |||
#*количество стоп-битов — 2. | |||
Поэтому для обновления прошивки нужно изменить параметры соединения, если они отличаются от указанных, а потом вернуть обратно. | |||
===Пример конфигурации=== | |||
Для примера возьмём конфигурацию: | |||
*Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23. | |||
*К шлюзу подключено устройство WB-MDM3 с адресом 58. | |||
*В настройках устройства и шлюза выставлена скорость 115200 кбит/с. | |||
===Инструкция=== | |||
Чтобы обновить прошивку: | |||
#Дважды подключитесь к контроллеру по SSH, у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству. | |||
#Остановите wb-mqtt-serial: | |||
#:<syntaxhighlight lang="bash"> | |||
systemctl stop wb-mqtt-serial | |||
</syntaxhighlight> | |||
#В первом окне запустите перенаправление: | |||
#:<syntaxhighlight lang="bash"> | |||
socat -d -d -d -x PTY,raw,b115200,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23& | |||
</syntaxhighlight> | |||
#:если у вас стабильный релиз до wb-2207 включительно, вместо параметра b115200, используйте <code>ispeed=115200,ospeed=115200</code>. | |||
#Во втором окне измените скорость порта устройства на 9600 кбит/с: | |||
#:<syntaxhighlight lang="bash"> | |||
modbus_client --debug -mrtu -b115200 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 96 | |||
</syntaxhighlight> | |||
#В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>. | |||
#В [[Socat#%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BA%20%D1%88%D0%BB%D1%8E%D0%B7%D0%B0 | настройках шлюза]] установите скорость порта 9600 кбит/с. | |||
#В первом окне снова запустите перенаправление socat с новыми параметрами соединения: | |||
#:<syntaxhighlight lang="bash"> | |||
socat -d -d -d -x PTY,raw,b9600,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23& | |||
</syntaxhighlight> | |||
#:если у вас стабильный релиз до wb-2207 включительно, вместо параметра b9600, используйте <code>ispeed=9600,ospeed=9600</code>. | |||
#Во втором окне запустите обновление прошивки устройства, например, утилитой wb-mcu-fw-updater: | |||
#:<syntaxhighlight lang="bash"> | |||
wb-mcu-fw-updater update-fw /dev/ttyRS485-5 -a58 | |||
</syntaxhighlight> | |||
#После окончания прошивки верните в устройстве старую скорость 115200 кбит/с: | |||
#:<syntaxhighlight lang="bash"> | |||
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 1152 | |||
</syntaxhighlight> | |||
#В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>. | |||
#В настройках шлюза измените скорость порта с 9600 кбит/с на 115200 кбит/с. | |||
#Подключите шлюз к контроллеру по Ethernet. | |||
#Запустите wb-mqtt-serial | |||
#:<syntaxhighlight lang="bash"> | |||
systemctl start wb-mqtt-serial | |||
</syntaxhighlight> | |||
Если вам нужно прошить несколько устройств, то вы можете сперва изменить им скорость, перенастроить шлюз, а потом так же поочереди их прошить, вернуть им прежнюю скорость и снова перенастроить шлюз. | |||
===Настройка шлюза для обновления прошивки=== | |||
[[Image: superport-config.png |350px|thumb|right| Настройки шлюза для обновления прошивки]] | |||
Самый простой способ изменить настройки шлюза — подключиться к его встроенному веб-интерфейсу. Для этого нужно: | |||
#подключить шлюз к компьютеру UTP кабелем напрямую или через роутер, | |||
#присвоить компьютеру статический IP-адрес в сети шлюза, например, 192.168.0.201, | |||
#открыть браузер и ввести IP-адрес шлюза, по умолчанию 192.168.0.7. | |||
Если у вас нет возможности физически подключить шлюз к компьютеру, можно использовать GET-запросы из консоли контроллера. | |||
Получить текущие параметры шлюза можно командой: | |||
<syntaxhighlight lang="bash"> | |||
curl 'http://192.168.0.7/sernet1.shtml' -u admin:admin | |||
</syntaxhighlight> | |||
Ответ будет содержать html-файл с параметрами. | |||
Записать настройки можно командой: | |||
<syntaxhighlight lang="bash"> | |||
curl 'http://192.168.0.7/config.cgi?br=9600&bc=8&parity=1&stop=2&flow=1&xon=0&tim=0&num=0&srf=1&srm=1&srz=30&tnmode=3&mbtp=0&tcpstx=9&ticken=0&urh=16&urf=1&tlp=23&srh=86400&srq=3&ura=10&srp=1&srr=30&sru=0&srt=1&tnbode=7' -u admin:admin | |||
</syntaxhighlight> | |||
== Конфигурирование устройств с помощью modbus_client == | == Конфигурирование устройств с помощью modbus_client == |
Версия 14:48, 26 апреля 2023
Это черновик страницы. Последняя правка сделана 26.04.2023 пользователем Matveevrj.
Общие сведения
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 контроллера из консоли компьютера.
Обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E
Для обновления прошивки устройства требуется доступ контроллера к интернету. Поэтому вам придется задействовать оба Ethernet порта контроллера: один со статическим IP-адресом — для подключения шлюза, второй — для доступа к интернету. Порты можно легко сконфигурировать в веб-интерфейсе контроллера.
Для обновления прошивки используется утилита wb-mcu-fw-updater. Она будет работать, только если выполнены два условия.
- Режим шлюза должен быть TCP Server/None (для WB-MGE v2, WB-MIO-E v2) или TCP Server (для WB-MGE v1, WB-MIO-E v1).
- Modbus-устройства и шлюз должны иметь следующие настройки обмена по интерфейсу RS-485:
- скорость — 9600 бит/с,
- биты данных — 8,
- бит четности — нет,
- количество стоп-битов — 2.
Поэтому для обновления прошивки нужно изменить параметры соединения, если они отличаются от указанных, а потом вернуть обратно.
Пример конфигурации
Для примера возьмём конфигурацию:
- Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
- К шлюзу подключено устройство WB-MDM3 с адресом 58.
- В настройках устройства и шлюза выставлена скорость 115200 кбит/с.
Инструкция
Чтобы обновить прошивку:
- Дважды подключитесь к контроллеру по SSH, у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
- Остановите wb-mqtt-serial:
systemctl stop wb-mqtt-serial
- В первом окне запустите перенаправление:
socat -d -d -d -x PTY,raw,b115200,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23&
- если у вас стабильный релиз до wb-2207 включительно, вместо параметра b115200, используйте
ispeed=115200,ospeed=115200
.
- Во втором окне измените скорость порта устройства на 9600 кбит/с:
modbus_client --debug -mrtu -b115200 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 96
- В первом окне разорвите соединение socat клавишами Ctrl+C.
- В настройках шлюза установите скорость порта 9600 кбит/с.
- В первом окне снова запустите перенаправление socat с новыми параметрами соединения:
socat -d -d -d -x PTY,raw,b9600,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23&
- если у вас стабильный релиз до wb-2207 включительно, вместо параметра b9600, используйте
ispeed=9600,ospeed=9600
.
- Во втором окне запустите обновление прошивки устройства, например, утилитой wb-mcu-fw-updater:
wb-mcu-fw-updater update-fw /dev/ttyRS485-5 -a58
- После окончания прошивки верните в устройстве старую скорость 115200 кбит/с:
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 1152
- В первом окне разорвите соединение socat клавишами Ctrl+C.
- В настройках шлюза измените скорость порта с 9600 кбит/с на 115200 кбит/с.
- Подключите шлюз к контроллеру по Ethernet.
- Запустите wb-mqtt-serial
systemctl start wb-mqtt-serial
Если вам нужно прошить несколько устройств, то вы можете сперва изменить им скорость, перенастроить шлюз, а потом так же поочереди их прошить, вернуть им прежнюю скорость и снова перенастроить шлюз.
Настройка шлюза для обновления прошивки
Самый простой способ изменить настройки шлюза — подключиться к его встроенному веб-интерфейсу. Для этого нужно:
- подключить шлюз к компьютеру UTP кабелем напрямую или через роутер,
- присвоить компьютеру статический IP-адрес в сети шлюза, например, 192.168.0.201,
- открыть браузер и ввести IP-адрес шлюза, по умолчанию 192.168.0.7.
Если у вас нет возможности физически подключить шлюз к компьютеру, можно использовать GET-запросы из консоли контроллера.
Получить текущие параметры шлюза можно командой:
curl 'http://192.168.0.7/sernet1.shtml' -u admin:admin
Ответ будет содержать html-файл с параметрами.
Записать настройки можно командой:
curl 'http://192.168.0.7/config.cgi?br=9600&bc=8&parity=1&stop=2&flow=1&xon=0&tim=0&num=0&srf=1&srm=1&srz=30&tnmode=3&mbtp=0&tcpstx=9&ticken=0&urh=16&urf=1&tlp=23&srh=86400&srq=3&ura=10&srp=1&srr=30&sru=0&srt=1&tnbode=7' -u admin:admin
Конфигурирование устройств с помощью 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 в обоих случаях можно опустить — они нужны для вывода диагностики и шестнадцатеричных дампов передаваемых данных.