exponenta event banner

Плановый контроль ПДК нелинейного химического реактора

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

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

О реакторе с непрерывной мешалкой

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

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

Входными данными модели 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). Блок адаптивного контроллера MPC обновляет прогностическую модель на каждом интервале управления, и блок системы LPV предоставляет линейную модель установки на основе стратегии планирования. Дополнительные сведения см. в разделе Адаптивное управление MPC нелинейным химическим реактором с использованием системы с изменяющимися линейными параметрами. Этот подход используется в тех случаях, когда все модели завода имеют одинаковый порядок и временную задержку.

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

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

(2) Используйте интерактивную оценку, чтобы определить линейную модель, когда контур замкнут. Дополнительные сведения см. в разделе Адаптивный MPC-контроль нелинейного химического реактора с использованием оценки онлайн-модели. Этот подход используется в тех случаях, когда линейная модель установки не может быть получена ни из системы 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 К. Для генерации линейной системы «состояние-пространство» из модели 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. Предположим, что температура и концентрация в реакторе поддаются измерению.

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

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

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 должны иметь значения по умолчанию.

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

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

mpc_mdl = 'mpc_cstr_single';
open_system(mpc_mdl)

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

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

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.

Реакция с замкнутым контуром удовлетворительна.

Моделирование разработанного MPC-контроллера с использованием полного перехода

Сначала определите требуемый переход уставки. После 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 для промежуточной и конечной стадий перехода.

Расчетный контроллер ПДК для промежуточного рабочего состояния

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

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.

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

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

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)

См. также

|

Связанные темы