FUNCTION_BLOCK AVERAGE
VAR_INPUT
RUN : BOOL ; (* 1 = run, 0 = reset *)
XIN : REAL ; (* Input variable *)
N : INT ; (* 0 <= N < 128 or manufacturer- *)
END_VAR (* specified maximum value *)
VAR_OUTPUT XOUT : REAL ; END_VAR (* Averaged output *)
VAR SUM : REAL := 0.0; (* Running sum *)
FIFO : DELAY ; (* N-Element FIFO *)
END_VAR
SUM := SUM - FIFO.XOUT ;
FIFO (RUN := RUN , XIN := XIN, N := N) ;
SUM := SUM + FIFO.XOUT ;
IF RUN THEN XOUT := SUM/N ;
ELSE SUM := N*XIN ; XOUT := XIN ;
END_IF ;
END_FUNCTION_BLOCK