Этот пример показывает ограничения управления ПИ для процессов с длительным потерей времени и иллюстрирует преимущества стратегии управления, называемой «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
)
Основываясь на модели процесса, мы используем:
Для 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')
В предыдущем анализе внутренняя модель
совпадал с моделью процесса 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
является
где 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 и Tpi
step(T2,'b',T3,'g',Tpi,'r--') grid on legend('Smith Predictor 2','Smith Predictor 3','PI Controller')
Это сравнение показывает, что наш последний проект ускоряет подавление помех за счет более медленного отслеживания уставки.