Modbus Devices Firmware Update

Материал из Wiren Board
Версия от 07:53, 27 августа 2024; A.Degtyarev (обсуждение | вклад) (Новая страница: «=== Updating a Single Device === To update only one device: # Connect the device via RS-485 to the controller. # Determine the Modbus address of the device you want to update. # Open the controller console via SSH. # Run the utility <code>wb-mcu-fw-updater</code> with the following parameters: the <code>update-fw</code> key, as well as the port and Modbus address.»)

Другие языки:

Внимание: Отображаемое название «Updating Wiren Board Modbus Device Firmware» переопределяет ранее заданное отображаемое название «Modbus Devices Firmware Update».

General Information

Updating Device Firmware (24:08)

Wiren Board modbus devices have a bootloader, which allows updating firmware via RS-485/Modbus RTU. In bootloader mode, the main functions of the device are disabled, and the communication parameters in bootloader mode are fixed and do not depend on the values in the device memory: 9600 8N2.

The firmware itself is released in the format of releases, which are linked to controller software releases, but have a different cycle:

  • testing — firmware that has passed internal testing lands here, available to users of the controller's testing release;
  • stable — three weeks after being published in testing and with no error reports, the firmware is considered stable. At this point, it becomes available to users of the stable release of the controller. If there were major changes in the firmware that affected the device's core functions, the firmware may be slightly delayed in testing.

On the page of each device there is a link to the list of firmware changes, where firmware in testing is marked with the "testing" marker. Firmware without a mark is considered stable.

Distributing firmware updates by releases helps prevent a situation where a new firmware version, without undergoing thorough testing, ends up in a very critical installation. If the new firmware requires new features in the controller's software, either these features will be included in the stable software release along with the firmware, or the firmware update will be delayed in testing until the required features appear in the software.

To update devices connected via a WB-MGE gateway or a similar device, use the socat redirection, instructions.

Automatic firmware update

Example of wb-fw-mcu-updater operation

When updating the firmware, IR commands stored in WB-MSW and WB-MIR devices are deleted. We recommend saving command banks before updating using the script. Automatic firmware update is performed using the utility wb-mcu-fw-updater preinstalled on Wiren Board controllers, allowing you to install the latest version of the software on all connected devices at once or separately on each one. The device model and new firmware will be automatically identified.

The utility only works on our controller and requires internet access. If you do not have internet or our controller, refer to the section Manual Update.

Updating firmware on devices connected to WB-MGE and WM-MIO-E gateways is also performed manually with displaying the network port to local.

Updating all devices on the bus

You can update all devices configured in the Serial Devices Configuration section of the web interface

  1. Connect the devices via the RS-485 bus to the controller.
  2. Configure the connected devices in the web interface.
  3. Open the controller's console via SSH.
  4. Update all configured devices with the following command:
    wb-mcu-fw-updater update-all
    

Updating a Single Device

To update only one device:

  1. Connect the device via RS-485 to the controller.
  2. Determine the Modbus address of the device you want to update.
  3. Open the controller console via SSH.
  4. Run the utility wb-mcu-fw-updater with the following parameters: the update-fw key, as well as the port and Modbus address.

Например, обновим прошивку устройства с modbus-адресом 70 и подключенного к порту /dev/ttyRS485-1:

wb-mcu-fw-updater update-fw /dev/ttyRS485-1 -a70

Полный список параметров и примеры работы смотрите на странице утилиты.

Ручное обновление

Особенности

Этот способ используется если:

Во всех остальных случаях используйте автоматическое обновление.

Ручное обновление можно сделать утилитой wb-mcu-fw-flasher, которую нужно предварительно установить. Способ установки отличается и зависит от используемой операционной системы.

Подготовка устройства

Прошивать устройства можно:

  • по modbus-адресу устройства.
  • по широковещательному адресу — 0.

Для прошивки нескольких устройств на шине нужно поочереди перевести их в режим загрузчика и прошить.

Загрузка прошивки в устройство

Для загрузки прошивки выполните шаги:

  1. Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где установлена утилита прошивки.
  2. Если вы выполняете команды на контроллере:
  3. Скачайте из репозитория файл прошивки для вашего устройства по инструкции.
  4. Загрузите файл прошивки на контроллер или другое устройство.
  5. Перейдите в папку с файлом прошивки и выполните команду:
    • на контроллере или компьютере с ОС Linux:
    wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a25 -f ./firmware.wbfw
    
    • на компьютере с ОС Windows:
    wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 -a25 -f firmware.wbfw
    
  6. Если вы выполняли команду с контроллера — запустите драйвер 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
</div>

   <div lang="ru" dir="ltr" class="mw-content-ltr">
Sending info block... OK
</div>

   <div lang="ru" dir="ltr" class="mw-content-ltr">
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.

Для этого вам понадобится сама утилита и файл прошивки:

  1. Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где установлена утилита прошивки.
  2. Если вы выполняете команды на контроллере:
  3. Скачайте из репозитория файл прошивки для вашего устройства.
  4. Загрузите файл прошивки на контроллер или другое устройство, на котором установлена утилита прошивки.
  5. Перейдите в папку с прошивкой и выполните команду:
    • на контроллере или компьютере с ОС 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.

Обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E

Настройки шлюза для обновления прошивки

Обновить прошивку устройства Wiren Board, подключенного к шлюзам WB-MGE и WB-MIO-E по RS-485, можно только в ручном режиме утилитой wb-mcu-fw-flasher. Но сначала нужно отобразить сетевой порт в локальный утилитой socat.

Шлюз должен быть настроен в режим TCP Server/None (для WB-MGE v2, WB-MIO-E v2) или TCP Server (для WB-MGE v1, WB-MIO-E v1).

Обновление на любой скорости соединения

Настройки соединения могут быть любыми только если:

  • версия wb-mcu-fw-flasher не ниже 1.3.0 (доступно в testing),
  • текущая версия прошивки устройства поддерживает 131 регистр (см. Журналы изменений на страницах устройств),
  • текущая версия загрузчика не ниже 1.3.0.

Иначе обновление можно выполнить только со стандартными настройками 9600N2.

Ниже приведен пример со следующими исходными данными:

  • Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
  • Modbus-устройство Wiren Board с адресом 14.
  • Соединение на скорости 115200 кбит/с.

Внимание! В вашем случае настройки могут быть другими.

  1. Приготовьте файл прошивки и установите утилиту socat, если ее нет:
    apt install socat
    
  2. Дважды подключитесь к контроллеру по SSH, у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
  3. Остановите wb-mqtt-serial:
    systemctl stop wb-mqtt-serial
    
  4. В первом окне запустите перенаправление утилитой socat с текущими настройками соединения:
    socat -d -d -d -x PTY,raw,b115200,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23
    
  5. Во втором окне запустите обновление прошивки устройства утилитой wb-mcu-fw-flasher, используя параметр -J. Укажите файл прошивки, который приготовили в начале:
    wb-mcu-fw-flasher -J -d /dev/ttyRS485-5 -a14 -f ./firmware.wbfw
    
  6. Запустите wb-mqtt-serial
    systemctl start wb-mqtt-serial
    

Обновление со стандартными настройками соединения

Инструкция используется для устройств в которых текущая версия загрузчика ниже 1.3.0 и/или текущая прошивка не поддерживает 131 регистр.

В этом случае обновление можно выполнить только на скорости 9600N2, указав параметр -j для утилиты wb-mcu-fw-flasher. Если используются другие настройки соединения сначала нужно изменить их на стандартные.

Рекомендуем также обновить загрузчик если его версия ниже 1.3.0. Это позволит в дальнейшем обновлять прошивку на любой скорости соединения.

Рассмотрим синтетический пример обновления прошивки устройств, в котором используются нестандартные настройки соединения:

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

Внимание! В инструкции рассмотрен пример, в котором устройства работают на скорости 115200 8N2. В вашем случае настройки соединения могут быть другими. Чтобы обновить прошивку:

  1. Дважды подключитесь к контроллеру по SSH, у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
  2. Остановите wb-mqtt-serial:
    systemctl stop wb-mqtt-serial
    
  3. В первом окне запустите перенаправление:
    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.
  4. Во втором окне измените скорость порта устройства на 9600 кбит/с:
    modbus_client --debug -mrtu -b115200 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 96
    
  5. В первом окне разорвите соединение socat клавишами Ctrl+C.
  6. В настройках шлюза установите скорость порта 9600 кбит/с.
  7. В первом окне снова запустите перенаправление 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.
  8. Во втором окне запустите обновление прошивки устройства, например, утилитой wb-mcu-fw-flasher (полная инструкция):
    wb-mcu-fw-flasher -j -d /dev/ttyRS485-5 -a25 -f ./firmware.wbfw
    
  9. После окончания прошивки верните в устройстве старую скорость 115200 кбит/с:
    modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 1152
    
  10. В первом окне разорвите соединение socat клавишами Ctrl+C.
  11. В настройках шлюза измените скорость порта с 9600 кбит/с на 115200 кбит/с.
  12. Подключите шлюз к контроллеру по Ethernet.
  13. Запустите wb-mqtt-serial
    systemctl start wb-mqtt-serial
    

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

Настройка шлюза для обновления прошивки

Самый простой способ изменить настройки шлюза — подключиться к его встроенному веб-интерфейсу. Для этого нужно:

  1. подключить шлюз к компьютеру UTP кабелем напрямую или через роутер,
  2. присвоить компьютеру статический IP-адрес в сети шлюза, например, 192.168.0.201,
  3. открыть браузер и ввести IP-адрес шлюза, по умолчанию 192.168.0.7.