Просмотр полной версии : Пауза таймера?
Скажите пожалуйста как в CFC организовать паузу у таймера? Использую блок TON с задержкой 2 минуты например. Если через минуту на "in" появился "0" (например авария произошла) и после устранения аварии на вход "in" снова пришла "1", то как сделать чтоб таймер опять не 2 минуты считал, а досчитал оставшуюся минуту? Может блок существует уже готовый? Подскажите. Не смог найти. Спасибо.
Неужели никто не знает? Как сделать чтоб отсчет продолжался а не обнулялся после прихода "1" на "in" ?
блокировать его, пока таймер не досчитает.
если никто не опередит, дома попробую примерчик накорябать...
просто на работе с загрузкой на форумы проблема.
ЗЫ примерчик накорябал.
Маленько не так. Он при повторном появлении снова с нуля начинает считать. А мне нужно чтоб при обрыве, например на 5 секундах, он и продалжал отсчет с 5 секунд при повторном появлении.
Малышев Олег
28.01.2010, 19:54
Маленько не так. Он при повторном появлении снова с нуля начинает считать. А мне нужно чтоб при обрыве, например на 5 секундах, он и продалжал отсчет с 5 секунд при повторном появлении.
Используйте выход ET. сохраняйте его в переменной.
например так ton1(in:=sig1,pt:=new_time,q=>res,pt=>new_time);
PS Не проверял -но думаю если правильно понял Вас сработает
PPS При переднем фронте проставляйте new_time в 2 секунды
Сергей71
29.01.2010, 13:43
См. статью, там пример.
См. статью, там пример.
Супер!
Спасибо всем большое! Все получилось просто великолепно. Сделал функциональным блоком в CFC в виде библиотеки. Выкладываю сюда. Пригодится.
мдя... сорь, не так понял....
Ребят напишу в теме про паузу! Не получается сделать паузу для таймера ТР в языке ST! зада аналогичная нужно при нажатии на паузу таймер останавливается а при пропадании таймер начинает отсчитывать с того же места! Помогите пожалуйста у меня все равно продолжает отсчет даже если убираешь со входа True!
Заранее спасибо!
Выходит сделать паузу не получится никак ??? может есть варианты какие нить другие подскажите подалуста!
Заранее спасибо!
Serge_UA
25.06.2011, 16:35
Выходит сделать паузу не получится никак ??? может есть варианты какие нить другие подскажите подалуста!
Заранее спасибо!
Вы функциональный блок выложенный в сообщении #7 этой темы смотрели/тестировали?
Не подходит?
Вы функциональный блок выложенный в сообщении #7 этой темы смотрели/тестировали?
Не подходит?
Нет не пробывал потому что там таймер TON а мне строго нужен TP! или там без разницы какой поставить!
Serge_UA
25.06.2011, 23:35
"Вам шашечки или ехать?" (c)
В чем заключается строгая необходимость TP вместо TON? Оба отсчитывают заданный интервал времени. В первом таймере событие окончания счета сигнализируется отрицательным фронтом переменной Q, а во втором таймере - положительным. Инвертировать этот сигнал - проблема?
Второе решение, творческое: берете выложенный TON таймер с накоплением и переделываете в TP таймер с накоплением. И, главное, не забываете выложить свое творенье здесь.
"Вам шашечки или ехать?" (c)
В чем заключается строгая необходимость TP вместо TON? Оба отсчитывают заданный интервал времени. В первом таймере событие окончания счета сигнализируется отрицательным фронтом переменной Q, а во втором таймере - положительным. Инвертировать этот сигнал - проблема?
Второе решение, творческое: берете выложенный TON таймер с накоплением и переделываете в TP таймер с накоплением. И, главное, не забываете выложить свое творенье здесь.
Нам и шашечки и ехать! У меня оченб большая программа написанная с помощью таймера ТР и не охота много переделывать в самом алгоритме управления! А еще лично мне тяжеловато представляется как из TON->TP получается а то вы тут написали как будто это элементарно, я так не думаю! Вот можно заморочится и с помощью BLINK сделать это ДА! и так наверно будет проще всего!
ПС Ув. Serge_UA если у вас получится то о чем вы писали выложите пожалуйста я хоть гляну!
Александр Приходько
27.06.2011, 09:35
Нам и шашечки и ехать! У меня оченб большая программа написанная с помощью таймера ТР и не охота много переделывать в самом алгоритме управления! А еще лично мне тяжеловато представляется как из TON->TP получается а то вы тут написали как будто это элементарно, я так не думаю! Вот можно заморочится и с помощью BLINK сделать это ДА! и так наверно будет проще всего!
ПС Ув. Serge_UA если у вас получится то о чем вы писали выложите пожалуйста я хоть гляну!
Если вам тяжело представляется, не значит что так и есть. Программирование такая вещь, когда одно и тоже можно решить несколькими различными способами. Таймер TP нет ни какой сложности реализовать на ТONах и TOFах. Посмотрите пример, который вам предоставили. Не думаю что сильно так уж придется программу вам переделывать.
добрый день, тема я смотрю давно закрыта, но всеж по пробую спросит: в програмировании плк не так давно, от силы месяц,, хотелось бы что бы кто нибудь обьяснил как инвертировать тот таймер который выложил ТС, или как его переделать под таймер Tp. Зарание спасибо, надеюсь найдутся добрые люди)))
посмотрите тут (http://www.owen.ru/forum/showthread.php?t=15833&p=119816&viewfull=1#post119816)
Эдуард_Н
13.01.2015, 12:57
См. статью, там пример.
А можно посмотреть всю подписку этого журнала за 2006Г?
А можно посмотреть всю подписку этого журнала за 2006Г?
Запросто:rolleyes:, но только про отладку программ http://prolog-plc.ru/pb1
Эдуард_Н
13.01.2015, 16:06
Ага, спасибочки, её то и надо было.
Эдуард_Н
13.01.2015, 19:43
А где бы скачать в нормальном качестве книгу Петров И.В., "Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования"?
А где бы скачать в нормальном качестве книгу Петров И.В., "Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования"?
Гугл Вам в помощь. Т.к. прямые ссылки на труды уважаемого Петрова на форуме не приветствуются. Да и ничего особенного в ней нет, книга для совсем "чайников"
Эдуард_Н
15.01.2015, 13:14
Супер!
Спасибо всем большое! Все получилось просто великолепно. Сделал функциональным блоком в CFC в виде библиотеки. Выкладываю сюда. Пригодится.
Разрешите поправить, не в CFC, а в SFC. И можете это выложить в ST или в CFC ?
Эдуард_Н
21.01.2015, 15:20
Попробовал перенести в КДС3, не получилось.
Пишет предупреждения: [WARNING] MyLibraryV2: Run_mode_exit [TON_P](Строка 1, Столбец 1): C0139: Код 'TON_1; ' не имеет действия. Это сделано намеренно?
[WARNING] MyLibraryV2: Run_mode_active [TON_P](Строка 1, Столбец 1): C0139: Код 'TON_1; ' не имеет действия. Это сделано намеренно?
Я кстати вот как делал... Брал либу Standard-intern (где-то на форуме выкладывал) — та же standard, но с кодом. Заменял в ней все вызовы TIME() своей функцией PTIME(), и реализовывал эту функцию так, чтобы она «тикала» по регулируемому мной коэффициенту. Дальше ставил такую «хакнутую» библиотеку в нужную программу вместо standard.lib, и получал таким образом паузу, перемотку вперёд и даже задний ход везде, где использовались стандартные TON, TOF, TP и прочее на их основе.
Но это нужно было только для отладки вялотекущего процесса. На продакшене просто менял свою stanard-intern на standard, и всё.
Эдуард_Н
22.01.2015, 08:52
Попробовал перенести в КДС3, не получилось.
Пишет предупреждения: [WARNING] MyLibraryV2: Run_mode_exit [TON_P](Строка 1, Столбец 1): C0139: Код 'TON_1; ' не имеет действия. Это сделано намеренно?
[WARNING] MyLibraryV2: Run_mode_active [TON_P](Строка 1, Столбец 1): C0139: Код 'TON_1; ' не имеет действия. Это сделано намеренно?
Кто ни будь подскажет где ошибка?
Скачал из 7-го сообщения таймер с паузой TONP. Добавил его в CDS в виде библиотеки, написал программу, а когда дело дошло до отладки при заливке программы в ПЛК160 он начал ругаться на эту библиотеку "Неразрешенные ссылки на внешние POU: TONP TONPinit". Ищу решение уже второй день, форум облазил. Здесь читал http://www.owen.ru/forum/showthread.php?t=2758 но не понял что нужно сделать.
Подскажите пожалуйста. 16632
А ссылку из 20-го сообщения смотрели? Не подходит?
Не подходит, он продолжает считать даже после пропадания сигнала на входе in, чтоб он не считал пауза всегда должна быть нажата.
Мне необходимо что бы когда на входе in был TRUE он считал, при появлении на входе pause TRUE он прекращал отсчёт времени, а при пропадании продолжал отсчёт с того места где остановился. А если на входе in пропадает TRUE счёт времени сбрасывался в 0.
Если кому несложно можете переделать функциональный блок таймер TONP из седьмого сообщения на язык ST, буду очень благодарен.
Таймер TON с паузой на языке ST.
Спасибо БОЛЬШОЕ! Все работает как нужно.
Как его вставить в программу?
А, все, разобрался! Спасибо.
Добрый день.
Не могли бы сбросить данный пример TONP.zip почему то не скачивается.
заранее спасибо
подскажите пожалуйста , как вставить этот файл в программу?
_Mikhail
11.11.2019, 21:19
подскажите пожалуйста , как вставить этот файл в программу?
Проект - Импорт
У меня проще, только код, без вспомогательных таймеров и триггеров
FUNCTION_BLOCK TON_P
VAR_INPUT
IN: BOOL;
P: BOOL;
PT: TIME;
END_VAR
VAR_OUTPUT
Q: BOOL;
ET: TIME;
END_VAR
VAR
clk: BOOL;
StartTime: TIME;
tx: TIME;
END_VAR
tx:= TIME();
IF P THEN
StartTime:= tx - ET;
END_IF
IF IN AND NOT clk THEN
StartTime:= tx;
clk:= TRUE;
ELSIF NOT IN THEN
clk:= FALSE;
Q:= FALSE;
ET:= t#0s;
END_IF
IF clk AND NOT Q THEN
ET:= MIN(PT, tx - StartTime);
Q:= ET = PT AND IN;
END_IF
FUNCTION_BLOCK ton_p (*таймер TON с паузой. *)
VAR_INPUT
in:BOOL;
pt:TIME;
pause:BOOL;
END_VAR
VAR_OUTPUT
q: BOOL;
et:TIME;
END_VAR
VAR
TP1: TON;
R_TRIG1: R_TRIG;
F_TRIG1: F_TRIG;
init:BOOL:=TRUE;
pt1: TIME;
et1:TIME;
END_VAR
IF init THEN
init:=FALSE;
pt1:=pt;
et1:=t#0ms;
END_IF
R_TRIG1(CLK:=pause, Q=> ); (*включили паузу*)
F_TRIG1(CLK:=in, Q=> init); (*убрали сигнал со входа таймера*)
IF R_TRIG1.Q THEN (*если нажали паузу*)
pt1:=pt1 - TP1.ET; (*запоминаем сколько времени осталось отсчитать*)
et1:=et1 + TP1.ET; (*запоминаем сколько времени уже прошло*)
TP1.IN:=FALSE; (*сбрасываем таймер*)
END_IF
TP1(IN:=SEL(pause, in, in AND pause AND TP1.Q), PT:=pt1); (*вызываем таймер*)
q:=TP1.Q;
IF in AND NOT TP1.Q THEN (*если таймер еще не отработал до конца*)
et:=et1+TP1.ET; (*суммируем отработанное время*)
ELSIF TP1.Q THEN (*если таймер отработал до конца*)
et:=pt;
END_IF
IF F_TRIG1.Q THEN (*если убрали сигнал со входа таймера*)
et:=t#0ms; (*обнуляем*)
END_IF
Lordorakus
14.05.2020, 08:23
Подниму тему, у кого нибудь остался файл таймера TON с паузой на языке CFC?
Lordorakus Вам кто-то мешает взять код на ST и создать FBD блок и использовать его в CFC ?
Lordorakus
14.05.2020, 08:48
Lordorakus Вам кто-то мешает взять код на ST и создать FBD блок и использовать его в CFC ?
Чутка поспешил комментарий написать, не проанализировав код выше :)
Уже сделал данный таймер по примеру, спасибо petera
Здравствуйте, не могли бы вы помочь переделать данный код для tp таймера. Возможно ли это?
kondor3000
23.11.2021, 18:45
Здравствуйте, не могли бы вы помочь переделать данный код для tp таймера. Возможно ли это?
Вы бы лучше написали, что вам надо. Как должно работать, может и переделывать ничего не надо.
Нужен блок, который начинает работу при подачи 1 на вход, начинает отсчет времени и подает все это время 1 на выход. После истечения заданного времени на выход подается 0 . Но нужно реализовать паузу. То есть когда подается 1 на вход "пауза" время останавливается и запоминается, на выход - 0. Когда снимем 1 с паузы, время должно продолжиться
Нужен блок, который начинает работу при подачи 1 на вход, начинает отсчет времени и подает все это время 1 на выход. После истечения заданного времени на выход подается 0 . Но нужно реализовать паузу. То есть когда подается 1 на вход "пауза" время останавливается и запоминается, на выход - 0. Когда снимем 1 с паузы, время должно продолжиться
Все это можно сделать, используя мой таймер https://owen.ru/forum/showthread.php?t=7077&p=318409&viewfull=1#post318409
58058
https://owen.ru/forum/attachment.php?attachmentid=58059&d=1637836767
kondor3000
25.11.2021, 19:12
Нужен блок, который начинает работу при подачи 1 на вход, начинает отсчет времени и подает все это время 1 на выход. После истечения заданного времени на выход подается 0 . Но нужно реализовать паузу. То есть когда подается 1 на вход "пауза" время останавливается и запоминается, на выход - 0. Когда снимем 1 с паузы, время должно продолжиться
petera если не против, просто немного изменил ваш код
FUNCTION_BLOCK TP_
VAR_INPUT
IN: BOOL;
Pause: BOOL;
PT: TIME;
END_VAR
VAR_OUTPUT
Q: BOOL;
ET: TIME;
END_VAR
VAR
clk: BOOL;
StartTime: TIME;
tx: TIME;
END_VAR
__________________________________________________ ____
tx:= TIME();
IF Pause THEN
StartTime:= tx - ET;
END_IF
IF IN AND NOT clk AND NOT Pause THEN
StartTime:= tx;
clk:= TRUE;
ET:=T#0ms;
ELSIF NOT IN AND ET=PT THEN
clk:= FALSE;
END_IF
IF clk AND ET<PT THEN
ET:= MIN(PT, tx - StartTime);
Q:=ET<PT AND IN AND NOT Pause;
END_IF
Чё-то примеры не скачиваются. Видимо, удалили уже, тема старая. Жаль...
kondor3000
23.10.2022, 10:12
Чё-то примеры не скачиваются. Видимо, удалили уже, тема старая. Жаль...
Зачем скачивать примеры, если выше выложены коды ФБ (функц. блока) таймера, скопируйте и пользуйтесь)63305
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot