Что делает PMP20, если ведомый не ответил на запрос Modbus?
Контроллер повторяет запрос дважды. Если и третья попытка не удалась, обмен завершается, признак занятости порта снимается, а причина остаётся в регистре результата — программа должна сама решить, что делать дальше.
Как это устроено:
- Команда обмена запускается по нарастающему фронту условия. Постоянно замкнутое условие не заставляет запрос повторяться — новый обмен начнётся только после нового фронта.
- При неудаче контроллер сам делает два повтора. Число повторов настраивается в блоке параметров порта в диапазоне 0…5, заводское поведение — два повтора.
- После третьей неудачной попытки обмен считается завершённым с ошибкой. Код причины лежит в регистре результата порта, признак занятости порта выключается.
Что из этого следует для программы. Опрос строят циклически: по признаку занятости порта видно, что предыдущий запрос закончился, и только тогда подаётся фронт на следующий. Без этого запросы накладываются друг на друга и обмен разваливается на первой же помехе.
Обработка отказов отдельная: одиночная ошибка на линии RS-485 в шкафу с преобразователями частоты — нормальное явление, поэтому аварию по связи выставляют не по первому сбою, а по счётчику подряд идущих неудач. Разумный порог — три-пять неуспешных циклов опроса подряд, после чего прибор помечается как недоступный, а его данные в логике замораживаются или считаются недостоверными.
Отдельно учитывайте тайм-аут ответа: он задаётся в параметрах порта, и при опросе медленных приборов слишком короткое значение даёт постоянные повторы там, где связь исправна.
Прикреплённая документация
Георгий Жуков
Ведущий инженер