WB7. "Странно" работает одна из линий ModBus

Проблема в каком-то виде воспроизводится уже месяц (с момента перехода на WB7, но справедливости ради стоит допустить, что в момент переключения что-то с линией произошло.).

Итого, есть линия modbus, на которой подключены последовательно:

  • Стороннее modbus-устройство
  • WB-MIR v2 (первый)
  • WB-MIR v2 (второй)
    Линия отличается тем, что у неё stop-bits=1 (для работы стороннего устройства). У WB-MIR конфиг под это тоже поправлен.

Какие “странности” встречаются:

У стороннего устройства. периодически не читаются какие-то значения (в интерфейсе красным отмечается)
Ниже всё скриншоты с разницей в пару секунд. В настройках на всех каналах read period выставлен в 5000.
изображение
изображение
изображение

В логах:

12-08-2022 09:15:20.282 	WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus:3: Serial protocol error: malformed response: invalid crc

Стороннее устройство в какой-то момент вообще полностью отваливается
Все каналы становятся красными, лечится только перезагрузкой wb-mqtt-serial. Повторяется не быстро, но по ощущению только через пару дней работы.

У WB-MIR v2 перестали читаться каналы с ROM size
Это появилось, если не ошибаюсь, только сегодня.
изображение
В логах куча

|12-08-2022 09:15:21.056 |WARNING: [modbus] failed to read 10 input(s) @ 5400 of device modbus:23: Serial protocol error: request timed out|
|---|---|
|12-08-2022 09:15:20.799 |WARNING: [modbus] failed to read 10 input(s) @ 5400 of device modbus:235: Serial protocol error: request timed out|

Спустя где-то час работы оно скорее похоже на новогоднюю ёлку - периодически мигают то чёрным, то красным.

При всём при этом, значения температуры из этих WB-MIR читаются постоянно и без проблем (и значения меняются) из чего делаю вывод, что в принципе-то с линией всё ок и проблема в чём-то другом:

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

Для начала нужно проверить физическое подключение шины RS-485: нет ли обрывов проводов или замыканий между ними, включен ли терминатор на конце: RS-485:Физическое подключение — Wiren Board
Проверьте работу каждого из устройства по отдельности, когда остальные отключены. Есть ли ошибки?
Также попробуйте для проблемного порта задать время ожидания ответа, например, 1000 мс, и задержку перед записью в порт 5000 мс:

1 лайк

Пока попробовал сделать это. WB-MIR v2 отваливаться перестали.
И стороннее вроде как тоже, но при всё при этом всё ещё вижу странное поведение.

Если читаю (в районе 14:00МСК ) регистр через утилиту, получаю значение:

root@wirenboard-AXEZ4M3D:~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-2 -a3 -t0x04 -r258
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 1)
[03][04][01][02][00][01][90][14]
Waiting for a confirmation...
<03><04><02><01><09><01><66>
SUCCESS: read 1 of elements:
        Data: 0x0109

Если правильно пользуюсь конвертером 0x0109 = 265. По инструкции число с разделителем, т.е. должно быть 26,5 градусов.

Обратно запускаю сервис. Смотрю в историю:

Т.е. с 12:11МСК новых значений не видит. Настройки вроде как совпадают с тем, что делаю через консоль:


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

При всём при этом из соседних продолжает читать нормально:

diag_output_AXEZ4M3D_2022-08-12-11.22.36.zip (74.4 КБ)

В продолжение, ещё 3 раза считался и опять уже 45 минут пустота:

А как настроено чтение канала в wb-mqtt-serial?

Не “считался” а попал в базу, как изменившийся.
Значения в базу пишутся не постоянно а в соответствии с ее (wb-mqtt-db) настройками.

Из карты регистров WB-MIR (Карта регистров WB-MIR v2 — Wiren Board):

250-265	0x00FA - 0x0109	Input	RO	string	Версия прошивки

Регистр 258 (input) - это символы версии прошивки. Какую температуру вы хотите считать?
Если значение в регистре не изменяется, то публиковаться по mqtt оно не будет, также не будет записываться в базу данных.

А как настроено чтение канала в wb-mqtt-serial?

Не “считался” а попал в базу, как изменившийся.
Значения в базу пишутся не постоянно а в соответствии с ее (wb-mqtt-db) настройками.

Обратите внимание на скриншоты во втором сообщении. В истории последнее значение (25,8) отличалось от того, что запрашивал через утилиту (26,5).
Сейчас попробовал воспроизвести - пока совпадает и не понятно, работает ли корректно или просто пока повезло.

Регистр 258 (input) - это символы версии прошивки. Какую температуру вы хотите считать?

И стороннее вроде как тоже, но при всё при этом всё ещё вижу странное поведение

Сорри, если плохо сформулировал. Я читаю НЕ из WB-MIR, а из другого стороннего устройства, висящего на той же линии.

Оживлю эту тему. Прошёл месяц, нарабатывал какую-то статистику.
В итоге вижу всю ту же картину, что и в прошлый раз. С течением времени у одного из устройств всё больше и больше адресов перестают в принципе читаться WB, становятся красными.
Собственно на текущий момент, из 6 - “живых” осталось всего 2:

У остальных устройств на этой линии всё ок.

При этом, даже при включенном wb-mqtt-serial, modbus-client данные из этих регистров читает вполне успешно.

А в логе wb-mqtt-serial что?

Если через веб-интерфейс смотреть, за всё время - только 2 ошибки про invalid CRC (адрес - как раз это устройство);


08-09-2022 17:28:41.639 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: malformed response: invalid crc
07-09-2022 07:39:34.727 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: malformed response: invalid crc

Тем не менее, на WB6 подобные ошибки периодически возникали в каком-то виде по разным устройствам с периодичностью раз в пару недель, т.е. всего 2 строчки не выглядят сильно страшными

Полу-оффтопик, в var/log/messages миллионами ошибки вида

Sep  8 14:58:11 wirenboard-AXEZ4M3D NetworkManager[876]: <info>  [1662649091.8918] device (wlan1): supplicant interface state: disabled -> inactive
Sep  8 14:58:12 wirenboard-AXEZ4M3D NetworkManager[876]: <warn>  [1662649092.2511] device (wlan1): set-hw-addr: new MAC address C6:E5:F5:E9:05:5D not successfully set (scanning)
Sep  8 14:58:12 wirenboard-AXEZ4M3D NetworkManager[876]: <info>  [1662649092.2603] device (wlan1): supplicant interface state: inactive -> disabled

что, возможно, вытесняет все другие записи в логе - по F7 не ищутся другие вхождения (по вашей инструкции отключал wifi - видимо последствия этого) Нет способа избавиться?

Обновите контроллер пожалуйста. Посмотрим, воспроизведется ли на новом wb-mqtt-serial

Обновил.

изменения пакетов для истории

libwbmqtt1-3/stable 3.8.1 armhf [upgradable from: 3.7.2]
linux-image-wb7/stable 5.10.35-wb120 armhf [upgradable from: 5.10.35-wb114]
linux-libc-dev/stable 5.10.35-wb120 armhf [upgradable from: 5.10.35-wb111]
python3-wb-diag-collect/stable 1.3.0 all [upgradable from: 1.2.0]
python3-wb-mcu-fw-updater/stable 1.5.1 all [upgradable from: 1.3.2]
u-boot-tools-wb/stable 2:2021.10+wb1.4.1 armhf [upgradable from: 2:2021.10+wb1.1.1]
u-boot-wb7/stable 2:2021.10+wb1.4.1 armhf [upgradable from: 2:2021.10+wb1.1.1]
wb-diag-collect/stable 1.3.0 all [upgradable from: 1.2.0]
wb-essential/stable 1.10.0 all [upgradable from: 1.9.0]
wb-hwconf-manager/stable 1.52.7 all [upgradable from: 1.50.0]
wb-mcu-fw-flasher/stable 1.1.0 armhf [upgradable from: 1.0.8]
wb-mcu-fw-updater/stable 1.5.1 all [upgradable from: 1.3.2]
wb-mqtt-adc/stable 2.5.0 armhf [upgradable from: 2.4.3]
wb-mqtt-confed/stable 1.8.1 armhf [upgradable from: 1.8.0]
wb-mqtt-dac/stable 1.2.0 all [upgradable from: 1.1.6]
wb-mqtt-db/stable 2.5.5 armhf [upgradable from: 2.5.3]
wb-mqtt-gpio/stable 2.8.4 armhf [upgradable from: 2.8.3]
wb-mqtt-homeui/stable 2.44.4 all [upgradable from: 2.35.1-wb1]
wb-mqtt-knx/stable 1.9.0 armhf [upgradable from: 1.5.0]
wb-mqtt-logs/stable 1.3.0-wb100 armhf [upgradable from: 1.2.0]
wb-mqtt-serial/stable 2.68.6-wb105 armhf [upgradable from: 2.59.2-wb2]
wb-mqtt-w1/stable 2.2.2 armhf [upgradable from: 2.2.1]
wb-release-info/stable 1.0-stable~wb7+stretch~20220909045255 all [upgradable from: 1.0-stable~wb7+stretch~20220712142907]
wb-rules/stable 2.11.4 armhf [upgradable from: 2.11.3]
wb-rules-system/stable 1.8.1 all [upgradable from: 1.8.0]
wb-suite/stable 1.11.0 all [upgradable from: 1.9.0]
wb-test-suite-deps/stable 1.12.0 all [upgradable from: 1.9.0]
wb-utils/stable 3.7.0 all [upgradable from: 3.5.1]

Пока полёт нормальный, в логах за это время 4 ошибки было (разные линии):

09-09-2022 12:46:24.016 	WARNING: [modbus] failed to read 1 holding_single(s) @ 2 of device modbus:3: Serial protocol error: malformed response: invalid data size
09-09-2022 11:36:55.941 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
09-09-2022 11:36:55.932 	WARNING: [modbus] failed to read 6 discrete(s) @ 0 of device modbus:97: Serial protocol error: malformed response: invalid crc
09-09-2022 10:20:17.408 	WARNING: [modbus] failed to read 6 coil(s) @ 0 of device modbus:26: Serial protocol error: malformed response: invalid crc

Никакие регистры с концами не отваливаются. Буду дальше наблюдать.

Одна-две ошибки в минуту - вполне допустимы, у вас их, ошибок пренебрежимо мало.

Кажется, что наблюдается примерно то же поведение. Отвалился первый регистр:

Modbus_client данные успешно читает:

root@wirenboard-AXEZ4M3D:~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-2 -a3 -t0x03 -r1
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 1)
[03][03][00][01][00][01][D4][28]
Waiting for a confirmation...
<03><03><02><00><01><00><44>
SUCCESS: read 1 of elements:
        Data: 0x0001
Логи
11-09-2022 05:10:49.329 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 03:23:43.623 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: request timed out
11-09-2022 01:18:23.809 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: request timed out
10-09-2022 21:06:25.016 	WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus:3: Serial protocol error: illegal data value
10-09-2022 20:56:12.389 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 20:38:23.346 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 19:41:25.722 	WARNING: [modbus] failed to read 1 holding_single(s) @ 2 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 15:26:15.869 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 14:22:53.846 	WARNING: [modbus] failed to read 1 holding_single(s) @ 2 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 11:15:30.217 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 08:27:55.756 	WARNING: [modbus] failed to read 1 holding(s) @ 4 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 07:38:10.651 	WARNING: [modbus] failed to read 1 holding_single(s) @ 2 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 07:09:32.797 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 01:58:01.431 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 01:57:01.370 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
09-09-2022 23:59:42.048 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
09-09-2022 23:02:20.401 	WARNING: [modbus] failed to read 1 holding_single(s) @ 2 of device modbus:3: Serial protocol error: malformed response: invalid crc
09-09-2022 21:06:56.262 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: request timed out
09-09-2022 20:06:21.418 	WARNING: [modbus] failed to read 1 holding(s) @ 4 of device modbus:3: Serial protocol error: malformed response: invalid crc

По логам предположил бы, что чтение прекращается после первой ошибки “illegal data value” просто потому что по остальным регистрам ошибки другие и они продолжают читаться, а по этому (1) была только одна такя ошибка и всё, больше читать не пытается.

Так, то есть после первой же “illegal data value”
просто больше нет обращений? Попробую воспроизвести, для этого соберу стенд с эмулятором.

Я бы сказал, что это гипотеза на основе наблюдения и она подтверждается.

Отвалился второй регистр:

Логи
12-09-2022 07:51:12.184 	WARNING: [modbus] failed to read 1 holding(s) @ 4 of device modbus:3: Serial protocol error: request timed out
12-09-2022 07:34:34.083 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: malformed response: invalid crc
12-09-2022 07:17:02.989 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: malformed response: invalid crc
12-09-2022 05:58:10.137 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
12-09-2022 05:45:03.251 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
12-09-2022 04:11:57.511 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: malformed response: invalid crc
12-09-2022 02:05:43.564 	WARNING: [modbus] failed to read 1 holding(s) @ 4 of device modbus:3: Serial protocol error: malformed response: invalid crc
12-09-2022 00:36:19.988 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
12-09-2022 00:32:12.752 	WARNING: [modbus] failed to read 1 input(s) @ 32 of device modbus:182: Serial protocol error: request timed out
12-09-2022 00:24:49.337 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 22:17:35.396 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 22:17:05.365 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 20:23:34.277 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 19:51:02.166 	WARNING: [modbus] failed to read 1 holding_single(s) @ 2 of device modbus:3: Serial protocol error: illegal data value
11-09-2022 19:47:01.994 	WARNING: [modbus] failed to read 1 holding_single(s) @ 2 of device modbus:3: Serial protocol error: malformed response: invalid data size
11-09-2022 18:21:33.652 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: request timed out
11-09-2022 17:49:18.645 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 16:48:20.840 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 15:49:54.185 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: request timed out
11-09-2022 14:26:54.012 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 14:15:54.319 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: request timed out
11-09-2022 14:11:28.982 	WARNING: [modbus] failed to read 1 holding_single(s) @ 2 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 05:10:49.329 	WARNING: [modbus] failed to read 1 input(s) @ 257 of device modbus:3: Serial protocol error: malformed response: invalid crc
11-09-2022 03:23:43.623 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: request timed out
11-09-2022 01:18:23.809 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: request timed out
10-09-2022 21:06:25.016 	WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus:3: Serial protocol error: illegal data value
10-09-2022 20:56:12.389 	WARNING: [modbus] failed to read 1 input(s) @ 258 of device modbus:3: Serial protocol error: malformed response: invalid crc
10-09-2022 20:38:23.346 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: malformed response: invalid crc

Внимание на строчку

11-09-2022 19:51:02.166 	WARNING: [modbus] failed to read 1 holding_single(s) @ 2 of device modbus:3: Serial protocol error: illegal data value

Адрес “2” как раз соответствует новому отвалившемуся регистру:

Так. Вообще поведение правильное, сделано специально для того чтобы не опрашивать несуществующие (отсутствующие) регистры. Но почему возвращается (именно корректный ответ) периодически от устройства - непонятно. У устройства в документации нет ли для некоторых регистров такого поведения?

В документации, увы, подобного нет.

Про несуществующие/отсутствующие - опасение понятное, но как будто немного странно, что пользователь настроил считывание, значит скорее всего регистр есть. Почему нельзя сделать по аналогии с другими кодами ошибок?

И ещё один отвалился по той же логике:
изображение

12-09-2022 18:46:58.017 	WARNING: [modbus] failed to read 1 holding_single(s) @ 3 of device modbus:3: Serial protocol error: illegal data value

Из интересного - в отличие от старой версии (см. скрины из первого сообщения), теперь отключение происходит строго последовательно, т.е. предположу, что именно первый опрос устройства приводит к такому состоянию.

Создал багрепорт.

1 лайк