(* =============================================================================== Project : PLC_Library Device : - Path : Общие Name : BUZZER_CTRL Type : FUNCTION_BLOCK Exported : 2026-07-31 11:16:16 =============================================================================== *) FUNCTION_BLOCK BUZZER_CTRL (* Звучание звонком лампами в завистмости от статуса с возможностью отключения звука *) VAR_INPUT State: WORD:=0; (* 0 - выключено; 1 - включено; 2 - мигание с частотой 1; 3 - мигание с частотой 2; 4 - мигание с частотой 3; *) Sound_off: BOOL; (* Отключение звука *) Inp_BL_1: BOOL := FALSE; (* Пульсар миганич с частотой 1 *) Inp_BL_2: BOOL := FALSE; (* Пульсар миганич с частотой 2 *) Inp_BL_3: BOOL := FALSE; (* Пульсар миганич с частотой 3 *) PermanentOFF_Enable: BOOL := FALSE; (*Включение возможности отключить звук перманентно *) T_PermanentOFF: TIME := T#10S; (* Время удержания кнопки отключения звука для перманентного отключения *) END_VAR VAR_OUTPUT BUZZER: BOOL; END_VAR VAR R_TRIG_0: R_TRIG; R_TRIG_1: R_TRIG; R_TRIG_2: R_TRIG; R_TRIG_3: R_TRIG; R_TRIG_4: R_TRIG; B_ctrl: WORD; T_S_OFF: TON; R_TRIG_S_OFF: R_TRIG; AlltimeOff: BOOL; TP1: TP:=(PT:=T#100MS); R_TRIG1: R_TRIG; F_TRIG1: F_TRIG; F_TRIG2: F_TRIG; END_VAR (*----- IMPLEMENTATION -----*) R_TRIG_0(CLK:=(State=0)); IF R_TRIG_0.Q THEN B_ctrl:=0; END_IF; R_TRIG_1(CLK:=(State=1)); IF R_TRIG_1.Q THEN B_ctrl:=1; END_IF; R_TRIG_2(CLK:=(State=2)); IF R_TRIG_2.Q THEN B_ctrl:=2; END_IF; R_TRIG_3(CLK:=(State=3)); IF R_TRIG_3.Q THEN B_ctrl:=3; END_IF; R_TRIG_4(CLK:=(State=4)); IF R_TRIG_4.Q THEN B_ctrl:=4; END_IF; T_S_OFF(IN:=Sound_off, PT:=T_PermanentOFF); R_TRIG_S_OFF(CLK:=Sound_off AND PermanentOFF_Enable); R_TRIG1(CLK:=AlltimeOff); F_TRIG1(CLK:=AlltimeOff); TP1(IN:=R_TRIG1.Q OR F_TRIG1.Q); F_TRIG2(CLK:=TP1.Q); IF R_TRIG_S_OFF.Q THEN B_ctrl:=0; AlltimeOff:=0; END_IF IF T_S_OFF.Q THEN AlltimeOff:=1; END_IF IF AlltimeOff THEN B_ctrl:=0; END_IF; IF TP1.Q THEN B_ctrl:=1; END_IF; IF (F_TRIG2.Q OR F_TRIG1.Q) THEN B_ctrl:=0; END_IF; CASE B_ctrl OF 0: BUZZER:=FALSE; 1: BUZZER:=TRUE; 2: BUZZER:=Inp_BL_1; 3: BUZZER:=Inp_BL_2; 4: BUZZER:=Inp_BL_3; END_CASE; END_FUNCTION_BLOCK