Нелинейные и планируемые по усилению MPC управления Объекта окисления этилена

Этот пример показывает, как использовать нелинейный прогнозирующий контроллер модели для управления объектом окисления этилена, когда она переходит от одной рабочей точки к другой. В сложение линейные контроллеры 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, чтобы получить эффективность бенчмарка. После этого вы генерируете несколько линейных объектов 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 в качестве бенчмарка, можно преобразовать его в линейный контроллер 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 с помощью трех сгенерированных линейных контроллеров 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] H. Durand, M. Ellis, P. D. Christofides. «Прогнозирующие системы управления экономической модели для входа ограничения скорости изменения и гарантированной экономической эффективности». Компьютеры и химическая техника, том 92, 2016, стр. 18-36.

См. также

|

Похожие темы