AnnexF/average_st.txt
author Manuele Conti <conti.ma@alice.it>
Thu, 03 Jan 2013 22:54:55 +0100
changeset 788 aa56031e5cb3
parent 0 fb772792efd1
permissions -rwxr-xr-x
Implement Mario's suggestions:
- Clean up code replace merge algorithm with a function.
- Fix for_statement setting control variable to not a constant.
- Fix for_statement checking BY expression to get correct value for optimization
branch.

Thanks Mario.
 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