Поправил скрипт, поправил неточности в библиотеке
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
(*
|
||||
===============================================================================
|
||||
Project : PLC_Library
|
||||
Device : -
|
||||
Path : Общие
|
||||
Name : Button_acceleration
|
||||
Type : FUNCTION_BLOCK
|
||||
Exported : 2026-07-31 11:16:16
|
||||
===============================================================================
|
||||
*)
|
||||
|
||||
FUNCTION_BLOCK Button_acceleration
|
||||
(* Ускорение изменения значения при нажатой кнопке *)
|
||||
VAR_INPUT
|
||||
Button: BOOL;
|
||||
D_0: REAL := 0; (* Прирост при одиночном нажатии *)
|
||||
T_W_1: TIME := T#0s; (* Время кратковременного удержания *)
|
||||
T_D_1: TIME := T#200ms; (* Шаг времени прироста при кратковременном удержании *)
|
||||
D_1: REAL := 0; (* Прирост при кратковременном удержании *)
|
||||
T_W_2: TIME := T#0S; (* Время длительного удержания *)
|
||||
T_D_2: TIME := T#200MS; (* Шаг времени прироста при длительном удержании *)
|
||||
D_2: REAL := 0; (* Прирост при длительном удержании *)
|
||||
Zeroes : BOOL := false; (* При этом флаге происходит сброс в 0 при дадании -D_0 << D_0 *)
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
Out: REAL; (* Вход-выход который изменяется *)
|
||||
END_VAR
|
||||
VAR
|
||||
Ton_1: TON;
|
||||
Ton_2: TON;
|
||||
TOF_1: TOF;
|
||||
TOF_2: TOF;
|
||||
R_TRIG_0: R_TRIG;
|
||||
R_TRIG_1: R_TRIG;
|
||||
R_TRIG_2: R_TRIG;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
(*----- IMPLEMENTATION -----*)
|
||||
Ton_1(PT := T_W_1,IN:=Button);
|
||||
Ton_2(PT := T_W_2,IN:=Button);
|
||||
TOF_1(PT := T_D_1,IN:=Ton_1.Q AND NOT(TOF_1.Q) AND NOT(Ton_2.Q));
|
||||
TOF_2(PT := T_D_2,IN:=Ton_2.Q AND NOT(TOF_2.Q));
|
||||
R_TRIG_0(CLK:=Button AND NOT(Ton_1.Q) AND NOT(Ton_2.Q));
|
||||
R_TRIG_1(CLK:=TOF_1.Q);
|
||||
R_TRIG_2(CLK:=TOF_2.Q);
|
||||
IF R_TRIG_0.Q THEN
|
||||
Out:=Out+D_0;
|
||||
END_IF
|
||||
IF R_TRIG_1.Q THEN
|
||||
Out:=Out+D_1;
|
||||
END_IF
|
||||
IF R_TRIG_2.Q THEN
|
||||
Out:=Out+D_2;
|
||||
END_IF
|
||||
IF Zeroes AND ABS(Out) < ABS(D_0) THEN
|
||||
Out:=0;
|
||||
END_IF
|
||||
END_FUNCTION_BLOCK
|
||||
Reference in New Issue
Block a user