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