73 lines
2.5 KiB
Smalltalk
73 lines
2.5 KiB
Smalltalk
(*
|
||
===============================================================================
|
||
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
|