PDA

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



DimaSik
18.05.2009, 10:03
при автонастройке идет переключение реле(нагреватель) и реле(охладитель) без паузы. а мне хотелось бы что бы была задержка в несколько секунд. не могли бы подсказать как сделать такую паузу. я, например хочу, чтобы после отключения охладителя прошла какая то задержка и только после это включился нагреватель.

DimaSik
18.05.2009, 10:42
Пример программы:

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

DimaSik
18.05.2009, 12:45
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

Попытался реализовать это вот таким вот образом; в начале, например на нагреватели задержка есть, а потом при переходе на охладитель она пропадает.

Rand0m
18.05.2009, 14:34
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

попробуйте так... :)
п.с. за точность не ручаюсь, КДС под рукой нема, но идея в том что таймеры надо сбрасывать ибо они работают по фронту входа, а он у вас после первого вызова не меняется.

DimaSik
18.05.2009, 15:11
не знаю в чем проблема, ну получается так что если мы сначала охлаждаем а потом переходим на нагревание, у нас происходит задержка, но после этого переходы происходят опять без задержки; а если мы начинаем с нагревателя а потом переходим на охладитель, то задержки нет вообще, даже при первом переходе.

Rand0m
18.05.2009, 15:35
ну получается так что если мы сначала охлаждаем а потом переходим на нагревание, у нас происходит задержка
это уже со сбросом таймеров ?


а если мы начинаем с нагревателя а потом переходим на охладитель, то задержки нет вообще, даже при первом переходе.

таки покажите проект...

DimaSik
19.05.2009, 07:24
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 секунды.

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

DimaSik
20.05.2009, 07:40
люди может кто-нибудь помочь, в решение этой проблемы, подсказать где у меня ошибка. а то уже испробовал кучу вариантов ни чего не помогает.

Rand0m
21.05.2009, 14:16
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


тогда вот так :)

DimaSik
26.05.2009, 07:15
Большое спасибо, все заработало.