Сообщение от
lpv22
странно... не реагирует никак ПЛК150 на обрыв датчика...
Вопрос актуален, подскажите, пожалуйста, как в программе правильно прописать код ошибки аналогового датчика (ПЛК150)?
Для датчика 4-20 мА, обрыв не покажет, а покажет "Сигнал на входе меньше возможного"
Я делаю так
Код:
FUNCTION_BLOCK DECODE_AI
VAR_INPUT
ai: REAL; (*Датчик*)
END_VAR
VAR_OUTPUT
Rezultat: REAL; (*Результат*)
Cod_Err: BYTE; (*Код ошибки измерения*)
END_VAR
VAR
pt:POINTER TO DWORD;
bar:BYTE;
END_VAR
Код:
pt:=ADR(ai);
bar:=DWORD_TO_BYTE(SHR(pt^,24));
CASE bar OF
16#F1: Cod_Err:=bar-240; Rezultat:=0; (*Результаты измерения не верны*)
16#F6: Cod_Err:=bar-240; Rezultat:=0; (*Результаты измерения не готовы*)
16#FA: Cod_Err:=bar-240; Rezultat:=20; (*Сигнал на входе больше возможного*)
16#FB: Cod_Err:=bar-240; Rezultat:=0; (*Сигнал на входе меньше возможного*)
16#FC: Cod_Err:=bar-240; Rezultat:=20; (*Перегрузка в канале измерения тока*)
16#FD: Cod_Err:=bar-240; Rezultat:=0; (*Обрыв датчика*)
ELSE
Cod_Err:=0; (*Нет ошибок измерений*)
Rezultat:=ai;
END_CASE
У меня в конфигурации аналоговых входах MinFV=4,00 MaxFV=20.00 Т.е так, как приходит с датчика. Масштабирование диапазона измерения в программе, а не в конфигурации.
Что бы показания на панели не мельтешили, сигнал с выхода этого функц.блока пропускаю через OSCATовскую функцию ROUND, оставляю например 2 знака после запятой.
Реально проверил только коды FA, FB, FC остальные отловить не удалось.
При обрыве датчика будет код FB. А код FD, похоже не для моего контроллера (ПЛК160)
Код ошибки у меня идет на панель для динамического текста и там дешифруется
Текст 1 - "Результаты измерения не верны"
Текст 6 - "Результаты измерения не готовы"
Текст 10 - "Сигнал на входе больше возможного"
Текст 11 - "Сигнал на входе меньше возможного"
Текст 12 - "Перегрузка в канале измерения тока"
Текст 13 - "Обрыв датчика"