Какая то непонтяка, даю команду на включение таймера, а он почему то свой выход не переключает.
Вся задумка ломается.
во вложении скрин.
Вид для печати
Какая то непонтяка, даю команду на включение таймера, а он почему то свой выход не переключает.
Вся задумка ломается.
во вложении скрин.
Первый уже три секунды как выключен. Второй вообще не вызывается при данном Y. Как меняется start из этого скриншота не узнать.
И уберите эту ерунду с 13 по 16 строчки. Есть функция LIMIT.
Может пора завязывать с программированием, не понимаете что ли что это не Ваше?
отдельно посчитайте чему равна строчка присваиваемая PT, если Y типа INT то это будет 70ms, если реал то 170ms, что Вы там хотите увидет за такой короткий промежуток времени, счетчик хотя бы поставте на передний фронт, ну по поводу LIMIT уже сказали
на скриншоте режим дебагера, переменная start в данном цикле перешла из 0 в 1. т.е. таймер должен сработать в этот момент, т.е. выход также должен перейти из 0 в 1, а этого почему то не происходит. PT у нас равняется 7 секундам.
Почему у него ЕТ больше РТ и как это произошло, я не понимаю, и что из этого вытекает тоже.
Фигня в 13 и 16 строчке... ну мне так удобнее, не вижу ничего зазорного...
Можно конечно извернуться без этих всех таймеров написать.... но блин если они есть... то лучше с ними
Я бы таймер вызывал бы вне проверки условий. Тогда он все время будет выполняться и контролировать момент включения/выключения выхода. И еще, лучше использовать таймер TON или TOF. Не знаю как в КДС3, а в КДС2 TP некорректно работает при PT=0.
интересно, что подразумеваете под некорректно работает РТ=0?
использую такой прием для сброса. и не замечал.
ну-ку поделитесь косяком разработчиков кдс:confused:
Если во время работы таймера сбросить PT в 0, то все работает. А попробуйте при PT=0 передернуть вход IN. Выход таймера Q начнет дергаться.
В смысле дергаться? если соединить с физическим выходом, то он будет включен пока на входе EN ТР будет TRUE.
И ничего не дергается.
Откуда — не имеет значения. Важно, вызываете ли вы его вообще. Можно сколько угодно менять входные переменные функционального блока, но пока вы его не вызовете, значения выходов не изменятся. То есть:Цитата:
А в чем разница для таймера, от куда его вызвали?
А второй таймер при данных условиях у вас не вызывается ниоткуда совсем.Код:timer.IN := FALSE; (* Ничего не изменится *)
timer(IN := FALSE); (* Таймер обработает FALSE, если было TRUE *)
цитирую Валенка:Цитата:
В смысле дергаться? если соединить с физическим выходом, то он будет включен пока на входе EN ТР будет TRUE.
И ничего не дергается.
обсуждалось тутЦитата:
Прикольная особенность TP.
Так как сравнение "меньше или равно" - при постоянном PT=T#0ms и IN=TRUE, TP работает тупо как Q := NOT Q;
Дело в том, что если время таймера уже вышло и выход должен отключиться, и таймер у Вас вызывается внутри условия, а условие не выполнилось, то выход не отключится.Цитата:
А в чем разница для таймера, от куда его вызвали?
Таймер TP пока не отработает на выходе будет все время TRUE.
Чтобы таймер включился в следующий раз надо будет отключить вход IN. Причем включать его надо уже после отработки таймера (не раньше). Во время работы таймера (когда Q=TRUE) на вход IN он не обращает внимания.
если ТР нужно сбросить, то записываю в РТ=T#0.
Он сразу сбрасывает выход.
В сам РТ пишу для удобства 1ms(s...h)*на число.
Естественно при этом больше на вход IN TRUE не подаем.
все просто.
Естественно TP все время в цикле обрабатывается.
Если поместите в функцию, которая не вызывается, то все таймеры внутри останутся в том состоянии, в котором находились во время последнего вызова.
kholonkin ТР не должен сбрасываться при переходе в 0 на IN. Вы вообще читаете справку CDS хоть иногда ? TP включается по фронту на IN, дальше ему по барабану, будет там 0 или появится еще 1, если верить диаграме справки.
В общем все как в операционной, туда - помыл руки, от туда, тоже помыл руки......
Т.е. нужно таймеры сбрасывать in:=0 pt:=T#0s когда они не требуются.
Только смотрите, чтобы случайно не включить in, когда pt=0. Вообще pt обнуляют, когда надо остановить таймер досрочно. А так он сам остановится когда надо. Отключить надо только in.
Я бы на Вашем место рассмотрел бы использование таймера TON. Там вообще проблем нет. Отключили in он сразу сбросился и остановился.
amn как вообще можно сравнивать два совершенно разных таймера ? ТР - импульс заданной длительности и TON - задержка на включение.
Если у TON отключить in ДО его включения, то он никогда и не включится, а если нужно именно включение ?????
как ни крути таймер работает согласно заявленного
capzap, а не пробовали просто таймер запустить с pt=0? Как ведет себя выход Q? У меня не установлен КДС3 и проверить не могу.
конечно пробовал, моргает как и писали, я только не уверен в каком это первоисточнике написано сбрасывать таймеры с помощью PT, обычно если там и участвует PT то только с входом IN:=FALSE
Значит не поправили. Иногда бывает нужно параметр РТ изменить в процессе работы таймера, ну и может так получиться, что на 0. Поэтому в таких случаях использую другой таймер.
кто же будет править стандартную библиотеку, если не нра какойто элемент, всегда можно создать собственный, TIME_TO_DWORD творит чудеса :)
Я же писал. Все там как и положено. Это визуализация моргает, а Q- в труе, без промаргиваний.
счего бы ей просто так моргать, в конце концов счетчик передних фронтов не врет
Физически светодиод на ПЛК 110.К горит без промаргиваний.
Теоретически ПЛК ставит в выход в Q=1 на 1 цикл, при РТ=0 снова и снова в каждом цикле, до изменения состояния IN.