50 lines
2.2 KiB
Smalltalk
50 lines
2.2 KiB
Smalltalk
(*
|
|
===============================================================================
|
|
Project : PLC_Library
|
|
Device : -
|
|
Path : Общие
|
|
Name : ALARM_3
|
|
Type : FUNCTION_BLOCK
|
|
===============================================================================
|
|
*)
|
|
|
|
FUNCTION_BLOCK ALARM_3
|
|
(* Функциональный блок проверяет входное значение X на принадлежность [LO_1…HI_1] [LO_2…HI_2] [LO_3…HI_3] *)
|
|
VAR_INPUT
|
|
X : REAL; (* Контролируемое значение. *)
|
|
LO_1 : REAL; (* Нижний предел 1. *)
|
|
HI_1 : REAL; (* Верхний предел 1. *)
|
|
LO_2 : REAL; (* Нижний предел 2. *)
|
|
HI_2 : REAL; (* Верхний предел 2. *)
|
|
LO_3 : REAL; (* Нижний предел 3. *)
|
|
HI_3 : REAL; (* Верхний предел 3. *)
|
|
HYS : REAL; (* Значение гистерезиса (берется как HYS/2 отностительно середины) *)
|
|
END_VAR
|
|
VAR_OUTPUT
|
|
Q1_LO : BOOL := FALSE; (* Флаг «значение меньше нижнего предела 1». *)
|
|
Q1_HI : BOOL := FALSE; (* Флаг «значение больше верхнего предела 1». *)
|
|
Q2_LO : BOOL := FALSE; (* Флаг «значение меньше нижнего предела 2». *)
|
|
Q2_HI : BOOL := FALSE; (* Флаг «значение больше верхнего предела 2». *)
|
|
Q3_LO : BOOL := FALSE; (* Флаг «значение меньше нижнего предела 3». *)
|
|
Q3_HI : BOOL := FALSE; (* Флаг «значение больше верхнего предела 3». *)
|
|
END_VAR
|
|
VAR
|
|
tmp: REAL;
|
|
END_VAR
|
|
(*----- IMPLEMENTATION -----*)
|
|
tmp := X - HYS * 0.5;
|
|
IF tmp > LO_1 THEN Q1_LO := FALSE; END_IF;
|
|
IF tmp > LO_2 THEN Q2_LO := FALSE; END_IF;
|
|
IF tmp > LO_3 THEN Q3_LO := FALSE; END_IF;
|
|
IF tmp > HI_1 THEN Q1_HI := TRUE; END_IF;
|
|
IF tmp > HI_2 THEN Q2_HI := TRUE; END_IF;
|
|
IF tmp > HI_3 THEN Q3_HI := TRUE; END_IF;
|
|
tmp := tmp + HYS;
|
|
IF tmp < LO_1 THEN Q1_LO := TRUE; END_IF;
|
|
IF tmp < LO_2 THEN Q2_LO := TRUE; END_IF;
|
|
IF tmp < LO_3 THEN Q3_LO := TRUE; END_IF;
|
|
IF tmp < HI_1 THEN Q1_HI := FALSE; END_IF;
|
|
IF tmp < HI_2 THEN Q2_HI := FALSE; END_IF;
|
|
IF tmp < HI_3 THEN Q3_HI := FALSE; END_IF;
|
|
END_FUNCTION_BLOCK
|