AnnexF/diffeq_st.txt
changeset 0 fb772792efd1
equal deleted inserted replaced
-1:000000000000 0:fb772792efd1
       
     1  FUNCTION_BLOCK DIFFEQ
       
     2    VAR_INPUT
       
     3      RUN : BOOL ;             (* 1 = run, 0 = reset *)
       
     4      XIN : REAL ;
       
     5      A : ARRAY[1..] OF REAL ; (* Input coefficients *)
       
     6      M : INT ;                (* Length of input history  *)
       
     7      B : ARRAY[0..] OF REAL ; (* Output coefficients *)
       
     8      N : INT ;                (* Length of output history *)        
       
     9    END_VAR
       
    10    VAR_OUTPUT XOUT : REAL := 0.0 ; END_VAR
       
    11    VAR  (* NOTE : Manufacturer may specify other array sizes *)   
       
    12      XI : ARRAY [0..128] OF REAL ; (* Input history  *)
       
    13      XO : ARRAY [0..128] OF REAL ; (* Output history *)
       
    14      I : INT ;
       
    15    END_VAR
       
    16    XO[0] := XOUT ; XI[0] := XIN ;
       
    17    XOUT := B[0] * XIN ;
       
    18    IF RUN THEN
       
    19       FOR I := M TO 1 BY -1 DO
       
    20           XOUT := XOUT + A[I] * XO[I] ; XO[I] := XO[I-1];
       
    21       END_FOR;
       
    22       FOR I := N TO 1 BY -1 DO
       
    23           XOUT := XOUT + B[I] * XI[I] ; XI[I] := XI[I-1];
       
    24       END_FOR;
       
    25    ELSE
       
    26       FOR I := 1 TO M DO XO[I] := 0.0; END_FOR;
       
    27       FOR I := 1 TO N DO XI[I] := 0.0; END_FOR;
       
    28    END_IF ;
       
    29  END_FUNCTION_BLOCK
       
    30