У меня есть устройство, которое часто отвечает кодом ошибки busy - для него это нормальное состояние, надо просто переспросить позже. Я поигрался с device_timeout_ms и device_max_fail_cycles - но busy сыплется часто, и драйвер это устройство достаточно быстро отключает и не опрашивает. Как заставить драйвер нормально работать с устройством?
Думаю, что заставить нельзя, потому что особой обработки busy у нас нет. Можно только принудительно уменьшать периодичность опроса (poll_interval), если это как-то влияет. А что это за устройство, если не секрет?
Вообще по стандарту 0x06 SLAVE DEVICE BUSY можно использвать только с некими long-duration program command. Стандарт в детали не вдаётся, но я так понимаю, что program command это что-то одноразовое или редкое, и вряд ли может относится к регистру, который надо постоянно читать.
С2000-ПП от БОЛИД. Это простенькая коробочка, которая опрашивает устройства БОЛИД, и отвечает на Modbus запросы о состоянии этих устройств. Я так понимаю, что пока она общается с устройствами БОЛИД, она и выдает Busy. В документации написано про код ошибки 6: “Ведомый занят обработкой команды. Запрос необходимо повторить позже, когда ведомый освободится”. Пор факту получается, что busy сыплются очень часто, и это нормально. poll_interval увеличивал - но это давало только то, что устройство драйвер отключал позже.