Просмотр полной версии : пауза в Codesys
при автонастройке идет переключение реле(нагреватель) и реле(охладитель) без паузы. а мне хотелось бы что бы была задержка в несколько секунд. не могли бы подсказать как сделать такую паузу. я, например хочу, чтобы после отключения охладителя прошла какая то задержка и только после это включился нагреватель.
Пример программы:
Pid_one(PV:=Temp1, PV_TIME:=Time1, SP:=yst_temp, START_ANR:=START_ANR1, YDOP:=YDOP1, _IMIN:= IMIN1, _IMAX:= IMAX1);
out_val:=pid_one.out_val;
START_ANR2:=pid_one.STATE_ANR;
IF
out_val>0
THEN
Heather:=REAL_TO_WORD(MAX(0, out_val)*655.35);
cooler:=0;
ELSE
cooler:=REAL_TO_WORD(MAX(0,out_val*-1)*655.35);
Heather:=0;
END_IF
IF
out_val>0
THEN
tim1(IN:=1 ,PT :=T#5S);
d:=tim1.Q;
IF
d=1
THEN
Heather:=REAL_TO_WORD(MAX(0, out_val)*655.35);
END_IF
cooler:=0;
ELSE
tim2(IN:=1 PT :=T#5S);
c:=tim2.Q;
IF c=1
THEN
cooler:=REAL_TO_WORD(MAX(0,out_val*-1)*655.35);
END_IF
Heather:=0;
END_IF
Попытался реализовать это вот таким вот образом; в начале, например на нагреватели задержка есть, а потом при переходе на охладитель она пропадает.
IF
out_val>0
THEN
tim1(IN:=1 ,PT :=T#5S);
d:=tim1.Q;
IF
d=1
THEN
Heather:=REAL_TO_WORD(MAX(0, out_val)*655.35);
tim1(IN:=0 PT:=T5s);
END_IF
cooler:=0;
ELSE
tim2(IN:=1 PT :=T#5S);
c:=tim2.Q;
IF c=1
THEN
cooler:=REAL_TO_WORD(MAX(0,out_val*-1)*655.35);
tim2(IN:=0 PT:=T5s);
END_IF
Heather:=0;
END_IF
попробуйте так... :)
п.с. за точность не ручаюсь, КДС под рукой нема, но идея в том что таймеры надо сбрасывать ибо они работают по фронту входа, а он у вас после первого вызова не меняется.
не знаю в чем проблема, ну получается так что если мы сначала охлаждаем а потом переходим на нагревание, у нас происходит задержка, но после этого переходы происходят опять без задержки; а если мы начинаем с нагревателя а потом переходим на охладитель, то задержки нет вообще, даже при первом переходе.
ну получается так что если мы сначала охлаждаем а потом переходим на нагревание, у нас происходит задержка
это уже со сбросом таймеров ?
а если мы начинаем с нагревателя а потом переходим на охладитель, то задержки нет вообще, даже при первом переходе.
таки покажите проект...
VAR
Pid_one: PID_2POS_IM_ANR;
yst_temp: REAL;
START_ANR1: BOOL;
YDOP1: REAL;
IMIN1: REAL;
IMAX1: REAL;
out_val: REAL;
START_ANR2: BYTE;
c: BOOL;
d: BOOL;
tim1: TON;
tim2: TON;
END_VAR
Pid_one(PV:=Temp1, PV_TIME:=Time1, SP:=yst_temp, START_ANR:=START_ANR1, YDOP:=YDOP1, _IMIN:= IMIN1, _IMAX:= IMAX1);
out_val:=pid_one.out_val;
START_ANR2:=pid_one.STATE_ANR;
IF
START_ANR2=1
THEN
START_ANR1:=0;
ELSE
START_ANR1:=1;
END_IF
IF
out_val>0
THEN
tim1(IN:=1 ,PT :=T#2S);
d:=tim1.Q;
IF
d=1
THEN
Heather:=REAL_TO_WORD(MAX(0, out_val)*655.35);
tim1(IN:=0, PT:=T#2s);
END_IF
cooler:=0;
ELSE
tim2(IN:=1, PT :=T#2S);
c:=tim2.Q;
IF c=1
THEN
cooler:=REAL_TO_WORD(MAX(0,out_val*-1)*655.35);
tim2(IN:=0, PT:=T#2s);
END_IF
Heather:=0;
END_IF
Моя задача - при переходе с нагревателя на охладитель (или наоборот) создать паузу в 1 или 2 секунды.
Что происходит.
В начале при первом включении пауза появляется, но потом при переходе на охладитель она пропадает и дальше переходы происходят без паузы. Если начинать сначало охлаждать тогда первый переход с охлаждения на нагревание происходит с паузой, но потом при переходе с нагревания на охлаждение пауза пропадает и дальше опять переходы проходят без паузы.
люди может кто-нибудь помочь, в решение этой проблемы, подсказать где у меня ошибка. а то уже испробовал кучу вариантов ни чего не помогает.
IF
out_val>0
THEN
tim2(IN:=0, PT:=T#2s);
tim1(IN:=1, PT:=T#2S);
d:=tim1.Q;
IF
d=1
THEN
Heather:=REAL_TO_WORD(MAX(0, out_val)*655.35);
END_IF
cooler:=0;
ELSE
tim1(IN:=0, PT:=T#2s);
tim2(IN:=1, PT:=T#2S);
c:=tim2.Q;
IF c=1
THEN
cooler:=REAL_TO_WORD(MAX(0,out_val*-1)*655.35);
END_IF
Heather:=0;
END_IF
тогда вот так :)
Большое спасибо, все заработало.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot