В этом примере показано, как использовать адаптивный MPC-контроллер для управления нелинейным непрерывным резервуарным реактором с мешалкой (CSTR), когда он переходит от низкой скорости конверсии к высокой скорости конверсии.
Система изменения линейных параметров (LPV), состоящая из трех линейных моделей установки, строится в автономном режиме для описания локальной динамики установки в рабочем диапазоне. Адаптивный контроллер MPC затем использует систему LPV для обновления внутренней прогностической модели на каждом интервале управления и успешно достигает нелинейного управления.
Реактор с резервуаром с непрерывным перемешиванием (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} $$](../../examples/mpc/win64/ampccstr_lpv_eq18355773505528335414.png)
Выходами модели, которые также являются состояниями модели, являются:
![$$ \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} $$](../../examples/mpc/win64/ampccstr_lpv_eq00363870536327943183.png)
Задача управления состоит в поддержании концентрации реагента А
на желаемой уставке, которая изменяется с течением времени, когда реактор переходит от низкой степени конверсии к высокой скорости конверсии. Температура хладагента
- это управляемая переменная, используемая контроллером MPC для отслеживания эталона. Предполагается, что концентрация и температура входного потока сырья постоянны. Модель Simulink mpc_cstr_plant реализует нелинейную установку CSTR.
Хорошо известно, что динамика CSTR является сильно нелинейной по отношению к изменениям температуры реактора и может быть нестабильной с разомкнутым контуром во время перехода из одного рабочего состояния в другое. Один контроллер MPC, разработанный при определенном рабочем состоянии, не может обеспечить удовлетворительную эффективность управления в широком рабочем диапазоне.
Для управления нелинейной установкой CSTR с помощью метода линейного управления MPC имеется несколько вариантов:
Если линейная модель завода не может быть получена во время выполнения, сначала необходимо получить несколько линейных моделей завода в автономном режиме при различных рабочих условиях, которые охватывают типичный рабочий диапазон. Далее можно выбрать один из двух подходов к реализации стратегии управления MPC:
(1) Проектирование нескольких контроллеров MPC в автономном режиме, по одному для каждой модели установки. Во время выполнения используйте блок Multiple MPC Controller, который переключается между контроллерами на основе требуемой стратегии планирования. Дополнительные сведения см. в разделе Плановый контроль ПДК нелинейного химического реактора. Этот подход используется в тех случаях, когда модели завода имеют различные заказы или временные задержки.
(2) Спроектируйте один контроллер MPC в автономном режиме в начальной рабочей точке. Во время выполнения используйте блок Adaptive MPC Controller (обновление прогностической модели на каждом интервале управления) вместе с блоком Linear Parameter Variing (LPV) System (предоставление линейной модели установки со стратегией планирования), как показано в этом примере. Этот подход используется в тех случаях, когда все модели завода имеют одинаковый порядок и временную задержку.
Если линейная модель установки может быть получена во время выполнения, следует использовать блок Adaptive MPC Controller для обеспечения нелинейного управления. Существует два типичных способа получения линейной модели завода в оперативном режиме:
(1) Использовать последовательную линеаризацию. Дополнительные сведения см. в разделе Адаптивный MPC-контроль нелинейного химического реактора с использованием последовательной линеаризации. Этот подход используется при наличии нелинейной модели завода, которая может быть линеаризована во время выполнения.
(2) Используйте интерактивную оценку, чтобы определить линейную модель, когда контур замкнут. Дополнительные сведения см. в разделе Адаптивный MPC-контроль нелинейного химического реактора с использованием оценки онлайн-модели. Этот подход используется в тех случаях, когда линейная модель установки не может быть получена ни из системы 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 К. Для генерации линейной системы «состояние-пространство» из модели 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 в системный блок низкого напряжения, так как выходной сигнал установки y не используется в данном примере.
Контроллер 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);
Цель состоит в отслеживании указанного перехода в концентрации в реакторе. Температура реактора измеряется и используется при оценке состояния, но контроллер не будет пытаться регулировать ее непосредственно. Он будет изменяться по мере необходимости для регулирования концентрации. Таким образом, установите его вес ПДК равным нулю.
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 должны иметь значения по умолчанию.
Откройте модель Simulink.
mdl = 'ampc_cstr_lpv';
open_system(mdl)

Модель включает три части:
Блок CSTR реализует нелинейную модель установки.
Блок адаптивного контроллера MPC запускает разработанный контроллер MPC в адаптивном режиме.
Блок системы LPV (панель инструментов системы управления) обеспечивает локальную модель установки в пространстве и ее номинальные значения посредством интерполяции на каждом интервале управления. Затем модель установки подается в блок адаптивного контроллера MPC и обновляет модель прогнозирования, используемую контроллером MPC. В этом примере начальная модель установки используется для инициализации системного блока LPV.
Модель Simulink можно использовать в качестве шаблона для разработки собственных приложений адаптивного MPC на основе LPV.
Рабочие характеристики контроллера проверяются на предмет отслеживания уставок и отклонения возмущений.
Слежение: температура реактора T переходы уставки с исходного 311 К (низкая скорость преобразования) на 377 К (высокая скорость преобразования) кгмоль/м ^ 3. Во время перехода растение сначала становится нестабильным, а затем снова стабильным (см. график полюсов).
Регулирование: температура подачи Ti имеет медленную флуктуацию, представляемую синусоидальной волной с амплитудой 5 градусов, представляющей собой измеренное возмущение, подаваемое в контроллер ПДК.
Моделирование производительности по замкнутому контуру.
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)