PDA

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



masterkey
29.09.2016, 13:51
В проекте по кнопке запускаем команду запуска таймера при определенном условии в конкретном случае галочка BOOL если галочка true то запускаем цикл и он успешно отрабатывает включая и выключая реле на MU110-32r, но при втором нажатии таймер не стартует ниже код программы таймер на 10 секунд. Подскажите как его перезапустить.

IF Start_Button=TRUE THEN
TimerStend.PT:=INT_TO_TIME(Time_Cikl)*10000;
TimerStend(IN := Start_Button, PT:= INT_TO_TIME(Time_Cikl)*10000);
VarBOOL2 :=TimerStend.Q;
wOut:=TIME_TO_INT(TimerStend.ET);
END_IF;

capzap
29.09.2016, 14:23
Вы на форуме не пытались поиском воспользоваться, в Вашем примере таймер ни когда не сбрасывается, поэтому и не запускается повторно

masterkey
29.09.2016, 14:38
TimerStend.IN :=False
прописывал при выходе из команды и в теле программы не помогло

capzap
29.09.2016, 14:47
if start and not old then
timer.in:=true;
elsif old and not start then
timer.in:=false;
end_if;
old:=start;
timer(in:=timer.in,pt:=t#10s);
if timer.q then
...
end_if;
как то так и по поиску Вы найдете массу подобных примеров

lara197a
29.09.2016, 15:58
вообще старайтесь выносить это из функции.
или должен быть контроль завершения операций внутри иф.

masterkey
29.09.2016, 20:11
а может кто проверить на стандартной библиотеке 3.5.5.0 таймеры tof ton они у меня не запускаются, а вот таймер Tp без проблем

capzap
29.09.2016, 20:22
а может кто проверить на стандартной библиотеке 3.5.5.0 таймеры tof ton они у меня не запускаются, а вот таймер Tp без проблем
таймеры работают, а вот Вы не хотите прислушиваться к советам

masterkey
29.09.2016, 20:36
Уважаемый capzap если честно не очень разобрался в Вашем примере. что за переменная old если это состояние выхода то к нему нельзя присвоить значение и тут у меня тупик в справке вроде доступно написано но при смене значения на входе ничего не происходит

masterkey
29.09.2016, 20:41
у меня первый таймер который организует время работы ТЭНов описан в действии кнопки
IF Start_Button=TRUE THEN
TimerStend(IN := Start_Button, PT:= INT_TO_TIME(Time_Cikl)*60000);
VarBOOL2 :=TimerStend.Q;
а в теле программы
IF Start_Button=TRUE THEN
Start_Button_Prc();
ELSE
Start_Button:=FALSE;
TimerStend(in:=FALSE);
TimerStend(PT:=T#0S);
END_IF
но это таймер ТР а другие запустить не получается хочу на их основе сделать что-то вроде пид регулятора

capzap
29.09.2016, 22:33
Start_Button:=FALSE; - зачем, если это условие когда и так фальш?

TimerStend(in:=FALSE);
TimerStend(PT:=T#0S); - зачем выполнять (а не присваивать аргументам) два раза таймер?

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

masterkey
29.09.2016, 22:52
кажется становится чуток понятнее из Вашего поста если мы хотим записать в порт входа истину, то мы пишем TimerStend.in:=true, а если хотим выполнить таймер, то пишем TimerStend(In:=true, PT:=T#0S) я правильно понял? и сам проект

capzap
30.09.2016, 07:07
когда в РТ пишите ноль секунд, Вы таким образом нарушаете работу таймера, для обычного ТР это сброс, а для TON и TOF это немедленная передача входа на выход. По поводу просто точки и скобок всё верно, только в скобках таймер выполняется

masterkey
30.09.2016, 09:28
IF NOT Start_Button AND tonhot.Q=FALSE THEN

timerHot:=TRUE;
tofHot.IN:=TRUE;
END_IF;

tonhot(in:=timerHot, pt:=T#10S);

IF tonHot.Q=TRUE THEN
timerHot:=FALSE;
END_IF

tofhot(in:=tonhot.Q, pt:=T#5S);

IF tofHot.Q=FALSE THEN
timerHot:=TRUE;

END_IF
исправил. работает, но на сколько корректно оформил не знаю

masterkey
02.10.2016, 20:44
Форумчане добрый вечер. не могу запустить генерацию на TOF TON таймерах. работа горит, а болезнь по кругу водит генерацию пытаюсь запустить в подпрограмме Hot_Cam

capzap
02.10.2016, 21:32
ну там все печально. какие то не законченные условия, не охватывающие весь диапазон значений, дубляж переменных для управления таймером, какой то изврат с включением выключением таймеров
Лучше напишите что требуется для управления Вашими тенами и вентилятором, опишите какие сигналы действительно должны управлять, а какие включать уже реальные устройства

masterkey
02.10.2016, 22:04
Вроде запустил, убрал все лишнее. по ТЗ переменные Temp_Ch1 - это термопара с нее берутся значения температуры и если они меньше заданной температуры (Temp_Ch1z - заданная температура (35градусов для отладки)) на 20%(28 градусов для отладки) то просто включаются два (переменные выхода q5,q6) пускателя которые управляют нагревателями и они остаются включенными до тех пор пока температура не превысит 28 градусов. Как только температура превысила 28 градусов в дело вступает примитивный ПИД регулятор который включая и выключая пускатели нагревателей подтягивает температуру к заданной и вся эта температура должна поддерживаться на протяжения времени цикла как только время цикла закончилось то и все выключилось на протяжении всего цикла вентилятор q9 включен

capzap
02.10.2016, 22:21
IF Hot_Run=TRUE AND Hold_Run=FALSE AND Start_Button=TRUE AND VarBOOL2=TRUE THEN //Условие для работы камеры нагрева
q9:=TRUE; // включаем вентилятор камеры нагрева
//timerHot:=FALSE; // Выключаем таймер нагрева

END_IF;
//Условие на включение ПИД, включится когда температура на термопаре будет больше заданной температуры за минусом 20% и меньше или равна заданной
timerHot:=FALSE;
IF Temp_Ch1>(Temp_Ch1z-(Temp_Ch1z*0.2)) AND Temp_Ch1<=Temp_Ch1z THEN
timerHot:=TRUE; //Переменная для запуска таймеров будет менятся в зависимости от того какой таймер сработал
ELSIF Temp_Ch1<=(Temp_Ch1z-(Temp_Ch1z*0.2)) AND pid=FALSE THEN
q5:=TRUE;
q6:=TRUE;
ELSE
q5:=FALSE;
q6:=FALSE;
END_IF;
//
IF tonhot.q THEN
q5:=NOT q5;
q6:=NOT q6;
END_IF;
tonHot(in:=NOT tonHot.Q AND timerHot, pt:=T#2S);


так попробуйте

masterkey
02.10.2016, 22:32
Действительно все работает проверил на железе. оптимизировали так оптимизировали даже нечего сказать просто восхищен. Спасибо