Работа с подключёнными к WB-MGE (WB-MIO-E) устройствами через socat

Материал из Wiren Board
Это утверждённая версия страницы. Она же — наиболее свежая версия.
Страница-перенаправление

Перенаправление на:

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 можно:

Чтобы создать виртуальный порт:

  1. Остановите сервис wb-mqtt-serial:
    service wb-mqtt-serial stop
    
  2. Установите утилиту socat
      apt-get install socat
    
  3. Запустите перенаправление. Предположим, что модуль WB-MGE (WB-MIO-E) имеет IP-адрес 192.168.0.7, тогда в одном терминале на контроллере нужно выполнить команду:
      socat -d -d -d -x PTY,raw,b115200,parenb=0,cstopb=1,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:20108&
    
    если у вас стабильный релиз до wb-2207 включительно, вместо параметра b115200, используйте ispeed=9600,ospeed=9600.

В системе появится виртуальный порт /dev/ttyRS485-5, с которым можно работать как с локальным.

Теперь открываете второй терминал и, с помощью утилиты modbus_client читаете и записываете значения в регистры устройств, подключенных к шлюзу по сети RS-485. В качестве адреса используете Modbus-адреса устройств. При этом в первом терминале остается запущенной команда socat.

Чтобы обновить прошивку с помощью утилит wb-mcu-fw-updater или wb-mcu-fw-flasher:

  1. Используйте созданный socat порт, например, /dev/ttyRS485-5.
  2. Режим шлюза должен быть TCP Server/None (для WB-MGE v2, WB-MIO-E v2) или TCP Server (для WB-MGE v1, WB-MIO-E v1).
  3. Modbus-устройства и шлюз должны иметь одинаковые настройки обмена по интерфейсу RS-485: скорость 9600 бит/с, биты данных 8, бит четности - нет, количество стоп-битов 2.

Только при соблюдении всех условий обновление прошивки будет работать.

Обновление прошивки

Если у вас есть физический доступ к шлюзу, то будет гораздо проще прошить устройства просто подключив их напрямую к контроллеру или ноутбуку.

Этот способ сложен и подразумевает базовые навыки работы в коммандной строке, знание синтаксиса утилиты socat и хорошее понимание работы наших устройств. Ниже мы рассмотрим синтетический пример, который может сильно отличаться от вашей ситуации.

Так как загрузчик наших устройств может работать только на скорости 9600 кбит/с, то и устройства за шлюзом должны работать на этой же скорости, как и сам шлюз.

Исходные данные:

  1. Eсть шлюз WB-MGE, настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
  2. К шлюзу подключено устройство WB-MDM3 с адресом 58
  3. У устройства и в настройках шлюза выставлена скорость 115200 кбит/с.

Инструкция:

  1. Дважды подключитесь к контроллеру по SSH,у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
  2. Остановите wb-mqtt-serial.
  3. Настройте переадресацию socat:
    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=9600,ospeed=9600.
  4. Во втором окне измените скорость порта устройства на 9600 кбит/с:
    modbus_client --debug -mrtu -b115200 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 96
    
  5. В первом окне разорвите соединение socat клавишами Ctrl+C.
  6. Подключите Ethernet кабель шлюза WB-MGE к ноутбуку, откройте браузер и введите IP-адрес шлюза.
  7. В веб-интерфейсе шлюза измените настройки порта с 115200 кбит/с на 9600 кбит/с
  8. Подключите шлюз к контроллеру по Ethernet.
  9. В первом окне снова создайте тоннель socat, не забудьте изменить скорость в параметрах:
    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=9600,ospeed=9600.
  10. Во втором окне прошейте устройство, например, утилитой wb-mcu-fw-updater:
    wb-mcu-fw-updater update-fw /dev/ttyRS485-5 -a58
    
  11. После окончания прошивки верните в устройстве старую скорость 115200 кбит/с:
    modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 1152
    
  12. В первом окне разорвите соединение socat клавишами Ctrl+C.
  13. Подключите Ethernet кабель шлюза WB-MGE к ноутбуку, откройте браузер и введите IP-адрес шлюза.
  14. В веб-интерфейсе шлюза измените настройки порта с 9600 кбит/с на 115200 кбит/с.
  15. Подключите шлюз к контроллеру по Ethernet.
  16. Запустите wb-mqtt-serial

Если вам нужно прошить несколько устройств, то вы можете сперва изменить им скорость, перенастроить шлюз, а потом так же поочереди их прошить, вернуть им прежнюю скорость и снова перенастроить шлюз.

Информация по теме на портале