Files

72 lines
2.5 KiB
Smalltalk
Raw Permalink 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 : Общие
Name : BUZZER_CTRL
Type : FUNCTION_BLOCK
===============================================================================
*)
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