Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 19 из 19

Тема: плк63 сбой работы

  1. #11

    По умолчанию

    Цитата Сообщение от relline Посмотреть сообщение
    неправлиная настройка подразумевает что TN будет "0", в моем случае ПИД регулятор работает хорошо но через некоторые время выскакивает переполнение. при нач. условиях что я использую место датчика обычное сопротивление на входе(как результат вход у меня постоянен и не колеблится) данного переполнения быть не должно.

    ЗЫ: Проводить проводить рестарт ПИД регулятора можно но не вариант.

    "при нач. условиях что я использую место датчика обычное сопротивление на входе(как результат вход у меня постоянен и не колеблится) данного переполнения быть не должно".

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

  2. #12

    По умолчанию

    Цитата Сообщение от kolyan Посмотреть сообщение

    Интересно! Если у Вас вместо датчика резистор, то интегральная составляющая регулятора будет стремиться уменьшить рассогласование между входным значением и уставкой.
    Но, так как при попытках регулятора воздействовать на объект регулирования, сопротивление Вашего резистора остаётся неизменным, а значит и измеренное значение также остаётся неизменным, то начинает накапливаться интегральная составляющая. И накапливаться она будет до тех пор, пока не произойдёт переполнение. Чем меньше время интегрирования, тем быстрее произойдёт переполнение. Но, даже, если время указано значительное, то при данном опыте переполнение всё равно произойдёт, хотя и позже.
    хорошо, допустим я с этим согласен, вопрос остается тогда почему на РАБОЧЕЙ!!! установке случается даное переполнение?но я все таки не согласен:
    1. АЦП не будет держать стабильное значение, оно будет колеблится пускай даже в раене тысячных
    2. если бы было переполнение по Интегральной составляющей согласно Вашей теории то переполнение было по выходу, а на скрине видно что выход "-329,4446" это не переполнение, также видно со скрина что переполнение по входу!

    вот код ращета интегральной составляющей
    FUNCTION_BLOCK INTEGRAL
    VAR_INPUT
    IN:REAL; (* input variable *)
    TMWORD; (* time since last call in msec *)
    RESET:BOOL; (* reset: OUT is set to zero and OVERFLOW to false *)
    END_VAR
    VAR_OUTPUT
    OUT:REAL; (* value of the integral *)
    OVERFLOW:BOOL:=FALSE; (* overflow *)
    END_VAR
    VAR
    END_VAR
    IF RESET THEN
    OUT:=0;
    OVERFLOW:=FALSE;
    ELSIF NOT OVERFLOW THEN
    IF 1E38 - IN*TM < OUT OR -1E38 - IN*TM > OUT THEN
    OVERFLOW:=TRUE;
    ELSE
    OUT:=OUT+IN*TM/1000;
    END_IF;
    END_IF;
    вот как берется параметр IN
    FUNCTION_BLOCK PID
    VAR_INPUT
    ACTUAL :REAL; (* actual value, process variable *)
    SET_POINT:REAL; (* desired value, set point *)
    KP:REAL; (* proportionality const. (P)*)
    TN:REAL; (* reset time (I) in sec *)
    TV:REAL; (* rate time, derivative time (D) in sec*)
    Y_MANUAL:REAL; (* Y is set to this value as long as MANUAL=TRUE *)
    Y_OFFSET:REAL; (* offset for manipulated variable *)
    Y_MIN:REAL; (* minimum value for manipulated variable *)
    Y_MAX:REAL; (* maximum value for manipulated variable *)
    MANUAL:BOOL; (* TRUE: manual: Y is not influenced by controller,
    FALSE: controller determines Y *)
    RESET:BOOL; (* reset: set Y output to Y_OFFSET and reset integral part *)
    END_VAR
    VAR_OUTPUT
    Y:REAL; (* manipulated variable, set value*)
    LIMITS_ACTIVE:BOOL:=FALSE; (* true set value would exceed limits Y_MIN, Y_MAX *)
    OVERFLOW:BOOL:=FALSE; (* overflow in integral part *)
    END_VAR
    VAR
    CLOCK:TON;
    I: INTEGRAL;
    D: DERIVATIVE;
    TMDIFF: DWORD;
    ERROR: REAL;
    INIT: BOOL:=TRUE;
    Y_ADDOFFSET: REAL;
    KPcopy:REAL;
    TNcopy:REAL;
    TVcopy:REAL;
    END_VAR
    IF TN>0 AND KP<> 0 AND (NOT OVERFLOW OR RESET OR MANUAL) THEN
    ERROR := SET_POINT-ACTUAL; (* Regeldifferenz *)

    IF RESET OR MANUAL OR INIT OR (KP<>KPcopy OR TN<>TNcopy OR TV<>TVcopy) THEN (* Reset oder Handbetrieb *)
    I(RESET:=TRUE);
    D(RESET:=TRUE);
    OVERFLOW:=FALSE;
    LIMITS_ACTIVE:=FALSE;
    IF RESET OR INIT THEN
    Y := Y_OFFSET;
    INIT:=FALSE;
    Y_ADDOFFSET := 0;
    ELSIF MANUAL THEN
    Y := Y_MANUAL;
    Y_ADDOFFSET := Y_MANUAL-(Y_OFFSET+KP*(ERROR+I.OUT/TN+D.OUT*TV));
    ELSE
    Y_ADDOFFSET := Y - Y_OFFSET - KP*ERROR;
    END_IF
    TMDIFF:=0;
    CLOCK(IN:=FALSE); (* Timer neu starten *)
    CLOCK(PT:=t#1h, IN:=TRUE);

    TNcopy := TN;
    TVcopy := TV;
    KPcopy := KP;
    ELSE
    CLOCK; (* Timer abfragen *)
    TMDIFF:=TIME_TO_DWORD(CLOCK.ET); (* Zeitdifferenz seit letztem Aufruf *)
    END_IF;

    IF TMDIFF>0 THEN
    CLOCK(IN:=FALSE); (* Timer neu starten *)
    CLOCK(PT:=t#1h, IN:=TRUE);

    D(IN:=ERROR, TM:=TMDIFF, RESET:=FALSE); (* Differential abschдtzen *)
    I(IN:=ERROR, TM:=TMDIFF, RESET:=FALSE); (* Integral abschдtzen *)

    OVERFLOW := I.OVERFLOW;
    IF NOT OVERFLOW THEN
    Y:=Y_OFFSET+KP*(ERROR+I.OUT/TN+D.OUT*TV) + Y_ADDOFFSET;
    IF Y>1E30 OR Y<-1E30 THEN (* Overflow steht bevor, darf aber eigentlich nicht passieren *)
    OVERFLOW:=TRUE;
    END_IF;

    LIMITS_ACTIVE:=FALSE;
    IF Y_MAX>Y_MIN AND Y>Y_MAX THEN (* Stellwert-Obergrenze ьberschritten *)
    LIMITS_ACTIVE:=TRUE;
    IF KP<>0 THEN
    I(IN:=(Y_MAX-Y)*TN/KP,TM:=1000,RESET:=FALSE); (* Integral korrigieren *)
    END_IF
    Y:=Y_MAX;
    END_IF;
    IF Y_MAX>Y_MIN AND Y<Y_MIN THEN (* Stellwert-Untergrenze unterschritten *)
    LIMITS_ACTIVE:=TRUE;
    IF KP<>0 THEN
    I(IN:=(Y_MIN-Y)*TN/KP,TM:=1000,RESET:=FALSE); (* Integral korrigieren *)
    END_IF
    Y:=Y_MIN;
    END_IF;
    END_IF;
    ELSE
    CLOCK(PT:=t#1h,IN:=TRUE);
    END_IF;

    END_IF;
    собсно не понять почему если у меня вход константа происходит прыжок параметра
    Последний раз редактировалось relline; 11.03.2011 в 09:23.

  3. #13

    По умолчанию

    Цитата Сообщение от relline Посмотреть сообщение
    хорошо, допустим я с этим согласен, вопрос остается тогда почему на РАБОЧЕЙ!!! установке случается даное переполнение?
    А, если Вы неправильно подобрали коэффициенты ПИД регулирования, то может слишком быстро накапливаться интегральная составляющая регулятора.
    И, если объект не успевает вовремя выйти на уставку, то, в этом случае - опять же произойдёт переполнение интегральной составляющей.
    Это не значит, что не может быть других, ранее озвученных проблем.
    Я лишь стараюсь указать на возможные ошибки.

  4. #14

    По умолчанию

    Попробуйте вот этот регулятор:
    http://www.owen.ru/forum/attachment....5&d=1293175635

  5. #15

    По умолчанию

    Цитата Сообщение от relline Посмотреть сообщение
    неправлиная настройка подразумевает что TN будет "0", в моем случае ПИД регулятор работает хорошо но через некоторые время выскакивает переполнение. при нач. условиях что я использую место датчика обычное сопротивление на входе(как результат вход у меня постоянен и не колеблится) данного переполнения быть не должно.

    ЗЫ: Проводить проводить рестарт ПИД регулятора можно но не вариант.
    Если у Вас датчика нет, переполнение неминуемо возникнет!!! Значение переменной процесса должно колебаться вокруг задания со сменой знака, в любом другом случае - переполнение. Учите матчасть! Лечится только сбросом. Кстати, на реальном объекте такого не будет.

  6. #16

    По умолчанию

    Цитата Сообщение от Алексей Дмитриев Посмотреть сообщение
    Если у Вас датчика нет, переполнение неминуемо возникнет!!! Значение переменной процесса должно колебаться вокруг задания со сменой знака, в любом другом случае - переполнение. Учите матчасть! Лечится только сбросом. Кстати, на реальном объекте такого не будет.
    Если у него объект инерционный, а время интегрирования выставлено чересчур малым, то и при работе на этом объекте, скорее всего, всё повторится.
    Последний раз редактировалось kolyan; 12.03.2011 в 16:22.

  7. #17

    По умолчанию

    Цитата Сообщение от Алексей Дмитриев Посмотреть сообщение
    Если у Вас датчика нет, переполнение неминуемо возникнет!!! Значение переменной процесса должно колебаться вокруг задания со сменой знака, в любом другом случае - переполнение. Учите матчасть! Лечится только сбросом. Кстати, на реальном объекте такого не будет.
    Уважаемый судя по скрины который я выложил еще на 1й странице переполнения по интегральной составляющей на выходе нет, переполнение по входу. Также если возникала бы проблема описана вами то переполнение возникало бы с оприделеной частотой, но судя с експерементов за две недили я словил 3 переполнения из них 2 в один день, при этом параметры не менялись, на обьекте переполнения могут быть по несколько за час а могут 2-3 дня не происходить.
    http://s015.radikal.ru/i333/1103/2c/a292f6a8226f.jpg

    Если бы на реальном объекте такого не было - я бы не писал здесь.

  8. #18

    По умолчанию

    Судя по Вашему скрину регулятор "наелся груш", то есть его заглючило намертво, причем переполнение как в интегральной, так и в дифференциальной части. Причина, думаю в том, что он сидит в основной программе со свободным (очень быстрым) циклом исполнения. Если процесс вялотекущий, вызывайте регулятор из задачи, исполняемой по таймеру, скажем 1 раз в секунду (или раз в 100 мс), глюк пропадет.

  9. #19

    По умолчанию

    Можно и так, но я пользовал этот и вызывал из циклически запускаемой задачи. После этого все глюки, а они были, пропали. Делал на ПЛК63. Работает прекрасно.

Страница 2 из 2 ПерваяПервая 12

Ваши права

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