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;
|