AnnexF/diffeq_st.txt
author mjsousa
Sat, 07 May 2016 21:17:49 +0100
changeset 1010 242907849850
parent 0 fb772792efd1
permissions -rwxr-xr-x
Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
 FUNCTION_BLOCK DIFFEQ
   VAR_INPUT
     RUN : BOOL ;             (* 1 = run, 0 = reset *)
     XIN : REAL ;
     A : ARRAY[1..] OF REAL ; (* Input coefficients *)
     M : INT ;                (* Length of input history  *)
     B : ARRAY[0..] OF REAL ; (* Output coefficients *)
     N : INT ;                (* Length of output history *)        
   END_VAR
   VAR_OUTPUT XOUT : REAL := 0.0 ; END_VAR
   VAR  (* NOTE : Manufacturer may specify other array sizes *)   
     XI : ARRAY [0..128] OF REAL ; (* Input history  *)
     XO : ARRAY [0..128] OF REAL ; (* Output history *)
     I : INT ;
   END_VAR
   XO[0] := XOUT ; XI[0] := XIN ;
   XOUT := B[0] * XIN ;
   IF RUN THEN
      FOR I := M TO 1 BY -1 DO
          XOUT := XOUT + A[I] * XO[I] ; XO[I] := XO[I-1];
      END_FOR;
      FOR I := N TO 1 BY -1 DO
          XOUT := XOUT + B[I] * XI[I] ; XI[I] := XI[I-1];
      END_FOR;
   ELSE
      FOR I := 1 TO M DO XO[I] := 0.0; END_FOR;
      FOR I := 1 TO N DO XI[I] := 0.0; END_FOR;
   END_IF ;
 END_FUNCTION_BLOCK