Так что-ли?
Код: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




Ответить с цитированием