diff -r 000000000000 -r fb772792efd1 AnnexF/diffeq_st.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/AnnexF/diffeq_st.txt Wed Jan 31 15:32:38 2007 +0100 @@ -0,0 +1,30 @@ + 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 +