WB Modbus Devices Firmware Update: различия между версиями
(не показаны 63 промежуточные версии 6 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:Обновление | {{DISPLAYTITLE:Обновление прошивок на устройствах Wiren Board}} | ||
== Общая информация == | == Общая информация == | ||
В наших modbus-устройствах реализован механизм загрузчика прошивок — bootloader. Он позволяет обновлять микропрограммы устройств и модулей Wiren Board по RS-485/Modbus RTU. | |||
В modbus-устройствах | |||
В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2. | |||
== Автоматическое обновление == | == Автоматическое обновление == | ||
[[Image: Wb-fw-mcu-updater example 1.png | | [[Image: Wb-fw-mcu-updater example 1.png |300px|thumb|right| Пример работы wb-fw-mcu-updater ]] | ||
Автоматическое обновление прошивки выполняется с помощью предустановленной на контроллеры Wiren Board утилиты [[Wb-mcu-fw-updater | wb-mcu-fw-updater]] и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически. | Автоматическое обновление прошивки выполняется с помощью предустановленной на контроллеры Wiren Board утилиты [[Wb-mcu-fw-updater | wb-mcu-fw-updater]] и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически. | ||
Для использования утилиты нужен доступ в интернет, если это не так — смотрите раздел про ручное обновление. | |||
Вы можете использовать утилиту и без нашего контроллера, для этого вам понадобится Debian-подобная ОС Linux. Читайте инструкцию по установке в [[Wb-mcu-fw-updater | описании утилиты]]. | |||
=== Обновление всех устройств на шине === | === Обновление всех устройств на шине === | ||
Для обновления прошивки всех устройств, описанных в разделе '''Serial Devices Configuration''' [[Wiren Board Web Interface | веб-интерфейса]] (файл <code>/etc/wb-mqtt-serial.conf</code>), выполните: | |||
<syntaxhighlight lang="bash"> | |||
wb-mcu-fw-updater update-all | wb-mcu-fw-updater update-all | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Обновление | === Обновление определенного устройства === | ||
Чтобы обновить | Чтобы обновить определенное устройство: | ||
# | #. Узнайте [[Определение и изменение Modbus-адреса устройств Wirenboard | modbus-адрес]] устройства, которое хотите обновить. | ||
#. Запустите утилиту <code>wb-mcu-fw-updater</code> параметрами: ключ <code>update-fw</code>, а также порт и modbus-адрес. | |||
# | |||
Например, обновим прошивку устройства с modbus-адресом <code>70</code> и подключенного к порту <code>/dev/ttyRS485-1</code>: | Например, обновим прошивку устройства с modbus-адресом <code>70</code> и подключенного к порту <code>/dev/ttyRS485-1</code>: | ||
Строка 52: | Строка 32: | ||
== Ручное обновление == | == Ручное обновление == | ||
Мы не рекомендуем этот способ, но если на объекте нет доступа в интернет или у вас устройство с ОС Windows — это единственный вариант. | |||
Ручное обновление можно сделать утилитой [[Wb-mcu-fw-flasher | wb-mcu-fw-flasher]], которую нужно предварительно [[wb-mcu-fw-flasher#Установка утилиты | установить]]. Способ установки отличается и зависит от используемой операционной системы. | |||
'''ВНИМАНИЕ:''' если вы выполняете команды на контроллере, то перед началом работы [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]], а после окончания запустите снова. | |||
=== Выбор прошивки === | |||
Прошивки публикуются на сайте '''[http://fw-releases.wirenboard.com/?prefix=fw/ fw-releases.wirenboard.com]''' в виде файлов с расширением <code>.wbfw</code> и сгруппированы по версиям и сигнатурам (типам) устройств. | |||
Каждое 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''' — экспериментальные версии прошивок. | |||
=== Подготовка устройства === | === Подготовка устройства === | ||
Строка 69: | Строка 70: | ||
* по широковещательному адресу — <code>0</code>. | * по широковещательному адресу — <code>0</code>. | ||
Для прошивки нескольких устройств на шине нужно поочереди перевести их в | Для прошивки нескольких устройств на шине нужно поочереди перевести их в режим загрузчика и прошить. | ||
{{Wbincludes:Bootloader MOD}} | |||
=== Загрузка прошивки в устройство === | === Загрузка прошивки в устройство === | ||
Для загрузки прошивки выполните шаги: | Для загрузки прошивки выполните шаги: | ||
# Подключите устройство по | # Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где установлена утилита прошивки. | ||
# Если вы прошиваете устройство с контроллера, то остановите драйвер [[Wb-mqtt-serial driver#Управление драйвером | wb-mqtt-serial]] или иное ПО, которое опрашивает устройство. | |||
# | # Загрузите файл прошивки на [[View controller files from your computer | контроллер]] или другое устройство, на котором установлена утилита прошивки. | ||
# Загрузите файл прошивки на [[View controller files from your computer | контроллер]] или другое устройство. | # Перейдите в папку с файлом прошивки и прошейте устройство командой: | ||
# Перейдите в папку с файлом прошивки и | #:* на контроллере или в ОС Linux: | ||
#:* на контроллере или | |||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 - | wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f ./mr6c__1.15.5_master_971fe50.wbfw | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#:* | #:* в ОС Windows: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 - | wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Здесь мы флагом <code>-j</code> переводим устройство, подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) с адресом <code>25</code> в режим загрузчика и загружаем файл прошивки. | |||
Успешный процесс прошивки выглядит так: | Успешный процесс прошивки выглядит так: | ||
Строка 110: | Строка 111: | ||
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> | ||
== Полезные ссылки == | == Полезные ссылки == | ||
* [[Restore factory settings Wiren Board Modbus device | | * [[Restore factory settings Wiren Board Modbus device | Сброс Modbus-устройства Wiren Board к заводским настройкам]] | ||
* [[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-updater | Утилита обновления и восстановления прошивок wb-mcu-fw-updater]] | ||
* [[wb-mcu-fw-flasher | Сервисная утилита wb-mcu-fw-flasher]] | * [[wb-mcu-fw-flasher | Сервисная утилита wb-mcu-fw-flasher]] | ||
* [[ | * [[Wb-mqtt-serial driver | Описание драйвера wb-mqtt-serial]] |
Версия 21:10, 27 мая 2021
Общая информация
В наших modbus-устройствах реализован механизм загрузчика прошивок — bootloader. Он позволяет обновлять микропрограммы устройств и модулей Wiren Board по RS-485/Modbus RTU.
В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.
Автоматическое обновление
Автоматическое обновление прошивки выполняется с помощью предустановленной на контроллеры Wiren Board утилиты wb-mcu-fw-updater и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.
Для использования утилиты нужен доступ в интернет, если это не так — смотрите раздел про ручное обновление.
Вы можете использовать утилиту и без нашего контроллера, для этого вам понадобится Debian-подобная ОС Linux. Читайте инструкцию по установке в описании утилиты.
Обновление всех устройств на шине
Для обновления прошивки всех устройств, описанных в разделе Serial Devices Configuration веб-интерфейса (файл /etc/wb-mqtt-serial.conf
), выполните:
wb-mcu-fw-updater update-all
Обновление определенного устройства
Чтобы обновить определенное устройство:
- . Узнайте modbus-адрес устройства, которое хотите обновить.
- . Запустите утилиту
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 без контроллера
Теперь, имея сигнатуру вы можете скачать прошивку устройства:
- Перейдите на сайт fw-releases.wirenboard.com.
- Выберите папку by-signature.
- Найдите и откройте папку с нужной сигнатурой устройства.
- Выберите одну из веток:
- stable — стабильные версии прошивок. Чтобы скачать самую свежую, выберите файл
latest.wbfw
. - unstable — экспериментальные версии прошивок.
- stable — стабильные версии прошивок. Чтобы скачать самую свежую, выберите файл
Подготовка устройства
Прошивать устройства можно:
- по modbus-адресу устройства.
- по широковещательному адресу —
0
.
Для прошивки нескольких устройств на шине нужно поочереди перевести их в режим загрузчика и прошить.
Внимание: Отображаемое название «Загрузчик периферийных устройств Wiren Board» переопределяет ранее заданное отображаемое название «Обновление прошивок на устройствах Wiren Board».
Описание
В периферийных устройствах с Modbus есть прошивка, которая реализует заложенную логику работы. Чтобы прошивку можно было обновлять прямо в инсталляции по RS-485, в устройствах предусмотрен загрузчик (bootloader), который отвечает за инициализацию устройства и обновление прошивки.
В документации на каждое устройство есть раздел «Обновление прошивки», где есть ссылки на инструкцию по обновлению и список изменений. В это статье мы рассмотрим только обновление загрузчика.
Переход устройств в режим загрузчика
Устройство находится в режиме загрузчика в следующих случаях:
- первые 2 секунды после включения питания, если на устройстве есть корректная прошивка;
- постоянно, если на устройстве нет корректной прошивки, например, был сбой при обновлении прошивки;
- при записи
1
в holding-регистр129(0x81)
в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения9600N2
. Этот режим можно активировать запустив утилиту wb-mcu-fw-flasher с ключем-j
. - при записи
1
в holding-регистр131(0x83)
в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения, установленными в настройках устройства. Это может быть полезно для обновления устройств за шлюзами без перенастройки параметров шлюза.- Перейти в этот режим можно в wb-mcu-fw-flasher начиная с версии 1.3.0 запустив его с ключем
-J
. Кроме того для запуска режима необходима поддержка со стороны загрузчика (версия 1.3.0 и выше) и со стороны прошивки (см. changelog прошивки).
- Перейти в этот режим можно в wb-mcu-fw-flasher начиная с версии 1.3.0 запустив его с ключем
В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.
Восстановление прошивки описано в статье Обновление прошивки Modbus-устройств Wiren Board.
Проверка связи с устройством в режиме загрузчика
Загрузчик продолжает слушать шину RS-485 и отвечает на опрос некоторых регистров. Можно прочитать сигнатуру устройства используя команду
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12
Важно: именно 12 регистров одним запросом, начиная с адреса 290.
Список изменений
Изменения во всех версиях описаны на странице Список изменений в загрузчике.
Обновление загрузчика
Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330, например, с помощью modbus_client:
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r330 -c8 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
Есть несколько способов обновления загрузчика:
С контроллера Wiren Board
Загрузчик обновляется из консоли контроллера Wiren Board утилитой wb-mcu-fw-updater, которой для работы нужен доступ в интернет. Если интернета нет, используйте другой способ.
Учитывайте, что утилита учитывает установленный на контроллер релиз ПО , то есть вы не сможете зашить тестовую версию загрузчика, если на контроллере стабильный релиз.
Перед обновлением загрузчика, обновите прошивку контроллера через apt или другим способом по инструкциям.
Обновление загрузчика одного устройства
Процесс:
- Подключитесь к контроллеру по SSH.
- Запустите команду, заменив в ней порт и адрес:
wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
Утилита считает модель устройства, проверит наличие обновления прошивки загрузчика, скачает обновление и зашьёт его в устройство.
Обновление загрузчика всех устройств
Начиная с версии 1.10.8 утилита wb-mcu-fw-updater умеет в режиме обновление прошивок устройств проверять и версии загрузчика, а потом обновлять его:
- Подключитесь к контроллеру по SSH.
- Запустите команду:
wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
- Если есть новые версии загрузчика для устройств, утилита запросит подтверждение на обновление загрузчика, нужно ответить
y
. Если откажетесь, прошивка обновиться, но загрузчик останется старым.
Пример:
# wb-mcu-fw-updater update-all
2024-04-03 07:17:24,061 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
2024-04-03 07:17:24,063 Probing WB-MAP6S fw2 (port: /dev/ttyRS485-1, slaveid: 26, uart_params: 9600N2, response_timeout: 0.50)...
2024-04-03 07:17:26,460 Update: 2.8.0-rc1 -> 2.8.1 (WB-MAP6S fw2 (26, /dev/ttyRS485-1))
2024-04-03 07:17:27,128 Flashing firmware to WB-MAP6S fw2 (26, /dev/ttyRS485-1)
2024-04-03 07:17:28,073
2024-04-03 07:17:28,073 Bootloader update (v1.3.0 -> v1.4.1) for map6semG16 /dev/ttyRS485-1:26 is available! (bootloader updates are highly recommended to install) Do a bootloader update? [Y/N]
С компьютера и других устройств
Установка утилиты
Если у вас нет контроллера Wiren Board или на нём нет интернета, можно обновить загрузчик в ручном режиме утилитой wb-mcu-fw-flasher, которую надо установить по инструкции.
Чтение сигнатуры
Для начала нам нужно считать сигнатуру устройства, чтобы понимать, какие загрузчик и прошивки нужны.
Сделать это можно прочитав 12 holding регистров с адреса 290, например, с помощью modbus_client:
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
В результате на экран будет выведена строка вида mwac0
— это и есть сигнатура.
Скачивание файлов
Чтобы скачать файл с загрузчиком, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=bootloader/by-signature/ ,выберите папку с полученной выше сигнатурой, далее раздел main
и скачайте файл latest.wbfw
.
Чтобы скачать прошивку, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=fw/by-signature/. ,выберите папку с полученной выше сигнатурой, далее раздел main
и скачайте файл latest.wbfw
. Если вам необходима конкретная версия прошивки, можно скачать именно её.
Прошивка
Теперь, когда файлы обновления загрузчика и прошивки скачаны, их надо зашить в устройство:
- Запустите обновление загрузчика, замените порт
/dev/ttyRS485-1
, скорость-b
, адрес-a
и имя файла на свои:wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f wb-bootloader-updater_mwac0__1.4.1_master_e676613.wbfw -j
- утилита сотрёт прошивку и зашьёт новый загрузчик.
- Запустите обновление прошивки, замените порт
/dev/ttyRS485-1
, скорость-b
, адрес-a
и имя файла на свои:wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw
- так как устройство со стёртой прошивкой находится в загрузчике, то в команде выше нет ключа
-j
.
Более подробно про ручное обновление прошивки читайте в статье Обновление прошивки Modbus-устройств Wiren Board
Известные ошибки
Список известных неисправностей
Загрузка прошивки в устройство
Для загрузки прошивки выполните шаги:
- Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где установлена утилита прошивки.
- Если вы прошиваете устройство с контроллера, то остановите драйвер wb-mqtt-serial или иное ПО, которое опрашивает устройство.
- Загрузите файл прошивки на контроллер или другое устройство, на котором установлена утилита прошивки.
- Перейдите в папку с файлом прошивки и прошейте устройство командой:
- на контроллере или в ОС 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