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

Материал из Wiren Board
Метка: ручная отмена
(не показаны 73 промежуточные версии 6 участников)
Строка 1: Строка 1:
<languages/>
{{DISPLAYTITLE:Обновление прошивок на устройствах Wiren Board}}
<translate>
== Общая информация ==
{{DISPLAYTITLE:Обновление прошивки Modbus-устройств Wiren Board}}
В наших modbus-устройствах реализован механизм загрузчика прошивок — bootloader. Он позволяет обновлять микропрограммы устройств и модулей Wiren Board по RS-485/Modbus RTU.
== Общая информация == <!--T:39-->
{{PeerTube
| link= https://peertube.wirenboard.com/video-playlists/embed/6623c76e-1abe-4728-959c-f5dde919d80c?playlistPosition=8
| playlist = true
| text= Обновление прошивок устройств (24:08)
}}
В modbus-устройствах Wiren Board есть [[Bootloader |загрузчик (bootloader)]], который позволяет обновлять прошивки по RS-485/Modbus RTU. В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.


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


<!--T:41-->
== Автоматическое обновление ==
На странице каждого устройства есть ссылка на список изменений в прошивках, где прошивки в testing отмечены маркером «testing». Прошивка без отметки считается стабильной.
[[Image: Wb-fw-mcu-updater example 1.png |300px|thumb|right| Пример работы wb-fw-mcu-updater ]]
 
<!--T:42-->
Распределение прошивок по релизам позволяет избежать ситуации, когда свежая версия прошивки без продолжительного тестирования попадает в очень ответственную инсталляцию. Если для новой прошивки нужны новые функции в ПО контроллера, то либо они заедут в stable-релиз ПО вместе с прошивкой, либо прошивка задержится в testing до появления нужных функций в ПО.
 
<!--T:43-->
Для прошивки подключённых через шлюз WB-MGE или аналог устройств, используйте перенаправление socat, [[WB FAQ/modbus-modules-behind-gateway | инструкция]].
 
== Автоматическое обновление == <!--T:44-->
[[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]] и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.
Автоматическое обновление прошивки выполняется с помощью предустановленной на контроллеры Wiren Board утилиты [[Wb-mcu-fw-updater | wb-mcu-fw-updater]] и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.


<!--T:45-->
Для использования утилиты нужен доступ в интернет, если это не так — смотрите раздел про ручное обновление.
Утилита работает только на нашем контроллере и ей нужен доступ в интернет. Если у вас нет интернета или нашего контроллера, смотрите раздел [[#manual|Ручное обновление]].  


<!--T:46-->
Вы можете использовать утилиту и без нашего контроллера, для этого вам понадобится Debian-подобная ОС Linux. Читайте инструкцию по установке в [[Wb-mcu-fw-updater | описании утилиты]].
Обновление прошивок устройств, подключенных к шлюзам 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 |вручную с отображением сетевого порта в локальный]].


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


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


<!--T:49-->
Например, обновим прошивку устройства с modbus-адресом <code>70</code> и подключенного к порту <code>/dev/ttyRS485-1</code>:
Например, обновим прошивку устройства с modbus-адресом <code>70</code> и подключенного к порту <code>/dev/ttyRS485-1</code>:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Строка 58: Строка 29:
</syntaxhighlight>
</syntaxhighlight>


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


== Ручное обновление == <!--T:51-->
== Ручное обновление ==
{{Anchor|manual}}
Мы не рекомендуем этот способ, но если на объекте нет доступа в интернет или у вас устройство с ОС Windows — это единственный вариант.
=== Особенности ===
 
Этот способ используется если:
Ручное обновление можно сделать утилитой [[Wb-mcu-fw-flasher | wb-mcu-fw-flasher]], которую нужно предварительно установить. Способ установки отличается и зависит от используемой операционной системы.
*на объекте нет доступа в интернет,
*у вас нет контроллера,
*вы обновляете прошивку устройств, [[WB_Modbus_Devices_Firmware_Update#Обновление_прошивки_устройств,_подключенных_к_шлюзам_WB-MGE_и_WB-MIO-E |подключенных за шлюзами WB-MGE и WB-MIO-E]].


<!--T:52-->
'''ВНИМАНИЕ:''' если вы выполняете команды на контроллере, то перед началом работы [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]], а после окончания запустите снова.
Во всех остальных случаях используйте [[WB_Modbus_Devices_Firmware_Update#Автоматическое_обновление |автоматическое обновление]].


<!--T:53-->
=== Выбор прошивки ===
Ручное обновление можно сделать утилитой '''[[wb-mcu-fw-flasher#Установка утилиты | wb-mcu-fw-flasher]]''', которую нужно предварительно установить. Способ установки отличается и зависит от используемой операционной системы.
Прошивки публикуются на сайте '''[http://fw-releases.wirenboard.com/?prefix=fw/ fw-releases.wirenboard.com]''' в виде файлов с расширением <code>.wbfw</code> и сгруппированы по версиям и сигнатурам (типам) устройств.


=== Подготовка устройства === <!--T:54-->
Каждое Modbus-устройство Wiren Board имеет сигнатуру — наименование аппаратного типа устройства. Устройство будет прошито только если его сигнатура совпадет с сигнатурой в прошивке.
 
Сигнатура устройства хранится в формате строки из двенадцати ASCII символов, по одному символу в регистре, и доступна начиная с адреса <code>290 (0x122)</code>.
 
Узнать сигнатуру устройства в '''ОС Linux и на контроллере''' можно с помощью утилиты [[Modbus-client |modbus_client]].
 
Чтобы узнать сигнатуру устройства с адресом <code>10</code> и подключенного к порту <code>ttyRS485-1</code>, выполните команду:
<syntaxhighlight lang="bash">
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a 10 -t3 -r 290 -c 12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
</syntaxhighlight>
 
В результате будет выведена строка с сигнатурой, например '''mr6c'''.
 
О том, как читать регистры из '''ОС Windows''' смотрите в статье [[Working with WB devices without a controller | Работа с устройствами Wiren Board без контроллера]]
 
Теперь, имея сигнатуру вы можете скачать прошивку устройства:
# Перейдите на сайт [http://fw-releases.wirenboard.com/?prefix=fw/ fw-releases.wirenboard.com].
# Выберите папку '''by-signature'''.
# Найдите и откройте папку с нужной сигнатурой устройства.
# Выберите одну из веток:
#:*'''stable''' — стабильные версии прошивок. Чтобы скачать самую свежую, выберите файл <code>latest.wbfw</code>.
#:*'''unstable''' — экспериментальные версии прошивок.
 
=== Подготовка устройства ===


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


<!--T:56-->
Для прошивки нескольких устройств на шине нужно поочереди перевести их в режим загрузчика и прошить.
Для прошивки нескольких устройств на шине нужно поочереди перевести их в [[Bootloader MOD | режим загрузчика]] и прошить.


=== Загрузка прошивки в устройство === <!--T:57-->
Устройство переходит в режим загрузчика, если:
* на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
* на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
* при работе основной программы записать 1 в holding-регистр 129 (0x81) — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это можно сделать, запустив утилиту <code>wb-mcu-fw-flasher</code> с ключем <code>-j</code>.
 
В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.
 
=== Загрузка прошивки в устройство ===
Для загрузки прошивки выполните шаги:
Для загрузки прошивки выполните шаги:
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где установлена утилита прошивки.
# Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где установлена утилита прошивки.
{{Wbincludes:Prepare modbus_client}}
# Если вы прошиваете устройство с контроллера, то остановите драйвер [[Wb-mqtt-serial driver#Управление драйвером | wb-mqtt-serial]] или иное ПО, которое опрашивает устройство.
# Скачайте из репозитория файл прошивки для вашего устройства по [[Firmware Repository For Wiren Board Modbus Devices | инструкции]].
# Загрузите файл прошивки на [[View controller files from your computer | контроллер]] или другое устройство, на котором установлена утилита прошивки.
# Загрузите файл прошивки на [[View controller files from your computer | контроллер]] или другое устройство.
# Перейдите в папку с файлом прошивки и прошейте устройство командой:
# Перейдите в папку с файлом прошивки и выполните команду:
#:* на контроллере или в ОС Linux:
#:* на контроллере или компьютере с ОС Linux:
#:<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a25 -f ./firmware.wbfw
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f ./mr6c__1.15.5_master_971fe50.wbfw
</syntaxhighlight>
</syntaxhighlight>
#:* на компьютере с ОС Windows:
#:* в ОС Windows:
#:<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 -a25 -f firmware.wbfw
wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw
</syntaxhighlight>
</syntaxhighlight>
# Если вы выполняли команду с контроллера — запустите драйвер wb-mqtt-serial.


<!--T:58-->
Здесь мы флагом <code>-j</code> переводим устройство, подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) с адресом <code>25</code> в режим загрузчика и загружаем файл прошивки.
В команде выше мы флагом <code>-j</code> перевели устройство, подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) с адресом <code>25</code> в режим загрузчика, а затем прошили его.


<!--T:59-->
Успешный процесс прошивки выглядит так:
Успешный процесс прошивки выглядит так:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Строка 114: Строка 104:
   mr6c__1.15.5_master_971fe50.wbfw opened successfully, size 14720 bytes
   mr6c__1.15.5_master_971fe50.wbfw opened successfully, size 14720 bytes


   <!--T:60-->
   Sending info block... OK
Sending info block... OK


   <!--T:61-->
   Sending data block 108 of 108... OK.
Sending data block 108 of 108... OK.
   All done!
   All done!
</syntaxhighlight>
</syntaxhighlight>


<!--T:62-->
Если не сигнатура устройства и файла прошивки не совпали, то вы получите сообщение об ошибке:
Если сигнатура устройства и файла прошивки не совпали, то вы получите сообщение об ошибке:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Sending info block...
Sending info block...
Строка 130: Строка 117:
</syntaxhighlight>
</syntaxhighlight>


== Восстановление прошивки устройства == <!--T:63-->
==  Полезные ссылки ==
{{Anchor|fw-recovery}}
* [[Restore factory settings Wiren Board Modbus device | Сброс Modbus-устройства Wiren Board к заводским настройкам]]
Если во время обновления произошел сбой, то устройство перейдет в [[Wbincludes:Bootloader MOD | режим загрузчика]] и вы можете восстановить его прошивку.
 
=== Автоматически === <!--T:64-->
Для автоматического восстановления прошивки одного или нескольких устройств можно использовать утилиту wb-mcu-fw-updater вы режимах '''recover''' и '''recover-all'''.
 
<!--T:65-->
Чтобы восстановить устройство с адресом <code>10</code> и подключенное к порту <code>/dev/ttyRS485-1</code>, выполните команду:
<syntaxhighlight lang="bash">
wb-mcu-fw-updater recover /dev/ttyRS485-1 -a 10
</syntaxhighlight>
 
<!--T:66-->
Подробнее о режимах recover и recover-all, читайте в [[Wb-mcu-fw-updater#Режимы|документации]].
 
=== Вручную === <!--T:67-->
Если вы не можете воспользоваться [[wb-mcu-fw-updater]], то вы восстановить прошивку устройств можно с помощью сервисной утилиты [[wb-mcu-fw-flasher]]. Также этот способ могут использовать пользователи компьютеров с ОС Windows.
 
<!--T:68-->
Для этого вам понадобится сама утилита и файл прошивки:
# Подключите устройство по [[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 -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:69-->
Здесь мы прошили находящееся в режиме загрузчика устройство с Modbus-адресом <code>25</code> и подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) файлом <code>firmware.wbfw</code>.
 
==Обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E== <!--T:70-->
[[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:71-->
Шлюз должен быть настроен в режим TCP Server/None (для WB-MGE v2, WB-MIO-E v2) или TCP Server (для WB-MGE v1, WB-MIO-E v1).
 
===Обновление на любой скорости соединения=== <!--T:72-->
 
<!--T:73-->
Настройки соединения могут быть любыми только если:
 
<!--T:74-->
*версия wb-mcu-fw-flasher не ниже '''1.3.0''' (доступно в [[testing |testing]]),
*текущая версия прошивки устройства поддерживает '''131''' регистр (см. Журналы изменений на страницах устройств),
*текущая версия загрузчика не ниже '''1.3.0'''.
 
<!--T:75-->
'''Иначе обновление можно выполнить только со [[WB_Modbus_Devices_Firmware_Update#Обновление_со_стандартными_настройками_соединения |стандартными настройками 9600N2.]]'''
 
<!--T:76-->
Ниже приведен пример со следующими исходными данными:
 
<!--T:77-->
*Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
*Modbus-устройство Wiren Board с адресом 14.
*Соединение на скорости 115200 кбит/с.
 
<!--T:78-->
{{note|info|'''Внимание!''' В вашем случае настройки могут быть другими.}}
 
<!--T:79-->
#[[Firmware_Repository_For_Wiren_Board_Modbus_Devices |Приготовьте файл прошивки]] и установите утилиту socat, если ее нет:
#:<syntaxhighlight lang="bash">
apt install socat
</syntaxhighlight>
#Дважды подключитесь к контроллеру по [[SSH |SSH]], у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
#Остановите [[Wb-mqtt-serial_driver |wb-mqtt-serial]]:
#:<syntaxhighlight lang="bash">
systemctl stop wb-mqtt-serial
</syntaxhighlight>
#В первом окне запустите перенаправление утилитой socat с текущими настройками соединения:
#:<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>
 
===Обновление со стандартными настройками соединения=== <!--T:80-->
Инструкция используется для устройств в которых текущая версия загрузчика ниже '''1.3.0''' и/или текущая прошивка не поддерживает '''131''' регистр.
 
<!--T:81-->
В этом случае обновление можно выполнить только на скорости '''9600N2''', указав параметр <code>-j</code> для утилиты wb-mcu-fw-flasher. Если используются другие настройки соединения сначала нужно изменить их на стандартные.
 
<!--T:82-->
Рекомендуем также обновить загрузчик если его версия ниже '''1.3.0'''. Это позволит в дальнейшем обновлять прошивку на [[WB_Modbus_Devices_Firmware_Update#Обновление_на_любой_скорости_соединения |любой скорости соединения]].
 
<!--T:83-->
Рассмотрим синтетический пример обновления прошивки устройств, в котором используются нестандартные настройки соединения:
*Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
*К шлюзу подключено устройство WB-MDM3 с адресом 58.
*В настройках устройства и шлюза выставлена скорость 115200 кбит/с.
 
<!--T:84-->
{{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:85-->
Если вам нужно прошить несколько устройств, то вы можете сперва изменить им скорость, перенастроить шлюз, а потом так же поочереди их прошить, вернуть им прежнюю скорость и снова перенастроить шлюз.
 
===Настройка шлюза для обновления прошивки=== <!--T:86-->
 
<!--T:87-->
Самый простой способ изменить настройки шлюза — подключиться к его встроенному веб-интерфейсу. Для этого нужно:
 
<!--T:88-->
#подключить шлюз к компьютеру UTP кабелем напрямую или через роутер,
#присвоить компьютеру статический IP-адрес в сети шлюза, например, 192.168.0.201,
#открыть браузер и ввести IP-адрес шлюза, по умолчанию 192.168.0.7.
 
==  Полезные ссылки == <!--T:89-->
* [[Restore factory settings Wiren Board Modbus device | Восстановление доступа — сброс настроек связи]]
* [[Wiren Board Device Modbus Address | Modbus-адрес устройства Wiren Board]]
* [[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]]
</translate>

Версия 20:45, 27 мая 2021

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

В наших modbus-устройствах реализован механизм загрузчика прошивок — bootloader. Он позволяет обновлять микропрограммы устройств и модулей Wiren Board по RS-485/Modbus RTU.

В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.

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

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

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

Для использования утилиты нужен доступ в интернет, если это не так — смотрите раздел про ручное обновление.

Вы можете использовать утилиту и без нашего контроллера, для этого вам понадобится Debian-подобная ОС Linux. Читайте инструкцию по установке в описании утилиты.

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

Для обновления прошивки всех устройств, описанных в разделе Serial Devices Configuration веб-интерфейса (файл /etc/wb-mqtt-serial.conf), выполните:

wb-mcu-fw-updater update-all

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

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

  1. . Узнайте modbus-адрес устройства, которое хотите обновить.
  2. . Запустите утилиту 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, а после окончания запустите снова.

Выбор прошивки

Прошивки публикуются на сайте fw-releases.wirenboard.com в виде файлов с расширением .wbfw и сгруппированы по версиям и сигнатурам (типам) устройств.

Каждое Modbus-устройство Wiren Board имеет сигнатуру — наименование аппаратного типа устройства. Устройство будет прошито только если его сигнатура совпадет с сигнатурой в прошивке.

Сигнатура устройства хранится в формате строки из двенадцати ASCII символов, по одному символу в регистре, и доступна начиная с адреса 290 (0x122).

Узнать сигнатуру устройства в ОС Linux и на контроллере можно с помощью утилиты modbus_client.

Чтобы узнать сигнатуру устройства с адресом 10 и подключенного к порту ttyRS485-1, выполните команду:

echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a 10 -t3 -r 290 -c 12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

В результате будет выведена строка с сигнатурой, например mr6c.

О том, как читать регистры из ОС Windows смотрите в статье Работа с устройствами Wiren Board без контроллера

Теперь, имея сигнатуру вы можете скачать прошивку устройства:

  1. Перейдите на сайт fw-releases.wirenboard.com.
  2. Выберите папку by-signature.
  3. Найдите и откройте папку с нужной сигнатурой устройства.
  4. Выберите одну из веток:
    • stable — стабильные версии прошивок. Чтобы скачать самую свежую, выберите файл latest.wbfw.
    • unstable — экспериментальные версии прошивок.

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

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

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

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

Устройство переходит в режим загрузчика, если:

  • на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
  • на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
  • при работе основной программы записать 1 в holding-регистр 129 (0x81) — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это можно сделать, запустив утилиту wb-mcu-fw-flasher с ключем -j.

В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.

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

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

  1. Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где установлена утилита прошивки.
  2. Если вы прошиваете устройство с контроллера, то остановите драйвер wb-mqtt-serial или иное ПО, которое опрашивает устройство.
  3. Загрузите файл прошивки на контроллер или другое устройство, на котором установлена утилита прошивки.
  4. Перейдите в папку с файлом прошивки и прошейте устройство командой:
    • на контроллере или в ОС Linux:
    wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f ./mr6c__1.15.5_master_971fe50.wbfw
    
    • в ОС Windows:
    wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw
    

Здесь мы флагом -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

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