Планируемый коэффициент усиления MPC управления нелинейного химического реактора

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

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

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

Постоянно перемешиваемый баком реактор (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, который переключается между контроллерами на основе желаемой стратегии планирования, как обсуждается в этом примере. Используйте этот подход, когда модели объекта управления имеют различные порядки или временные задержки.

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

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

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

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

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

Чтобы запустить этот пример, требуется программное обеспечение Simulink ® и Simulink Control Design™.

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 = [op_report.States(1).x; op_report.States(2).x];
y0 = [op_report.Outputs(1).y; op_report.Outputs(2).y];
u0 = [op_report.Inputs(1).u; op_report.Inputs(2).u; op_report.Inputs(3).u];

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

plant = linearize(plant_mdl,op_point);

Проверьте, что линейная модель является стабильной в разомкнутом контуре при этом условии.

eig(plant)
ans =

   -0.5223
   -0.8952

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

Укажите типы сигналов, используемых в MPC. Предположим, что и температура реактора, и концентрация измеримы.

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

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

Ts = 0.5;
mpcobj = mpc(plant,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,'U',[0;0;u0(3)],'Y',y0,'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);
-->Converting model to discrete time.
-->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 на своих значениях по умолчанию.

Тестируйте контроллер с пошаговым нарушением порядка в концентрации сырья

The mpc_cstr_single Модель Simulink содержит объект CSTR и контроллер MPC в строении обратной связи.

mpc_mdl = 'mpc_cstr_single';
open_system(mpc_mdl)

Обратите внимание, что блок MPC Controller сконфигурирован для просмотра (предварительного просмотра) изменений уставки в будущем; то есть, предвидя переход уставки. Это обычно улучшает отслеживание уставки.

Задайте постоянную уставку для выхода.

CSTR_Setpoints.time = [0; 60];
CSTR_Setpoints.signals.values = [y0 y0]';

Испытание реакции на увеличение концентрации сырья на 5%.

set_param([mpc_mdl '/Feed Concentration'],'Value','10.5');

Установите шкалы графиков и симулируйте ответ.

open_system([mpc_mdl '/Measurements'])
open_system([mpc_mdl '/Coolant Temperature'])
set_param([mpc_mdl '/Measurements'],'Ymin','305~8','Ymax','320~9')
set_param([mpc_mdl '/Coolant Temperature'],'Ymin','295','Ymax','305')
sim(mpc_mdl,10)
-->Converting model to discrete time.
   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.

Реакция с обратной связью удовлетворительна.

Симулируйте разработанный контроллер, используя полный переход

Сначала задайте требуемый переход уставки. После 10-минутного периода прогрева увеличьте уставку концентрации вниз со скоростью 0,25 в минуту, пока она не достигнет 2,0 кмоль/м ^ 3.

CSTR_Setpoints.time = [0 10 11:39]';
CSTR_Setpoints.signals.values = [y0(1)*ones(31,1),[y0(2);y0(2);(y0(2):-0.25:2)';2;2]];

Удалите 5% -ное увеличение концентрации корма, используемое ранее.

set_param([mpc_mdl '/Feed Concentration'],'Value','10')

Установите шкалы графиков и симулируйте ответ.

set_param([mpc_mdl '/Measurements'],'Ymin','300~0','Ymax','400~10')
set_param([mpc_mdl '/Coolant Temperature'],'Ymin','240','Ymax','360')

Симулируйте модель.

sim(mpc_mdl,60)

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

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

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

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);

% Obtain nominal values of |x|, |y|, and |u|.
x0 = [op_report.States(1).x; op_report.States(2).x];
y0 = [op_report.Outputs(1).y; op_report.Outputs(2).y];
u0 = [op_report.Inputs(1).u; op_report.Inputs(2).u; op_report.Inputs(3).u];
 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)

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

plant_intermediate = linearize(plant_mdl,op_point);

Проверьте, что линейная модель является нестабильной в разомкнутом контуре при этом условии.

eig(plant_intermediate)
ans =

    0.4941
   -0.8357

Укажите типы сигналов, используемых в 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'};

Создайте контроллер MPC.

mpcobj_intermediate = mpc(plant_intermediate,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_intermediate.Model.Nominal = struct('X',x0,'U',[0;0;u0(3)],'Y',y0,'DX',[0 0]);
Uscale = [10;30;50];
Yscale = [50;10];
mpcobj_intermediate.DV(1).ScaleFactor = Uscale(1);
mpcobj_intermediate.DV(2).ScaleFactor = Uscale(2);
mpcobj_intermediate.MV.ScaleFactor = Uscale(3);
mpcobj_intermediate.OV(1).ScaleFactor = Yscale(1);
mpcobj_intermediate.OV(2).ScaleFactor = Yscale(2);
mpcobj_intermediate.Weights.OV = [0 1];
Dist = ss(getindist(mpcobj_intermediate));
Dist.B = eye(2)*10;
setindist(mpcobj_intermediate,'model',Dist);
-->Converting model to discrete time.
-->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 для конечного рабочего условия

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

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);

% Obtain nominal values of |x|, |y|, and |u|.
x0 = [op_report.States(1).x; op_report.States(2).x];
y0 = [op_report.Outputs(1).y; op_report.Outputs(2).y];
u0 = [op_report.Inputs(1).u; op_report.Inputs(2).u; op_report.Inputs(3).u];
 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)

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

plant_final = linearize(plant_mdl,op_point);

Проверьте, что линейная модель снова является стабильной в разомкнутом контуре при этом условии.

eig(plant_final)
ans =

  -1.1077 + 1.0901i
  -1.1077 - 1.0901i

Укажите типы сигналов, используемых в 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'};

Создайте контроллер MPC.

mpcobj_final = mpc(plant_final,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_final.Model.Nominal = struct('X',x0,'U',[0;0;u0(3)],'Y',y0,'DX',[0 0]);
Uscale = [10;30;50];
Yscale = [50;10];
mpcobj_final.DV(1).ScaleFactor = Uscale(1);
mpcobj_final.DV(2).ScaleFactor = Uscale(2);
mpcobj_final.MV.ScaleFactor = Uscale(3);
mpcobj_final.OV(1).ScaleFactor = Yscale(1);
mpcobj_final.OV(2).ScaleFactor = Yscale(2);
mpcobj_final.Weights.OV = [0 1];
Dist = ss(getindist(mpcobj_final));
Dist.B = eye(2)*10;
setindist(mpcobj_final,'model',Dist);
-->Converting model to discrete time.
-->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.

Управление объектом CSTR с помощью нескольких контроллеров MPC

Следующая модель использует блок Multiple MPC Controllers, чтобы реализовать три контроллера MPC в рабочей области значений.

mmpc_mdl = 'mpc_cstr_multiple';
open_system(mmpc_mdl)

Модель сконфигурирована, чтобы использовать три контроллера в последовательности: mpcobj, mpcobj_intermediate, и mpcobj_final.

open_system([mmpc_mdl '/Multiple MPC Controllers'])

Кроме того, эти два переключателя определяют, когда переключаться с одного контроллера на другой. Правила:

  1. Если концентрация CSTR > = 8, используйте mpcobj.

  2. Если 3 < = концентрация CSTR < 8, используйте mpcobj_intermediate.

  3. Если концентрация CSTR < 3, используйте mpcobj_final.

Симулируйте с использованием блока Multiple MPC Controllers.

open_system([mmpc_mdl '/Measurements'])
open_system([mmpc_mdl '/MV'])
sim(mmpc_mdl)
-->Converting model to discrete time.
   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.
-->Converting model to discrete time.
   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.

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

Ссылки

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

bdclose(plant_mdl)
bdclose(mpc_mdl)
bdclose(mmpc_mdl)

См. также

|

Похожие темы