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

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

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

О непрерывном реакторе смесителя

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

Эта система является покрытым кожухом неадиабатическим реактором бака, описанным экстенсивно в [1]. Судно принято, чтобы быть отлично смешанным, и происходит одна экзотермическая и необратимая реакция первого порядка,-> 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} $$

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

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

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

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

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

(1) Спроектируйте несколько контроллеров MPC оффлайн, один для каждой модели объекта управления. Во время выполнения используйте блок Multiple MPC Controller, который переключается между контроллерами на основе желаемой стратегии планирования. Для получения дополнительной информации смотрите Запланированное на усиление MPC управление Нелинейным Химическим Реактором. Используйте этот подход, когда модели объекта управления будут иметь различные порядки или задержки.

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

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

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

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

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

Во-первых, получите линейную модель объекта управления в начальных условиях работы, где 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:
---------------------------------

opreport = 


 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: 
----------
    <strong>Min</strong>      <strong>x</strong>       <strong>Max</strong>    <strong>dxMin</strong>        <strong>dx</strong>         <strong>dxMax</strong>
    <strong>___</strong>    <strong>______</strong>    <strong>___</strong>    <strong>_____</strong>    <strong>___________</strong>    <strong>_____</strong>

(1.) mpc_cstr_plant/CSTR/Integrator
     0     311.26    Inf      0       8.1176e-11      0  
(2.) mpc_cstr_plant/CSTR/Integrator1
     0     8.5698    Inf      0      -6.8709e-12      0  

Inputs: 
----------
     <strong>Min</strong>        <strong>u</strong>        <strong>Max</strong>  
    <strong>______</strong>    <strong>______</strong>    <strong>______</strong>

(1.) mpc_cstr_plant/CAi
        10        10        10
(2.) mpc_cstr_plant/Ti
    298.15    298.15    298.15
(3.) mpc_cstr_plant/Tc
    298.15    298.15    298.15

Outputs: 
----------
    <strong>Min</strong>       <strong>y</strong>       <strong>Max</strong>
    <strong>____</strong>    <strong>______</strong>    <strong>___</strong>

(1.) mpc_cstr_plant/T
    -Inf    311.26    Inf
(2.) mpc_cstr_plant/CA
    -Inf    8.5698    Inf

Получите номинальную стоимость xY, и 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:
---------------------------------

opreport = 


 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: 
----------
    <strong>Min</strong>      <strong>x</strong>       <strong>Max</strong>    <strong>dxMin</strong>        <strong>dx</strong>         <strong>dxMax</strong>
    <strong>___</strong>    <strong>______</strong>    <strong>___</strong>    <strong>_____</strong>    <strong>___________</strong>    <strong>_____</strong>

(1.) mpc_cstr_plant/CSTR/Integrator
     0     339.43    Inf      0        3.416e-08      0  
(2.) mpc_cstr_plant/CSTR/Integrator1
     0        5.5    Inf      0      -2.8663e-09      0  

Inputs: 
----------
     <strong>Min</strong>        <strong>u</strong>        <strong>Max</strong>  
    <strong>______</strong>    <strong>______</strong>    <strong>______</strong>

(1.) mpc_cstr_plant/CAi
        10        10        10
(2.) mpc_cstr_plant/Ti
    298.15    298.15    298.15
(3.) mpc_cstr_plant/Tc
      -Inf    298.22       Inf

Outputs: 
----------
    <strong>Min</strong>       <strong>y</strong>       <strong>Max</strong>
    <strong>____</strong>    <strong>______</strong>    <strong>___</strong>

(1.) mpc_cstr_plant/T
    -Inf    339.43    Inf
(2.) mpc_cstr_plant/CA
     5.5       5.5    5.5

Получите номинальную стоимость xY, и 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:
---------------------------------

opreport = 


 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: 
----------
    <strong>Min</strong>      <strong>x</strong>       <strong>Max</strong>    <strong>dxMin</strong>        <strong>dx</strong>         <strong>dxMax</strong>
    <strong>___</strong>    <strong>______</strong>    <strong>___</strong>    <strong>_____</strong>    <strong>___________</strong>    <strong>_____</strong>

(1.) mpc_cstr_plant/CSTR/Integrator
     0     373.13    Inf      0       5.5692e-11      0  
(2.) mpc_cstr_plant/CSTR/Integrator1
     0          2    Inf      0      -4.5972e-12      0  

Inputs: 
----------
     <strong>Min</strong>        <strong>u</strong>        <strong>Max</strong>  
    <strong>______</strong>    <strong>______</strong>    <strong>______</strong>

(1.) mpc_cstr_plant/CAi
        10        10        10
(2.) mpc_cstr_plant/Ti
    298.15    298.15    298.15
(3.) mpc_cstr_plant/Tc
      -Inf     305.2       Inf

Outputs: 
----------
    <strong>Min</strong>       <strong>y</strong>       <strong>Max</strong>
    <strong>____</strong>    <strong>______</strong>    <strong>___</strong>

(1.) mpc_cstr_plant/T
    -Inf    373.13    Inf
(2.) mpc_cstr_plant/CA
       2         2      2

Получите номинальную стоимость xY, и 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 в качестве шаблона, чтобы разработать собственные основанные на LPV адаптивные приложения MPC.

Подтвердите адаптивную эффективность MPC управления

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

  • Отслеживание: реакторный температурный T переходы заданного значения от оригинала 311 K (низкая скорость преобразования) к 377 K (высокая скорость преобразования) kgmol/m^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] Seborg, D. E. Т. Ф. Эдгар, и Д. А. Мелличамп, динамика процесса и управление, 2-й выпуск, Вайли, 2004.

bdclose(mdl)

Смотрите также

Похожие темы

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