author | Mario de Sousa <msousa@fe.up.pt> |
Thu, 08 Nov 2012 17:31:29 +0000 | |
changeset 720 | f637ac331a68 |
parent 0 | fb772792efd1 |
permissions | -rwxr-xr-x |
FUNCTION_BLOCK DELAY (* N-sample delay *) VAR_INPUT RUN : BOOL ; (* 1 = run, 0 = reset *) XIN : REAL ; N : INT (* 0 <= N < 128 or manufacturer- *) END_VAR (* specified maximum value *) VAR_OUTPUT XOUT : REAL; END_VAR (* Delayed output *) VAR X : ARRAY [0..127] (* N-Element queue *) OF REAL; (* with FIFO discipline *) I, IXIN, IXOUT : INT := 0; END_VAR IF RUN THEN IXIN := MOD(IXIN + 1, 128) ; X[IXIN] := XIN ; IXOUT := MOD(IXOUT + 1, 128) ; XOUT := X[IXOUT]; ELSE XOUT := XIN ; IXIN := N ; IXOUT := 0; FOR I := 0 TO N DO X[I] := XIN; END_FOR; END_IF ; END_FUNCTION_BLOCK