Управление процессов с долгой потерей времени: предиктор Смита

Этот пример показывает ограничения управления PI для процессов с долгой потерей времени и иллюстрирует преимущества стратегии управления, названной "Предиктор Смита".

Пример вдохновлен:

A. Ingimundarson and T. Hagglund, "Robust Tuning Procedures of
Dead-Time Compensating Controllers," Control Engineering Practice,
9, 2001, pp. 1195-1208.

Модель процесса

Ответ разомкнутого контура процесса моделируется как первый порядок плюс потеря времени с 40,2 постоянным вторым разом и 93,9 задержками второго раза:

s = tf('s');
P = exp(-93.9*s) * 5.6/(40.2*s+1);
P.InputName = 'u';
P.OutputName = 'y';
P
P =
 
  From input "u" to output "y":
                    5.6
  exp(-93.9*s) * ----------
                 40.2 s + 1
 
Continuous-time transfer function.

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

step(P), grid on

ПИ-контроллер

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

Компенсатор C является ПИ-контроллером в стандартной форме двумя настраивающимися параметрами: пропорциональная составляющая Kp и интегральное время Ti. Мы используем PIDTUNE команда, чтобы спроектировать ПИ-контроллер с полосой пропускания разомкнутого контура на уровне 0,006 рад/с:

Cpi = pidtune(P,pidstd(1,1),0.006);
Cpi
Cpi =
 
             1      1 
  Kp * (1 + ---- * ---)
             Ti     s 

  with Kp = 0.0501, Ti = 47.3
 
Continuous-time PI controller in standard form

Чтобы оценить эффективность ПИ-контроллера, закройте обратную связь и симулируйте ответы на ступенчатые изменения в опорном сигнале ysp и выходное воздействие сигнализирует о d. Из-за задержки пути к обратной связи необходимо преобразовать P или Cpi к представлению пространства состояний с помощью SS команда:

Tpi = feedback([P*Cpi,1],1,1,1);  % closed-loop model [ysp;d]->y
Tpi.InputName = {'ysp' 'd'};

step(Tpi), grid on

Ответ с обратной связью имеет приемлемое перерегулирование, но несколько вял (это обосновывается приблизительно за 600 секунд). Увеличение пропорциональной составляющей, Kp ускоряет ответ, но также и значительно увеличивает перерегулирование и быстро приводит к нестабильности:

Kp3 = [0.06;0.08;0.1];      % try three increasing values of Kp
Ti3 = repmat(Cpi.Ti,3,1);   % Ti remains the same
C3 = pidstd(Kp3,Ti3);       % corresponding three PI controllers
T3 = feedback(P*C3,1);
T3.InputName = 'ysp';

step(T3)
title('Loss of stability when increasing Kp')

Эффективность ПИ-контроллера сильно ограничивается долгой потерей времени. Это вызвано тем, что ПИ-контроллер не знает о потере времени и реагирует "слишком нетерпеливо" когда фактический выход y не совпадает с желаемым заданным значением ysp. Все испытали подобное явление в душах, где температура воды занимает много времени, чтобы настроить. Там, нетерпение обычно ведет, чтобы чередовать выговор путем записи горячей и очень холодной воды. Лучшая стратегия состоит из ожидания для разнообразия в установке температуры, чтобы вступить в силу прежде, чем внести дальнейшие корректировки. И если мы изучили то, что установка кнопки обеспечивает нашей любимой температуре, мы можем вложить правильную температуру только время, это принимает душ, чтобы реагировать. Эта "оптимальная" стратегия управления является основной идеей позади схемы Smith Predictor.

Предиктор Смита

Структура управления Предиктора Смита коротко изложена ниже.

Предиктор Смита использует внутреннюю модель Gp предсказать ответ без задержек yp процесса (например, что температура воды данная установка кнопки поставит). Это затем сравнивает это предсказание yp с желаемым заданным значением ysp, чтобы решить, какие корректировки необходимы (управляйте u). Чтобы предотвратить дрейф и внешние возмущения отклонения, предиктор Смита также сравнивает фактический процесс выход с предсказанием y1 это принимает потерю времени во внимание. Разрыв dy=y-y1 возвращен через фильтр F и вносит в полный сигнал ошибки e. Обратите внимание на то, что dy суммы к воспринятому температурному несоответствию после достаточно долго ждания душа, чтобы реагировать.

Развертывание схемы Smith Predictor требует

  • Модель Gp из динамики процесса и оценки tau из потери времени процесса

  • Соответствующие настройки для динамики компенсатора и фильтра (C и F)

На основе модели процесса мы используем:

$$G_p(s) = {5.6 \over 1 + 40.2 s } , \tau = 93.9 $$

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

F = 1/(20*s+1);
F.InputName = 'dy';
F.OutputName = 'dp';

Для C, мы перепроектируем ПИ-контроллер с полным объектом, замеченным ПИ-контроллером, который включает динамику от P, GpF и потеря времени. С помощью структуры управления Предиктора Смита мы можем увеличить полосу пропускания разомкнутого контура, чтобы достигнуть более быстрого ответа и увеличить запас по фазе, чтобы уменьшать перерегулирование.

% Process
P = exp(-93.9*s) * 5.6/(40.2*s+1);
P.InputName = 'u';
P.OutputName = 'y0';

% Prediction model
Gp = 5.6/(40.2*s+1);
Gp.InputName = 'u';
Gp.OutputName = 'yp';

Dp = exp(-93.9*s);
Dp.InputName = 'yp'; Dp.OutputName = 'y1';

% Overall plant
S1 = sumblk('ym = yp + dp');
S2 = sumblk('dy = y0 - y1');
Plant = connect(P,Gp,Dp,F,S1,S2,'u','ym');

% Design PI controller with 0.08 rad/s bandwidth and 90 degrees phase margin
Options = pidtuneOptions('PhaseMargin',90);
C = pidtune(Plant,pidstd(1,1),0.08,Options);
C.InputName = 'e';
C.OutputName = 'u';
C
C =
 
             1      1 
  Kp * (1 + ---- * ---)
             Ti     s 

  with Kp = 0.574, Ti = 40.2
 
Continuous-time PI controller in standard form

Сравнение ПИ-контроллера по сравнению с предиктором Смита

Чтобы сравнить эффективность двух проектов, сначала выведите передаточную функцию с обратной связью из ysp,d к y для архитектуры Предиктора Смита. Чтобы упростить задачу соединения всех включенных блоков, назовите все их графики входного и выходного каналов и позвольте CONNECT сделайте проводное соединение:

% Assemble closed-loop model from [y_sp,d] to y
Sum1 = sumblk('e = ysp - yp - dp');
Sum2 = sumblk('y = y0 + d');
Sum3 = sumblk('dy = y - y1');
T = connect(P,Gp,Dp,C,F,Sum1,Sum2,Sum3,{'ysp','d'},'y');

Используйте STEP сравнить Предиктор Смита (синий) с (красным) ПИ-контроллером:

step(T,'b',Tpi,'r--')
grid on
legend('Smith Predictor','PI Controller')

Предиктор Смита обеспечивает намного более быстрый ответ без перерегулирования. Различие также отображается в частотном диапазоне путем графического вывода с обратной связью, Предвещают ответ от ysp к y. Отметьте более высокую полосу пропускания Предиктором Смита.

bode(T(1,1),'b',Tpi(1,1),'r--',{1e-3,1})
grid on
legend('Smith Predictor','PI Controller')

Робастность к несоответствию модели

В предыдущем анализе, внутренней модели

$$ G_p(s) e^{-\tau s} $$

соответствующий модель процесса P точно. В практических ситуациях внутренняя модель является только приближением истинной динамики процесса, таким образом, важно изучить, насколько устойчивый Предиктор Смита к неопределенности на динамике процесса и потеря времени.

Рассмотрите двух встревоженных представителей моделей объекта управления области значений неопределенности на параметрах процесса:

P1 = exp(-90*s) * 5/(38*s+1);
P2 = exp(-100*s) * 6/(42*s+1);

bode(P,P1,P2), grid on
title('Nominal and Perturbed Process Models')

Чтобы анализировать робастность, соберите номинальные и встревоженные модели в массив моделей процессов, восстановите передаточные функции с обратной связью для PI и проектов Предиктора Смита, и симулируйте ответы с обратной связью:

Plants = stack(1,P,P1,P2);  % array of process models
T1 = connect(Plants,Gp,Dp,C,F,Sum1,Sum2,Sum3,{'ysp','d'},'y'); % Smith
Tpi = feedback([Plants*Cpi,1],1,1,1);   % PI

step(T1,'b',Tpi,'r--')
grid on
legend('Smith Predictor 1','PI Controller')

Оба проекта чувствительны к несоответствию модели, как подтверждено Диаграммами Боде с обратной связью:

bode(T1(1,1),'b',Tpi(1,1),'r--')
grid on
legend('Smith Predictor 1','PI Controller')

Улучшение робастности

Чтобы уменьшать чувствительность Предиктора Смита к моделированию ошибок, проверяйте запасы устойчивости на внутренние циклы и внешние контуры. Внутренний цикл C имеет передачу разомкнутого контура C*Gp так запас устойчивости получены

margin(C * Gp)
title('Stability Margins for the Inner Loop (C)')

Внутренний цикл имеет удобные запасы по амплитуде и фазе так особое внимание на внешнем контуре затем. Используйте CONNECT выводить передаточную функцию разомкнутого контура L от ysp к dp с замкнутым внутренним кругом:

Sum1o = sumblk('e = ysp - yp');  % open the loop at dp
L = connect(P,Gp,Dp,C,F,Sum1o,Sum2,Sum3,{'ysp','d'},'dp');

bodemag(L(1,1))

Эта передаточная функция является по существу нулем, который должен ожидаться, когда процесс и модели предсказания будут соответствовать точно. Чтобы получить понимание запасов устойчивости для внешнего контура, мы должны работать с одними из встревоженных моделей процессов, например, P1:

H = connect(Plants(:,:,2),Gp,Dp,C,Sum1o,Sum2,Sum3,{'ysp','d'},'dy');
H = H(1,1);  % open-loop transfer ysp -> dy
L = F * H;

margin(L)
title('Stability Margins for the Outer Loop (F)')
grid on;
xlim([1e-2 1]);

Эта кривая усиления имеет горб около 0,04 рад/с, который понижает запас по амплитуде и увеличивает горб в переходном процессе с обратной связью. Чтобы устранить эту проблему, выберите фильтр F это прокручивается прочь ранее и более быстро:

F = (1+10*s)/(1+100*s);
F.InputName = 'dy';
F.OutputName = 'dp';

Проверьте, что запас по амплитуде улучшился около пересечения фазы на 0,04 рад/с:

L = F * H;
margin(L)
title('Stability Margins for the Outer Loop with Modified F')
grid on;
xlim([1e-2 1]);

Наконец, симулируйте ответы с обратной связью с модифицированным фильтром:

T2 = connect(Plants,Gp,Dp,C,F,Sum1,Sum2,Sum3,{'ysp','d'},'y');

step(T2,'b',Tpi,'r--')
grid on
legend('Smith Predictor 2','PI Controller')

Модифицированный проект обеспечивает более сопоставимую эффективность за счет немного более медленного номинального ответа.

Улучшение подавления помех

Формулы для передаточной функции с обратной связью от d к y покажите что оптимальный выбор для F

$$ F(s) = e^{\tau s} $$

где tau потеря времени внутренней модели. Этот выбор достигает совершенного подавления помех независимо от несоответствия между P и Gp. К сожалению, такая "отрицательная задержка" не является причинной и не может быть реализована. В газете:

  Huang, H.-P., et al., "A Modified Smith Predictor with an Approximate
  Inverse of Dead Time," AiChE Journal, 36 (1990), pp. 1025-1031

авторы предлагают использовать ведущее приближение фазы:

$$ e^{\tau s} \approx { 1 + B(s) \over 1 + B(s) e^{-\tau s} }$$

где B фильтр lowpass с той же постоянной времени как внутренняя модель Gp. Можно протестировать эту схему можно следующим образом:

Задайте B (s) и F (s)

B = 0.05/(40*s+1);
tau = totaldelay(Dp);
F = (1+B)/(1+B*exp(-tau*s));
F.InputName = 'dy';
F.OutputName = 'dp';

Перепроектируйте ПИ-контроллер с уменьшаемой полосой пропускания

Plant = connect(P,Gp,Dp,F,S1,S2,'u','ym');
C = pidtune(Plant,pidstd(1,1),0.02,pidtuneOptions('PhaseMargin',90));
C.InputName = 'e';
C.OutputName = 'u';
C
C =
 
             1      1 
  Kp * (1 + ---- * ---)
             Ti     s 

  with Kp = 0.144, Ti = 40.1
 
Continuous-time PI controller in standard form

Вычисленная модель T3 с обратной связью

T3 = connect(Plants,Gp,Dp,C,F,Sum1,Sum2,Sum3,{'ysp','d'},'y');

Сравните T3 с T2 и дорожкой на дюйм

step(T2,'b',T3,'g',Tpi,'r--')
grid on
legend('Smith Predictor 2','Smith Predictor 3','PI Controller')

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