WB FAQ/modbus-modules-behind-gateway: различия между версиями
Matveevrj (обсуждение | вклад) (Перенаправление на Socat) Метка: новое перенаправление |
|||
(не показано 6 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Работа с подключёнными к WB-MGE (WB-MIO-E) устройствами через socat}} | {{DISPLAYTITLE: Работа с подключёнными к WB-MGE (WB-MIO-E) устройствами через socat}} | ||
__TOC__ | __TOC__ | ||
Строка 20: | Строка 19: | ||
# Запустите перенаправление. Предположим, что модуль WB-MGE (WB-MIO-E) имеет IP-адрес 192.168.0.7, тогда в одном терминале на контроллере нужно выполнить команду: | # Запустите перенаправление. Предположим, что модуль WB-MGE (WB-MIO-E) имеет IP-адрес 192.168.0.7, тогда в одном терминале на контроллере нужно выполнить команду: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
socat -d -d -d -x PTY,raw, | socat -d -d -d -x PTY,raw,ispeed=9600,ospeed=9600,parenb=0,cstopb=1,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:20108& | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#: | #: в системе появится виртуальный порт <code>/dev/ttyRS485-5</code>, с которым можно работать как с локальным. | ||
Теперь открываете второй терминал и, с помощью утилиты [[ Modbus-client | modbus_client]] читаете и записываете значения в регистры устройств, подключенных к шлюзу по сети RS-485. В качестве адреса используете Modbus-адреса устройств. При этом в первом терминале остается запущенной команда socat. | Теперь открываете второй терминал и, с помощью утилиты [[ Modbus-client | modbus_client]] читаете и записываете значения в регистры устройств, подключенных к шлюзу по сети RS-485. В качестве адреса используете Modbus-адреса устройств. При этом в первом терминале остается запущенной команда socat. | ||
Строка 51: | Строка 49: | ||
# Настройте переадресацию socat: | # Настройте переадресацию socat: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
socat -d -d -d -x PTY,raw, | socat -d -d -d -x PTY,raw,ispeed=115200,ospeed=115200,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23& | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# Во втором окне измените скорость порта устройства на 9600 кбит/с: | # Во втором окне измените скорость порта устройства на 9600 кбит/с: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
modbus_client --debug -mrtu | modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 96 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>. | # В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>. | ||
Строка 64: | Строка 61: | ||
# В первом окне снова создайте тоннель socat, не забудьте изменить скорость в параметрах: | # В первом окне снова создайте тоннель socat, не забудьте изменить скорость в параметрах: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
socat -d -d -d -x PTY,raw, | socat -d -d -d -x PTY,raw,ispeed=9600,ospeed=9600,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23& | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# Во втором окне прошейте устройство, например, утилитой wb-mcu-fw-updater: | # Во втором окне прошейте устройство, например, утилитой wb-mcu-fw-updater: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
Строка 73: | Строка 69: | ||
# После окончания прошивки верните в устройстве старую скорость 115200 кбит/с: | # После окончания прошивки верните в устройстве старую скорость 115200 кбит/с: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
modbus_client --debug -mrtu | modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 1152 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>. | # В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>. |
Версия 10:18, 24 августа 2022
modbus_client
Утилита modbus_client для опроса устройств по протоколам Modbus RTU и Modbus TCP из командной строки не умеет работать с протоколом Modbus over TCP, который используется для коммуникации с модулем WB-MGE и WB-MIO-E по сети Ethernet.
Для конфигурирования Modbus-устройств, подключенных к WB-MGE (WB-MIO-E) по сети RS-485 можно:
- Использовать дополнительные параметры устройства в веб-интерфейсе контроллера
- Создать виртуальный порт для работы утилиты modbus_client.
Чтобы создать виртуальный порт:
- Остановите сервис wb-mqtt-serial:
service wb-mqtt-serial stop
- Установите утилиту socat
apt-get install socat
- Запустите перенаправление. Предположим, что модуль WB-MGE (WB-MIO-E) имеет IP-адрес 192.168.0.7, тогда в одном терминале на контроллере нужно выполнить команду:
socat -d -d -d -x PTY,raw,ispeed=9600,ospeed=9600,parenb=0,cstopb=1,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:20108&
- в системе появится виртуальный порт
/dev/ttyRS485-5
, с которым можно работать как с локальным.
Теперь открываете второй терминал и, с помощью утилиты modbus_client читаете и записываете значения в регистры устройств, подключенных к шлюзу по сети RS-485. В качестве адреса используете Modbus-адреса устройств. При этом в первом терминале остается запущенной команда socat.
Чтобы обновить прошивку с помощью утилит wb-mcu-fw-updater или wb-mcu-fw-flasher:
- Используйте созданный socat порт, например,
/dev/ttyRS485-5
. - Режим шлюза должен быть 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.
Только при соблюдении всех условий обновление прошивки будет работать.
Обновление прошивки
Если у вас есть физический доступ к шлюзу, то будет гораздо проще прошить устройства просто подключив их напрямую к контроллеру или ноутбуку.
Этот способ сложен и подразумевает базовые навыки работы в коммандной строке, знание синтаксиса утилиты socat и хорошее понимание работы наших устройств. Ниже мы рассмотрим синтетический пример, который может сильно отличаться от вашей ситуации.
Так как загрузчик наших устройств может работать только на скорости 9600 кбит/с, то и устройства за шлюзом должны работать на этой же скорости, как и сам шлюз.
Исходные данные:
- Eсть шлюз WB-MGE, настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
- К шлюзу подключено устройство WB-MDM3 с адресом 58
- У устройства и в настройках шлюза выставлена скорость 115200 кбит/с.
Инструкция:
- Дважды подключитесь к контроллеру по SSH,у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
- Остановите wb-mqtt-serial.
- Настройте переадресацию socat:
socat -d -d -d -x PTY,raw,ispeed=115200,ospeed=115200,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23&
- Во втором окне измените скорость порта устройства на 9600 кбит/с:
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 96
- В первом окне разорвите соединение socat клавишами Ctrl+C.
- Подключите Ethernet кабель шлюза WB-MGE к ноутбуку, откройте браузер и введите IP-адрес шлюза.
- В веб-интерфейсе шлюза измените настройки порта с 115200 кбит/с на 9600 кбит/с
- Подключите шлюз к контроллеру по Ethernet.
- В первом окне снова создайте тоннель socat, не забудьте изменить скорость в параметрах:
socat -d -d -d -x PTY,raw,ispeed=9600,ospeed=9600,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23&
- Во втором окне прошейте устройство, например, утилитой wb-mcu-fw-updater:
wb-mcu-fw-updater update-fw /dev/ttyRS485-5 -a58
- После окончания прошивки верните в устройстве старую скорость 115200 кбит/с:
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 1152
- В первом окне разорвите соединение socat клавишами Ctrl+C.
- Подключите Ethernet кабель шлюза WB-MGE к ноутбуку, откройте браузер и введите IP-адрес шлюза.
- В веб-интерфейсе шлюза измените настройки порта с 9600 кбит/с на 115200 кбит/с.
- Подключите шлюз к контроллеру по Ethernet.
- Запустите wb-mqtt-serial
Если вам нужно прошить несколько устройств, то вы можете сперва изменить им скорость, перенастроить шлюз, а потом так же поочереди их прошить, вернуть им прежнюю скорость и снова перенастроить шлюз.