PDA

Просмотр полной версии : Не работает таймер



TrTinf
20.09.2022, 09:01
Добрый день
Есть вот такой блок

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 Приходит, Время он в ПТ записывает верно, но не считает время." - о каком именно таймере речь?

Покажите проблему скриншотами или снимите видео.

TrTinf
20.09.2022, 09:18
62721

Все Переменные типа TON Висят в таком положении.
Не считает Счетчик ET в переменных типа TON.
Уточню что он их в принципе и не считает при запуске, на IN Приходит сигнал True и все.
Пошагово такая же история.

Cs-Cs
20.09.2022, 09:51
TrTinf Про функцию capzap уже сказал. Где вызывается этот код?
А я ещё добавлю, что нефиг обрабатывать таймеры в IFах! Все таймеры надо бы вызывать без IFов, так как таймер сможет досчитать и остановиться только если вызывается постоянно. Иначе он так и зависнет фиг в каком состоянии, так как IF перестанет выполняться, а последний такт таймера "О, я досчитал", так и не будет выполнен в общих случаях.

TrTinf
20.09.2022, 10:47
Код вызывается при запуске программы сразу же.
Если быть конкретным это начало PLC_PRG Первые строчки.

К сожалению идея алгоритма в том что, там без таймерах в IFах не получится сделать, если есть лучше варианты, буду рад выслушать.

Евгений Кислов
20.09.2022, 11:03
Код вызывается при запуске программы сразу же.
Если быть конкретным это начало PLC_PRG Первые строчки.

К сожалению идея алгоритма в том что, там без таймерах в IFах не получится сделать, если есть лучше варианты, буду рад выслушать.

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

Cs-Cs
20.09.2022, 11:05
К сожалению идея алгоритма в том что, там без таймерах в IFах не получится сделать, если есть лучше варианты, буду рад выслушать.
Не хочу обидеть некорректным вопросом, который может прозвучать грубо: ты начинающий или нет?
А то я вижу стандартные косяки:
а) "Кажется", что таймер будет сам считать, а через IF можно его или запускать или останавливать. Это не так.
б) Упущены фишки R_TRIG и F_TRIG
в) Упущена фишка конечных автоматов (State Machine).

Ну и ты сам алгоритм-то не сказал. Вроде как там идёт запск, а потом пауза.
Я мутил алгоритмы вида "Запуск - выдержка - работа - стоп + выдержка - ещё выдержка - перезапуск - выдерка - работа" на таймерах и конечном автомате. Работало! И ты так сможешь.

Что вижу по коду:
1. Непонятно, что за Step - это шаг конечного автомата или какая-то переменная-флаг? Что это?
2. Если ты хочешь получить мигалку (вроде как TimeCycle у тебя перезапускается) - может быть взять BLINK?
3. Косяк в IFах (тут я догадываюсь): у тебя IN на TimeCycle станет FALSE (чтобы он перезапустился) ТОЛЬКО если отработает второй таймер TimePauseAfterStep. А если случится так, что этот таймер по каким-то причинам не заработает (он ещё и в цикле крутится и вызывается хрен когда), то TimeCycle никогда не перезапустится.

В общем, хотелось бы алгортим.

TrTinf
20.09.2022, 11:27
62722

Ближе к начинающему если есть такой вопрос.

а) Останавливать его надо, надо когда он посчитает время, чтобы дальше выполнилось действие. Проблема в том что он даже не считает TimeCycle
б) Не упущены а не использованы потому что нет необходимости.

Происходит запуск, выбирается шаг 1, всего 4 шага.
Открыты клапана PV 11-14. (Базовая настройка запуска)
Остальные закрыты. Это верно.
Далее он должен отработать по таймеру время открытия и выключиться, после чего идет пауза в 2 секунды и если она есть то происходит переход на шаг 2.
Step - переменная конструкции CASE
TimeCycle Перезапускается потому что подразумевается что эта штука будет запускаться либо по времени либо по падению давления.

Ну он и никогда и не перезапускается потому что даже TimeCycle не выполняется))

Cs-Cs
20.09.2022, 11:38
TrTinf Хм. Так вот конструкция с CASE и шагами как раз и называется конечным автоматом состояний (State Machine).
1. Если закомментировать ВЕСЬ код и оставить только вызов таймера - что будет?
2. Не используется ли этот же таймер в других состояниях автомата?
3. Так может для выдержки "...когда кончится выдержка" использовать вообще TOF?

TrTinf
20.09.2022, 12:15
Пробовал.
Несколько раз.
После каждого все равно на всякий случай делаю.

TrTinf
20.09.2022, 12:16
Попробовал.
Убрал все
ET Не считает. , Сигнал висит ,True есть...
Все те же самые симптомы.

TrTinf
20.09.2022, 12:48
Спасибо за совет
TOF Работает , исправил проблему.
Остальное сам нашел.