(* =============================================================================== Project : PLC_Library Device : - Path : Общие Name : ALARM_2 Type : FUNCTION_BLOCK Exported : 2026-07-31 11:16:16 =============================================================================== *) FUNCTION_BLOCK ALARM_2 (* Функциональный блок проверяет входное значение X на принадлежность [LO_1…HI_1] [LO_2…HI_2] *) VAR_INPUT X : REAL; (* Контролируемое значение. *) LO_1 : REAL; (* Нижний предел 1. *) HI_1 : REAL; (* Верхний предел 1. *) LO_2 : REAL; (* Нижний предел 2. *) HI_2 : REAL; (* Верхний предел 2. *) 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». *) 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 > HI_1 THEN Q1_HI := TRUE; END_IF; IF tmp > HI_2 THEN Q2_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 < HI_1 THEN Q1_HI := FALSE; END_IF; IF tmp < HI_2 THEN Q2_HI := FALSE; END_IF; END_FUNCTION_BLOCK