WB Modbus Devices Firmware Update: различия между версиями

Материал из Wiren Board
м
 
(не показано 175 промежуточных версий 10 участников)
Строка 1: Строка 1:
<languages/>
{{DISPLAYTITLE:Обновление прошивки Modbus-устройств Wiren Board}}
<translate>
== Общая информация ==
</translate>
В modbus-устройствах Wiren Board есть загрузчик (bootloader), который позволяет обновлять прошивки по RS-485/Modbus RTU. В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.
{{DISPLAYTITLE:Загрузка прошивок на устройства Wiren Board}}
<translate>


== Загрузчик прошивок == <!--T:1-->
Сами прошивки выпускаются в формате релизов, которые привязаны к [[Wiren_Board_Software#releases| релизам программного обеспечения контроллера]], но имеют отличный от него цикл:
* '''testing''' — сюда попадают прошивки после внутреннего тестирования, доступны для пользователей testing-релиза контроллера;
* '''stable''' — через три недели после публикации в testing и при отсутствии сообщений об ошибках, прошивки считаются стабильными. В этот момент они становятся доступны и для пользователей stable-релиза контроллера. Если изменений в прошивке было много и они затрагивали основные функции устройства, то прошивка может немного задержаться в testing.


<!--T:2-->
На странице каждого устройства есть ссылка на список изменений в прошивках, где прошивки в testing отмечены маркером «testing». Прошивка без отметки считается стабильной.
В новых версиях наших устройств реализован механизм загрузчика прошивок (bootloader). Он позволяет обновлять микропрограммы устройств/модулей Wiren Board по RS-485/Modbus RTU.
На устройства добавлен режим загрузчика, в котором возможно обновлять прошивку.  


<!--T:3-->
Распределение прошивок по релизам позволяет избежать ситуации, когда свежая версия прошивки без продолжительного тестирования попадает в очень ответственную инсталляцию. Если для новой прошивки нужны новые функции в ПО контроллера, то либо они заедут в stable-релиз ПО вместе с прошивкой, либо прошивка задержится в testing до появления нужных функций в ПО.
В режиме загрузчика основной функционал устройства отключается. '''Коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.'''


Для прошивки подключённых через шлюз WB-MGE или аналог устройств, используйте перенаправление socat, [[WB FAQ/modbus-modules-behind-gateway | инструкция]].


== Переход в режим загрузчика == <!--T:4-->
== Автоматическое обновление ==
[[Image: Wb-fw-mcu-updater example 1.png |500px|thumb|right| Пример работы wb-fw-mcu-updater ]]
{{note|info|При обновлении прошивки удаляются ИК-команды, сохранённые в устройствах WB-MSW и WB-MIR. Рекомендуем сохранить банки команд перед обновлением с помощью [[WB-MSx Consumer IR Manual#Чтение/запись банков команд | скрипта]].}}
Автоматическое обновление прошивки выполняется с помощью предустановленной на контроллеры Wiren Board утилиты [[Wb-mcu-fw-updater | wb-mcu-fw-updater]] и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.


<!--T:5-->
Утилита работает только на нашем контроллере и ей нужен доступ в интернет. Если у вас нет интернета или нашего контроллера, смотрите раздел [[#manual|Ручное обновление]].  
[[File:Bootloader.gif||right||Индикация режима загрузчика]]
Устройство переходит в режим загрузчика, если:
* на устройстве имеется корректная прошивка — первые 2 секунды после включения питания устройство работает в режиме загрузчика;
* на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки) — в этом случае режим загрузчика активен постоянно;
* при работе основной программы в holding-регистр 129 (0x81) была записана 1 — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд.


<!--T:6-->
Обновление прошивок устройств, подключенных к шлюзам WB-MGE и WM-MIO-E, также выполняется [[WB_Modbus_Devices_Firmware_Update#%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2,_%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%BA_%D1%88%D0%BB%D1%8E%D0%B7%D0%B0%D0%BC_WB-MGE_%D0%B8_WB-MIO-E |вручную с отображением сетевого порта в локальный]].
Индикация режима загрузчика: индикатор Status устройства редко мигает. При заливке новой прошивки индикатор перестает менять состояние.


== Прошивки == <!--T:7-->
=== Обновление всех устройств на шине ===
Вы можете обновить все устройства, настроенные в разделе '''Serial Devices Configuration''' [[Wiren Board Web Interface | веб-интерфейса]]
# Подключите устройства по [[RS-485 | шине RS-485]] к контроллеру.
# [[RS-485:Configuration via Web Interface | Настройте подключенные устройства]] в веб-интерфейсе.
# Откройте консоль контроллера по [[SSH]].
# Обновите все настроенные устройства командой:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-all
</syntaxhighlight>


<!--T:8-->
=== Обновление одного устройства ===
Запись прошивки в память устройства выполняется загрузчиком, который получает ее по Modbus RTU. Прошивки хранятся в файлах с расширением '''.wbfw'''.
Чтобы обновить только одно устройство:
В настоящее время имеющиеся прошивки высылаются по запросу.
# Подключите устройство по шине RS-485 к контроллеру.
# Узнайте [[Wiren Board Device Modbus Address | modbus-адрес]] устройства, которое хотите обновить.
# Откройте консоль контроллера по [[SSH]].
# Запустите утилиту <code>wb-mcu-fw-updater</code> параметрами: ключ <code>update-fw</code>, а также порт и modbus-адрес.  


Например, обновим прошивку устройства с modbus-адресом <code>70</code> и подключенного к порту <code>/dev/ttyRS485-1</code>:
<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-fw /dev/ttyRS485-1 -a70
</syntaxhighlight>


== Сигнатуры устройств == <!--T:9-->
Полный список параметров и примеры работы смотрите на [[Wb-mcu-fw-updater | странице утилиты]].


== Ручное обновление ==
{{Anchor|manual}}
=== Особенности ===
Этот способ используется если:
*на объекте нет доступа в интернет,
*у вас нет контроллера,
*вы обновляете прошивку устройств, [[WB_Modbus_Devices_Firmware_Update#Обновление_прошивки_устройств,_подключенных_к_шлюзам_WB-MGE_и_WB-MIO-E |подключенных за шлюзами WB-MGE и WB-MIO-E]].


<!--T:10-->
Во всех остальных случаях используйте [[WB_Modbus_Devices_Firmware_Update#Автоматическое_обновление |автоматическое обновление]].
При прошивке на заводе в память устройства записывается сигнатура — наименование аппаратного типа устройства. При перезаписи прошивки текущая сигнатура сравнивается с сигнатурой прошивки. Запись новой прошивки возможна только при совпадении сигнатур.


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


== Modbus == <!--T:11-->
=== Подготовка устройства ===


Прошивать устройства можно:
* по modbus-адресу устройства.
* по широковещательному адресу — <code>0</code>.


<!--T:12-->
Для прошивки нескольких устройств на шине нужно поочереди перевести их в [[Bootloader MOD | режим загрузчика]] и прошить.
Загрузчик устройства получает прошивку по Modbus RTU. В режиме загрузчика коммуникационные параметры фиксированы и не зависят от значений, записанных ранее в память устройства: 9600 8N2. По протоколу Modbus устройство можно перевести в режим загрузчика, если во время работы основной программы записать 1 в holding-регистр 129 (0x81). В этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд.


<!--T:13-->
=== Загрузка прошивки в устройство ===
Modbus-адрес устройства для прошивки в режиме загрузчика следует выбирать следующим образом:
Для загрузки прошивки выполните шаги:
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где установлена утилита прошивки.
{{Wbincludes:Prepare modbus_client}}
# Скачайте из репозитория файл прошивки для вашего устройства по [[Firmware Repository For Wiren Board Modbus Devices | инструкции]].
# Загрузите файл прошивки на [[View controller files from your computer | контроллер]] или другое устройство.
# Перейдите в папку с файлом прошивки и выполните команду:
#:* на контроллере или компьютере с ОС Linux:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a25 -f ./firmware.wbfw
</syntaxhighlight>
#:* на компьютере с ОС Windows:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 -a25 -f firmware.wbfw
</syntaxhighlight>
# Если вы выполняли команду с контроллера — запустите драйвер wb-mqtt-serial.


<!--T:14-->
В команде выше мы флагом <code>-j</code> перевели устройство, подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) с адресом <code>25</code> в режим загрузчика, а затем прошили его.
# Основной адрес для прошивки — адрес, заданный в памяти устройства: то есть это стандартный адрес, на который устройство отвечает из основной программы.
# Прошивать устройства можно по широковещательному адресу 0. Это менее предпочтительный способ.


Успешный процесс прошивки выглядит так:
<syntaxhighlight lang="bash">
~# 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


== Утилита для прошивки wb-mcu-fw-flasher == <!--T:15-->
  Sending info block... OK


<!--T:16-->
  Sending data block 108 of 108... OK.
Для передачи прошивки на устройства используется утилита wb-mcu-fw-flasher, запускаемая с контроллера Wiren Board (или компьютера с Linux или Windows).
  All done!
</syntaxhighlight>


<!--T:17-->
Если сигнатура устройства и файла прошивки не совпали, то вы получите сообщение об ошибке:
Для установки утилиты '''на контроллер Wiren Board''' выполните команды:
<syntaxhighlight lang="bash">
<pre>
Sending info block...
apt-get update
  Error while sending info block: Slave device or server failure
apt-get install wb-mcu-fw-flasher
  Data format is invalid or firmware signature doesn't match the device
</pre>
</syntaxhighlight>


<!--T:18-->
== Восстановление прошивки устройства ==
Версию утилиты для '''MS Windows''' можно скачать по этой ссылке: [[Media: Wb-mcu-fw-flasher_1.0.2.zip | Wb-mcu-fw-flasher_1.0.2.zip]]
{{Anchor|fw-recovery}}
Если во время обновления произошел сбой, то устройство перейдет в [[Wbincludes:Bootloader MOD | режим загрузчика]] и вы можете восстановить его прошивку.


<!--T:19-->
=== Автоматически ===
Для установки на '''компьютер с Debian''' скачайте пакет отсюда: [[Media: Wb-mcu-fw-flasher_1.0.2_amd64-all.deb | Wb-mcu-fw-flasher_1.0.2_amd64-all.deb]]
Для автоматического восстановления прошивки одного или нескольких устройств можно использовать утилиту wb-mcu-fw-updater вы режимах '''recover''' и '''recover-all'''.
и выполните команды в директории, куда загрузился пакет.
<pre>
apt-get update
apt-get install libmodbus5
dpkg -i Wb-mcu-fw-flasher_1.0.2_amd64-all.deb


<!--T:20-->
Чтобы восстановить устройство с адресом <code>10</code> и подключенное к порту <code>/dev/ttyRS485-1</code>, выполните команду:
</pre>
<syntaxhighlight lang="bash">
wb-mcu-fw-updater recover /dev/ttyRS485-1 -a 10
</syntaxhighlight>


Подробнее о режимах recover и recover-all, читайте в [[Wb-mcu-fw-updater#Режимы|документации]].


<!--T:21-->
=== Вручную ===
Опции запуска утилиты wb-mcu-fw-flasher:
Если вы не можете воспользоваться [[wb-mcu-fw-updater]], то вы восстановить прошивку устройств можно с помощью сервисной утилиты [[wb-mcu-fw-flasher]]. Также этот способ могут использовать пользователи компьютеров с ОС Windows.
{| class="wikitable"
! Параметр !! Описание !! Значение по умолчанию
|-
| -d || Устройство последовательного порта ||
|-
| -f || Файл прошивки ||
|-
| -a || Адрес Modbus || 1
|-
| -j || Отправить на устройство команду перехода в режим загрузчика ||
|-
| -r || Адрес holding-регистра для перехода в режим загрузчика || 129
|-
| -D || Включить режим отладки ||
|}


<!--T:22-->
Для этого вам понадобится сама утилита и файл прошивки:
Пример:
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где установлена утилита прошивки.
<pre>
{{Wbincludes:Prepare modbus_client}}
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
# [[Firmware Repository For Wiren Board Modbus Devices | Скачайте из репозитория]] файл прошивки для вашего устройства.
</pre>
# Загрузите файл прошивки на [[View controller files from your computer | контроллер]] или другое устройство, на котором установлена утилита прошивки.
# Перейдите в папку с прошивкой и выполните команду:
#*на контроллере или компьютере с ОС Linux:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a 25 -f ./firmware.wbfw
</syntaxhighlight>
#*на компьютере с ОС Windows:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher_1.0.3.exe -d COM1 -a 25 -f firmware.wbfw
</syntaxhighlight>


<!--T:23-->
Здесь мы прошили находящееся в режиме загрузчика устройство с Modbus-адресом <code>25</code> и подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) файлом <code>firmware.wbfw</code>.
Пример для Windows:
<pre>
wb-mcu-fw-flasher.exe -j -d COM10 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
</pre>


<!--T:24-->
==Обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E==
Здесь COM10 — имя виртуального последовательного порта, которое присвоено адаптеру USB RS-485.
[[Image: superport-config.png |350px|thumb|right| Настройки шлюза для обновления прошивки]]
Обновить прошивку устройства Wiren Board, подключенного к шлюзам [[WB-MGE_v.2_Modbus-Ethernet_Interface_Converter |WB-MGE]] и [[WB-MIO-E_v.2_Modbus_Interface_Converter |WB-MIO-E]] по RS-485, можно только в ручном режиме утилитой [[Wb-mcu-fw-flasher |wb-mcu-fw-flasher]]. Но сначала нужно отобразить сетевой порт в локальный утилитой [[Socat |socat]].


== Прошивка устройств == <!--T:25-->
Шлюз должен быть настроен в режим TCP Server/None (для WB-MGE v2, WB-MIO-E v2) или TCP Server (для WB-MGE v1, WB-MIO-E v1).


<!--T:26-->
===Обновление на любой скорости соединения===
'''При прошивке с контроллера остановите wb-mqtt-serial:'''
<pre>
service wb-mqtt-serial stop
</pre>


<!--T:27-->
Настройки соединения могут быть любыми только если:
Подключите устройство к RS-485.


<!--T:28-->
*версия wb-mcu-fw-flasher не ниже '''1.3.0''' (доступно в [[testing |testing]]),
Если вы не знаете точного аппаратного типа устройства, то его сигнатуру можно прочесть командой:
*текущая версия прошивки устройства поддерживает '''131''' регистр (см. Журналы изменений на страницах устройств),
<pre>
*текущая версия загрузчика не ниже '''1.3.0'''.
export mbusaddr=1;  echo  -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a$mbusaddr -t0x03 -r290 -c 12 | grep Data | sed -e 's/0x00/\x/g' -e 's/Data://' -e 's/s//g'`|  xxd -r -p && echo ''
</pre>   
Задайте адрес прошиваемого устройства в переменной mbusaddr.


<!--T:29-->
'''Иначе обновление можно выполнить только со [[WB_Modbus_Devices_Firmware_Update#Обновление_со_стандартными_настройками_соединения |стандартными настройками 9600N2.]]'''
В выводе команды вы получите сигнатуру устройства, например, '''wbmr6c'''.


<!--T:30-->
Ниже приведен пример со следующими исходными данными:
Выберите подходящую прошивку, например, WB-MR-MR6C_MCU3_3_1.9.4.wbfw.


<!--T:31-->
*Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
Прошейте устройство командой:
*Modbus-устройство Wiren Board с адресом 14.
<pre>
*Соединение на скорости 115200 кбит/с.
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
 
</pre>
{{note|info|'''Внимание!''' В вашем случае настройки могут быть другими.}}
Успешный процесс прошивки выглядит следующим образом:
 
<pre>
#[[Firmware_Repository_For_Wiren_Board_Modbus_Devices |Приготовьте файл прошивки]] и установите утилиту socat, если ее нет:
  wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw        
#:<syntaxhighlight lang="bash">
  /dev/ttyRS485-1 opened successfully.
apt install socat
  Send jump to bootloader command and wait 2 seconds...
</syntaxhighlight>
  Error: Connection timed out.
#Дважды подключитесь к контроллеру по [[SSH |SSH]], у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
  May be device already in bootloader, try to send firmware...
#Остановите [[Wb-mqtt-serial_driver |wb-mqtt-serial]]:
  WB-MR-MR6C_MCU3_3_1.9.4.wbfw opened successfully, size 12136 bytes
#:<syntaxhighlight lang="bash">
  Sending info block... OK
systemctl stop wb-mqtt-serial
  Sending data block 89 of 89... OK.
</syntaxhighlight>
  All done!
#В первом окне запустите перенаправление утилитой socat с текущими настройками соединения:
</pre>
#:<syntaxhighlight lang="bash">
socat -d -d -d -x PTY,raw,b115200,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23
</syntaxhighlight>
#Во втором окне запустите обновление прошивки устройства утилитой [[Wb-mcu-fw-flasher |wb-mcu-fw-flasher]], используя параметр <code>-J</code>. Укажите файл прошивки, который приготовили в начале:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -J -d /dev/ttyRS485-5 -a14 -f ./firmware.wbfw
</syntaxhighlight>
#Запустите wb-mqtt-serial
#:<syntaxhighlight lang="bash">
systemctl start wb-mqtt-serial
</syntaxhighlight>
 
===Обновление со стандартными настройками соединения===
Инструкция используется для устройств в которых текущая версия загрузчика ниже '''1.3.0''' и/или текущая прошивка не поддерживает '''131''' регистр.  


<!--T:32-->
В этом случае обновление можно выполнить только на скорости '''9600N2''', указав параметр <code>-j</code> для утилиты wb-mcu-fw-flasher. Если используются другие настройки соединения сначала нужно изменить их на стандартные.
'''После успешной прошивки устройство само выйдет из режима загрузчика и перезапустится в основной программе.'''


<!--T:33-->
Рекомендуем также обновить загрузчик если его версия ниже '''1.3.0'''. Это позволит в дальнейшем обновлять прошивку на [[WB_Modbus_Devices_Firmware_Update#Обновление_на_любой_скорости_соединения |любой скорости соединения]].
Пример ошибки при несовпадении сигнатуры:
<pre>
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
</pre>


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


=== Прошивка устройств по широковещательному Modbus-адресу 0 === <!--T:34-->
{{note|info| '''Внимание!''' В инструкции рассмотрен пример, в котором устройства работают на скорости '''115200 8N2'''. В вашем случае настройки соединения могут быть другими.}}
Чтобы обновить прошивку:
#Дважды подключитесь к контроллеру по [[SSH |SSH]], у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
#Остановите wb-mqtt-serial:
#:<syntaxhighlight lang="bash">
systemctl stop wb-mqtt-serial
</syntaxhighlight>
#В первом окне запустите перенаправление:
#:<syntaxhighlight lang="bash">
socat -d -d -d -x PTY,raw,b115200,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23
</syntaxhighlight>
#:если у вас стабильный релиз до wb-2207 включительно, вместо параметра b115200, используйте <code>ispeed=115200,ospeed=115200</code>.
#Во втором окне измените скорость порта устройства на 9600 кбит/с:
#:<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -b115200 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 96
</syntaxhighlight>
#В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>.
#В [[socat#Настройка шлюза для обновления прошивки | настройках шлюза]] установите скорость порта 9600 кбит/с.
#В первом окне снова запустите перенаправление socat с новыми параметрами соединения:
#:<syntaxhighlight lang="bash">
socat -d -d -d -x PTY,raw,b9600,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23
</syntaxhighlight>
#:если у вас стабильный релиз до wb-2207 включительно, вместо параметра b9600, используйте <code>ispeed=9600,ospeed=9600</code>.
#Во втором окне запустите обновление прошивки устройства, например, утилитой wb-mcu-fw-flasher ([[WB_Modbus_Devices_Firmware_Update#Ручное_обновление|полная инструкция]]):
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -j -d /dev/ttyRS485-5 -a25 -f ./firmware.wbfw
</syntaxhighlight>
#После окончания прошивки верните в устройстве старую скорость 115200 кбит/с:
#:<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 1152
</syntaxhighlight>
#В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>.
#В настройках шлюза измените скорость порта с 9600 кбит/с на 115200 кбит/с.
#Подключите шлюз к контроллеру по Ethernet.
#Запустите wb-mqtt-serial
#:<syntaxhighlight lang="bash">
systemctl start wb-mqtt-serial
</syntaxhighlight>


<!--T:35-->
Если вам нужно прошить несколько устройств, то вы можете сперва изменить им скорость, перенастроить шлюз, а потом так же поочереди их прошить, вернуть им прежнюю скорость и снова перенастроить шлюз.
Bootloader позволяет загружать прошивку на устройства по Modbus-адресу 0. Для этого устройство должно быть единственным устройством на шине и находиться в режиме загрузчика.


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


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


<!--T:37-->
#подключить шлюз к компьютеру UTP кабелем напрямую или через роутер,
Возможна прошивка нескольких устройств, подключенных к шине. Устройства должны быть переведены в режим загрузчика и прошиваться по отдельности с указанием нешироковещательного Modbus-адреса. Прошивка устройств с одинаковым адресом возможна, если в режиме загрузчика находится только одно из них. Устройства прошиваются по очереди.
#присвоить компьютеру статический IP-адрес в сети шлюза, например, 192.168.0.201,
#открыть браузер и ввести IP-адрес шлюза, по умолчанию 192.168.0.7.


<!--T:38-->
==  Полезные ссылки ==
'''Внимание!''' Прошивка устройств, находящимся в режиме загрузчика и имеющим одинаковый modbus-адрес, или же прошивка нескольких устройств, находящихся в режиме загрузчика по адресу 0 не будет выполнена; имеющаяся прошивка на устройствах будет испорчена.
* [[Restore factory settings Wiren Board Modbus device | Восстановление доступа — сброс настроек связи]]
</translate>
* [[Wiren Board Device Modbus Address | Modbus-адрес устройства Wiren Board]]
* [[wb-mcu-fw-updater | Утилита обновления и восстановления прошивок wb-mcu-fw-updater]]
* [[wb-mcu-fw-flasher | Сервисная утилита wb-mcu-fw-flasher]]
* [[Firmware Repository For Wiren Board Modbus Devices |Репозиторий прошивок для Modbus-устройств Wiren Board]]

Текущая версия на 12:03, 25 марта 2024

Общая информация

В modbus-устройствах Wiren Board есть загрузчик (bootloader), который позволяет обновлять прошивки по RS-485/Modbus RTU. В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.

Сами прошивки выпускаются в формате релизов, которые привязаны к релизам программного обеспечения контроллера, но имеют отличный от него цикл:

  • testing — сюда попадают прошивки после внутреннего тестирования, доступны для пользователей testing-релиза контроллера;
  • stable — через три недели после публикации в testing и при отсутствии сообщений об ошибках, прошивки считаются стабильными. В этот момент они становятся доступны и для пользователей stable-релиза контроллера. Если изменений в прошивке было много и они затрагивали основные функции устройства, то прошивка может немного задержаться в testing.

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

Распределение прошивок по релизам позволяет избежать ситуации, когда свежая версия прошивки без продолжительного тестирования попадает в очень ответственную инсталляцию. Если для новой прошивки нужны новые функции в ПО контроллера, то либо они заедут в stable-релиз ПО вместе с прошивкой, либо прошивка задержится в testing до появления нужных функций в ПО.

Для прошивки подключённых через шлюз WB-MGE или аналог устройств, используйте перенаправление socat, инструкция.

Автоматическое обновление

Пример работы wb-fw-mcu-updater

При обновлении прошивки удаляются ИК-команды, сохранённые в устройствах WB-MSW и WB-MIR. Рекомендуем сохранить банки команд перед обновлением с помощью скрипта. Автоматическое обновление прошивки выполняется с помощью предустановленной на контроллеры Wiren Board утилиты wb-mcu-fw-updater и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.

Утилита работает только на нашем контроллере и ей нужен доступ в интернет. Если у вас нет интернета или нашего контроллера, смотрите раздел Ручное обновление.

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

Обновление всех устройств на шине

Вы можете обновить все устройства, настроенные в разделе Serial Devices Configuration веб-интерфейса

  1. Подключите устройства по шине RS-485 к контроллеру.
  2. Настройте подключенные устройства в веб-интерфейсе.
  3. Откройте консоль контроллера по SSH.
  4. Обновите все настроенные устройства командой:
    wb-mcu-fw-updater update-all
    

Обновление одного устройства

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

  1. Подключите устройство по шине RS-485 к контроллеру.
  2. Узнайте modbus-адрес устройства, которое хотите обновить.
  3. Откройте консоль контроллера по SSH.
  4. Запустите утилиту wb-mcu-fw-updater параметрами: ключ update-fw, а также порт и modbus-адрес.

Например, обновим прошивку устройства с 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

   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.

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

  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.

Полезные ссылки