Режим загрузчика Modbus-устройств Wiren Board
Общая информация
В наших modbus-устройствах реализован механизм загрузчика прошивок — bootloader. Он позволяет обновлять микропрограммы устройств и модулей Wiren Board по RS-485/Modbus RTU.
В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.
Автоматическое обновление
Автоматическое обновление прошивки выполняется с помощью предустановленной на контроллеры Wiren Board утилиты wb-mcu-fw-updater и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.
Для использования утилиты нужен доступ в интернет, если это не так — смотрите раздел про ручное обновление.
Вы можете использовать утилиту и без нашего контроллера, для этого вам понадобится Debian-подобная ОС Linux. Читайте инструкцию по установке в описании утилиты.
Обновление всех устройств на шине
Вы можете обновить все устройства, настроенные в разделе Serial Devices Configuration веб-интерфейса (файл /etc/wb-mqtt-serial.conf
)
- Подключите устройства по шине RS-485 к контроллеру.
- Настройте подключенные устройства в веб-интерфейсе.
- Откройте консоль контроллера по SSH.
- Обновите все настроенные устройства командой:
wb-mcu-fw-updater update-all
Обновление определенного устройства
Чтобы обновить определенное устройство:
- Подключите устройство по шине RS-485 к контроллеру или компьютеру с ОС Linux.
- Узнайте modbus-адрес устройства, которое хотите обновить.
- Откройте консоль контроллера или компьютера с ОС Linux по SSH
- Запустите утилиту
wb-mcu-fw-updater
параметрами: ключupdate-fw
, а также порт и modbus-адрес.
Например, обновим прошивку устройства с modbus-адресом 70
и подключенного к порту /dev/ttyRS485-1
:
wb-mcu-fw-updater update-fw /dev/ttyRS485-1 -a70
Полный список параметров и примеры работы смотрите на странице утилиты.
Ручное обновление
Мы не рекомендуем этот способ. Но если на объекте нет доступа в интернет, или у вас устройство с ОС Windows, это единственный вариант.
Ручное обновление можно сделать утилитой wb-mcu-fw-flasher, которую нужно предварительно установить. Способ установки отличается и зависит от используемой операционной системы.
ВНИМАНИЕ: если вы выполняете команды на контроллере, то перед началом работы остановите драйвер wb-mqtt-serial, а после окончания запустите снова.
Подготовка устройства
Прошивать устройства можно:
- по modbus-адресу устройства.
- по широковещательному адресу —
0
.
Для прошивки нескольких устройств на шине нужно поочереди перевести их в режим загрузчика и прошить. Внимание: Отображаемое название «Режим загрузчика Modbus-устройств Wiren Board» переопределяет ранее заданное отображаемое название «Обновление прошивки Modbus-устройств Wiren Board».
Modbus-устройство Wiren Board переходит в режим загрузчика, если:
- на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
- режим загрузчика активен постоянно, если на устройстве нет корректной прошивки, например, был сбой при обновлении прошивки;
- при работе основной программы записать
1
в holding-регистр:129(0x81)
— в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения9600N2
.- Это можно сделать, запустив утилиту wb-mcu-fw-flasher с ключем
-j
.
- Это можно сделать, запустив утилиту wb-mcu-fw-flasher с ключем
131(0x83)
— в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения, установленными в прошивке.- Это может быть полезно для обновления устройств за шлюзами без перенастройки параметров шлюза.
- В wb-mcu-fw-flasher такой переход выполняется с ключем
-J
(поддерживается начиная с версии 1.3.0) - Необходима поддержка со стороны загрузчика (версия 1.3.0 и выше) и со стороны прошивки (см. changelog прошивки)
В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.
Восстановление прошивки описано в статье Обновление прошивки Modbus-устройств Wiren Board.
Проверка связи с устройством в режиме загрузчика
Загрузчик продолжает слушать шину RS-485 и отвечает на опрос некоторых регистров. Можно прочитать сигнатуру устройства используя команду
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12
Важно: именно 12 регистров одним запросом, начиная с адреса 290.
Загрузка прошивки в устройство
Для загрузки прошивки выполните шаги:
- Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где установлена утилита прошивки.
- Если вы прошиваете устройство с контроллера:
- Откройте консоль контроллера по SSH.
- Остановите драйвер wb-mqtt-serial или иное ПО, которое опрашивает устройство.
- Скачайте из репозитория файл прошивки для вашего устройства.
- Загрузите файл прошивки на контроллер или другое устройство, на котором установлена утилита прошивки.
- Перейдите в папку с файлом прошивки и прошейте устройство командой:
- на контроллере или компьютере с ОС Linux:
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f ./firmware.wbfw
- на компьютере с ОС Windows:
wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 -a 25 -f firmware.wbfw
- Если вы выполняли команду с контроллера — запустите драйвер wb-mqtt-serial.
Здесь мы флагом -j
переводим устройство, подключенное к порту /dev/ttyRS485-1
(COM1
) с адресом 25
в режим загрузчика и загружаем файл прошивки.
Успешный процесс прошивки выглядит так:
~# wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw
/dev/ttyRS485-1 opened successfully.
Send jump to bootloader command and wait 2 seconds...
Ok, device will jump to bootloader.
mr6c__1.15.5_master_971fe50.wbfw opened successfully, size 14720 bytes
Sending info block... OK
Sending data block 108 of 108... OK.
All done!
Если сигнатура устройства и файла прошивки не совпали, то вы получите сообщение об ошибке:
Sending info block...
Error while sending info block: Slave device or server failure
Data format is invalid or firmware signature doesn't match the device
Восстановление прошивки устройства
Если во время обновления произошел сбой, то устройство перейдет в режим загрузчика и вы можете восстановить его прошивку.
Автоматически
Для автоматического восстановления прошивки одного или нескольких устройств можно использовать утилиту wb-mcu-fw-updater вы режимах recover и recover-all.
Чтобы восстановить устройство с адресом 10
и подключенное к порту /dev/ttyRS485-1
, выполните команду:
wb-mcu-fw-updater recover /dev/ttyRS485-1 -a 10
Подробнее о режимах recover и recover-all, читайте в документации.
Вручную
Если вы не можете воспользоваться wb-mcu-fw-updater, то вы восстановить прошивку устройств можно с помощью сервисной утилиты wb-mcu-fw-flasher. Также этот способ могут использовать пользователи компьютеров с ОС Windows.
Для этого вам понадобится сама утилита и файл прошивки:
- Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где установлена утилита прошивки.
- Если вы прошиваете устройство с контроллера:
- Откройте консоль контроллера по SSH.
- Остановите драйвер остановите драйвер wb-mqtt-serial или иное ПО, которое опрашивает устройство.
- Скачайте из репозитория файл прошивки для вашего устройства.
- Загрузите файл прошивки на контроллер или другое устройство, на котором установлена утилита прошивки.
- Перейдите в папку с прошивкой и выполните команду:
- на контроллере или компьютере с ОС Linux:
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a 25 -f ./firmware.wbfw
- на компьютере с ОС Windows:
wb-mcu-fw-flasher_1.0.3.exe -d COM1 -a 25 -f firmware.wbfw
Здесь мы прошили находящееся в режиме загрузчика устройство с Modbus-адресом 25
и подключенное к порту /dev/ttyRS485-1
(COM1
) файлом firmware.wbfw
.