В этом примере показано, как использовать нелинейный прогнозирующий контроллер модели, чтобы управлять этиленовым объектом оксидирования, когда он переходит от одной рабочей точки до другого. Кроме того, линейные контроллеры MPC сгенерированы непосредственно от нелинейного диспетчера MPC, чтобы реализовать запланированную на усиление схему управления, которая производит сопоставимую производительность.
Этот пример требует, чтобы программное обеспечение Optimization Toolbox™ решило задачу нелинейного программирования в каждом контрольном интервале.
if ~mpcchecktoolboxinstalled('optim') disp('Optimization Toolbox is required to run this example.') return end
Этот пример также требует, чтобы программное обеспечение Simulink® симулировало MPC управление этиленовым объектом оксидирования в Simulink.
if ~mpcchecktoolboxinstalled('simulink') disp('Simulink is required to run this example.') return end
Оксидирование этилена (C2H4) к этиленовой окиси (C2H4O) происходит в охлажденной, газовой фазе каталитический реактор. Три реакции происходят одновременно в хорошо смешанной газовой фазе в реакторе:
C2H4 + 0.5*O2 -> C2H4O
C2H4 + 3*O2 -> 2*CO2 + 2*H2O
C2H4O + 2.5*O2 -> 2*CO2 + 2*H2O
Смесь воздуха и этилен питаются постоянно. Объект описан первым принципом нелинейная динамическая модель, реализованная как набор обыкновенных дифференциальных уравнений (ОДУ) в oxidationStateFcn
функция. Для получения дополнительной информации смотрите oxidationStateFcn.m
.
Объект содержит четыре состояния:
Плотность газа в реакторе (x1)
Концентрация C2H4 в реакторе (x2)
Концентрация C2H4O в реакторе (x3)
Температура в реакторе (x4)
Объект имеет два входных параметров:
Общая объемная скорость потока жидкости канала (u1)
Концентрация C2H4 канала (u2)
Объект имеет тот выход:
Концентрация C2H4O в сточном потоке (y, эквивалентный x3)
Для удобства все переменные в модели предварительно масштабируются, чтобы быть безразмерными. Все состояния измеримы. Уравнения объекта и параметры получены от [1].
В этом примере общая объемная скорость потока жидкости канала (u1) является переменной, которой управляют, (MV), и концентрация C2H4O в сточном потоке (y) является выходной переменной (OV). Хорошая производительность отслеживания y требуется в рабочем диапазоне от 0.03
к 0.05
. Соответствующими u1 значениями является 0.38
и 0.15
, соответственно.
Концентрация C2H4 в потоке канала (u2) является измеренным воздействием. Его номинальной стоимостью является 0.5
, и типичное воздействие имеет размер 0.1
. Контроллер обязан отклонять такое воздействие.
Переменная, которой управляют, u1 имеет диапазон от 0.0704
к 0.7042
из-за ограничений привода.
В общем случае использование нелинейного MPC с точной нелинейной моделью предсказания обеспечивает производительность сравнительного теста; то есть, лучшее решение для управления можно достигнуть. Однако на практике линейные решения для MPC управления, такие как адаптивный MPC или запланированный на усиление MPC, более в вычислительном отношении эффективны, чем нелинейный MPC. Если ваше линейное решение для управления может поставить сопоставимую производительность, нет никакой потребности реализовать нелинейное решение для управления, особенно в окружении реального времени.
В этом примере вы сначала проектируете нелинейный контроллер MPC, чтобы получить производительность сравнительного теста. Позже, вы генерируете несколько линейных объектов MPC от нелинейного диспетчера в различной рабочей точке с помощью convertToMPC
функция. Наконец, вы реализуете запланированный на усиление MPC с помощью этих линейных объектов MPC и сравниваете производительность.
Создайте нелинейный контроллер MPC с 4
состояния, 1
выведите, 1
переменная, которой управляют и 1
измеренное воздействие.
nlobj = nlmpc(4,1,'MV',1,'MD',2);
Задайте шаг расчета контроллера и предсказание и управляйте горизонтами.
Ts = 5; PredictionHorizon = 10; ControlHorizon = 3; nlobj.Ts = Ts; nlobj.PredictionHorizon = PredictionHorizon; nlobj.ControlHorizon = ControlHorizon;
Задайте нелинейную модель предсказания использование oxidationStateFcn.m
, который является моделью непрерывного времени.
nlobj.Model.StateFcn = 'oxidationStateFcn'; nlobj.States(1).Name = 'Den'; nlobj.States(2).Name = 'CE'; nlobj.States(3).Name = 'CEO'; nlobj.States(4).Name = 'Tc';
Задайте выходную функцию, которая возвращает концентрацию C2H4O в сточном потоке (то же самое как x3). Его масштабным коэффициентом является его типичный рабочий диапазон.
nlobj.Model.OutputFcn = @(x,u) x(3);
nlobj.OV.Name = 'CEOout';
nlobj.OV.ScaleFactor = 0.03;
Задайте ограничения мВ на основе ограничений привода контроллера. Его масштабным коэффициентом является его типичный рабочий диапазон.
nlobj.MV.Min = 0.0704;
nlobj.MV.Max = 0.7042;
nlobj.MV.Name = 'Qin';
nlobj.MV.ScaleFactor = 0.6;
Задайте измеренное имя воздействия. Его масштабным коэффициентом является его типичный рабочий диапазон.
nlobj.MD.Name = 'CEin';
nlobj.MD.ScaleFactor = 0.5;
Первоначально объект в рабочей точке равновесия с низкой концентрацией C2H4O (y = 0.03
) в сточном потоке. Найдите начальные значения состояний и выведите использование fsolve
от Optimization Toolbox.
options = optimoptions('fsolve','Display','none'); uLow = [0.38 0.5]; xLow = fsolve(@(x) oxidationStateFcn(x,uLow),[1 0.3 0.03 1],options); yLow = xLow(3);
Подтвердите это, функции модели предсказания не имеют никаких числовых проблем с помощью validateFcns
команда. Подтвердите функции в начальном состоянии и выходных значениях.
validateFcns(nlobj,xLow,uLow(1),uLow(2));
Model.StateFcn is OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
Задайте ссылочный сигнал в структуре, где это подъемы от 0.03
к 0.05
в 50
секунды во время 100
.
Tstop = 300; time = (0:Ts:(Tstop+PredictionHorizon*Ts))'; r = [yLow*ones(sum(time<100),1);linspace(yLow,yLow+0.02,11)';(yLow+0.02)*ones(sum(time>150),1)]; ref.time = time; ref.signals.values = r;
Чтобы оценить нелинейную производительность MPC, используйте модель Simulink. Блок Nonlinear MPC Controller в модели сконфигурирован, чтобы использовать nlobj
как его контроллер.
mdlNMPC = 'oxidationNMPC';
open_system(mdlNMPC)
Запустите симуляцию и просмотрите выход.
sim(mdlNMPC)
open_system([mdlNMPC '/y'])
Нелинейный контроллер MPC производит хорошее отслеживание уставки и производительность подавления помех, как ожидалось.
Несмотря на то, что подобное пандусу изменение заданного значения в концентрации C2H4O находится между 100 и 150 секундами (желтая кривая ступеньки в графике), диспетчер знает об изменении уже в 50 секунд из-за ссылочного предварительного просмотра. Поскольку цель состоит в том, чтобы минимизировать ошибки отслеживания через целый горизонт, диспетчер решает переместить объект, заранее таким образом, что отслеживание ошибки является самым маленьким через горизонт предсказания. Если бы предварительный просмотр отключен, контроллер начал бы реагировать в 100 секунд, которые произвели бы большую ошибку отслеживания.
В этом примере, поскольку все состояния измеримы, полная обратная связь состояния используется нелинейным контроллером MPC. В общем случае, когда существуют неизмеримые состояния, необходимо спроектировать нелинейное средство оценки состояния, такое как расширенный фильтр Калмана (EKF) или движущееся средство оценки горизонта (MHE).
На практике, при создании сопоставимой производительности, линейный MPC всегда предпочитается по нелинейному MPC из-за его более высокого КПД расчета. Поскольку вы спроектировали нелинейный контроллер MPC как сравнительный тест, можно преобразовать его в линейный контроллер MPC в определенной рабочей точке.
В этом примере вы генерируете три линейных контроллера MPC с концентрациями C2H4O в 0.03
, 0.04, и
0.05
, соответственно. Во время преобразования нелинейная модель объекта управления линеаризуется в заданной рабочей точке. Все масштабные коэффициенты, линейные ограничения и квадратичные веса, заданные в нелинейном объекте MPC, сохраняются. Однако любая пользовательская нелинейная функция стоимости или пользовательское нелинейное равенство или ограничения неравенства отбрасываются.
Сгенерируйте линейный контроллер MPC в рабочей точке с низкой скоростью преобразования C2H4O y
= 0.03 . Задайте рабочую точку с помощью соответствующих и входных значений состояния,
xLow
и uLow
, соответственно.
mpcobjLow = convertToMPC(nlobj,xLow,uLow);
Сгенерируйте линейный контроллер MPC в рабочей точке со средней скоростью преобразования C2H4O y
= 0.04 .
uMedium = [0.24 0.5]; xMedium = fsolve(@(x) oxidationStateFcn(x,uMedium),[1 0.3 0.03 1],options); mpcobjMedium = convertToMPC(nlobj,xMedium,uMedium);
Сгенерируйте линейный контроллер MPC в рабочей точке с высокой скоростью преобразования C2H4O y
= 0.05 .
uHigh = [0.15 0.5]; xHigh = fsolve(@(x) oxidationStateFcn(x,uHigh),[1 0.3 0.03 1],options); mpcobjHigh = convertToMPC(nlobj,xHigh,uHigh);
Реализуйте запланированное на усиление решение MPC с помощью трех сгенерированных линейных контроллеров MPC. Схема планирования:
Если y ниже, чем 0,035, используйте mpcobjLow
.
Если y выше, чем 0,045, используйте mpcobjHigh
.
В противном случае используйте mpcobjMedium
.
Чтобы оценить запланированную на усиление производительность контроллера, используйте другую модель Simulink.
mdlMPC = 'oxidationMPC';
open_system(mdlMPC)
Запустите симуляцию и просмотрите выход.
sim(mdlMPC)
open_system([mdlMPC '/y'])
-->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel. -->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel. -->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel. -->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Запланированный на усиление контроллер производит сопоставимое отслеживание уставки и производительность подавления помех.
Этот пример иллюстрирует общий рабочий процесс к:
Спроектируйте и симулируйте нелинейный контроллер MPC в MATLAB и Simulink для производительности управления сравнительным тестом.
Используйте нелинейный объект MPC непосредственно сгенерировать линейные контроллеры MPC в желаемых рабочих точках.
Реализуйте запланированную на усиление схему MPC управления с помощью этих контроллеров.
Если производительность запланированного на усиление контроллера сопоставима с тем из нелинейного контроллера, можно чувствовать себя, уверенно реализовывая линейное решение для управления нелинейной проблемы управления.
Закройте модель Simulink.
bdclose(mdlNMPC)
[1] Х. Дуранд, М. Эллис, П. Д. Кристофайдс. "Экономические прогнозирующие системы управления модели для входной ограничительной обработки скорости изменения и гарантируемых экономических показателей". Компьютеры и Химическое машиностроение, Издание 92, 2016, стр 18-36.
Nonlinear MPC Controller | nlmpc