Поправил скрипт, поправил неточности в библиотеке
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
(*
|
||||
===============================================================================
|
||||
Project : PLC_Library
|
||||
Device : -
|
||||
Path : Общие
|
||||
Name : STATUS_ANALOG_M_I
|
||||
Type : FUNCTION_BLOCK
|
||||
Exported : 2026-07-31 11:16:16
|
||||
===============================================================================
|
||||
*)
|
||||
|
||||
FUNCTION_BLOCK STATUS_ANALOG_M_I
|
||||
(*
|
||||
Модуль формирования статуса
|
||||
Гистерезис по отключению и задержка по включению, вход типа INT
|
||||
|
||||
-1 - нет связи с датчиком
|
||||
0 - не определено
|
||||
1 - норма
|
||||
2 - предупредительный по нижнему уровню
|
||||
3 - аварийный по нижнему уровню
|
||||
4 - предупредительный по верхнему уровню,
|
||||
5 - аварийный по верхнему уровню
|
||||
*)
|
||||
VAR_INPUT
|
||||
Input: INT;
|
||||
fail_hi: INT:=32767;
|
||||
delta_fail_hi: INT := 0;
|
||||
time_fail_hi: TIME :=t#0s;
|
||||
warn_hi: INT:=32767;
|
||||
delta_warn_hi: INT := 0;
|
||||
time_warn_hi: TIME :=t#0s;
|
||||
warn_low: INT:=-32768;
|
||||
delta_warn_low: INT := 0;
|
||||
time_warn_low: TIME :=t#0s;
|
||||
fail_low: INT:=-32768;
|
||||
delta_fail_low: INT := 0;
|
||||
time_fail_low: TIME :=t#0s;
|
||||
no_signal: INT:=-32768;
|
||||
delta_no_signal: INT := 0;
|
||||
time_no_signal: TIME :=T#0S;
|
||||
|
||||
In_fail_hi: BOOL := FALSE;
|
||||
In_warn_hi: BOOL := FALSE;
|
||||
In_warn_low: BOOL := FALSE;
|
||||
In_fail_low: BOOL := FALSE;
|
||||
In_no_signal: BOOL := FALSE;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
Status: AnalogValueState;
|
||||
END_VAR
|
||||
VAR
|
||||
(* !!! ВНУТРЕННИЕ ВЫХОДНЫЕ ПЕРЕМЕННЫЕ!!! *)
|
||||
fail_hi_st: BOOL;
|
||||
warn_hi_st: BOOL;
|
||||
normal_st: BOOL;
|
||||
warn_low_st: BOOL;
|
||||
fail_low_st: BOOL;
|
||||
no_signal_st: BOOL;
|
||||
|
||||
(* !!! ВНУТРЕННИЕ НЕВЫХОДНЫЕ ПЕРЕМЕННЫЕ!!! *)
|
||||
TON_fail_hi: TON;
|
||||
TON_warn_hi: TON;
|
||||
TON_warn_low: TON;
|
||||
TON_fail_low: TON;
|
||||
TON_no_signal: TON;
|
||||
END_VAR
|
||||
|
||||
(*----- IMPLEMENTATION -----*)
|
||||
TON_no_signal(IN := (Input <= no_signal) OR In_no_signal, PT := time_no_signal);
|
||||
IF TON_no_signal.Q THEN no_signal_st := TRUE; ELSIF (Input > no_signal + delta_no_signal) THEN no_signal_st := FALSE; END_IF;
|
||||
|
||||
TON_fail_low(IN := ((Input <= fail_low) AND NOT(no_signal_st)) OR In_fail_low, PT := time_fail_low);
|
||||
IF TON_fail_low.Q THEN fail_low_st := TRUE; ELSIF (Input > fail_low + delta_fail_low) THEN fail_low_st := FALSE; END_IF;
|
||||
|
||||
TON_warn_low(IN := ((Input <= warn_low) AND NOT(no_signal_st) AND NOT(TON_fail_low.Q)) OR In_warn_low, PT := time_warn_low);
|
||||
IF TON_warn_low.Q THEN warn_low_st := TRUE; ELSIF (Input > warn_low + delta_warn_low) THEN warn_low_st := FALSE; END_IF;
|
||||
|
||||
TON_fail_hi(IN := ((Input >= fail_hi) AND NOT(no_signal_st)) OR In_fail_hi, PT := time_fail_hi);
|
||||
IF TON_fail_hi.Q THEN fail_hi_st := TRUE; ELSIF (Input < fail_hi - delta_fail_hi) THEN fail_hi_st := FALSE; END_IF;
|
||||
|
||||
TON_warn_hi(IN := ((Input >= warn_hi) AND NOT(no_signal_st) AND NOT(TON_fail_hi.Q)) OR In_warn_hi, PT := time_warn_hi);
|
||||
IF TON_warn_hi.Q THEN warn_hi_st := TRUE; ELSIF (Input < warn_hi - delta_warn_hi) THEN warn_hi_st := FALSE; END_IF;
|
||||
|
||||
normal_st := (NOT(no_signal_st) AND NOT(fail_low_st) AND NOT(warn_low_st) AND NOT(warn_hi_st) AND NOT(fail_hi_st));
|
||||
|
||||
IF no_signal_st THEN
|
||||
Status := AnalogValueState.no_signal;
|
||||
ELSIF fail_hi_st THEN
|
||||
Status := AnalogValueState.fail_hi;
|
||||
ELSIF fail_low_st THEN
|
||||
Status := AnalogValueState.fail_low;
|
||||
ELSIF warn_hi_st THEN
|
||||
Status := AnalogValueState.warn_hi;
|
||||
ELSIF warn_low_st THEN
|
||||
Status := AnalogValueState.warn_low;
|
||||
ELSIF normal_st THEN
|
||||
Status := AnalogValueState.normal;
|
||||
ELSE
|
||||
Status := AnalogValueState.undefined;
|
||||
END_IF;
|
||||
END_FUNCTION_BLOCK
|
||||
Reference in New Issue
Block a user