added slew rate filter
This commit is contained in:
parent
eb42b61903
commit
c279383429
37
Rate Limiter Slew Rate Filter.txt
Normal file
37
Rate Limiter Slew Rate Filter.txt
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
#Limits how fast the signal can change per scan cycle — useful for preventing actuator shock.
|
||||||
|
|
||||||
|
FUNCTION_BLOCK FB_RateLimiter
|
||||||
|
VAR_INPUT
|
||||||
|
xEnable : BOOL;
|
||||||
|
rInput : REAL;
|
||||||
|
rMaxRiseRate : REAL := 10.0; // Max units per second rising
|
||||||
|
rMaxFallRate : REAL := 10.0; // Max units per second falling
|
||||||
|
rCycleTimeS : REAL := 0.1; // OB cycle time in seconds
|
||||||
|
END_VAR
|
||||||
|
VAR_OUTPUT
|
||||||
|
rOutput : REAL;
|
||||||
|
END_VAR
|
||||||
|
VAR
|
||||||
|
xFirst : BOOL := TRUE;
|
||||||
|
rMaxStep : REAL;
|
||||||
|
rMinStep : REAL;
|
||||||
|
rDelta : REAL;
|
||||||
|
END_VAR
|
||||||
|
|
||||||
|
IF NOT xEnable THEN
|
||||||
|
xFirst := TRUE;
|
||||||
|
rOutput := rInput;
|
||||||
|
RETURN;
|
||||||
|
END_IF;
|
||||||
|
|
||||||
|
IF xFirst THEN
|
||||||
|
rOutput := rInput;
|
||||||
|
xFirst := FALSE;
|
||||||
|
RETURN;
|
||||||
|
END_IF;
|
||||||
|
|
||||||
|
rMaxStep := rMaxRiseRate * rCycleTimeS;
|
||||||
|
rMinStep := -rMaxFallRate * rCycleTimeS;
|
||||||
|
rDelta := rInput - rOutput;
|
||||||
|
rDelta := MAX(MIN(rDelta, rMaxStep), rMinStep);
|
||||||
|
rOutput := rOutput + rDelta;
|
||||||
Loading…
Reference in a new issue