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