Сообщение от
ASka
...за исключением того что задержка в заданном интервале идет на группу сигналов, а не на каждый отдельный сигнал.
Достаточно заменить тип данных для ФБ, например с BOOL на BYTE, и он будет задерживать сразу группу из восьми сигналов
Код:
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;
Захват-1.png
Можно сделать на 16 сигналов(WORD) или 32(DWORD)