AnnexF/diffeq_st.txt
changeset 0 fb772792efd1
--- /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
+