27 lines
587 B
Plaintext
27 lines
587 B
Plaintext
#Faster response than SMA, no large buffer needed. The alpha parameter (0.0–1.0) controls smoothing — lower = more smoothing.
|
||
|
||
FUNCTION_BLOCK FB_EMA
|
||
VAR_INPUT
|
||
xEnable : BOOL;
|
||
rInput : REAL;
|
||
rAlpha : REAL := 0.1; // Smoothing factor: 0 = max smooth, 1 = no filter
|
||
END_VAR
|
||
VAR_OUTPUT
|
||
rOutput : REAL;
|
||
END_VAR
|
||
VAR
|
||
xFirst : BOOL := TRUE;
|
||
END_VAR
|
||
|
||
IF NOT xEnable THEN
|
||
xFirst := TRUE;
|
||
rOutput := rInput;
|
||
RETURN;
|
||
END_IF;
|
||
|
||
IF xFirst THEN
|
||
rOutput := rInput;
|
||
xFirst := FALSE;
|
||
ELSE
|
||
rOutput := rAlpha * rInput + (1.0 - rAlpha) * rOutput;
|
||
END_IF; |