Вариант 2:
Owen.jpg
Код:function_block TP var_input I : bool; // Входной импульс T : udint; // Время в мс end_var var_output Q : bool; // Выход ET : udint; // Текущее значение таймера с обратным отсчетом end_var var ts, d : udint; // Фиксация системного времени и дельты rt : SYS.RTRIG; // Тригер фронта end_var rt(I := I and not Q); // Фиксируем начало нового импульса if rt.Q then ts := time_to_udint(get_time()); ET := T; Q := true; // Фиксируем продолжительность и начало импульса end_if if ET > 0 then d := time_to_udint(get_time()) - ts; ts := ts + d; // Прошло времени в мc if ET > d then ET := ET - d; // Уменьшаем ET на это время else ET := 0; Q := false; // Иначе фиксируем завершение импульса end_if end_if end_function_block


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

