PDA

Просмотр полной версии : Таймер TP что то глючит....



kholonkin
09.12.2014, 19:02
Какая то непонтяка, даю команду на включение таймера, а он почему то свой выход не переключает.
Вся задумка ломается.
во вложении скрин.

Yegor
09.12.2014, 19:22
Первый уже три секунды как выключен. Второй вообще не вызывается при данном Y. Как меняется start из этого скриншота не узнать.

И уберите эту ерунду с 13 по 16 строчки. Есть функция LIMIT.

capzap
09.12.2014, 19:34
Может пора завязывать с программированием, не понимаете что ли что это не Ваше?
отдельно посчитайте чему равна строчка присваиваемая PT, если Y типа INT то это будет 70ms, если реал то 170ms, что Вы там хотите увидет за такой короткий промежуток времени, счетчик хотя бы поставте на передний фронт, ну по поводу LIMIT уже сказали

kholonkin
09.12.2014, 21:41
Первый уже три секунды как выключен. Второй вообще не вызывается при данном Y. Как меняется start из этого скриншота не узнать.

И уберите эту ерунду с 13 по 16 строчки. Есть функция LIMIT.

на скриншоте режим дебагера, переменная start в данном цикле перешла из 0 в 1. т.е. таймер должен сработать в этот момент, т.е. выход также должен перейти из 0 в 1, а этого почему то не происходит. PT у нас равняется 7 секундам.
Почему у него ЕТ больше РТ и как это произошло, я не понимаю, и что из этого вытекает тоже.
Фигня в 13 и 16 строчке... ну мне так удобнее, не вижу ничего зазорного...
Можно конечно извернуться без этих всех таймеров написать.... но блин если они есть... то лучше с ними

amn
10.12.2014, 00:19
Я бы таймер вызывал бы вне проверки условий. Тогда он все время будет выполняться и контролировать момент включения/выключения выхода. И еще, лучше использовать таймер TON или TOF. Не знаю как в КДС3, а в КДС2 TP некорректно работает при PT=0.

lara197a
10.12.2014, 00:51
интересно, что подразумеваете под некорректно работает РТ=0?
использую такой прием для сброса. и не замечал.
ну-ку поделитесь косяком разработчиков кдс:confused:

amn
10.12.2014, 02:32
Если во время работы таймера сбросить PT в 0, то все работает. А попробуйте при PT=0 передернуть вход IN. Выход таймера Q начнет дергаться.

kholonkin
10.12.2014, 10:08
Я бы таймер вызывал бы вне проверки условий......
А в чем разница для таймера, от куда его вызвали?

lara197a
10.12.2014, 13:02
В смысле дергаться? если соединить с физическим выходом, то он будет включен пока на входе EN ТР будет TRUE.
И ничего не дергается.

Yegor
10.12.2014, 14:04
А в чем разница для таймера, от куда его вызвали?Откуда — не имеет значения. Важно, вызываете ли вы его вообще. Можно сколько угодно менять входные переменные функционального блока, но пока вы его не вызовете, значения выходов не изменятся. То есть:
timer.IN := FALSE; (* Ничего не изменится *)
timer(IN := FALSE); (* Таймер обработает FALSE, если было TRUE *)А второй таймер при данных условиях у вас не вызывается ниоткуда совсем.

amn
10.12.2014, 14:08
В смысле дергаться? если соединить с физическим выходом, то он будет включен пока на входе EN ТР будет TRUE.
И ничего не дергается.
цитирую Валенка:

Прикольная особенность TP.
Так как сравнение "меньше или равно" - при постоянном PT=T#0ms и IN=TRUE, TP работает тупо как Q := NOT Q;
обсуждалось тут (http://www.owen.ru/forum/showthread.php?t=12117&p=118540&viewfull=1#post118540)


А в чем разница для таймера, от куда его вызвали?
Дело в том, что если время таймера уже вышло и выход должен отключиться, и таймер у Вас вызывается внутри условия, а условие не выполнилось, то выход не отключится.

kholonkin
10.12.2014, 14:47
Откуда — не имеет значения. Важно, вызываете ли вы его вообще. Можно сколько угодно менять входные переменные функционального блока, но пока вы его не вызовете, значения выходов не изменятся. То есть:
timer.IN := FALSE; (* Ничего не изменится *)
timer(IN := FALSE); (* Таймер обработает FALSE, если было TRUE *)А второй таймер при данных условиях у вас не вызывается ниоткуда совсем.

Конечно вызываю, яж выше писал, что картинка с дебагера, в момент перехода переменной start из 0 в 1. А выход таймера как был 0 так 0 и остался, вот это вот и не понятно.

kholonkin
10.12.2014, 14:55
цитирую Валенка:

обсуждалось тут (http://www.owen.ru/forum/showthread.php?t=12117&p=118540&viewfull=1#post118540)


Дело в том, что если время таймера уже вышло и выход должен отключиться, и таймер у Вас вызывается внутри условия, а условие не выполнилось, то выход не отключится.

Ну да, есть момент, что нет отдельно сброса таймера. Я так понял что его сбросить можно, подав 0 на IN?
Может из за этого коллизии непонятные происходят.

amn
10.12.2014, 15:30
Таймер TP пока не отработает на выходе будет все время TRUE.
Чтобы таймер включился в следующий раз надо будет отключить вход IN. Причем включать его надо уже после отработки таймера (не раньше). Во время работы таймера (когда Q=TRUE) на вход IN он не обращает внимания.

lara197a
10.12.2014, 16:47
если ТР нужно сбросить, то записываю в РТ=T#0.
Он сразу сбрасывает выход.

В сам РТ пишу для удобства 1ms(s...h)*на число.
Естественно при этом больше на вход IN TRUE не подаем.
все просто.

Естественно TP все время в цикле обрабатывается.
Если поместите в функцию, которая не вызывается, то все таймеры внутри останутся в том состоянии, в котором находились во время последнего вызова.

melky
10.12.2014, 17:21
kholonkin ТР не должен сбрасываться при переходе в 0 на IN. Вы вообще читаете справку CDS хоть иногда ? TP включается по фронту на IN, дальше ему по барабану, будет там 0 или появится еще 1, если верить диаграме справки.

kholonkin
10.12.2014, 18:03
kholonkin ТР не должен сбрасываться при переходе в 0 на IN. Вы вообще читаете справку CDS хоть иногда ? TP включается по фронту на IN, дальше ему по барабану, будет там 0 или появится еще 1, если верить диаграме справки.
тупанул с формулировкой, согласен.

kholonkin
11.12.2014, 19:27
В общем все как в операционной, туда - помыл руки, от туда, тоже помыл руки......
Т.е. нужно таймеры сбрасывать in:=0 pt:=T#0s когда они не требуются.

amn
11.12.2014, 20:00
Только смотрите, чтобы случайно не включить in, когда pt=0. Вообще pt обнуляют, когда надо остановить таймер досрочно. А так он сам остановится когда надо. Отключить надо только in.

Я бы на Вашем место рассмотрел бы использование таймера TON. Там вообще проблем нет. Отключили in он сразу сбросился и остановился.

melky
11.12.2014, 21:15
amn как вообще можно сравнивать два совершенно разных таймера ? ТР - импульс заданной длительности и TON - задержка на включение.
Если у TON отключить in ДО его включения, то он никогда и не включится, а если нужно именно включение ?????

capzap
11.12.2014, 22:33
как ни крути таймер работает согласно заявленного

amn
11.12.2014, 23:21
amn как вообще можно сравнивать два совершенно разных таймера ? ТР - импульс заданной длительности и TON - задержка на включение.
Если у TON отключить in ДО его включения, то он никогда и не включится, а если нужно именно включение ?????

TON1(IN:= start, PT:=t#3s);
x:=start AND NOT TON1.Q;

Правда тут еще и досрочное выключение есть если start отключить раньше

amn
11.12.2014, 23:25
capzap, а не пробовали просто таймер запустить с pt=0? Как ведет себя выход Q? У меня не установлен КДС3 и проверить не могу.

capzap
11.12.2014, 23:55
конечно пробовал, моргает как и писали, я только не уверен в каком это первоисточнике написано сбрасывать таймеры с помощью PT, обычно если там и участвует PT то только с входом IN:=FALSE

amn
12.12.2014, 00:38
Значит не поправили. Иногда бывает нужно параметр РТ изменить в процессе работы таймера, ну и может так получиться, что на 0. Поэтому в таких случаях использую другой таймер.

capzap
12.12.2014, 00:54
кто же будет править стандартную библиотеку, если не нра какойто элемент, всегда можно создать собственный, TIME_TO_DWORD творит чудеса :)

lara197a
12.12.2014, 01:38
Я же писал. Все там как и положено. Это визуализация моргает, а Q- в труе, без промаргиваний.

capzap
12.12.2014, 09:30
счего бы ей просто так моргать, в конце концов счетчик передних фронтов не врет

приборист
12.12.2014, 09:40
Я же писал. Все там как и положено. Это визуализация моргает, а Q- в труе, без промаргиваний.

Да нет, не просто моргает. Пускатель тоже греметь начинает :D

lara197a
12.12.2014, 09:59
Физически светодиод на ПЛК 110.К горит без промаргиваний.
Теоретически ПЛК ставит в выход в Q=1 на 1 цикл, при РТ=0 снова и снова в каждом цикле, до изменения состояния IN.