Frame_timeout_ms?

Привет.
Есть глючное устройство. Если на шине один его экземпляр - опрашивается корректно и не жужжит. Если два - начинают возвращать таймауты и CRC ошибки. Долго колупался, пришел к выводу, что между опросами двух именно этих устройств надо делать минимум секундную паузу.
Вроде бы это параметр frame_timeout_ms в рыбе, но, если я делаю его 2000ms, то опрос (учитывая введенный ранее poll_interval также в 2с) занимает секунд 20.

Вопрос: frame_timeout_ms - это таймаут между чем и чем? Есть ли простой способ отделить опросы ВСЕХ устройств на шине поочередно паузами заданной длины?

Спасибо.

Здравствуйте!
При использовании протокола Modbus в новых версиях драйвера wb-mqtt-serial параметр frame_timeout_ms - это минимально необходимая задержка (пауза) между последним принятым ответом и отправкой первого запроса к каждому следующему устройству в цикле опроса. При этом между запросами к одному и тому же устройству пауз нет для уменьшения цикла опроса. Если они нужны для соблюдения требований стандарта Modbus RTU, то нужно использовать параметр guard_interval_us.

Картинка с алгоритмом работы есть здесь:
https://wirenboard.com/wiki/Wb-mqtt-serial_driver

Какая у вас версия драйвера wb-mqtt-serial? Как вы контролируете длительность цикла опроса?

Вероятно, в ранних версиях драйвера параметр frame_timeout_ms мог применяться перед отправкой каждого пакета данных, отсюда и такой большой цикл пороса.

1 лайк

Сделал апгрейд 2.7.1, в ней, похоже, интервалы просто складываются, порядок. При этом устройства ошибки валить перестали.
Остался пока теоретический вопрос: frame_timeout_ms в рыбе устройства - относится только к этому устройству, или данная задержка отмеряется перед каждым чтением шины.
И, да, почему он называется timeout, а не delay. )))

Параметр frame_timeout_ms в шаблоне устройства применяется только перед первым запросом к этому устройству.