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