Управление процессами с длинным мертвым временем: Предсказатель Смита

Этот пример показывает ограничения управления ПИ для процессов с длительным потерей времени и иллюстрирует преимущества стратегии управления, называемой «Smith Predictor».

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

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.

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

Структура управления Smith Predictor нарисована ниже.

Предиктор Смита использует внутреннюю модель Gp для предсказания отклика процесса без задержки (например, какую температуру воды доставит заданная установка ручки). Затем он сравнивает это предсказание с желаемой уставкой 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, Gp, F и мертвое время. С помощью структуры управления Smith Predictor мы можем увеличить полосу пропускания без разомкнутого контура, чтобы достичь более быстрого отклика и увеличить запас по фазе, чтобы уменьшить перерегулирование.

% 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 для архитектуры Smith Predictor. Чтобы облегчить задачу соединения всех задействованных блоков, назовите все их входные и выходные каналы и позвольте 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')

Smith Predictor обеспечивает намного более быстрый ответ без перерегулирования. Это различие также видна в частотный диапазон путем построения графика отклика Bode с обратной связью от ysp на y. Обратите внимание на более высокую пропускную способность для предиктора Smith.

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 и Smith Predictor и симулируйте отклики с обратной связью:

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')

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

Чтобы уменьшить чувствительность Smith Predictor к ошибкам моделирования, проверьте запасы устойчивости для внутреннего и внешних контуров. Внутренний цикл 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 и Tpi

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

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