WB-MS v.2 не поднимается после прошивки

Здравствуйте!
Обновлял сегодня прошивки modbus устройств с помощью wb-mcu-fw-updater update-all на testing системе. Всё, для чего было обнаружено обновление, прошилось, но одно устройство WB-MS v.2 после прошивки перестало работать. Как-то можно его оживить? Уже и питание переподключал, и сканировал медленно и в режиме загрузчика — не видится. Хотя светодиод горит, а при включении даже моргает. Может, можно как-то перевести в режим загрузчика при включении, чтобы перепрошить ещё раз?

Первая прошивка:

2024-10-22 11:20:11,532 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
[...]
Probing WB-MS v.2 (port: /dev/ttyRS485-1, slaveid: 147, uart_params: 115200N2, response_timeout: 0.50)... (elapsed: 00:00)
[...]
2024-10-22 11:21:02,114 Update: 4.31.9 -> 4.31.10 (WB-MS v.2 (147, /dev/ttyRS485-1))
[...]
2024-10-22 11:41:03,405 Flashing firmware to WB-MS v.2 (147, /dev/ttyRS485-1)
2024-10-22 11:41:07,900 Flashing /var/lib/wb-mcu-fw-updater/msv2-4.0__4.31.10_master_afd91ad.wbfw (194 data chunks)
100%|#########################################################################################################################################################################|194/194
2024-10-22 11:41:32,412 No communication with the instrument (no answer)

При следующем запуске уже

2024-10-22 11:51:23,081 No answer from:
2024-10-22 11:51:23,082 	WB-MS v.2 (147, /dev/ttyRS485-1)
2024-10-22 11:51:23,083 Devices are possibly disconnected

Попытка прошить загрузчик адресно:

# wb-mcu-fw-updater update-bl  -a 147 /dev/ttyRS485-1
Will find serial port settings for (/dev/ttyRS485-1 : 147; response_timeout: 0.20)... (elapsed: 00:19)
Will find bootloader port settings for (/dev/ttyRS485-1 : 147; response_timeout: 0.20)... (elapsed: 01:56)
2024-10-22 11:54:52,892 Can't connect to (/dev/ttyRS485-1 147; response_timeout: 0.20s), check physical connection or address/port
2024-10-22 11:54:52,896 

Попытка восстановления:

# wb-mcu-fw-updater recover -a 147 /dev/ttyRS485-1
Will find bootloader port settings for (/dev/ttyRS485-1 : 147; response_timeout: 0.20)... (elapsed: 01:56)
2024-10-22 12:31:08,464 Device (147 /dev/ttyRS485-1) is not in bootloader mode! Check connection or slaveid/port

Сделал восстановление доступа по инструкции. Устройство перешло в режим загрузчика, и после этого даже прошилось, но всё равно его не видно на шине. Делал уже и быстрое сканирование, и медленное, и в режиме загрузчика. Всё, датчик умер?

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

приложен диагностический архив, доступен только сотрудникам поддержки
(360,0 КБ)

Добрый день!

А оно всё ещё в режиме загрузчика? (мигает раз в секунду)

Если да - попробовать перезагрузить по питанию - если выйдет из загрузчика - попробовать сканирование.

Если сканирование не сработало и устройство не в загрузчике - попробовать опрос с помощью modbus_client_rpc со скоростью 9600 и адресом 1.

Нет, не мигает, просто горит. Прошить в режиме бутлоадера не получается:

root@wirenboard-A7JBWTJE:~# wb-mcu-fw-flasher -d /dev/ttyRS485-1 -f /var/lib/wb-mcu-fw-updater/msv2-4.0__4.31.10_master_afd91ad.wbfw 
/dev/ttyRS485-1 opened successfully.
/var/lib/wb-mcu-fw-updater/msv2-4.0__4.31.10_master_afd91ad.wbfw opened successfully, size 26416 bytes

Sending info block...
Error while sending info block: Connection timed out

Error while sending info block: Connection timed out

Error while sending info block: Connection timed out
Error while sending info block.
Check connection, jump to bootloader and try again.

Найти загруженное устройство с адресом 1 тоже не получается:

root@wirenboard-A7JBWTJE:~# modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r128
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[01][03][00][80][00][01][85][E2]
Waiting for a confirmation...
ERROR Connection timed out: select
ERROR occured!

Как будто, из режима загрузчика выходит, а запустить прошивку не может. Я два раза прошивал после входа в режим восстановления (wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u): один раз пробовал прошить предыдущую, которая раньше была и работала, второй раз последнюю, с которой перестала. Залились обе, но ни с одной устройство потом не обнаружилось.

Сейчас засомневался. После сброса и прошивки через wb-mcu-fw-flasher -d <port> -f <firmware.wbfw> устройство само не перезагружается? Возможно, оно оставалось в режиме загрузчика после того, как я старой версией прошивал. Питание я отключал только чтобы снова сделать сброс. Сейчас попробую ещё раз прошить старую версию и перезагрузить по питанию.

Пока я вижу подтверждение наличия связи с устройством только в самом первом выводе самого первого сообщения.

Точно удалось сбросить параметры порта? Когда сбрасываете по инструкции, видите такой вывод?

root@wirenboard-A4DTZKTB:~# wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
/dev/ttyRS485-1 opened successfully.
Send reset UART settings and modbus address command...
Ok.
Device is in Bootloader now! To flash FW run
wb-mcu-fw-flasher -d <port> -f <firmware.wbfw>

Да, вывод был такой же. Сейчас снова подключил к другому контроллеру — тут датчик мигает и прошивается без проблем:

root@wirenboard-A4JBKLBD:~# wb-mcu-fw-flasher -d /dev/ttyRS485-1 -f msv2-4.0__4.31.9_master_ebdb000.wbfw
/dev/ttyRS485-1 opened successfully.
msv2-4.0__4.31.9_master_ebdb000.wbfw opened successfully, size 26416 bytes

Sending info block... OK

Sending data block 194 of 194... OK.

All done!

После этого продолжает мигать, отключение от питания не помогает, мигает всё равно. Как и снова прошивается, уже даже без сброса. А вот на том контроллере, где он должен работать, он просто горел, не мигал. И прошивка не запускалась, значит, на шине не было устройств в режиме загрузчика. Загадка…

Сложно немного ориентироваться в вашем описании. Всё время разная картина

Давайте начнём с того, что если индикатор статуса равномерно мигает раз в секунду - значит он в загрузчике. Это может происходить сразу после прошивки и выходить из загрузчика можно вручную или перезагрузив устройство по питанию.

Если после перезагрузки по питанию индикатор продолжает равномерно моргать (именно раз в секунду) значит он из загрузчика не вышел. Для контроля можно отключить интерфейс и оставить только питание, чтобы гарантировать отстутствие опроса.

Если он не вышел из загрузчика после перезагрузки, значит прошился некорректно.

Другая ситуация поведения индикатора:
При включении мигает две секунды, дальше горит статично - нормальное поведение. Первые две секунды находится в загрузчике, дальше горит, т.к. не поступает команд по modbus. В таком состоянии мигает каждый раз, как поступает команда по modbus, в т.ч. при быстром modbus при арбитраже с другими устройствами.

Соответственно у вас описаны разные ситуации.

Насколько понимаю сейчас не выходит из загрузчика после перезагрузки? Предлагаю подключить единственным устройством коротким кабелем к контроллеру, с которого получалось работать - и работать дальше - сделать recover или прошить flasher-ом (убедиться, что прошивка соответствует сигнатуре). Цель добиться чтобы после перезагрузки выходил из загрузчика и вёл себя нормально.

Сообщите по результату.

Попробую расписать понятнее. Датчик подключен на шину RS485 самым последним, кроме него на этой шине ещё устройств 40-50, скорость 115200. На контроллере testing (назовём его «тестовый контроллер»), в датчик прошилась прошивка 4.31.10. Когда он не поднялся, диод не мигал, просто горел. При переподключении мигал пару раз и потом опять просто горел. Никакими сканерами не определялся.
Я его отключил и подключил коротким проводом в другой контроллер, со stable системой («стабильный контроллер») на порт, где ничего нет, и в wb-mqtt-serial он не используется. Сделал сброс сразу после подключения, он начал мигать. Прошил без указания адреса, всё залилось. Датчик при этом мигал далее. Включил порт в wb-mqtt-serial, добавил вручную со старым id. Его не видно. Поиск из веба ни быстрый ни медленный его не находят.
Когда отключаю от стабильного контроллера и подключаю на своё место на тестовый, он не мигает, просто горит. Но не находится ни в каком режиме. Попытка прошить его там так же, как прошивал на стабильном, не проходит — его не видно.
Сейчас ещё раз подключил на стабильный. Мигает, переподключение, перепрошивка не помогают. Запустил recovery с адресом 1:

root@wirenboard-A4JBKLBD:~# wb-mcu-fw-updater recover -a1 /dev/ttyRS485-1
Will find bootloader port settings for (/dev/ttyRS485-1 : 1; response_timeout: 0.20)... (elapsed: 00:02)
2024-10-22 17:41:25,770 Has found bootloader port settings: SerialSettings(baudrate=9600, parity='N', stopbits=2)
2024-10-22 17:41:32,212 Flashing /var/lib/wb-mcu-fw-updater/msv2-4.0__4.31.9_master_ebdb000.wbfw (194 data chunks)
100%|#########################################################################################################################################################################|194/194
2024-10-22 17:42:23,905 Done (1 /dev/ttyRS485-1)

Но он так и остался в режиме загрузчика, и при повторной recovery прошивке он снова прошивается. А вот на запрос через modbus_client не отвечает:

root@wirenboard-A4JBKLBD:~# modbus_client --debug -mrtu -b115200 -pnone -s2 /dev/ttyRS485-1 -a147 -t0x03 -r128
Opening /dev/ttyRS485-1 at 115200 bauds (N, 8, 2)
[93][03][00][80][00][01][99][50]
Waiting for a confirmation...
ERROR Connection timed out: select
ERROR occured!

На тестовом контроллере подключить в отдельный порт сложно, контроллер смонтирован в шкаф, доступ ограничен.
Хорошо, допустим, у меня один стабильный контроллер. Как мне заставить датчик прошиться и загрузиться? Он же, якобы, прошивается нормально. Но вот только не запускает прошивку после этого, раз мигает раз в секунду даже без опроса на этом порту (порт не используется в wb-mqtt-serial).

Так не может быть, что он с одним контроллером в загрузчике, а с другим - нет.

Давайте с этим разберёмся. Отключите пожалуйста от датчика и питание и интерфейс - все четыре провода. Затем подключите только питание - два провода V и GND, можно непосредственно от блока питания. И сообщите, как себя ведёт индикатор. (отключать питание, а затем подключать - для перезагрузки по питанию)

Какой у вас, кстати, блок питания? Проверьте ещё напряжение на клеммах питания датчика.

Сейчас отключил датчик от стабильного контроллера, где он не выходил из режима загрузчика, и отнёс на своё место. Ну, может, минуты 3-4 это заняло. Подключил (к тестовому, получается), он мигнул пару раз и всё. При работающем mqtt-serial. Я его остановил, пропробовал запустить recovery с 1 адресом. А он мне — устройство не в режиме восстановления. Я его с адресом 1 и скоростью 9600 тестирую модбас клиентом — отвечает. Поменял адрес на родной, скорость не нашёл, как поменять. Пришлось задать для порта 9600 (для датчика уже стояло в настройках 115200), mqtt-serial перезапустился, всё отвалилось, но в этот датчик успел, видимо, отправить новую скорость. Потому что после возврата 115200 на порту и этот датчик весело замигал и стал присылать показания.

А вот тут, возможно, вы и угадали. У меня стабильный WB63, там рядом с RS485 есть питание. И я не проверил, какое именно ему надо, привык, что на рядом с RS485 всегда 12В. А с WB63 там выход 5В, вот его я и подавал. Видимо, поэтому прошивка не стартовала? А загрузчик при этом работал и прошивался.

Только непонятно. Я же приносил датчик обратно на шину (и на свои 12В), но сканер из веб интерфейса его не находил, хотя он там разные скорости перебирает. Как же так, он что, с адресом 1 не находит?

Ради интереса попробовал снова прошить датчик на тестовом контроллере новой прошивкой. И он так же отвалился. Может, новая прошивка для него кривая?

2024-10-22 18:39:02,513 Flashing firmware to WB-MS v.2 (147, /dev/ttyRS485-1)
2024-10-22 18:39:06,912 Flashing /var/lib/wb-mcu-fw-updater/msv2-4.0__4.31.10_master_afd91ad.wbfw (194 data chunks)
100%|#########################################################################################################################################################################|194/194
2024-10-22 18:39:31,534 No communication with the instrument (no answer)
2024-10-22 18:39:31,558 No answer from:
2024-10-22 18:39:31,559 	WB-MS v.2 (147, /dev/ttyRS485-1)
2024-10-22 18:39:31,560 Devices are possibly disconnected
2024-10-22 18:39:31,561 0 upgraded, 0 skipped upgrade, 0 bootloader updates available, 0 stuck in bootloader, 1 disconnected and 0 too old for any updates.

Или у меня криво скачалась…
Я прошивал той же 4.31.10, когда прошлый раз приносил датчик обратно, и с ней он не определялся. А датчик старый, остальные MSv2 более новые, у них, вроде бы, другая прошивка.

А там точно 12В? Я бы померила на всякий случай прям на клеммах датчика.
Хмм…если адреса совпадают, может быть ошибка в сканере, также может уже настроенное устройство было - он находит, но помещает в раскрывающуюся вкладку “настроенные”. Я буду иметь ввиду, если ещё раз встретится, также попробую воспроизвести.

Отвалился в бутлоадер? Если так - да - есть такой баг сейчас, пытаемся исследовать.

То есть не выходит из бутлоадера и при перезагрузки по питанию - просто постоянно мигает равномерно раз в секунду.

Кстати, скиньте, пожалуйста, серийник датчика.

Добрый день, Елена!

Отдебажил. Узнал много нового! :slight_smile: Рассказываю.

Первое. Стабильный контроллер у меня WB6.6 (не 6.3), но там я действительно на +5В цеплял датчик, что он из режима загрузчика не выходил. Напряжение на клеммах датчика 5,03В. Ну как не выходил… Они мигал два раза, потом один раз коротко, и потом снова два раза и один коротко. То есть, как я понял, он коротко мигал, пытался загрузить прошивку, но при +5В не мог и ребутился. И так бесконечно ребутился в режим загрузчика.

Второе. После вчерашней прошивки версией 4.31.10 датчик не был в режиме загрузчика (индикатор просто горел). Если его переподключить к питанию, он мигал два раза, потом один раз коротко и после просто горел не мигая. Даже на шине 115200 с 40+ устройствами. Я его от тестового контроллера отключил и подключил к стабильному, подав на этот раз питание с Vout контроллера (+11,75В). Он так же мигнул и затих (горел не мигая). Ни на адрес 1 он не отвечал, ни на 147, ни со скростью 9600, ни со 115200. Быстрым и медленным сканерами из веба он не обнаружился. Итог: после прошивки 4.31.10 устройство корректно проходит режим загрузчика, но после этого никак на modbus шине не обнаруживается.

Далее, я попытался сбросить скорость и адрес через wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u. Запустил команду сразу после подачи питания, пока датчик ещё мигает. Команда отработала с надписью Ok (если запускать невовремя, она ругается на timeout, так что действительно отработала Ok), но датчик в режиме бутлоадера не остался (не мигал, а просто горел). Ну ладно, пусть он не в режиме бутлоадера, но скорость и адрес я теперь знаю. Прогнал сканер — опять ничего. Получается, что с прошивкой 4.31.10 устройство не работает по modbus. Так как и с родным адресом и скоростью после обновления оно не поднялось, и с дефолтными тоже не отвечало. Да ещё и в режим загрузчика не входит. Как же быть?..

И тут я вспомнил про питание 5В, когда датчик ребутится в режиме загрузчика! Подал эти 5В, он начал перезагружаться, и я его прошил через wb-mcu-fw-updater recovery с адресом 1 на скорости 9600 последней стабильной версией 4.31.9. Понятно, что с 5В питания он не запустится, поэтому подал 12В (11,75). Он два раза мигнул, потом стал гореть. На запрос адреса через modbus_client при обращении с -a1 на скорости 9600 вернул 1 (то есть всё таки адрес и скорость сбросились?). Тогда я его добавил вручную в mqtt-serial со своим адресом 147 и скоростью порта 115200. При ошибке около имени устройства зашёл в его настройки, запустил поиск, быстрый модбас ничего не нашёл, а медленный на 9600 нашёл его с адресом 1. Сказал, настроить как текущее устройство, и он сразу стал присылать показания и весело мигать (в ответ на опрос).

Это всё на стабильном контроллере на выделенном RS485-1 порту. Решил скачать с сайта (вдруг, у меня была кривая?) прошивку 4.31.10 и прошить на этом контроллере. Датчик умер, и (см. выше) пришлось снова прошивать его на +5В и сканером искать с адресом 1 и скоростью 9600.

Подумал, а не из-за глючной ли прошивки сброс UART параметров не переводит устройство в режим загрузчика? Попробовал сделать это же на рабочей 4.31.9, но нет, параметры сбросились, но в загрузчике датчик не остался. Похоже, что дело тут всё таки в bootloader’е. Ну и ладно, адрес/скорость с рабочей-то прошивкой я уже умею восстанавливать… :slight_smile:

Отнёс на своё место на тестовый контроллер с рабочей прошивкой, нужным адресом и скоростью 115200. Он пару раз мигнул загрузчиком и весело замигал от быстрого модбаса (так-то он раз в минуту там опрашивается). Напряжение на клеммах питания у него там, кстати, 13,3В.

4275822079, сигнатура msv2-4.0

Что-то не хочется мне на другом тестовом контроллере запускать wb-mcu-fw-updater update-all, там не получится так легко эти датчики снять и отнести на оживление. Но что версия 4.31.10 для них глючная — 100%. И, что самое обидное, в списке изменений сказано, что никаких изменений для этого устройства! :slight_smile:

Может быть, отзовёте или новую поправленную выпустите? Если, конечно, подтвердите, что это не только с моим экземпляром так.

И да, посмотрите, почему после сброса UART устройство не остаётся в режиме bootloader’а. А то не знай я про чит с +5В, я бы и не смог перепрошить такой кирпич.

Ну скорее тут я бы предложила перезагрузить по питанию и в первые две секунды, пока он в загрузчике, выполнить команду. Как вы выше писали, он как и полагается входит в режим загрузчика в первые две секунды.

Также можно перевести в загрузчик вручную.

Чит с 5В - это недокументированное поведение с непредсказуемым результатом.

Можете обновлять устройства по отдельности, а не все, что есть на шине.

Также в случае чего, оживлять в первые две секунды после перезагрузки по питанию.

Ещё, если важно снизить вероятность неожиданного поведения системы, возможно, имеет смысл перейти на stable-релиз.

Большое спасибо за обратную связь! Будем исследовать и при подтверждении проблемы исправлять.

Спасибо. Посмотрим.