Files
PLC_Library/plc_src/POU/Fastwel/AIM725_Status.st
T

93 lines
3.2 KiB
Smalltalk
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(*
===============================================================================
Project : PLC_Library
Device : -
Path : Fastwel
Name : AIM725_Status
Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
===============================================================================
*)
FUNCTION_BLOCK AIM725_Status
(*
Модуль формирования статуса
Гистерезис по отключению и задержка по включению
-1 - нет связи с датчиком
0 - не определено
1 - норма
2 - предупредительный по нижнему уровню
3 - аварийный по нижнему уровню
4 - предупредительный по верхнему уровню,
5 - аварийный по верхнему уровню
*)
VAR_INPUT
Input: REAL;
fail_hi: REAL:=3.402823466E+38;
delta_fail_hi: REAL := 0;
time_fail_hi: TIME :=t#0s;
warn_hi: REAL:=3.402823466E+38;
delta_warn_hi: REAL := 0;
time_warn_hi: TIME :=t#0s;
warn_low: REAL:=-3.402823466E+38;
delta_warn_low: REAL := 0;
time_warn_low: TIME :=t#0s;
fail_low: REAL:=-3.402823466E+38;
delta_fail_low: REAL := 0;
time_fail_low: TIME :=t#0s;
Modul_status: BYTE;
Chanel_num: BYTE;
END_VAR
VAR_OUTPUT
Status: INT;
T_mod: INT;
END_VAR
VAR
(* !!! ВНУТРЕННИЕ НЕВЫХОДНЫЕ ПЕРЕМЕННЫЕ!!! *)
TON_fail_hi: TON;
TON_warn_hi: TON;
TON_warn_low: TON;
TON_fail_low: TON;
(* !!! ВНУТРЕННИЕ ВЫХОДНЫЕ ПЕРЕМЕННЫЕ!!! *)
fail_hi_st: BOOL;
warn_hi_st: BOOL;
normal_st: BOOL;
warn_low_st: BOOL;
fail_low_st: BOOL;
no_signal_st: BOOL;
END_VAR
(*----- IMPLEMENTATION -----*)
no_signal_st := (Input <= - REAL#200 OR ((Modul_status.0 OR Modul_status.4 OR Modul_status.5) AND Chanel_num = 1) OR ((Modul_status.1 OR Modul_status.6 OR Modul_status.7) AND Chanel_num = 2) OR Modul_status.2 OR Modul_status.3);
IF no_signal_st THEN T_mod := - INT#500; ELSE T_mod := REAL_TO_INT(Input); END_IF;
TON_fail_low(IN := ((Input <= fail_low) AND NOT(no_signal_st)), 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)), 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)), 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)), 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 := - INT#1;
ELSIF fail_hi_st THEN
Status := INT#5;
ELSIF fail_low_st THEN
Status := INT#3;
ELSIF warn_hi_st THEN
Status := INT#4;
ELSIF warn_low_st THEN
Status := INT#2;
ELSIF normal_st THEN
Status := INT#1;
ELSE
Status := INT#0;
END_IF;
END_FUNCTION_BLOCK