Ты показал код, которым ты отслеживаешь ошибку. Но не показал то, как ты модуль опрашиваешь и при помощи чего.
Вот тебе мои тезисы и идеи:
1. Если читать .8А групповыми запросами (когда читаешь сразу много-много регистров подряд, как я тут писал -
https://owen.ru/forum/showthread.php?t=35094) - иногда модуль отваливается с ошибкой. Так как читаю подряд - то на это пофиг, но сам факт - есть, да. И из-за него все обычные алгоритмы проверки на ошибки сразу и считают это потерей связи.
2. В своих алгоритмах обработки ошибок я написал мутную (но рабочую) конструкцию, которая проверяет СЕРИИ ошибок подряд. Точнее, отсуствие серий ошибок подряд в течение заданного времени.
Алгоритм там примерно такой, кривой:
а) По каждой ошибке запускаем таймер времени TOF, чтобы он считал заданную выдержку. Пусть будет зваться tError.
б) По его выходу запускаем таймер времени TON с выдержкой большей, чем у первого. Пусть будет зваться tSeries.
С выхода tSeries забираем сигнал "Авария" (если он включен) или "ОКей" (если выключен).
То есть, у меня тревога поднимается, условно "...если попёрли ошибки чаще чем tError в течение tSeries - тогда модуль отвалился".