author | Mario de Sousa <msousa@fe.up.pt> |
Thu, 08 Nov 2012 17:31:29 +0000 | |
changeset 720 | f637ac331a68 |
parent 0 | fb772792efd1 |
permissions | -rwxr-xr-x |
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