Так что-ли?
Код:
function_block Fun
var_input
ai1, ai2 : bool;
t1 : udint;
end_var
var_output
Q1, Q2 : bool;
end_var
var
event1, event2 : bool;
ts1, ts2 : udint;
rt1, rt2 : SYS.RTRIG;
tQ1, tQ2 : SYS.TON;
end_var
rt1(I:=ai1); // Ловим фронт ai1
if rt1.Q then
event1 := true; // Фиксируем событие ..
ts1 := time_to_udint(get_time()); // и время ai1
end_if
rt2(I:=ai2); // Ловим фронт ai2
if rt2.Q then
event2 := true; // Фиксируем событие ..
ts2 := time_to_udint(get_time()); // и время ai2
end_if
if tQ2.Q then // После выдачи сигнала Q2 все сбрасываем и начинаем сначала
event1 := false; event2 := false;
end_if
tQ1(I:=event1, T := udint_to_time(t1), Q=>Q1);
tQ2(I:=event2, T := udint_to_time(t1 + ts2 - ts1), Q=>Q2);
end_function_block
Код:
function_block Fun2
var_input
ai1, ai2 : bool;
t1 : udint;
end_var
var_output
Q1, Q2 : bool;
end_var
var
event1, event2 : bool;
ts1, ts2 : udint;
rt1, rt2 : SYS.RTRIG;
ft2 : SYS.FTRIG;
tQ1, tQ2 : SYS.TON;
end_var
rt1(I:=ai1); // Ловим фронт ai1
if rt1.Q then
event1 := true; // Фиксируем событие ..
end_if
rt2(I:=ai2); ft2(I:=ai2); // Ловим фронт и спад ai2
if rt2.Q then
ts1 := time_to_udint(get_time()); // Фиксируем время прихода фронта ai2
end_if
if ft2.Q then
event2 := true; // Фиксируем событие ..
ts2 := time_to_udint(get_time()); // и время прихода спада ai2
end_if
if tQ2.Q then // После выдачи сигнала Q2 все сбрасываем и начинаем сначала
event1 := false; event2 := false;
end_if
tQ1(I:=event1, T := udint_to_time(t1), Q=>Q1);
tQ2(I:=event2, T := udint_to_time(t1 + ts2 - ts1), Q=>Q2);
end_function_block