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

Материал из Wiren Board
м (Переписал, теперь нужно часть текста вынести во включения и дополнить.)
(не показано 99 промежуточных версий 6 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:Обновление прошивки Modbus-устройств Wiren Board}}
{{Draft}}
== Общая информация ==
{{DISPLAYTITLE:Обновление прошивок на устройствах Wiren Board}}
{{YouTube
|link= https://www.youtube.com/watch?v=d_olK15Xhkw
|text= Обновление прошивок устройств (24:08)
|start=1448
}}
В modbus-устройствах Wiren Board есть [[Bootloader |загрузчик (bootloader)]], который позволяет обновлять прошивки по RS-485/Modbus RTU. В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.


Сами прошивки выпускаются в формате релизов, которые привязаны к [[Wiren_Board_Software#releases| релизам программного обеспечения контроллера]], но имеют отличный от него цикл:
== Автоматическое обновление ==
* '''testing''' — сюда попадают прошивки после внутреннего тестирования, доступны для пользователей testing-релиза контроллера;
[[Image: Wb-fw-mcu-updater example 1.png |300px|thumb|right| Пример работы wb-fw-mcu-updater ]]
* '''stable''' — через три недели после публикации в testing и при отсутствии сообщений об ошибках, прошивки считаются стабильными. В этот момент они становятся доступны и для пользователей stable-релиза контроллера. Если изменений в прошивке было много и они затрагивали основные функции устройства, то прошивка может немного задержаться в testing.
Автоматическое обновление выполняется с помощью предустановленной на контроллеры Wiren Board утилиты [[Wb-mcu-fw-updater | wb-mcu-fw-updater]] и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.


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


Распределение прошивок по релизам позволяет избежать ситуации, когда свежая версия прошивки без продолжительного тестирования попадает в очень ответственную инсталляцию. Если для новой прошивки нужны новые функции в ПО контроллера, то либо они заедут в stable-релиз ПО вместе с прошивкой, либо прошивка задержится в testing до появления нужных функций в ПО.
Вы можете использовать утилиту и без нашего контроллера, для этого вам понадобится Debian-подобная ОС Linux. Читайте инструкцию по установке в [[Wb-mcu-fw-updater | описании утилиты]].


Для прошивки подключённых через шлюз WB-MGE или аналог устройств, используйте перенаправление socat, [[WB FAQ/modbus-modules-behind-gateway | инструкция]].
Для обновления прошивки всех устройств, описанных в разделе Serial Devices Configuration (файл /etc/wb-mqtt-serial.conf), выполните:
<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-all
</syntaxhighlight>


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


Утилита работает только на нашем контроллере и ей нужен доступ в интернет. Если у вас нет интернета или нашего контроллера, смотрите раздел [[#manual|Ручное обновление]].  
Полный список параметров и примеры работы смотрите на [[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 |вручную с отображением сетевого порта в локальный]].
== Ручное обновление ==
Мы не рекомендуем этот способ, но если на объекте нет доступа в интернет — это единственный вариант.


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


=== Обновление одного устройства ===
==== ОС Linux ====
Чтобы обновить только одно устройство:
Если вы используете контроллер на процессоре ARM Cortex, то скачайте и установите deb-пакет из [[http://releases.contactless.ru/?prefix=stable/stretch/pool/main/w/wb-mcu-fw-flasher/ нашего репозитория]].
# Подключите устройство по шине RS-485 к контроллеру.
 
# Узнайте [[Wiren Board Device Modbus Address | modbus-адрес]] устройства, которое хотите обновить.
Для установки на компьютер с ОС Linux скачайте на компьютер пакет [[Wb-mcu-fw-flasher_1.0.3_amd64-all.deb]].
# Откройте консоль контроллера по [[SSH]].
# Запустите утилиту <code>wb-mcu-fw-updater</code> параметрами: ключ <code>update-fw</code>, а также порт и modbus-адрес.  


Например, обновим прошивку устройства с modbus-адресом <code>70</code> и подключенного к порту <code>/dev/ttyRS485-1</code>:
Для установки, выполните команды:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-fw /dev/ttyRS485-1 -a70
apt update
apt install libmodbus5
apt install ./Wb-mcu-fw-flasher_1.0.3_amd64-all.deb #измените имя пакета, если необходимо
</syntaxhighlight>
</syntaxhighlight>


Полный список параметров и примеры работы смотрите на [[Wb-mcu-fw-updater | странице утилиты]].
==== ОС Windows ====
Для Windows мы подготовили windows-версию утилиты, которая не требует установки. Скачать можно по ссылке [[Wb-mcu-fw-flasher_1.0.3.zip]]
 
=== Выбор прошивки ===
Прошивки публикуются на сайте [http://fw-releases.wirenboard.com/?prefix=fw/ fw-releases.wirenboard.com] в виде файлов с расширением <code>.wbfw</code>.
 
Прошивки сгруппированы по версиям и сигнатурам (типам) устройств.
 
Каждое modbus-устройство Wiren Board имеет сигнатуру — наименование аппаратного типа устройства. Устройство будет прошито только если его сигнатура совпадет с сигнатурой в прошивке.
 
Сигнатура устройства хранится в формате строки из 12 ASCII символов, по одному символу в регистре, и доступна по адресу <code>290</code>.
 
Сигнатуру устройства в ОС Linux и на контроллере можно с помощью утилиты [[Modbus-client |modbus_client]]. Узнаем сигнатуру устройства с '''адресом 10''' и подключенного к порту '''ttyRS485-1'''
<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'''.
{{Anchor|manual}}
=== Особенности ===
Этот способ используется если:
*на объекте нет доступа в интернет,
*у вас нет контроллера,
*вы обновляете прошивку устройств, [[WB_Modbus_Devices_Firmware_Update#Обновление_прошивки_устройств,_подключенных_к_шлюзам_WB-MGE_и_WB-MIO-E |подключенных за шлюзами WB-MGE и WB-MIO-E]].


Во всех остальных случаях используйте [[WB_Modbus_Devices_Firmware_Update#Автоматическое_обновление |автоматическое обновление]].
О том, как читать регистры из ОС Windows смотрите в статье [[Working with WB devices without a controller | Работа с устройствами Wiren Board без контроллера]]


Ручное обновление можно сделать утилитой '''[[wb-mcu-fw-flasher#Установка утилиты | wb-mcu-fw-flasher]]''', которую нужно предварительно установить. Способ установки отличается и зависит от используемой операционной системы.
Теперь, имея сигнатуру вы можете скачать прошивку устройства:
# Перейдите на сайт [http://fw-releases.wirenboard.com/?prefix=fw/ fw-releases.wirenboard.com].
# Выберите папку '''by-signature'''.
# Найдите и откройте папку с нужной сигнатурой устройства.
# Выберите одну из веток:
#:*stable — стабильные версии прошивок. Чтобы скачать самую свежую, выберите файл latest.wbfw.
#:*unstable — экспериментальные версии прошивок.


=== Подготовка устройства ===
=== Подготовка устройства ===
Строка 69: Строка 82:
* по широковещательному адресу — <code>0</code>.
* по широковещательному адресу — <code>0</code>.


Для прошивки нескольких устройств на шине нужно поочереди перевести их в [[Bootloader MOD | режим загрузчика]] и прошить.
Для прошивки нескольких устройств на шине нужно поочереди перевести их в режим загрузчика и прошить.
 
Устройство переходит в режим загрузчика, если:
* на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
* на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
* при работе основной программы записать 1 в holding-регистр 129 (0x81) — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это можно сделать, запустив утилиту <code>wb-mcu-fw-flasher</code> с ключем <code>-j</code>.
 
В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.


=== Загрузка прошивки в устройство ===
=== Загрузка прошивки в устройство ===
Для загрузки прошивки выполните шаги:
Для загрузки прошивки выполните шаги:
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где установлена утилита прошивки.
# Переведите устройство в режим загрузчика.
{{Wbincludes:Prepare modbus_client}}
# Если вы прошиваете устройство с контроллера, то остановите драйвер [[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.14.1_master_19c9ca5.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
#команда для прошивки из Windows
</syntaxhighlight>
</syntaxhighlight>
# Если вы выполняли команду с контроллера — запустите драйвер wb-mqtt-serial.
В команде выше мы флагом <code>-j</code> перевели устройство, подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) с адресом <code>25</code> в режим загрузчика, а затем прошили его.


Успешный процесс прошивки выглядит так:
Успешный процесс прошивки выглядит так:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
~# wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f mr6c__1.14.1_master_19c9ca5.wbfw  
   /dev/ttyRS485-1 opened successfully.
   /dev/ttyRS485-1 opened successfully.
   Send jump to bootloader command and wait 2 seconds...
   Send jump to bootloader command and wait 2 seconds...
   Ok, device will jump to bootloader.
   Error: Connection timed out.
   mr6c__1.15.5_master_971fe50.wbfw opened successfully, size 14720 bytes
  May be device already in bootloader, try to send firmware...
 
   mr6c__1.14.1_master_19c9ca5.wbfw opened successfully, size 12136 bytes
   Sending info block... OK
   Sending info block... OK
 
   Sending data block 89 of 89... OK.
   Sending data block 108 of 108... OK.
   All done!
   All done!
</syntaxhighlight>
</syntaxhighlight>


Если сигнатура устройства и файла прошивки не совпали, то вы получите сообщение об ошибке:
Если не сигнатура устройства и файла прошивки не совпали, то вы получите сообщение об ошибке:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Sending info block...
Sending info block...
Строка 110: Строка 125:
   Data format is invalid or firmware signature doesn't match the device
   Data format is invalid or firmware signature doesn't match the device
</syntaxhighlight>
</syntaxhighlight>
== Восстановление прошивки устройства ==
{{Anchor|fw-recovery}}
Если во время обновления произошел сбой, то устройство перейдет в [[Wbincludes:Bootloader MOD | режим загрузчика]] и вы можете восстановить его прошивку.
=== Автоматически ===
Для автоматического восстановления прошивки одного или нескольких устройств можно использовать утилиту wb-mcu-fw-updater вы режимах '''recover''' и '''recover-all'''.
Чтобы восстановить устройство с адресом <code>10</code> и подключенное к порту <code>/dev/ttyRS485-1</code>, выполните команду:
<syntaxhighlight lang="bash">
wb-mcu-fw-updater recover /dev/ttyRS485-1 -a 10
</syntaxhighlight>
Подробнее о режимах recover и recover-all, читайте в [[Wb-mcu-fw-updater#Режимы|документации]].
=== Вручную ===
Если вы не можете воспользоваться [[wb-mcu-fw-updater]], то вы восстановить прошивку устройств можно с помощью сервисной утилиты [[wb-mcu-fw-flasher]]. Также этот способ могут использовать пользователи компьютеров с ОС Windows.
Для этого вам понадобится сама утилита и файл прошивки:
# Подключите устройство по [[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>
Здесь мы прошили находящееся в режиме загрузчика устройство с Modbus-адресом <code>25</code> и подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) файлом <code>firmware.wbfw</code>.
==Обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E==
[[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]].
Шлюз должен быть настроен в режим 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 |testing]]),
*текущая версия прошивки устройства поддерживает '''131''' регистр (см. Журналы изменений на страницах устройств),
*текущая версия загрузчика не ниже '''1.3.0'''.
'''Иначе обновление можно выполнить только со [[WB_Modbus_Devices_Firmware_Update#Обновление_со_стандартными_настройками_соединения |стандартными настройками 9600N2.]]'''
Ниже приведен пример со следующими исходными данными:
*Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
*Modbus-устройство Wiren Board с адресом 14.
*Соединение на скорости 115200 кбит/с.
{{note|info|'''Внимание!''' В вашем случае настройки могут быть другими.}}
#[[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>
===Обновление со стандартными настройками соединения===
Инструкция используется для устройств в которых текущая версия загрузчика ниже '''1.3.0''' и/или текущая прошивка не поддерживает '''131''' регистр.
В этом случае обновление можно выполнить только на скорости '''9600N2''', указав параметр <code>-j</code> для утилиты wb-mcu-fw-flasher. Если используются другие настройки соединения сначала нужно изменить их на стандартные.
Рекомендуем также обновить загрузчик если его версия ниже '''1.3.0'''. Это позволит в дальнейшем обновлять прошивку на [[WB_Modbus_Devices_Firmware_Update#Обновление_на_любой_скорости_соединения |любой скорости соединения]].
Рассмотрим синтетический пример обновления прошивки устройств, в котором используются нестандартные настройки соединения:
*Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
*К шлюзу подключено устройство WB-MDM3 с адресом 58.
*В настройках устройства и шлюза выставлена скорость 115200 кбит/с.
{{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>
Если вам нужно прошить несколько устройств, то вы можете сперва изменить им скорость, перенастроить шлюз, а потом так же поочереди их прошить, вернуть им прежнюю скорость и снова перенастроить шлюз.
===Настройка шлюза для обновления прошивки===
Самый простой способ изменить настройки шлюза — подключиться к его встроенному веб-интерфейсу. Для этого нужно:
#подключить шлюз к компьютеру UTP кабелем напрямую или через роутер,
#присвоить компьютеру статический IP-адрес в сети шлюза, например, 192.168.0.201,
#открыть браузер и ввести IP-адрес шлюза, по умолчанию 192.168.0.7.
==  Полезные ссылки ==
* [[Restore factory settings Wiren Board Modbus device | Восстановление доступа — сброс настроек связи]]
* [[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]]

Версия 17:56, 25 мая 2021

Это черновик страницы. Последняя правка сделана 25.05.2021 пользователем A.Degtyarev.


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

Пример работы 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

Для обновления прошивки конкретного устройства, укажите порт и его адрес Modbus:

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

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

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

Мы не рекомендуем этот способ, но если на объекте нет доступа в интернет — это единственный вариант.

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

Установка утилиты

Контроллер Wiren Board

Утилита есть в репозитории контроллера, поэтому обновите список пакетов и установите ее:

apt update
apt install wb-mcu-fw-flasher

ОС Linux

Если вы используете контроллер на процессоре ARM Cortex, то скачайте и установите deb-пакет из [нашего репозитория].

Для установки на компьютер с ОС Linux скачайте на компьютер пакет Wb-mcu-fw-flasher_1.0.3_amd64-all.deb.

Для установки, выполните команды:

apt update
apt install libmodbus5
apt install ./Wb-mcu-fw-flasher_1.0.3_amd64-all.deb #измените имя пакета, если необходимо

ОС Windows

Для Windows мы подготовили windows-версию утилиты, которая не требует установки. Скачать можно по ссылке Wb-mcu-fw-flasher_1.0.3.zip

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

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

Прошивки сгруппированы по версиям и сигнатурам (типам) устройств.

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

Сигнатура устройства хранится в формате строки из 12 ASCII символов, по одному символу в регистре, и доступна по адресу 290.

Сигнатуру устройства в ОС 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. Переведите устройство в режим загрузчика.
  2. Если вы прошиваете устройство с контроллера, то остановите драйвер wb-mqtt-serial или иное ПО, которое опрашивает устройство.
  3. Загрузите файл прошивки на контроллер или другое устройство, с на котором установлена утилита прошивки.
  4. Прошиваете устройство командой:
    • на контроллере или в ОС Linux:
    wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.14.1_master_19c9ca5.wbfw
    
    • в ОС Windows:
    #команда для прошивки из Windows
    

Успешный процесс прошивки выглядит так:

 wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f mr6c__1.14.1_master_19c9ca5.wbfw    
   /dev/ttyRS485-1 opened successfully.
   Send jump to bootloader command and wait 2 seconds...
   Error: Connection timed out.
   May be device already in bootloader, try to send firmware...
   mr6c__1.14.1_master_19c9ca5.wbfw opened successfully, size 12136 bytes
   Sending info block... OK
   Sending data block 89 of 89... 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