|
|
(не показаны 162 промежуточные версии 9 участников) |
Строка 1: |
Строка 1: |
| {{DISPLAYTITLE:Обновление прошивки Modbus-устройств Wiren Board}} | | <languages/> |
| == Общая информация ==
| | <translate> |
| {{YouTube
| | </translate> |
| |link= https://www.youtube.com/watch?v=d_olK15Xhkw
| | {{DISPLAYTITLE:Загрузка прошивок на устройства Wiren Board}} |
| |text= Обновление прошивок устройств (24:08)
| | <translate> |
| |start=1448
| |
| }}
| |
| В modbus-устройствах Wiren Board есть [[Bootloader |загрузчик (bootloader)]], который позволяет обновлять прошивки по RS-485/Modbus RTU. В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.
| |
|
| |
|
| Сами прошивки выпускаются в формате релизов, которые привязаны к [[Wiren_Board_Software#releases| релизам программного обеспечения контроллера]], но имеют отличный от него цикл:
| | == Загрузчик прошивок == <!--T:1--> |
| * '''testing''' — сюда попадают прошивки после внутреннего тестирования, доступны для пользователей testing-релиза контроллера;
| |
| * '''stable''' — через три недели после публикации в testing и при отсутствии сообщений об ошибках, прошивки считаются стабильными. В этот момент они становятся доступны и для пользователей stable-релиза контроллера. Если изменений в прошивке было много и они затрагивали основные функции устройства, то прошивка может немного задержаться в testing.
| |
|
| |
|
| На странице каждого устройства есть ссылка на список изменений в прошивках, где прошивки в testing отмечены маркером «testing». Прошивка без отметки считается стабильной. | | <!--T:2--> |
| | В новых версиях наших устройств реализован механизм загрузчика прошивок (bootloader). Он позволяет обновлять микропрограммы устройств/модулей Wiren Board по RS-485/Modbus RTU. |
| | На устройства добавлен режим загрузчика, в котором возможно обновлять прошивку. |
|
| |
|
| Распределение прошивок по релизам позволяет избежать ситуации, когда свежая версия прошивки без продолжительного тестирования попадает в очень ответственную инсталляцию. Если для новой прошивки нужны новые функции в ПО контроллера, то либо они заедут в stable-релиз ПО вместе с прошивкой, либо прошивка задержится в testing до появления нужных функций в ПО.
| | <!--T:3--> |
| | В режиме загрузчика основной функционал устройства отключается. '''Коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.''' |
|
| |
|
| Для прошивки подключённых через шлюз WB-MGE или аналог устройств, используйте перенаправление socat, [[WB FAQ/modbus-modules-behind-gateway | инструкция]].
| | == Переход в режим загрузчика == <!--T:4--> |
|
| |
|
| == Автоматическое обновление ==
| | <!--T:5--> |
| [[Image: Wb-fw-mcu-updater example 1.png |500px|thumb|right| Пример работы wb-fw-mcu-updater ]] | | [[File:Bootloader.gif||right||Индикация режима загрузчика]] |
| {{note|info|При обновлении прошивки удаляются ИК-команды, сохранённые в устройствах WB-MSW и WB-MIR. Рекомендуем сохранить банки команд перед обновлением с помощью [[WB-MSx Consumer IR Manual#Чтение/запись банков команд | скрипта]].}}
| | Устройство переходит в режим загрузчика, если: |
| Автоматическое обновление прошивки выполняется с помощью предустановленной на контроллеры Wiren Board утилиты [[Wb-mcu-fw-updater | wb-mcu-fw-updater]] и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.
| | * на устройстве имеется корректная прошивка — первые 2 секунды после включения питания устройство работает в режиме загрузчика; |
| | * на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки) — в этом случае режим загрузчика активен постоянно; |
| | * при работе основной программы в holding-регистр 129 (0x81) была записана 1 — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. |
|
| |
|
| Утилита работает только на нашем контроллере и ей нужен доступ в интернет. Если у вас нет интернета или нашего контроллера, смотрите раздел [[#manual|Ручное обновление]].
| | <!--T:6--> |
| | Индикация режима загрузчика: индикатор Status устройства редко мигает с периодом 2 секунды. При заливке прошивки индикатор часто мигает при приеме блока данных. |
|
| |
|
| Обновление прошивок устройств, подключенных к шлюзам 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:7--> |
|
| |
|
| === Обновление всех устройств на шине === | | <!--T:8--> |
| Вы можете обновить все устройства, настроенные в разделе '''Serial Devices Configuration''' [[Wiren Board Web Interface | веб-интерфейса]]
| | [http://fw-releases.wirenboard.com/?prefix=fw/ '''fw-releases.wirenboard.com'''] - здесь их можно скачать. Прошивки хранятся в файлах с расширением '''.wbfw'''. |
| # Подключите устройства по [[RS-485 | шине RS-485]] к контроллеру.
| |
| # [[RS-485:Configuration via Web Interface | Настройте подключенные устройства]] в веб-интерфейсе.
| |
| # Откройте консоль контроллера по [[SSH]].
| |
| # Обновите все настроенные устройства командой:
| |
| #:<syntaxhighlight lang="bash">
| |
| wb-mcu-fw-updater update-all
| |
| </syntaxhighlight>
| |
|
| |
|
| === Обновление одного устройства === | | == Сигнатуры устройств == |
| Чтобы обновить только одно устройство:
| |
| # Подключите устройство по шине 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">
| | Сигнатуру устройства можно считать из устройства по адресам 290-301. Сигнатура хранится в формате строки из 12 ASCII символов, по одному символу в регистре. |
| wb-mcu-fw-updater update-fw /dev/ttyRS485-1 -a70
| |
| </syntaxhighlight>
| |
|
| |
|
| Полный список параметров и примеры работы смотрите на [[Wb-mcu-fw-updater | странице утилиты]].
| | Получить сигнатуру устройства в виде текстовой строки можно командой: |
|
| |
|
| == Ручное обновление ==
| | echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-'''B''' -a'''A''' -t3 -r290 -c 12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g') |
| {{Anchor|manual}}
| |
| === Особенности ===
| |
| Этот способ используется если:
| |
| *на объекте нет доступа в интернет,
| |
| *у вас нет контроллера,
| |
| *вы обновляете прошивку устройств, [[WB_Modbus_Devices_Firmware_Update#Обновление_прошивки_устройств,_подключенных_к_шлюзам_WB-MGE_и_WB-MIO-E |подключенных за шлюзами WB-MGE и WB-MIO-E]].
| |
|
| |
|
| Во всех остальных случаях используйте [[WB_Modbus_Devices_Firmware_Update#Автоматическое_обновление |автоматическое обновление]].
| | замените значения '''B''' на номер шины и '''A''' на адрес устройства. |
|
| |
|
| Ручное обновление можно сделать утилитой '''[[wb-mcu-fw-flasher#Установка утилиты | wb-mcu-fw-flasher]]''', которую нужно предварительно установить. Способ установки отличается и зависит от используемой операционной системы.
| | == Modbus == <!--T:11--> |
|
| |
|
| === Подготовка устройства ===
| | <!--T:12--> |
| | Загрузчик устройства получает прошивку по Modbus RTU. В режиме загрузчика коммуникационные параметры фиксированы и не зависят от значений, записанных ранее в память устройства: 9600 8N2. По протоколу Modbus устройство можно перевести в режим загрузчика, если во время работы основной программы записать 1 в holding-регистр 129 (0x81). В этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. |
|
| |
|
| Прошивать устройства можно:
| | <!--T:13--> |
| * по modbus-адресу устройства.
| | Modbus-адрес устройства для прошивки в режиме загрузчика следует выбирать следующим образом: |
| * по широковещательному адресу — <code>0</code>.
| |
|
| |
|
| Для прошивки нескольких устройств на шине нужно поочереди перевести их в [[Bootloader MOD | режим загрузчика]] и прошить.
| | <!--T:14--> |
| | # Основной адрес для прошивки — адрес, заданный в памяти устройства: то есть это стандартный адрес, на который устройство отвечает из основной программы. |
| | # Если устройство находится в бутлоадере, прошивать можно по широковещательному адресу 0. Это менее предпочтительный способ. |
| | # Перевести устройство в бутлоадер по широковещательному адресу 0 - '''нельзя'''! |
|
| |
|
| === Загрузка прошивки в устройство === | | === Прошивка устройств по широковещательному Modbus-адресу 0 === <!--T:34--> |
| Для загрузки прошивки выполните шаги:
| |
| # Подключите устройство по [[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.
| |
|
| |
|
| В команде выше мы флагом <code>-j</code> перевели устройство, подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) с адресом <code>25</code> в режим загрузчика, а затем прошили его.
| | <!--T:35--> |
| | Bootloader позволяет загружать прошивку на устройства по Modbus-адресу 0. Для этого устройство должно быть единственным устройством на шине и находиться в режиме загрузчика. |
|
| |
|
| Успешный процесс прошивки выглядит так:
| | === Прошивка нескольких устройств на шине === <!--T:36--> |
| <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
| |
|
| |
|
| Sending info block... OK
| | <!--T:37--> |
| | Возможна прошивка нескольких устройств, подключенных к шине. Устройства должны быть переведены в режим загрузчика и прошиваться по отдельности с указанием нешироковещательного Modbus-адреса. Прошивка устройств с одинаковым адресом возможна, если в режиме загрузчика находится только одно из них. Устройства прошиваются по очереди. |
|
| |
|
| Sending data block 108 of 108... OK.
| | <!--T:38--> |
| All done!
| | '''Внимание!''' Прошивка устройств, находящимся в режиме загрузчика и имеющим одинаковый modbus-адрес, или же прошивка нескольких устройств, находящихся в режиме загрузчика по адресу 0 не будет выполнена; имеющаяся прошивка на устройствах будет испорчена. |
| </syntaxhighlight>
| |
|
| |
|
| Если сигнатура устройства и файла прошивки не совпали, то вы получите сообщение об ошибке:
| | == Утилита для прошивки wb-mcu-fw-flasher == <!--T:15--> |
| <syntaxhighlight lang="bash"> | |
| 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
| |
| </syntaxhighlight>
| |
|
| |
|
| == Восстановление прошивки устройства ==
| | <!--T:16--> |
| {{Anchor|fw-recovery}}
| | Для передачи прошивки на устройства используется утилита wb-mcu-fw-flasher, запускаемая с контроллера Wiren Board (или компьютера с Linux или Windows). |
| Если во время обновления произошел сбой, то устройство перейдет в [[Wbincludes:Bootloader MOD | режим загрузчика]] и вы можете восстановить его прошивку.
| |
|
| |
|
| === Автоматически ===
| | <!--T:17--> |
| Для автоматического восстановления прошивки одного или нескольких устройств можно использовать утилиту wb-mcu-fw-updater вы режимах '''recover''' и '''recover-all'''.
| | Для установки утилиты '''на контроллер Wiren Board''' выполните команды: |
| | <pre> |
| | apt-get update |
| | apt-get install wb-mcu-fw-flasher |
| | </pre> |
|
| |
|
| Чтобы восстановить устройство с адресом <code>10</code> и подключенное к порту <code>/dev/ttyRS485-1</code>, выполните команду:
| | <!--T:18--> |
| <syntaxhighlight lang="bash">
| | Версия утилиты для '''MS Windows''': [[Media: Wb-mcu-fw-flasher_1.0.3.zip | Wb-mcu-fw-flasher_1.0.3.zip]] |
| wb-mcu-fw-updater recover /dev/ttyRS485-1 -a 10
| |
| </syntaxhighlight>
| |
|
| |
|
| Подробнее о режимах recover и recover-all, читайте в [[Wb-mcu-fw-updater#Режимы|документации]].
| | <!--T:19--> |
| | Для установки на '''компьютер с Debian''' скачайте пакет - [[Media: Wb-mcu-fw-flasher_1.0.3_amd64-all.deb | Wb-mcu-fw-flasher_1.0.3_amd64-all.deb]] |
| | и выполните команды в директории, куда загрузился пакет: |
| | <pre> |
| | apt-get update |
| | apt-get install libmodbus5 |
| | dpkg -i Wb-mcu-fw-flasher_1.0.3_amd64-all.deb |
| | </pre> |
|
| |
|
| === Вручную ===
| | <!--T:20--> |
| Если вы не можете воспользоваться [[wb-mcu-fw-updater]], то вы восстановить прошивку устройств можно с помощью сервисной утилиты [[wb-mcu-fw-flasher]]. Также этот способ могут использовать пользователи компьютеров с ОС Windows.
| | Опции запуска утилиты wb-mcu-fw-flasher: |
| | {| class="wikitable" |
| | ! Параметр !! Описание !! Значение по умолчанию |
| | |- |
| | | -d || Устройство последовательного порта ('''обязательно''') || |
| | |- |
| | | -f || Файл прошивки || |
| | |- |
| | | -a || Адрес Modbus || 1 |
| | |- |
| | | -j || Отправить на устройство команду перехода в режим загрузчика || |
| | |- |
| | | -b || Скорость порта (baudrate) || 9600 |
| | |- |
| | | -p || Чётность (parity) || N |
| | |- |
| | | -s || Количество стопбитов || 2 |
| | |- |
| | | -r || Адрес holding-регистра для перехода в режим загрузчика || 129 |
| | |- |
| | | -D || Включить режим отладки || |
| | |- |
| | | -u || Восстановление заводских настроек UART и Modbus адреса || |
| | |- |
| | | -e || Сброс всех настроек до заводских || |
| | |} |
|
| |
|
| Для этого вам понадобится сама утилита и файл прошивки:
| | <!--T:21--> |
| # Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где установлена утилита прошивки.
| | Пример (устройство в рабочем режиме): |
| {{Wbincludes:Prepare modbus_client}}
| | <pre> |
| # [[Firmware Repository For Wiren Board Modbus Devices | Скачайте из репозитория]] файл прошивки для вашего устройства.
| | wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw |
| # Загрузите файл прошивки на [[View controller files from your computer | контроллер]] или другое устройство, на котором установлена утилита прошивки.
| | </pre> |
| # Перейдите в папку с прошивкой и выполните команду:
| |
| #*на контроллере или компьютере с ОС 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>.
| | <!--T:22--> |
| | Пример для Windows (устройство в рабочем режиме): |
| | <pre> |
| | wb-mcu-fw-flasher.exe -j -d COM10 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw |
| | </pre> |
|
| |
|
| ==Обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E==
| | <!--T:23--> |
| [[Image: superport-config.png |350px|thumb|right| Настройки шлюза для обновления прошивки]]
| | Здесь COM10 — имя виртуального последовательного порта, которое присвоено адаптеру USB RS-485. |
| Обновить прошивку устройства 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).
| | <!--T:24--> |
| | Пример для устройства с нестандартными настройками UART: |
| | <pre> |
| | wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw -b 115200 |
| | </pre> |
| | В данном случае, устройство работало на скорости порта 115200. |
|
| |
|
| ===Обновление на любой скорости соединения=== | | == Прошивка устройств == <!--T:25--> |
|
| |
|
| Настройки соединения могут быть любыми только если:
| | <!--T:26--> |
| | '''При прошивке с контроллера остановите wb-mqtt-serial:''' |
| | <pre> |
| | service wb-mqtt-serial stop |
| | </pre> |
|
| |
|
| *версия wb-mcu-fw-flasher не ниже '''1.3.0''' (доступно в [[testing |testing]]),
| | <!--T:27--> |
| *текущая версия прошивки устройства поддерживает '''131''' регистр (см. Журналы изменений на страницах устройств),
| | Подключите устройство к RS-485. |
| *текущая версия загрузчика не ниже '''1.3.0'''.
| |
|
| |
|
| '''Иначе обновление можно выполнить только со [[WB_Modbus_Devices_Firmware_Update#Обновление_со_стандартными_настройками_соединения |стандартными настройками 9600N2.]]''' | | <!--T:28--> |
| | Если вы не знаете точного аппаратного типа устройства, то его сигнатуру можно прочесть командой: |
| | <pre> |
| | 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--> |
| | В выводе команды вы получите сигнатуру устройства, например, '''wbmr6c'''. |
|
| |
|
| *Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
| | <!--T:30--> |
| *Modbus-устройство Wiren Board с адресом 14.
| | Выберите подходящую прошивку, например, WB-MR-MR6C_MCU3_3_1.9.4.wbfw. |
| *Соединение на скорости 115200 кбит/с.
| |
|
| |
|
| {{note|info|'''Внимание!''' В вашем случае настройки могут быть другими.}}
| | <!--T:31--> |
| | Прошейте устройство командой: |
| | <pre> |
| | wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw |
| | </pre> |
| | Успешный процесс прошивки выглядит следующим образом: |
| | <pre> |
| | wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f WB-MR-MR6C_MCU3_3_1.9.4.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... |
| | WB-MR-MR6C_MCU3_3_1.9.4.wbfw opened successfully, size 12136 bytes |
| | Sending info block... OK |
| | Sending data block 89 of 89... OK. |
| | All done! |
| | </pre> |
|
| |
|
| #[[Firmware_Repository_For_Wiren_Board_Modbus_Devices |Приготовьте файл прошивки]] и установите утилиту socat, если ее нет:
| | <!--T:32--> |
| #:<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:33--> |
| Инструкция используется для устройств в которых текущая версия загрузчика ниже '''1.3.0''' и/или текущая прошивка не поддерживает '''131''' регистр.
| | Пример ошибки при несовпадении сигнатуры: |
| | | <pre> |
| В этом случае обновление можно выполнить только на скорости '''9600N2''', указав параметр <code>-j</code> для утилиты wb-mcu-fw-flasher. Если используются другие настройки соединения сначала нужно изменить их на стандартные.
| | Sending info block... |
| | | Error while sending info block: Slave device or server failure |
| Рекомендуем также обновить загрузчик если его версия ниже '''1.3.0'''. Это позволит в дальнейшем обновлять прошивку на [[WB_Modbus_Devices_Firmware_Update#Обновление_на_любой_скорости_соединения |любой скорости соединения]].
| | 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 кбит/с.
| |
| | |
| {{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.
| |
|
| |
|
| == Полезные ссылки ==
| | </translate> |
| * [[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]]
| |
Загрузчик прошивок
В новых версиях наших устройств реализован механизм загрузчика прошивок (bootloader). Он позволяет обновлять микропрограммы устройств/модулей Wiren Board по RS-485/Modbus RTU.
На устройства добавлен режим загрузчика, в котором возможно обновлять прошивку.
В режиме загрузчика основной функционал устройства отключается. Коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.
Переход в режим загрузчика
Устройство переходит в режим загрузчика, если:
- на устройстве имеется корректная прошивка — первые 2 секунды после включения питания устройство работает в режиме загрузчика;
- на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки) — в этом случае режим загрузчика активен постоянно;
- при работе основной программы в holding-регистр 129 (0x81) была записана 1 — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд.
Индикация режима загрузчика: индикатор Status устройства редко мигает с периодом 2 секунды. При заливке прошивки индикатор часто мигает при приеме блока данных.
Прошивки
fw-releases.wirenboard.com - здесь их можно скачать. Прошивки хранятся в файлах с расширением .wbfw.
Сигнатуры устройств
При прошивке на заводе в память устройства записывается сигнатура — наименование аппаратного типа устройства. Перезапись прошивки возможна только при совпадении сигнатур устройства и прошивки.
Сигнатуру устройства можно считать из устройства по адресам 290-301. Сигнатура хранится в формате строки из 12 ASCII символов, по одному символу в регистре.
Получить сигнатуру устройства в виде текстовой строки можно командой:
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-B -aA -t3 -r290 -c 12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
замените значения B на номер шины и A на адрес устройства.
Modbus
Загрузчик устройства получает прошивку по Modbus RTU. В режиме загрузчика коммуникационные параметры фиксированы и не зависят от значений, записанных ранее в память устройства: 9600 8N2. По протоколу Modbus устройство можно перевести в режим загрузчика, если во время работы основной программы записать 1 в holding-регистр 129 (0x81). В этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд.
Modbus-адрес устройства для прошивки в режиме загрузчика следует выбирать следующим образом:
- Основной адрес для прошивки — адрес, заданный в памяти устройства: то есть это стандартный адрес, на который устройство отвечает из основной программы.
- Если устройство находится в бутлоадере, прошивать можно по широковещательному адресу 0. Это менее предпочтительный способ.
- Перевести устройство в бутлоадер по широковещательному адресу 0 - нельзя!
Прошивка устройств по широковещательному Modbus-адресу 0
Bootloader позволяет загружать прошивку на устройства по Modbus-адресу 0. Для этого устройство должно быть единственным устройством на шине и находиться в режиме загрузчика.
Прошивка нескольких устройств на шине
Возможна прошивка нескольких устройств, подключенных к шине. Устройства должны быть переведены в режим загрузчика и прошиваться по отдельности с указанием нешироковещательного Modbus-адреса. Прошивка устройств с одинаковым адресом возможна, если в режиме загрузчика находится только одно из них. Устройства прошиваются по очереди.
Внимание! Прошивка устройств, находящимся в режиме загрузчика и имеющим одинаковый modbus-адрес, или же прошивка нескольких устройств, находящихся в режиме загрузчика по адресу 0 не будет выполнена; имеющаяся прошивка на устройствах будет испорчена.
Утилита для прошивки wb-mcu-fw-flasher
Для передачи прошивки на устройства используется утилита wb-mcu-fw-flasher, запускаемая с контроллера Wiren Board (или компьютера с Linux или Windows).
Для установки утилиты на контроллер Wiren Board выполните команды:
apt-get update
apt-get install wb-mcu-fw-flasher
Версия утилиты для MS Windows: Wb-mcu-fw-flasher_1.0.3.zip
Для установки на компьютер с Debian скачайте пакет - Wb-mcu-fw-flasher_1.0.3_amd64-all.deb
и выполните команды в директории, куда загрузился пакет:
apt-get update
apt-get install libmodbus5
dpkg -i Wb-mcu-fw-flasher_1.0.3_amd64-all.deb
Опции запуска утилиты wb-mcu-fw-flasher:
Параметр |
Описание |
Значение по умолчанию
|
-d |
Устройство последовательного порта (обязательно) |
|
-f |
Файл прошивки |
|
-a |
Адрес Modbus |
1
|
-j |
Отправить на устройство команду перехода в режим загрузчика |
|
-b |
Скорость порта (baudrate) |
9600
|
-p |
Чётность (parity) |
N
|
-s |
Количество стопбитов |
2
|
-r |
Адрес holding-регистра для перехода в режим загрузчика |
129
|
-D |
Включить режим отладки |
|
-u |
Восстановление заводских настроек UART и Modbus адреса |
|
-e |
Сброс всех настроек до заводских |
|
Пример (устройство в рабочем режиме):
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
Пример для Windows (устройство в рабочем режиме):
wb-mcu-fw-flasher.exe -j -d COM10 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
Здесь COM10 — имя виртуального последовательного порта, которое присвоено адаптеру USB RS-485.
Пример для устройства с нестандартными настройками UART:
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw -b 115200
В данном случае, устройство работало на скорости порта 115200.
Прошивка устройств
При прошивке с контроллера остановите wb-mqtt-serial:
service wb-mqtt-serial stop
Подключите устройство к RS-485.
Если вы не знаете точного аппаратного типа устройства, то его сигнатуру можно прочесть командой:
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 ''
Задайте адрес прошиваемого устройства в переменной mbusaddr.
В выводе команды вы получите сигнатуру устройства, например, wbmr6c.
Выберите подходящую прошивку, например, WB-MR-MR6C_MCU3_3_1.9.4.wbfw.
Прошейте устройство командой:
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
Успешный процесс прошивки выглядит следующим образом:
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f WB-MR-MR6C_MCU3_3_1.9.4.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...
WB-MR-MR6C_MCU3_3_1.9.4.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