Адаптивное MPC управление нелинейным химическим реактором с помощью линейной системы изменения параметров

Этот пример показов, как использовать адаптивный контроллер MPC для управления нелинейным непрерывным реактором с баком перемешиванием (CSTR), когда он переходит от низкой скорости преобразования к высокой скорости преобразования.

Линейная система изменения параметров (LPV), состоящая из трёх линейных моделей объекта управления, строится в автономном режиме, чтобы описать локальную динамику объекта в рабочей области значений. Адаптивный контроллер MPC затем использует систему LPV, чтобы обновить внутреннюю прогнозирующую модель на каждом контрольном интервале и успешно достигает нелинейного управления.

О реакторе непрерывного перемешивания Бака

Постоянно перемешиваемый баком реактор (CSTR) является общей химической системой в технологической промышленности. Схема системы CSTR:

Эта система представляет собой неадиабатический бак реактор с оболочкой, широко описанный в [1]. Сосуд принимается идеально смешанным, и происходит одна экзотермическая и необратимая реакция первого порядка A -- > B. Входной поток реагента A подается в бак с постоянной объемной скоростью. Поток продукта выходит непрерывно с той же объемной скоростью, и плотность жидкости постоянна. Таким образом, объем взаимодействующей жидкости является постоянным.

Входы модели CSTR:

$$ \begin{array} {ll}
u_1 = CA_i \; & \textnormal{Concentration of A in inlet feed
stream} [kgmol/m^3] \\
u_2 = T_i \; & \textnormal{Inlet feed stream temperature} [K] \\
u_3 = T_c \; & \textnormal{Jacket coolant temperature} [K] \\
\end{array} $$

Выходные выходы модели, которые также являются состояниями модели, следующие:

$$ \begin{array} {ll}
y_1 = x_1 = CA \; & \textnormal{Concentration of A in reactor tank} [kgmol/m^3] \\
y_2 = x_2 = T \; & \textnormal{Reactor temperature} [K] \\
\end{array} $$

Цель управления состоит в том, чтобы поддерживать концентрацию реагента А$CA$ на желаемой уставке, которая изменяется с течением времени, когда реактор переходит от низкой скорости превращения к высокой скорости превращения. Температура хладагента$T_c$ является манипулируемой переменной, используемой контроллером MPC для отслеживания ссылки. Концентрация и температура потока сырья на входе приняты постоянными. Модель Simulink mpc_cstr_plant реализует нелинейный объект CSTR.

Об адаптивной модели прогнозирующего управления

Хорошо известно, что динамика CSTR является сильно нелинейной по отношению к изменениям температуры в реакторе и может быть нестабильной в разомкнутом контуре во время перехода от одного рабочего условия к другому. Один контроллер MPC, разработанный в конкретных рабочих условиях, не может обеспечить удовлетворительную эффективность управления в широкой рабочей области значений.

Чтобы управлять нелинейным объектом CSTR с помощью линейного метода MPC управления, у вас есть несколько опции:

  • Если линейная модель объекта управления не может быть получена во время исполнения, сначала вам нужно получить несколько линейных моделей объекта управления в автономном режиме при различных условиях работы, которые охватывают типовую рабочую область значений. Далее можно выбрать один из двух подходов для реализации стратегии MPC управления:

(1) Проектируйте несколько контроллеров MPC в автономном режиме, по одному для каждой модели объекта управления. Во время выполнения используйте блок Multiple MPC Controller, который переключается между контроллерами на основе желаемой стратегии планирования. Для получения дополнительной информации смотрите Gain-Scheduled MPC Control of Nonlinear Chemical Reactor. Используйте этот подход, когда модели объекта управления имеют различные порядки или временные задержки.

(2) Спроектируйте один контроллер MPC в автономном режиме в начальной рабочей точке. Во время исполнения используйте блок Adaptive MPC Controller (обновление прогнозирующей модели на каждом контрольном интервале) вместе с блоком Linear Parameter Variing (LPV) System (снабжение линейной модели объекта управления стратегией планирования), как показано в этом примере. Используйте этот подход, когда все модели объекта управления имеют одинаковый порядок и временную задержку.

  • Если линейная модель объекта управления может быть получена во время исполнения, необходимо использовать блок Adaptive MPC Controller, чтобы достичь нелинейного управления. Существует два типичных способа получить линейную модель объекта управления в режиме онлайн:

(1) Используйте последовательную линеаризацию. Для получения дополнительной информации смотрите Адаптивное MPC управление нелинейного химического реактора с использованием последующей линеаризации. Используйте этот подход, когда доступна нелинейная модель объекта управления и может быть линеаризирована во время исполнения.

(2) Используйте онлайн-оценку, чтобы идентифицировать линейную модель, когда цикл закрыт. Для получения дополнительной информации см. Adaptive MPC Control of Nonlinear Chemical Reactor Using Online Model Estimation. Используйте этот подход, когда линейная модель объекта управления не может быть получена ни из системы LPV, ни из последовательной линеаризации.

Получение линейной модели объекта управления при начальных рабочих условиях

Для линеаризации объекта необходимы Design™ Simulink ® и Simulink Control.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink is required to run this example.')
    return
end
if ~mpcchecktoolboxinstalled('slcontrol')
    disp('Simulink Control Design is required to run this example.')
    return
end

Сначала получите линейную модель объекта управления при начальных рабочих условиях, где CAi составляет 10 кгмоль/м ^ 3, и оба Ti и Tc 298,15 K. Чтобы сгенерировать линейную систему в пространстве состояний из модели Simulink, используйте такие функции, как operspec, findop, и linearize из Simulink Control Design.

Создайте спецификацию рабочей точки.

plant_mdl = 'mpc_cstr_plant';
op = operspec(plant_mdl);

Определите известную концентрацию сырья при начальных условиях.

op.Inputs(1).u = 10;
op.Inputs(1).Known = true;

Задайте известную температуру подачи при начальных условиях.

op.Inputs(2).u = 298.15;
op.Inputs(2).Known = true;

Задайте известную температуру хладагента при начальных условиях.

op.Inputs(3).u = 298.15;
op.Inputs(3).Known = true;

Вычислите начальное условие.

[op_point,op_report] = findop(plant_mdl,op);
 Operating point search report:
---------------------------------

 Operating point search report for the Model mpc_cstr_plant.
 (Time-Varying Components Evaluated at time t=0)

Operating point specifications were successfully met.
States: 
----------
(1.) mpc_cstr_plant/CSTR/Integrator
      x:           311      dx:      8.12e-11 (0)
(2.) mpc_cstr_plant/CSTR/Integrator1
      x:          8.57      dx:     -6.87e-12 (0)

Inputs: 
----------
(1.) mpc_cstr_plant/CAi
      u:            10
(2.) mpc_cstr_plant/Ti
      u:           298
(3.) mpc_cstr_plant/Tc
      u:           298

Outputs: 
----------
(1.) mpc_cstr_plant/T
      y:           311    [-Inf Inf]
(2.) mpc_cstr_plant/CA
      y:          8.57    [-Inf Inf]

Получите номинальные значения x, y, и u.

x0_initial = [op_report.States(1).x; op_report.States(2).x];
y0_initial = [op_report.Outputs(1).y; op_report.Outputs(2).y];
u0_initial = [op_report.Inputs(1).u; op_report.Inputs(2).u; op_report.Inputs(3).u];

Получите линейную модель при начальном условии.

plant_initial = linearize(plant_mdl,op_point);

Дискретизируйте модель объекта управления.

Ts = 0.5;
plant_initial = c2d(plant_initial,Ts);

Задайте типы сигналов и имена, используемые в MPC.

plant_initial.InputGroup.UnmeasuredDisturbances = [1 2];
plant_initial.InputGroup.ManipulatedVariables = 3;
plant_initial.OutputGroup.Measured = [1 2];
plant_initial.InputName = {'CAi','Ti','Tc'};
plant_initial.OutputName = {'T','CA'};

Получение линейной модели объекта управления при промежуточных рабочих условиях

Создайте спецификацию рабочей точки.

op = operspec(plant_mdl);

Укажите концентрацию сырья.

op.Inputs(1).u = 10;
op.Inputs(1).Known = true;

Задайте температуру подачи.

op.Inputs(2).u = 298.15;
op.Inputs(2).Known = true;

Определите концентрацию реактора.

op.Outputs(2).y = 5.5;
op.Outputs(2).Known = true;

Найдите рабочее условие в установившемся состоянии.

[op_point,op_report] = findop(plant_mdl,op);
 Operating point search report:
---------------------------------

 Operating point search report for the Model mpc_cstr_plant.
 (Time-Varying Components Evaluated at time t=0)

Operating point specifications were successfully met.
States: 
----------
(1.) mpc_cstr_plant/CSTR/Integrator
      x:           339      dx:      3.42e-08 (0)
(2.) mpc_cstr_plant/CSTR/Integrator1
      x:           5.5      dx:     -2.87e-09 (0)

Inputs: 
----------
(1.) mpc_cstr_plant/CAi
      u:            10
(2.) mpc_cstr_plant/Ti
      u:           298
(3.) mpc_cstr_plant/Tc
      u:           298    [-Inf Inf]

Outputs: 
----------
(1.) mpc_cstr_plant/T
      y:           339    [-Inf Inf]
(2.) mpc_cstr_plant/CA
      y:           5.5    (5.5)

Получите номинальные значения x, y, и u.

x0_intermediate = [op_report.States(1).x; op_report.States(2).x];
y0_intermediate = [op_report.Outputs(1).y; op_report.Outputs(2).y];
u0_intermediate = [op_report.Inputs(1).u; op_report.Inputs(2).u; op_report.Inputs(3).u];

Получите линейную модель при начальном условии.

plant_intermediate = linearize(plant_mdl,op_point);

Дискретизируйте модель объекта управления

plant_intermediate = c2d(plant_intermediate,Ts);

Задайте типы сигналов и имена, используемые в MPC.

plant_intermediate.InputGroup.UnmeasuredDisturbances = [1 2];
plant_intermediate.InputGroup.ManipulatedVariables = 3;
plant_intermediate.OutputGroup.Measured = [1 2];
plant_intermediate.InputName = {'CAi','Ti','Tc'};
plant_intermediate.OutputName = {'T','CA'};

Получение линейной модели объекта управления при конечном рабочем условии

Создайте спецификацию рабочей точки.

op = operspec(plant_mdl);

Укажите концентрацию сырья.

op.Inputs(1).u = 10;
op.Inputs(1).Known = true;

Задайте температуру подачи.

op.Inputs(2).u = 298.15;
op.Inputs(2).Known = true;

Определите концентрацию реактора.

op.Outputs(2).y = 2;
op.Outputs(2).Known = true;

Найдите установившееся рабочее условие.

[op_point,op_report] = findop(plant_mdl,op);
 Operating point search report:
---------------------------------

 Operating point search report for the Model mpc_cstr_plant.
 (Time-Varying Components Evaluated at time t=0)

Operating point specifications were successfully met.
States: 
----------
(1.) mpc_cstr_plant/CSTR/Integrator
      x:           373      dx:      5.57e-11 (0)
(2.) mpc_cstr_plant/CSTR/Integrator1
      x:             2      dx:      -4.6e-12 (0)

Inputs: 
----------
(1.) mpc_cstr_plant/CAi
      u:            10
(2.) mpc_cstr_plant/Ti
      u:           298
(3.) mpc_cstr_plant/Tc
      u:           305    [-Inf Inf]

Outputs: 
----------
(1.) mpc_cstr_plant/T
      y:           373    [-Inf Inf]
(2.) mpc_cstr_plant/CA
      y:             2    (2)

Получите номинальные значения x, y, и u.

x0_final = [op_report.States(1).x; op_report.States(2).x];
y0_final = [op_report.Outputs(1).y; op_report.Outputs(2).y];
u0_final = [op_report.Inputs(1).u; op_report.Inputs(2).u; op_report.Inputs(3).u];

Получите линейную модель при начальном условии.

plant_final = linearize(plant_mdl,op_point);

Дискретизируйте модель объекта управления

plant_final = c2d(plant_final,Ts);

Задайте типы сигналов и имена, используемые в MPC.

plant_final.InputGroup.UnmeasuredDisturbances = [1 2];
plant_final.InputGroup.ManipulatedVariables = 3;
plant_final.OutputGroup.Measured = [1 2];
plant_final.InputName = {'CAi','Ti','Tc'};
plant_final.OutputName = {'T','CA'};

Создайте линейную систему изменения параметров

Используйте массив LTI, чтобы сохранить три линейные модели объекта управления.

lpv(:,:,1) = plant_initial;
lpv(:,:,2) = plant_intermediate;
lpv(:,:,3) = plant_final;

Задайте температуру реактора T как параметр планирования.

lpv.SamplingGrid = struct('T',[y0_initial(1); y0_intermediate(1); y0_final(1)]);

Задайте номинальные значения для входов, выходов и состояний объекта в каждой установившейся рабочей точке.

lpv_u0(:,:,1) = u0_initial;
lpv_u0(:,:,2) = u0_intermediate;
lpv_u0(:,:,3) = u0_final;
lpv_y0(:,:,1) = y0_initial;
lpv_y0(:,:,2) = y0_intermediate;
lpv_y0(:,:,3) = y0_final;
lpv_x0(:,:,1) = x0_initial;
lpv_x0(:,:,2) = x0_intermediate;
lpv_x0(:,:,3) = x0_final;

Вам не нужно предоставлять входной сигнал u в блок LPV System, потому что выходной сигнал объекта y не используется в этом примере.

Проектирование контроллера MPC при начальных рабочих условиях

Вы проектируете контроллер MPC при начальных рабочих условиях. Настройки контроллера, такие как горизонты и веса настройки, должны быть выбраны таким образом, чтобы они применялись ко всей рабочей области значений.

Создайте контроллер MPC с предсказанием по умолчанию и горизонтами управления

mpcobj = mpc(plant_initial,Ts);
-->The "PredictionHorizon" property of "mpc" object is empty. Trying PredictionHorizon = 10.
-->The "ControlHorizon" property of the "mpc" object is empty. Assuming 2.
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
-->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
-->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.
   for output(s) y1 and zero weight for output(s) y2 

Установите номинальные значения в контроллере. Номинальные значения для неизмеренных нарушений порядка должны быть нулем.

mpcobj.Model.Nominal = struct('X',x0_initial,'U',[0;0;u0_initial(3)],'Y',y0_initial,'DX',[0 0]);

Поскольку сигналы входа и выхода объекта имеют различные порядки величины, задайте коэффициенты масштабирования.

Uscale = [10;30;50];
Yscale = [50;10];
mpcobj.DV(1).ScaleFactor = Uscale(1);
mpcobj.DV(2).ScaleFactor = Uscale(2);
mpcobj.MV.ScaleFactor = Uscale(3);
mpcobj.OV(1).ScaleFactor = Yscale(1);
mpcobj.OV(2).ScaleFactor = Yscale(2);

Цель состоит в том, чтобы отследить заданный переход в концентрации реактора. Температуру реактора измеряют и используют при оценке состояния, но контроллер не будет пытаться регулировать ее непосредственно. Он будет изменяться по мере необходимости для регулирования концентрации. Таким образом, установите его вес MPC равным нулю.

mpcobj.Weights.OV = [0 1];

Входы 1 и 2 объекты являются неизмеренными нарушениями порядка. По умолчанию контроллер принимает интегрированный белый шум с единичной величиной на этих входах при конфигурировании оценки состояния. Попробуйте увеличить сигнал оценки состояния до шума в множитель 10 улучшить эффективность подавления помех.

Dist = ss(getindist(mpcobj));
Dist.B = eye(2)*10;
setindist(mpcobj,'model',Dist);
-->The "Model.Disturbance" property of "mpc" object is empty:
   Assuming unmeasured input disturbance #1 is integrated white noise.
   Assuming unmeasured input disturbance #2 is integrated white noise.
   Assuming no disturbance added to measured output channel #2.
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Сохраните все другие параметры MPC на своих значениях по умолчанию.

Реализуйте адаптивное MPC управление объекта CSTR в Simulink

Откройте модель Simulink.

mdl = 'ampc_cstr_lpv';
open_system(mdl)

Модель включает три части:

  1. Блок CSTR реализует нелинейную модель объекта управления.

  2. Блок Adaptive MPC Controller запускает проектируемый контроллер MPC в адаптивном режиме.

  3. Блок LPV System (Control System Toolbox) предоставляет модель объекта управления локального пространства и ее номинальные значения посредством интерполяции на каждом контрольном интервале. Модель объекта управления затем подается на блок Adaptive MPC Controller и обновляет прогнозирующую модель, используемую контроллером MPC. В этом примере исходная модель объекта управления используется для инициализации блока LPV System.

Можно использовать модель Simulink в качестве шаблона для разработки собственных адаптивных MPC-приложений на основе LPV.

Валидация адаптивной эффективности MPC управления

Эффективность контроллера проверяется на соответствие отслеживанию уставки и подавления помех.

  • Отслеживать: температурный T реактора переходы уставки от исходного 311 К (низкая скорость преобразования) к 377 К (высокая скорость преобразования) кгмоль/м ^ 3. Во время перехода объект сначала становится нестабильным, а затем снова стабильным (см. график полюсов).

  • Регулирование: температура подачи Ti имеет медленное колебание, представленное синусоидой с амплитудой 5 степеней, которая является измеренным нарушением порядка, подаваемым на контроллер MPC.

Симулируйте эффективность в системе с обратной связью.

open_system([mdl '/Concentration'])
open_system([mdl '/Temperature'])
sim(mdl)
   Assuming no disturbance added to measured output channel #2.
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Отслеживающие и регулирующая эффективность удовлетворительны.

Ссылки

[1] Себорг, Д. Э., Т. Ф. Эдгар, и Д. А. Mellichamp, Process Dynamics and Control, 2nd Edition, Wiley, 2004.

bdclose(mdl)

См. также

Похожие темы