equal
deleted
inserted
replaced
|
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 |