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

Этот пример показывает ограничения управления 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) является обычно используемым методом в Управлении процессом. Соответствующую архитектуру управления показывают ниже.

Компенсатор C является контроллером 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 составляет воспринятое температурное несоответствие после достаточно долго ждания душа, чтобы реагировать.

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

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

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

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

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

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

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

% 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 для архитектуры Предиктора Смита. Чтобы упростить задачу соединения всех включенных блоков, назовите все их каналы ввода и вывода и позвольте 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, чтобы сравнить Предиктор Смита (синий) с (красным) контроллером PI:

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

Робастность к образцовому несоответствию

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

соответствующий модель процесса 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

где 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

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

где B является фильтром нижних частот с той же временной константой как внутренняя модель 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';

Перепроектируйте контроллер 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 и дорожкой на дюйм

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

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

Для просмотра документации необходимо авторизоваться на сайте