Ошибки чтения modbus - Serial protocol error (invalid crc, request timed out)

Здравствуйте! У меня собран тестовый стенд на 23 modbus устройства, регулярно идут ошибки только по одному блоку - WB-MAP3E (подключен в середине шины). Общая длина шины 5 метров, на уровне подключения всё проверено.

[wb-mqtt-serial]|WARNING: [modbus] failed to read 56 input(s) @ 4608 of device modbus:94: Serial protocol error: malformed response: invalid crc
[wb-mqtt-serial]|WARNING: [modbus] failed to read 15 input(s) @ 5136 of device modbus:94: Serial protocol error: request timed out
[wb-mqtt-serial]|WARNING: [modbus] failed to read 2 input(s) @ 270 of device modbus:94: Serial protocol error: request timed out
[wb-mqtt-serial]|WARNING: [modbus] failed to read 4 input(s) @ 4284 of device modbus:94: Serial protocol error: malformed response: invalid crc

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

Да…похоже что-то с шиной - после отключения теперь на другом устройстве ошибки пошли :frowning_face::

wb-mqtt-serial[4952]: WARNING: [modbus] failed to read 1 coil(s) @ 0 of device modbus:46: Serial protocol error: request timed out

Целесообразно проверить физику, да.
Удобнее всего осциллографом, нагляднее. Но и мультиметром можно. Ну и в любом случае терминатор помогает диагностике отсутствия контакта.

Спасибо. Возможно есть какой-либо мануал по отладке физики? А то в этой части нет детального понимания… На вики видел статью по организации подключения (https://wirenboard.com/wiki/RS-485:_Wiring_and_Connection), но как отладить если вроде как всё сделано правильно?)

Пожалуй самое лучшее - это просто посмотреть на форму сигнала.

Но если невозможно - то для начала просто прозвонить шину, желательно отключенную от модулей из конца в конец.
Затем подключить один модуль - проверить, потом второй и так далее.
Ну и - одна две ошибки в минуту в принципе допустимы для длинной или имеющей десятки устройств шины.

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

Он есть, конечно. посмотрите “read_period_ms” в документации GitHub - wirenboard/wb-mqtt-serial: Wiren Board MQTT serial protocol driver

Судя по документации это гарантированный интервал чтения канала. Получается, например, что при read_period_ms=1000 каждую 1 секунду канал счетчика все равно будет иметь приоритет над каналом выключателя?

Да, верно. Но принцип немного другой, все каналы входов, например - имеют приоритет и гарантировано читаются. Каналам счетчика приоритет не выставляется совсем и они читаются “в свободное время”.