Обновление прошивок Modbus‑устройств за WB‑MGE v.3

Добрый день.

Не получается обновить ряд устройств (все ваши) за WB‑MGE v.3. В сам контроллер успешно их добавил (и данные с них тянутся).
В веб-интерфейсе не отображается обновление, но, кажется, эта проблема решается в Обновление прошивок Modbus‑устройств за WB‑MGE v.3 через Web UI контроллера (+ WB Cloud) (кстати, когда ждать решения? А то уже на сайте опубликовали новость, что вышел релиз wb-2606, обновился)

Попытался воспользоваться инструкцией Обновление прошивки Modbus-устройств Wiren Board — Wiren Board

Проблемы, с которыми столкнулся:

  • Тут, больше про меня-домохозяйку, но несколько странно, что пример сформулирован не про дефолную конфигурацию в вашем оборудовании (9600 8N2).
  • Требуется, чтобы WB-MGE был сконфигурирован как “Work Mode: TCP Server/None”, но в интерфейсе есть выбор только “Modbus TCP” и “Transparent bridge”
  • Отдельно, совершенно не понятно с “cstopb”.
    • В вашем примере на странице там передаётся значение 2.
    • В Утилита socat — Wiren Board (и в socat(1) - Linux manual page ): “cstopb=1 — 2 стоп-бита, cstopb=0 — 1 стоп-бит.”
    • Т.е. кажется, что даже в самом примере ошибка

В итоге, приходится через такое продираться и на каждом шаге приходится делать какие-то допущения и адаптацию инструкции. Т.к. в итоге оно не обновляется (про ошибку напишу ниже), совершенно не понятно, на каком из N шагов ошибся (т.к. в бОльшей части по инструкции они другие).

Теперь про саму конфигурацию:

  • Есть контроллер v. 6.6

  • Есть WB‑MGE v.3 (192.168.0.20)

    • Оба порта сконфигурированы как 9600 8N2
    • В Modbus gateway оба сконфигурированы как Modbus TCP и 502/503 порты соответственно
  • За WB-MGE есть WB-MR6C с адресом 81 (успешно добавлен в контроллер, отображается и доступен)

  • По инструкции остановил wb-mqtt-serial и выполняю socat -d -d -d -x PTY,raw,b9600,parenb=0,cstopb=1,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.20:502. С поправками в части параметров. Успешно начинает прокидывать.

  • Теперь так же по инструкции пытаюсь получить информацию об одном из устройств: wb-mcu-fw-flasher -d /dev/ttyRS485-5 -b9600 -pN -s2 -a81 --get-device-info

  • Но, увы, отваливается по таймауту:

    /dev/ttyRS485-5 opened successfully.
    Trying to probe (81 /dev/ttyRS485-5) at bootloader params…
    Failed to connect (81 /dev/ttyRS485-5) at bootloader settings: Connection timed out

ЧЯДНТ?

А после этого - актуализируйте инструкцию, пожалуйста.

Thinking

Search uploaded documents
Found 5 uploaded document excerpts for ‘WB-MGE v.3 Modbus firmware update socat wb-mcu-fw-flasher’

Search uploaded documents
Found 5 uploaded document excerpts for ‘WB Modbus Devices Firmware Update WB-MGE v.3’

Search uploaded documents
Found 5 uploaded document excerpts for ‘WB-MGE v.3 TCP Server None Modbus TCP Transparent bridge cstopb’

Здравствуйте! Я — автоматический помощник техподдержки Wiren Board.
Сейчас выходной — я постараюсь помочь сразу, а в ближайший рабочий день
инженеры посмотрят тему и ответят.

По вашему описанию здесь, похоже, смешались две разные схемы:

  1. WB-MGE v.3 в режиме Modbus TCP — это режим работы самого шлюза.
    В документации к WB-MGE v.3 указано, что для каждого RS-485 порта можно выбрать Modbus TCP или прозрачный шлюз; в режиме Modbus TCP модуль работает как сервер, а для прозрачного шлюза через IP-сеть передаются пакеты между двумя устройствами.
  2. Для обновления прошивки Modbus-устройств за шлюзом обычно нужен именно доступ к порту RS-485 через TCP — то есть схема с socat/wb-mcu-fw-flasher, где локальный PTY пробрасывается к TCP-порту шлюза.

Что у вас, скорее всего, идёт не так:

  • wb-mcu-fw-flasher с --get-device-info пытается связаться с устройством в bootloader-режиме, а обычный Modbus-адрес 81 может не отвечать в этом режиме.
  • В примерах для обновления прошивки важен не только cstopb, но и соответствие режима линии тому, как устройство реально было прошито/работает. В найденной документации есть пример для 9600N2 и отдельное упоминание, что для такого случая нужны другие параметры флашера.
  • Для WB-MGE v.3 в документации отдельно описаны оба режима порта: Modbus TCP и Прозрачный шлюз; для обновления через шлюз вам нужен именно доступ к RS-485, а не просто “видимость” устройства в контроллере.

Что я бы проверил в первую очередь:

  • Убедиться, что во время попытки прошивки wb-mqtt-serial действительно остановлен.
  • Проверить, что вы подключаетесь к правильному TCP-порту WB-MGE для нужного RS-485 порта.
  • Сверить параметры линии: у вас устройство в 9600 8N2, значит и в socat, и во флашере параметры должны соответствовать именно этому режиму.
  • Попробовать не --get-device-info, а запуск обновления по инструкции именно для FW update через gateway — там важен корректный режим bootloader и часто используется другой сценарий, чем обычное чтение информации.

По вопросу про cstopb: в найденных фрагментах есть пример с cstopb=2 для 9600N2, то есть для 2 стоп-битов. Это соответствует описанию примера в документации; ваша ссылка на socat здесь верна по сути, но в команде нужно смотреть не на общее правило, а на конкретный режим линии, для которого написан пример.

Если хотите, я могу в следующем сообщении:

  • сверить вашу команду socat и wb-mcu-fw-flasher построчно;
  • подсказать, как именно должен выглядеть сценарий для WB-MGE v.3 + 9600 8N2 + bootloader update;
  • или помочь проверить, не мешает ли тут режим порта WB-MGE.

Примечание: я — ИИ, а не человек; в моих ответах возможны неточности.
Инженеры посмотрят тему в ближайший рабочий день. Если хотите ускорить —
приложите диагностические данные.

Добрый день.

Так если modbus TCP - то через socat его не получится обработать.

Вы отправляете в порт TCP пакеты RTU. У них нет заголовочной части: так работать не будет.

Спасибо за ответ, но… делать-то что?
Перевести в Transparent bridge?

Повторюсь, корень проблемы в том, что в инструкции написано, что надо перевести в “Work Mode: TCP Server/None”. А в интерфейсе только “Modbus TCP” и “Transparent bridge”.

“Server/None” - это и есть прозрачный мост. То есть “Transparent bridge”