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