Надо использовать самописные таймеры и получить ET (отсчёт таймера). Тут первые 2 ссылки на TON и TOF, есть с паузой и без.
В примерах программ есть ещё много всего, есть и таймер TP.
https://owen.ru/forum/showthread.php...=9&p=429061#81
Надо использовать самописные таймеры и получить ET (отсчёт таймера). Тут первые 2 ссылки на TON и TOF, есть с паузой и без.
В примерах программ есть ещё много всего, есть и таймер TP.
https://owen.ru/forum/showthread.php...=9&p=429061#81
Последний раз редактировалось kondor3000; 29.08.2025 в 13:06.
И все же городить пришлось, там нет ФБ TP (Импульс включения заданной длительности), там по ссылкам нет такого на ST, а я пока на ST не силен, поэтому он у меня получился аляповатым, т.е. по факту считает в 2 раза медленнее, хотя я почти уверен, если считать не миллисекундах а в секундах, то будет норм, в общем вот:
2025-08-29_144838.png
Ну и собсно сама программа, если кому такое барахло нужно:
https://owen.ru/forum/attachment.php...1&d=1756469102
Если кто напишет на ST, что нить похожее будет полезно...![]()
Не претендую на оптимальность
Код:function_block fbTP var_input IN : bool; PT : udint; RST : bool; end_var var_output Q : bool; ET : udint; end_var var st, tm : udint; fl : bool; end_var tm := time_to_udint(get_time()); if RST then Q := false; elsif IN and not fl then Q := true; st := tm; end_if if Q then ET := tm - st; if ET >= PT then Q := false; end_if else ET := PT; end_if; fl := Q or IN; end_function_block
Вариант 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
Вот этот подошел, работает как надо, у Dimensy тоже работает как положено, но отсчет времени прямой, это не претензия, просто мне нужон обратный, будет время постараюсь вникнуть и модифицирую под себя, ну типа булевое значение введу, типа 0 прямой счет, 1 обратный или наоборот, но все равно спасибо, буду начинать изучать ST...
А вот у kondor3000, сначала не понял, потом дошло, в общем нужно в ms, там в коде "PT:=PT*1000" тыщу заменил на единицу и стало как надо, или эту строку вообще можно убрать?
В общем всем спасибо!![]()
Последний раз редактировалось Traveller; 01.09.2025 в 14:21.
Вот сто лет тому назад выкладывал таймер с прямым и обратным отсчётом времени:
https://owen.ru/forum/showthread.php...l=1#post353353
Вы как будто только сегодня после обеда с луны упали, мне так кажется!
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.