ParamManagerScripts/backend/script_groups/TwinCat/.example/SLEWLIMIT.EXP

38 lines
675 B
Plaintext

(* @PATH := '\/Functions_Collection' *)
(* @SYMFILEFLAGS := '0' *)
FUNCTION_BLOCK SlewLimit
VAR_INPUT
i_InValue : REAL ; (* Real Input Value To Smooth *)
i_SlewMax : REAL ; (* Maximum Slew Rate Accepted *)
i_Cycle : REAL ; (* Cycle Time *)
END_VAR
VAR_IN_OUT
out : REAL ;
END_VAR
VAR_OUTPUT
EN_Out : BOOL ;
END_VAR
VAR
mStep : REAL ;
END_VAR
(* @END_DECLARATION := '0' *)
mStep := i_SlewMax * i_Cycle ;
IF i_InValue >= out THEN
IF (i_InValue - out) > mStep THEN
out := out + mStep ;
ELSE
out := i_InValue ;
END_IF
ELSE
IF (out - i_InValue) > mStep THEN
out := out - mStep ;
ELSE
out := i_InValue ;
END_IF
END_IF
END_FUNCTION_BLOCK