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

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

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

Для 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')

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

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

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

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