У меня как-то так получилось и даже, вроде, работает
Код:function_block Impuls
var_input //объявление входных переменных
U : bool;
Delay : udint; //Длительность задержки импульса, мс
Imp : udint; //Длительность выходного импульса, мс
end_var
var_output //объявление выходных переменных
Q : bool;
end_var
var //объявление локальных переменных
CurTime : udint;
RTrig : SYS.RTRIG;
TOF : SYS.TOF;
MasDel : array[0..9] of udint;
MasImp : array[0..9] of bool;
nWrite, nRead : udint := 0;
flag : bool;
end_var
TOF.T := udint_to_time(Imp);
CurTime := time_to_udint(get_time());
RTrig(I := U);
if RTrig.Q then
MasDel[nWrite] := CurTime + Delay;
MasImp[nWrite] := true;
nWrite := (nWrite + 1) mod 10;
end_if
flag := MasImp[nRead] and CurTime >= MasDel[nRead];
if flag then
MasImp[nRead] := false;
nRead := (nRead + 1) mod 10;
end_if
TOF(I := flag, Q => Q);
end_function_block

