PDA

Просмотр полной версии : Пауза таймера?



Artem
28.01.2010, 11:10
Скажите пожалуйста как в CFC организовать паузу у таймера? Использую блок TON с задержкой 2 минуты например. Если через минуту на "in" появился "0" (например авария произошла) и после устранения аварии на вход "in" снова пришла "1", то как сделать чтоб таймер опять не 2 минуты считал, а досчитал оставшуюся минуту? Может блок существует уже готовый? Подскажите. Не смог найти. Спасибо.

Artem
28.01.2010, 16:30
Неужели никто не знает? Как сделать чтоб отсчет продолжался а не обнулялся после прихода "1" на "in" ?

magirus
28.01.2010, 16:36
блокировать его, пока таймер не досчитает.
если никто не опередит, дома попробую примерчик накорябать...
просто на работе с загрузкой на форумы проблема.
ЗЫ примерчик накорябал.

Artem
28.01.2010, 18:44
Маленько не так. Он при повторном появлении снова с нуля начинает считать. А мне нужно чтоб при обрыве, например на 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
См. статью, там пример.

Artem
29.01.2010, 19:13
См. статью, там пример.
Супер!

Спасибо всем большое! Все получилось просто великолепно. Сделал функциональным блоком в CFC в виде библиотеки. Выкладываю сюда. Пригодится.

magirus
30.01.2010, 22:09
мдя... сорь, не так понял....

a_l_e_x
22.06.2010, 11:31
пригодился
спасибо:d

SCF
13.09.2010, 16:06
спасибо !!

JoSaint
24.06.2011, 16:52
Ребят напишу в теме про паузу! Не получается сделать паузу для таймера ТР в языке ST! зада аналогичная нужно при нажатии на паузу таймер останавливается а при пропадании таймер начинает отсчитывать с того же места! Помогите пожалуйста у меня все равно продолжает отсчет даже если убираешь со входа True!
Заранее спасибо!

JoSaint
25.06.2011, 11:41
Выходит сделать паузу не получится никак ??? может есть варианты какие нить другие подскажите подалуста!
Заранее спасибо!

Serge_UA
25.06.2011, 16:35
Выходит сделать паузу не получится никак ??? может есть варианты какие нить другие подскажите подалуста!
Заранее спасибо!

Вы функциональный блок выложенный в сообщении #7 этой темы смотрели/тестировали?
Не подходит?

JoSaint
25.06.2011, 22:46
Вы функциональный блок выложенный в сообщении #7 этой темы смотрели/тестировали?
Не подходит?

Нет не пробывал потому что там таймер TON а мне строго нужен TP! или там без разницы какой поставить!

Serge_UA
25.06.2011, 23:35
"Вам шашечки или ехать?" (c)

В чем заключается строгая необходимость TP вместо TON? Оба отсчитывают заданный интервал времени. В первом таймере событие окончания счета сигнализируется отрицательным фронтом переменной Q, а во втором таймере - положительным. Инвертировать этот сигнал - проблема?

Второе решение, творческое: берете выложенный TON таймер с накоплением и переделываете в TP таймер с накоплением. И, главное, не забываете выложить свое творенье здесь.

JoSaint
26.06.2011, 10:47
"Вам шашечки или ехать?" (c)

В чем заключается строгая необходимость TP вместо TON? Оба отсчитывают заданный интервал времени. В первом таймере событие окончания счета сигнализируется отрицательным фронтом переменной Q, а во втором таймере - положительным. Инвертировать этот сигнал - проблема?

Второе решение, творческое: берете выложенный TON таймер с накоплением и переделываете в TP таймер с накоплением. И, главное, не забываете выложить свое творенье здесь.

Нам и шашечки и ехать! У меня оченб большая программа написанная с помощью таймера ТР и не охота много переделывать в самом алгоритме управления! А еще лично мне тяжеловато представляется как из TON->TP получается а то вы тут написали как будто это элементарно, я так не думаю! Вот можно заморочится и с помощью BLINK сделать это ДА! и так наверно будет проще всего!
ПС Ув. Serge_UA если у вас получится то о чем вы писали выложите пожалуйста я хоть гляну!

Александр Приходько
27.06.2011, 09:35
Нам и шашечки и ехать! У меня оченб большая программа написанная с помощью таймера ТР и не охота много переделывать в самом алгоритме управления! А еще лично мне тяжеловато представляется как из TON->TP получается а то вы тут написали как будто это элементарно, я так не думаю! Вот можно заморочится и с помощью BLINK сделать это ДА! и так наверно будет проще всего!
ПС Ув. Serge_UA если у вас получится то о чем вы писали выложите пожалуйста я хоть гляну!

Если вам тяжело представляется, не значит что так и есть. Программирование такая вещь, когда одно и тоже можно решить несколькими различными способами. Таймер TP нет ни какой сложности реализовать на ТONах и TOFах. Посмотрите пример, который вам предоставили. Не думаю что сильно так уж придется программу вам переделывать.

Max1987
13.01.2015, 08:39
добрый день, тема я смотрю давно закрыта, но всеж по пробую спросит: в програмировании плк не так давно, от силы месяц,, хотелось бы что бы кто нибудь обьяснил как инвертировать тот таймер который выложил ТС, или как его переделать под таймер Tp. Зарание спасибо, надеюсь найдутся добрые люди)))

amn
13.01.2015, 12:08
посмотрите тут (http://www.owen.ru/forum/showthread.php?t=15833&p=119816&viewfull=1#post119816)

Эдуард_Н
13.01.2015, 12:57
См. статью, там пример.

А можно посмотреть всю подписку этого журнала за 2006Г?

petera
13.01.2015, 13:16
А можно посмотреть всю подписку этого журнала за 2006Г?
Запросто:rolleyes:, но только про отладку программ http://prolog-plc.ru/pb1

Эдуард_Н
13.01.2015, 16:06
Ага, спасибочки, её то и надо было.

Эдуард_Н
13.01.2015, 19:43
А где бы скачать в нормальном качестве книгу Петров И.В., "Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования"?

petera
13.01.2015, 20:10
А где бы скачать в нормальном качестве книгу Петров И.В., "Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования"?
Гугл Вам в помощь. Т.к. прямые ссылки на труды уважаемого Петрова на форуме не приветствуются. Да и ничего особенного в ней нет, книга для совсем "чайников"

Эдуард_Н
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; ' не имеет действия. Это сделано намеренно?

Yegor
21.01.2015, 18:10
Я кстати вот как делал... Брал либу 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; ' не имеет действия. Это сделано намеренно?

Кто ни будь подскажет где ошибка?

Abrammm
08.02.2015, 19:31
Скачал из 7-го сообщения таймер с паузой TONP. Добавил его в CDS в виде библиотеки, написал программу, а когда дело дошло до отладки при заливке программы в ПЛК160 он начал ругаться на эту библиотеку "Неразрешенные ссылки на внешние POU: TONP TONPinit". Ищу решение уже второй день, форум облазил. Здесь читал http://www.owen.ru/forum/showthread.php?t=2758 но не понял что нужно сделать.
Подскажите пожалуйста. 16632

amn
08.02.2015, 23:56
А ссылку из 20-го сообщения смотрели? Не подходит?

Abrammm
09.02.2015, 14:45
Не подходит, он продолжает считать даже после пропадания сигнала на входе in, чтоб он не считал пауза всегда должна быть нажата.
Мне необходимо что бы когда на входе in был TRUE он считал, при появлении на входе pause TRUE он прекращал отсчёт времени, а при пропадании продолжал отсчёт с того места где остановился. А если на входе in пропадает TRUE счёт времени сбрасывался в 0.

Если кому несложно можете переделать функциональный блок таймер TONP из седьмого сообщения на язык ST, буду очень благодарен.

amn
09.02.2015, 16:42
Таймер TON с паузой на языке ST.

Abrammm
09.02.2015, 17:34
Спасибо БОЛЬШОЕ! Все работает как нужно.

Testkom
18.11.2015, 08:39
Как его вставить в программу?
А, все, разобрался! Спасибо.

BOJIHA
11.11.2019, 09:36
Добрый день.
Не могли бы сбросить данный пример TONP.zip почему то не скачивается.
заранее спасибо

BOJIHA
11.11.2019, 09:45
подскажите пожалуйста , как вставить этот файл в программу?

_Mikhail
11.11.2019, 21:19
подскажите пожалуйста , как вставить этот файл в программу?
Проект - Импорт

petera
11.11.2019, 22:21
У меня проще, только код, без вспомогательных таймеров и триггеров

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?

melky
14.05.2020, 08:36
Lordorakus Вам кто-то мешает взять код на ST и создать FBD блок и использовать его в CFC ?

Lordorakus
14.05.2020, 08:48
Lordorakus Вам кто-то мешает взять код на ST и создать FBD блок и использовать его в CFC ?

Чутка поспешил комментарий написать, не проанализировав код выше :)
Уже сделал данный таймер по примеру, спасибо petera

werqas
23.11.2021, 17:59
Здравствуйте, не могли бы вы помочь переделать данный код для tp таймера. Возможно ли это?

kondor3000
23.11.2021, 18:45
Здравствуйте, не могли бы вы помочь переделать данный код для tp таймера. Возможно ли это?

Вы бы лучше написали, что вам надо. Как должно работать, может и переделывать ничего не надо.

werqas
25.11.2021, 13:08
Нужен блок, который начинает работу при подачи 1 на вход, начинает отсчет времени и подает все это время 1 на выход. После истечения заданного времени на выход подается 0 . Но нужно реализовать паузу. То есть когда подается 1 на вход "пауза" время останавливается и запоминается, на выход - 0. Когда снимем 1 с паузы, время должно продолжиться

petera
25.11.2021, 13:32
Нужен блок, который начинает работу при подачи 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

ks-app
23.10.2022, 09:29
Чё-то примеры не скачиваются. Видимо, удалили уже, тема старая. Жаль...

kondor3000
23.10.2022, 10:12
Чё-то примеры не скачиваются. Видимо, удалили уже, тема старая. Жаль...

Зачем скачивать примеры, если выше выложены коды ФБ (функц. блока) таймера, скопируйте и пользуйтесь)63305