
Сообщение от
Vitorgan
petera, спасибо большое, примерно так сейчас и сделано. Думал можно решить до захода в скаду или плк, на уровне настройки конфигуратора мв110. Единственное что в вашем и моем исполнение не нравится, это то что статус дает динамизацию на мнемосхеме, что то типа мигания значения, когда с датчиком не лады. Понимаю что это все обходится программно ( например не определять, пока не прогреется), просто левой пяткой правое ухо... А за помощь всем спасибо.
Тогда попробуйте вариант
Код:
FUNCTION_BLOCK DECODE_Err
VAR_INPUT
iRD: INT; (*Датчик*)
SRD: WORD;
END_VAR
VAR_OUTPUT
Rezultat: INT; (*Результат*)
Cod_Err: BYTE; (*Код ошибки измерения*)
Err: BOOL; (*Наличие ошибки измерения*)
END_VAR
VAR
TMP: INT; (*Значение до ошибки*)
END_VAR
IF SRD <>0 THEN
Err:=TRUE; (*Установить ошибку измерений*)
CASE SRD OF
16#F000: Cod_Err:=1; (*Результаты измерения не верны*)
16#F006: Cod_Err:=2; (*Данные не готовы*)
16#F007: Cod_Err:=3; (*Датчик отключен*)
16#F00A: Cod_Err:=4; (*Измеренное значение слишком велико*)
16#F00B: Cod_Err:=5; (*Измеренное значение слишком мало*)
16#F00D: Cod_Err:=6; (*Обрыв датчика*)
16#F00F: Cod_Err:=7; (*Некорректный калибровочный коэффициент *)
END_CASE
ELSE
Err:=FALSE;
Cod_Err:=0; (*Нет ошибок измерений*)
END_IF
IF NOT (iRD<0 OR Err) THEN TMP:=iRD;
END_IF
Rezultat:=TMP;
в момент ошибки измерения выход Rezultat имеет последнее правильное(достоверное) значение, а не фиксированное =0. Т.е. ФБ замораживает последнее достоверное значение.
Это позволяет игнорировать одиночные ошибки измерения, не "мельтешить" цифрами на HMI и не бросать PID в крайние положения.
Ну а факт действительного отказа датчика можно сделать через разумную задержку сигнала "Err" с выхода данного ФБ и предпринять нужные действия (вкл. сигнализацию, перевести механизмы в безопасное состояние, и т.д.)
Аналогичный ФБ для аналогового входа ПЛК http://www.owen.ru/forum/showthread....l=1#post183061