Цитата Сообщение от vasylye Посмотреть сообщение
Если, к примеру, одно из устройств перестанет отвечать, как обнаружить, с которым из них произошел сбой связи? Ведь если следующее ответит, то переменная Last Error установится в ноль.
я сделал например вот так. но еще не тестил на стенде. Если найдете ошибку - поправьте.

IF LAST485ADR=12 AND LAST485ERR=81 THEN TIMER_MZD2(IN:=TRUE, PT:=T#1500ms);
ELSE MZD2_CON_ERR:=FALSE;
END_IF;
TIMER_MZD2();
MZD2_CON_ERR:=TIMER_MZD2.Q;

псевдокод: если последний адрес и последний код ошибки равны соответственно 12(адрес вашего устройства) и 81(код ошибки "нет связи"), то запустить таймер TON. Если по прошествии заданного времени PT условие продолжает фиксировать "LAST485ADR=12 AND LAST485ERR=81" То таймер дойдет до конца, выставит выход в true и переменной отвечающей за ошибку связи вашего модуля установится выходное значение таймера. В противном случае (если фиксируется сочитание отличное от заданного условия) переменная ошибки выставляется в FALSE. получается что у вас ничего не затирается и ошибка если есть пишется в спец.переменную