exponenta event banner

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

Этот пример показывает ограничения управления 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

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

Компенсатор С - PI-контроллер в стандартном виде с двумя параметрами настройки: пропорциональным усилением Kp и интегральное время Ti. Мы используем PIDTUNE команда для проектирования PI-контроллера с полосой пропускания разомкнутого контура при 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

Для оценки производительности PI-контроллера замкните контур обратной связи и смоделируйте отклики на ступенчатые изменения в опорном сигнале 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')

Производительность PI-контроллера сильно ограничена длительным временем простоя. Это происходит потому, что PI контроллер не знает о мертвом времени и реагирует слишком «нетерпеливо», когда фактический выход y не соответствует требуемой уставке ysp. Все испытали подобное явление в душевых, где для регулировки температуры воды требуется много времени. Там нетерпение обычно приводит к попеременному поруганию путем сжигания горячей и замерзающей холодной воды. Более эффективная стратегия состоит в ожидании изменения температуры, которое вступит в силу, прежде чем производить дальнейшие корректировки. И как только мы узнаем, какая настройка ручки обеспечивает нашу любимую температуру, мы сможем получить нужную температуру только за то время, когда душ будет реагировать. Эта «оптимальная» стратегия управления является основной идеей схемы предсказателя Смита.

Предсказатель Смита

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

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

Развертывание схемы предсказателя Смита требует

  • Модель 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, мы перепроектируем PI-контроллер с общей установкой, видимой PI-контроллером, которая включает динамику от 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

Сравнение контроллера PI с предсказателем Смита

Чтобы сравнить производительность двух конструкций, сначала выведите функцию передачи с замкнутым контуром из 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')

Предсказатель Смита обеспечивает гораздо более быстрый ответ без превышения. Разница также видна в частотной области путем построения графика обратной реакции Боде из 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 и 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')

Повышение надежности

Чтобы уменьшить чувствительность предсказателя Смита к ошибкам моделирования, проверьте пределы устойчивости для внутреннего и внешнего контуров. Внутренний контур 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 - фильтр нижних частот с той же постоянной времени, что и внутренняя модель; Gp. Эту схему можно протестировать следующим образом:

Определение B (ов) и F (ов)

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

Реорганизация PI-контроллера с уменьшенной пропускной способностью

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

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