На счет ссылок не скажу, не знаю. Попробуйте расширенный поиск http://www.owen.ru/forum/search.php?searchid=13322
Если ошибка "проскакивает" кратковременно и случайным образом, то может сделать так?
Я вместо DECODE_FLOAT использую собственный ФБ аналогичного назначения
Отличия от DECODE_FLOATКод:FUNCTION_BLOCK DECODE_AI VAR_INPUT ai: REAL; (*Датчик*) END_VAR VAR_OUTPUT Rezultat: REAL; (*Результат*) Cod_Err: BYTE; (*Код ошибки измерения*) Err: BOOL; (*Наличее ошибки измерения*) END_VAR VAR pt:POINTER TO DWORD; bar:BYTE; TMP:REAL; (*Значение до ошибки*) END_VAR Err:=TRUE; (*Установить ошибку измерений*) pt:=ADR(ai); bar:=DWORD_TO_BYTE(SHR(pt^,24)); CASE bar OF 16#F1: Cod_Err:=bar-240; (*1 Результаты измерения не верны*) 16#F6: Cod_Err:=bar-240; (*6 Результаты измерения не готовы*) 16#F7: Cod_Err:=bar-240; (*7 Канал отключен в конфигурации*) 16#F8: Cod_Err:=bar-240; (*8 *) 16#F9: Cod_Err:=bar-240; (*9 *) 16#FA: Cod_Err:=bar-240; (*10 Сигнал на входе больше возможного*) 16#FB: Cod_Err:=bar-240; (*11 Сигнал на входе меньше возможного*) 16#FC: Cod_Err:=bar-240; (*12 Перегрузка в канале измерения тока*) 16#FD: Cod_Err:=bar-240; (*13 Обрыв датчика*) 16#FE: Cod_Err:=bar-240; (*14 *) 16#FF: Cod_Err:=bar-240; (*15 *) ELSE Err:=FALSE; Cod_Err:=0; (*Нет ошибок измерений*) END_CASE IF NOT Err THEN TMP:=ai; END_IF Rezultat:=TMP;
- работает в эмуляции;
- в момент ошибки измерения на выходе имеет последнее правильное значение, а не фиксированное значение.
Последнее отличие позволяет игнорировать одиночные ошибки измерения, не "мельтешить" цифрами на HMI и не бросать PID в крайние положения. Ну а факт действительного отказа можно сделать через разумную задержку сигнала "Err" на выходе данного ФБ.




Ответить с цитированием