Достаточно заменить тип данных для ФБ, например с BOOL на BYTE, и он будет задерживать сразу группу из восьми сигналов
Вложение 17034Код:FUNCTION_BLOCK DELAY_BYTE
VAR_INPUT
in : BYTE;
T : TIME;
END_VAR
VAR_OUTPUT
out : BYTE;
trig: BOOL;
END_VAR
VAR
LENGTH : INT := 32;
X : ARRAY[0..31] OF BYTE;
cnt : INT;
last : TIME;
tx: TIME;
init: BOOL;
END_VAR
tx:=TIME();
trig := FALSE;
IF NOT init THEN
x[cnt] := in;
init := TRUE;
last := tx;
ELSIF tx - last >= T / length THEN
IF cnt = length - 1 THEN cnt := 0; ELSE cnt := cnt + 1; END_IF;
Out := X[cnt];
x[cnt] := in;
last := tx;
trig := TRUE;
END_IF;
Трассировка для четырех сигналов из восьми:
Можно сделать на 16 сигналов(WORD) или 32(DWORD)

