В этом примере показано, как использовать контроллер прогнозирования нелинейной модели для управления установкой окисления этилена при ее переходе из одной рабочей точки в другую. Кроме того, линейные контроллеры 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 на панели инструментов оптимизации.
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. Блок нелинейного контроллера MPC в модели настроен на использование 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.
nlmpc | Нелинейный контроллер MPC