Показано с 1 по 10 из 10

Тема: пауза в Codesys

  1. #1

    По умолчанию пауза в Codesys

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

  2. #2

    По умолчанию

    Пример программы:

    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

  3. #3

    По умолчанию

    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

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

  4. #4
    Пользователь
    Регистрация
    20.07.2007
    Адрес
    Киров
    Сообщений
    152

    По умолчанию

    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

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

  5. #5

    По умолчанию

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

  6. #6
    Пользователь
    Регистрация
    20.07.2007
    Адрес
    Киров
    Сообщений
    152

    По умолчанию

    Цитата Сообщение от DimaSik Посмотреть сообщение
    ну получается так что если мы сначала охлаждаем а потом переходим на нагревание, у нас происходит задержка
    это уже со сбросом таймеров ?

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

  7. #7

    По умолчанию

    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; 19.05.2009 в 10:42.

  8. #8

    По умолчанию

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

  9. #9
    Пользователь
    Регистрация
    20.07.2007
    Адрес
    Киров
    Сообщений
    152

    По умолчанию

    Цитата Сообщение от DimaSik Посмотреть сообщение
    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
    тогда вот так

  10. #10

    По умолчанию

    Большое спасибо, все заработало.

Ваши права

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