Просмотр полной версии : Не работает таймер
Добрый день
Есть вот такой блок
setTimeCycle : TIME := T#20S;
TimeCycle : TON;
setTimePauseAfterStep : TIME := T#2S;
TimePauseAfterStep : TON;
TimeCycle(IN:=TRUE, PT:=setTimeCycle);
IF TimeCycle.Q THEN
Global.Vlv.PV11_14.iAutoStart := FALSE;
TimePauseAfterStep(IN:=TRUE, PT:=setTimePauseAfterStep);
IF TimePauseAfterStep.Q THEN
step := 2;
TimePauseAfterStep(IN:=FALSE);
TimeCycle(IN:=FALSE);
END_IF;
END_IF;
Не срабатывают счетчики.
То есть Сигнал на In:= True Приходит, Время он в ПТ записывает верно, но не считает время.
В чем может быть косяк?
Евгений Кислов
20.09.2022, 09:11
Добрый день.
Что значит "Не срабатывают счетчики"? Где эти счетчики в вашем коде?
"То есть Сигнал на In:= True Приходит, Время он в ПТ записывает верно, но не считает время." - о каком именно таймере речь?
Покажите проблему скриншотами или снимите видео.
62721
Все Переменные типа TON Висят в таком положении.
Не считает Счетчик ET в переменных типа TON.
Уточню что он их в принципе и не считает при запуске, на IN Приходит сигнал True и все.
Пошагово такая же история.
TrTinf Про функцию capzap уже сказал. Где вызывается этот код?
А я ещё добавлю, что нефиг обрабатывать таймеры в IFах! Все таймеры надо бы вызывать без IFов, так как таймер сможет досчитать и остановиться только если вызывается постоянно. Иначе он так и зависнет фиг в каком состоянии, так как IF перестанет выполняться, а последний такт таймера "О, я досчитал", так и не будет выполнен в общих случаях.
Код вызывается при запуске программы сразу же.
Если быть конкретным это начало PLC_PRG Первые строчки.
К сожалению идея алгоритма в том что, там без таймерах в IFах не получится сделать, если есть лучше варианты, буду рад выслушать.
Евгений Кислов
20.09.2022, 11:03
Код вызывается при запуске программы сразу же.
Если быть конкретным это начало PLC_PRG Первые строчки.
К сожалению идея алгоритма в том что, там без таймерах в IFах не получится сделать, если есть лучше варианты, буду рад выслушать.
Выложите ваш проект и подробно опишите, что в нем нужно сделать, чтобы увидеть вашу проблему.
К сожалению идея алгоритма в том что, там без таймерах в IFах не получится сделать, если есть лучше варианты, буду рад выслушать.
Не хочу обидеть некорректным вопросом, который может прозвучать грубо: ты начинающий или нет?
А то я вижу стандартные косяки:
а) "Кажется", что таймер будет сам считать, а через IF можно его или запускать или останавливать. Это не так.
б) Упущены фишки R_TRIG и F_TRIG
в) Упущена фишка конечных автоматов (State Machine).
Ну и ты сам алгоритм-то не сказал. Вроде как там идёт запск, а потом пауза.
Я мутил алгоритмы вида "Запуск - выдержка - работа - стоп + выдержка - ещё выдержка - перезапуск - выдерка - работа" на таймерах и конечном автомате. Работало! И ты так сможешь.
Что вижу по коду:
1. Непонятно, что за Step - это шаг конечного автомата или какая-то переменная-флаг? Что это?
2. Если ты хочешь получить мигалку (вроде как TimeCycle у тебя перезапускается) - может быть взять BLINK?
3. Косяк в IFах (тут я догадываюсь): у тебя IN на TimeCycle станет FALSE (чтобы он перезапустился) ТОЛЬКО если отработает второй таймер TimePauseAfterStep. А если случится так, что этот таймер по каким-то причинам не заработает (он ещё и в цикле крутится и вызывается хрен когда), то TimeCycle никогда не перезапустится.
В общем, хотелось бы алгортим.
62722
Ближе к начинающему если есть такой вопрос.
а) Останавливать его надо, надо когда он посчитает время, чтобы дальше выполнилось действие. Проблема в том что он даже не считает TimeCycle
б) Не упущены а не использованы потому что нет необходимости.
Происходит запуск, выбирается шаг 1, всего 4 шага.
Открыты клапана PV 11-14. (Базовая настройка запуска)
Остальные закрыты. Это верно.
Далее он должен отработать по таймеру время открытия и выключиться, после чего идет пауза в 2 секунды и если она есть то происходит переход на шаг 2.
Step - переменная конструкции CASE
TimeCycle Перезапускается потому что подразумевается что эта штука будет запускаться либо по времени либо по падению давления.
Ну он и никогда и не перезапускается потому что даже TimeCycle не выполняется))
TrTinf Хм. Так вот конструкция с CASE и шагами как раз и называется конечным автоматом состояний (State Machine).
1. Если закомментировать ВЕСЬ код и оставить только вызов таймера - что будет?
2. Не используется ли этот же таймер в других состояниях автомата?
3. Так может для выдержки "...когда кончится выдержка" использовать вообще TOF?
Пробовал.
Несколько раз.
После каждого все равно на всякий случай делаю.
Попробовал.
Убрал все
ET Не считает. , Сигнал висит ,True есть...
Все те же самые симптомы.
Спасибо за совет
TOF Работает , исправил проблему.
Остальное сам нашел.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot