WB8, wb-2606, ядро 6.8.0-wb161 — периодические ошибки CRC и размера ответа на RS485-2

Здравствуйте!

Наблюдаю периодические ошибки обмена с модулями Wiren Board на RS485-2. Пока заметны только предупреждения в журнале — явных сбоев или задержек управления не обнаружил. Вероятно, ошибки были с запуска системы, но ранее журнал не проверял.

Версии ПО

  • Контроллер: Wiren Board 8.
  • Релиз: wb-2606, stable, wb8/bullseye.
  • Ядро: 6.8.0-wb161 #1 SMP Wed Aug 12 12:43:50 UTC 2026 aarch64.
  • wb-mqtt-serial: 2.248.1-wb107.

Подключение и настройки

  • Проблемный порт: /dev/ttyRS485-2, 115200, 8N2.
  • Длина шины — до 1,5 м, питание от одного БП.
  • Кабель — неэкранированная витая пара; A и B идут жилами одной пары.
  • Контроллер находится на конце шины, встроенный терминатор включён. На другом конце также установлен терминатор.
  • На порту настроены только модули WB: 2 × WB-MWAC, 11 × WB-MCM8, 5 × WB-MR6CU, 4 × WB-MDM3.
  • Снижение скорости до 57600 проблему не устранило; в текущей конфигурации снова 115200.

Ошибки

В журнале встречаются invalid crc, invalid data size и request timed out. Ошибки затрагивают разные модели и адреса, в частности:

  • WB-MWAC — 105 и 193;

  • WB-MCM8 — 80;

  • WB-MR6CU — 111, 127, 180, 191;

  • WB-MDM3 — 109, 121, 156, 196.

В теме «Ошибка invalid crc модуля WB-MCM8» обсуждалась аналогичная проблема на таком же ядре. Поддержка сообщала о неисправленном баге «Ошибки invalid crc на 115200» и планируемых изменениях в ядре 6.15.

Прошу уточнить:

  1. Похож ли мой случай на этот известный баг или по диагностике видна другая причина?
  2. Доступно ли уже исправление и какое обновление рекомендуется для моей системы?
  3. Нужны ли дополнительные проверки для выяснения причин invalid data size и таймаутов?

Диагностический лог прилагаю.

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

  1. Похоже на ERRWB84009 «Нестабильная работа портов RS-485» ( https://wiki.wirenboard.com/wiki/WB_8:\_Errata ) — баг во всех WB8. Ошибки у вас идут сразу по 12 из 21 устройства, разных моделей — не похоже на локальную проблему монтажа. В среднем одна ошибка раз в 5 минут.
  2. Исправления пока нет — «запланировано в ближайших обновлениях». Релиз и ядро у вас уже последние стабильные.

Тест на 57600 в логе виден лишь ~1,5 мин с перезапусками службы. Вспомните, пожалуйста, поведение было такое же, и частота ошибок совпадала?

Уточните: какой резистор стоит на дальнем конце шины (номинал, именно между A и B на последнем устройстве)?

Длительно не тестировал на этой скорости - убедился, что ошибки повторились и перешел назад на 115200. Поэтому не могу охарактеризовать их частоту. Если нужно - могу более длительно подержать эту скорость для статистики.

В конце линии: витая пара A и В длинной 5 см от последнего устройства выходит на двойную клемму, с обратной стороны которой резистор 120 Ом 5%.

Я не вижу каких-либо потенциальных проблем в монтаже, шине и т.д. Полагаю это то, что описано в ERRATA (см. выше). Поскольку частота ошибок у вас крайне малая, описанная ситуация на работоспособность не влияет, поэтому я предлагаю дождаться фикса.

Принято. Жду фикса. Спасибо!

Здравствуйте!

Прошу уточнить, есть ли сроки решения ERRWB84009 ?

На данный момент запустил несколько правил, которые в том числе обрабатывают метаданные “/meta/error” для контроля за состоянием выходных реле модулей.
Теперь при ошибках вида “WARNING: [modbus] failed to read 1 coil(s) @ 0 of device modbus:191: Serial protocol error: request timed out”
Правила выполняют защитные выключения выходов, что корректно с точки зрения логики, но приводит к частым отключениям из-за фактического наличия таких ошибок. Т.е. я пришел к ситуации, когда уже нельзя утверждать, что наличие ошибок связи не влияет на работоспособность.

Пока я предполагаю ввести в правила более стойкий алгоритм обработки ошибок (для выключения при устойчивой потере связи) или отказаться от такого контроля вообще, но лучшим решением конечно выглядит стабильность обмена данными. Если бы не предположение о ERRWB84009, то я бы начал смотреть физику, хотя имея опыт работы с RS485 в промке - я не вижу за что можно зацепиться. Несколько модулей рядом в одном шкафу, частотников и контакторов рядом нет, условия “кукольные”.

Здравствуйте! Да, нехорошо получается, ошибки связи влияют на работу системы. Исправление в штатных обновлениях пока не вышло. У меня была святая уверенность, что ваш случай полностью подпадает под эррату, но появилось еще одно предположение. Для этого потребуется ваша небольшая помощь.

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

Через 15–20 минут отключите отладку, сохраните настройки и сразу соберите диагностический архив. Пришлите его, пожалуйста, для проверки обмена.

Добрый день.

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

Спасибо за архив. Извините, я не учёл ограничение диагностики: при включённой отладке в архив попали лишь последние несколько секунд обмена, без ошибок.

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

journalctl -u wb-mqtt-serial.service \
  --since "2026-10-08 14:00:00" \
  --until "2026-10-08 14:27:10" \
  -o short-precise > /mnt/data/serial-debug.log

Пришлите файл /mnt/data/serial-debug.log. Повторно включать отладку не нужно — сначала проверим, сохранилась ли предыдущая запись.

serial-debug.7z (6,7 МБ)
Довольно объемный получился. Сжал его.

Добрый день.

Мы подозреваем, что ошибки связаны с тем, что все прерывания порта RS485-2 обрабатывает одно ядро процессора (CPU0), и при его занятости контроллер иногда не успевает вовремя переключить порт на приём. Чтобы проверить, перенесите это прерывание на другое ядро и сравните число ошибок:

  1. Запомните текущее значение:

    cat /proc/irq/286/smp_affinity
    
  2. Посчитайте ошибки за последний час:

    journalctl -u wb-mqtt-serial --since "1 hour ago" | grep -c "failed to read"
    
  3. Перенесите прерывание на другое ядро. Если в п. 1 значение 1 или f, выполните:

    echo 2 > /proc/irq/286/smp_affinity
    

    Если в п. 1 значение 2, то вместо этого выполните echo 4 > /proc/irq/286/smp_affinity и сообщите нам об этом. Если команда выдаёт ошибку, пришлите её текст.

  4. Через 1–2 часа повторите команду из п. 2 и напишите нам оба числа.

  5. Верните значение из п. 1 командой echo <значение> > /proc/irq/286/smp_affinity (или перезагрузите контроллер, настройка сбрасывается).

Добрый день!

Принято, вернусь с информацией.

root@wirenboard-ADOIYRG7:~# cat /proc/irq/286/smp_affinity
f
root@wirenboard-ADOIYRG7:~# journalctl -u wb-mqtt-serial --since “1 hour ago” | grep -c “failed to read”
18
root@wirenboard-ADOIYRG7:~# echo 2 > /proc/irq/286/smp_affinity
root@wirenboard-ADOIYRG7:~#

На первый взгляд, выглядит, что не помогло.

root@wirenboard-ADOIYRG7:~# journalctl -u wb-mqtt-serial --since “1 hour ago” | grep -c “failed to read”
17
root@wirenboard-ADOIYRG7:~# echo f > /proc/irq/286/smp_affinity
root@wirenboard-ADOIYRG7:~#

Предлагаем снизить скорость порта RS485-2 с 115200 до 57600: в вашем журнале за 12–13.09, когда порт работал на 57600, было около 4 ошибок в час против 15 на 115200. Полностью ошибки не исчезнут, но станут заметно реже.

Порядок такой же, как в инструкции по изменению скорости обмена, только вместо 115200 выбираете 57600:

  1. Откройте Настройки → Конфигурационные файлы → Конфигурация драйвера Serial-устройств, выберите порт RS485-2.
  2. У каждого из 21 устройства в группе General отметьте Baud rate и выберите 57600. Скорость порта пока не меняйте.
  3. Нажмите «Сохранить» и подождите 2–3 минуты, пока устройства перестанут отвечать (на вкладке «Устройства» их каналы станут красными). Это значит, что новая скорость записана.
  4. Выставьте скорость порта 57600 и снова сохраните. Устройства должны начать отвечать.

Через сутки напишите, пожалуйста, сколько ошибок накопилось:

journalctl -u wb-mqtt-serial --since "1 day ago" | grep -c "failed to read"

Здравствуйте!

Переключил скорость, прошли сутки:

root@wirenboard-ADOIYRG7:~# journalctl -u wb-mqtt-serial --since “1 day ago” | grep -c “failed to read”
151
root@wirenboard-ADOIYRG7:~#

Добрый день.

Спасибо за замер. На 57600 ошибок стало примерно в 2 раза меньше (около 6 в час против 15 на 115200).

Чтобы понять, равномерно ли ошибки распределены по всем устройствам или сосредоточены на нескольких адресах, выполните, пожалуйста, на контроллере и пришлите вывод:

journalctl -u wb-mqtt-serial --since "1 day ago" | grep "failed to read" | grep -o "device [^:]*:[0-9]*" | sort | uniq -c | sort -rn

До выяснения оставьте 57600 и поправьте свои правила: выключайте выходы, только если /meta/error держится дольше 10–15 секунд подряд. Единичная ошибка снимается следующим опросом и не означает потерю связи.

root@wirenboard-ADOIYRG7:~# journalctl -u wb-mqtt-serial --since “1 day ago” | grep “failed to read” | grep -o “device [^:]:[0-9]” | sort | uniq -c | sort -rn
51 device modbus-tcp:1
14 device modbus:80
14 device modbus:193
13 device modbus:96
11 device modbus:105
8 device modbus:121
5 device modbus:156
5 device modbus:109
4 device modbus:196
3 device modbus:174
3 device modbus:111
2 device modbus:191
2 device modbus:180
1 device modbus:127

Ок, это выход в текущей ситуации. Для понимания дальнейших перспектив, я выше спрашивал, вы не ответили - есть ли сроки решения ERRWB84009?

Точного срока исправления пока нет: в описании ошибки указано «в ближайших обновлениях». Сейчас в репозитории у всех релизов ядро 6.8.0-wb161, новое не опубликовано.

Заметил важную деталь: 51 из ваших ошибок приходится на DALI-шлюз modbus-tcp:1 (по Ethernet), это другая проблема. Пришлите, пожалуйста, несколько таких строк с метками времени, чтобы понять тип сбоя:

journalctl -u wb-mqtt-serial --since "1 day ago" -o short-precise | grep "failed to read" | grep "modbus-tcp" | tail -20

root@wirenboard-ADOIYRG7:~# journalctl -u wb-mqtt-serial --since “1 day ago” -o short-precise | grep “failed to read” | grep “modbus-tcp” | tail -20
Oct 11 20:21:34.701406 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:35.354466 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:36.213467 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:36.465146 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:37.212036 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:38.441905 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:38.701700 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:39.384906 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:39.625314 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:40.217602 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:41.210894 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:41.441876 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:42.190163 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:42.445154 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:42.691474 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:43.361109 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:43.625027 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:44.221850 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:44.461710 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed
Oct 11 20:21:45.232539 wirenboard-ADOIYRG7 wb-mqtt-serial[3896719]: WARNING: [modbus] failed to read 1 holding(s) @ 1 of device modbus-tcp:1: Serial protocol error: socket closed

Это Arlight DALI-LOGIC-LITE-PS-X1 - был уже добавлен позже, после первичного обращения по проблеме

Я гляжу - все ошибки в одно время, я вчера вечером подключал еще один DALI светильник, это по-всей видимости и объясняет эти записи, сохранял настройки в драйвере (активировал управление этим светильником)