主要内容

非线性化学反应器的自适应MPC控制使用线性参数变化系统

本实例展示了如何使用自适应MPC控制器控制非线性连续搅拌釜式反应器(CSTR)从低转化率向高转化率过渡。

离线建立了一个由三个线性工厂模型组成的线性参数变化系统来描述工厂在运行范围内的局部动态。自适应MPC控制器利用LPV系统在每个控制区间更新内部预测模型,成功实现非线性控制。

关于连续搅拌釜式反应器

连续搅拌釜式反应器(CSTR)是过程工业中一种常见的化工系统。CSTR系统原理图如下:

该系统是夹套的非绝热罐反应器,其在[1]中进行了广泛描述的。假设血管完全混合,并且发生单一的一阶放热和不可逆的反应,A - > B。试剂A的入口流以恒定的体积速率送入罐。产物流以相同的体积速率连续退出,液体密度是恒定的。因此,反应液体的体积是恒定的。

CSTR模型的输入为:

$$ \begin{array} {ll}
& # 38;\textnormal{入口进料
stream中A的浓度}[kgmol/m^3] \
u_2 = T_i \;& # 38;\textnormal{进料流温度}[K] \\
u_3 = T_c \;& # 38;\textnormal{夹克冷却液温度}[K] \\
\end{array} $$

该模型的输出,也是模型状态,是:

$$ \begin{array} {ll}
& # 38;\textnormal{反应器内A的浓度}[kgmol/m^3] \
y_2 = x_2 = T \;& # 38;\textnormal{反应堆温度}[K] \\
\end{array} $$

控制目标是保持试剂A的浓度,CA美元当反应器从低转换率转变为高转换率时,它随时间而变化。冷却液温度$ t_c $是MPC控制器使用的操纵变量来跟踪参考。入口进料流浓度和温度被假定为恒定。Simu金宝applink模型mpc_cstr_plant实现了非线性CSTR装置。

关于自适应模型预测控制

众所周知,CSTR动力学在反应堆温度变化方面是强非线性的,在从一种运行状态过渡到另一种运行状态时可能是开环不稳定的。在特定工况下设计的单一MPC控制器不能在较宽的工作范围内提供满意的控制性能。

要使用线性MPC控制技术控制非线性CSTR工厂,您还有一些选项:

  • 如果不能在运行时获得线性厂房模型,首先需要脱机获得覆盖典型运行范围的不同工况下的几个线性厂房模型。接下来,您可以选择两种方法中的一种来实现MPC控制策略:

(1)脱机设计多个MPC控制器,每个设备模型一个。在运行时,使用Multiple MPC Controller块,它根据所需的调度策略在控制器之间切换。有关更多详细信息,请参阅非线性化学反应器的增益调度MPC控制.当工厂模型有不同的订单或时间延迟时,使用这种方法。

(2)设计一个在初始工作点脱机的MPC控制器。在运行时,使用自适应MPC控制器块(在每个控制区间更新预测模型)和线性参数变化(LPV)系统块(为线性工厂模型提供调度策略),如本例所示。当所有的工厂模型具有相同的阶次和时延时,使用这种方法。

  • 如果一个线性的对象模型可以在运行时获得,你应该使用自适应MPC控制器块来实现非线性控制。有两种典型的在线获取线性植物模型的方法:

(1)采用逐次线性化。有关更多详细信息,请参阅基于连续线性化的非线性化学反应器自适应MPC控制.当非线性对象模型可用且可以在运行时线性化时使用此方法。

(2)使用在线估计识别循环关闭时的线性模型。有关更多详细信息,请参阅使用在线模型估计的非线性化学反应器的自适应MPC控制.当不能从LPV系统或连续的线性化获得线性工厂模型时使用这种方法。

获得初始工况下的线性对象模型

为了线性化工厂,需要Simulink®和Simu金宝applink Control Design™。

如果〜mpcchecktoolboxinstalled('金宝appsimulink') disp ('金宝app运行这个例子需要Simulink '返回结束如果〜mpcchecktoolboxinstalled(“slcontrol”) disp (“金宝app运行这个例子需要Simulink控制设计。”返回结束

首先,得到初始工况下的线性厂房模型,其中是10kgmol /m^3,两者都是吗“透明国际”Tc298.15 K。要从Simulink模型中生成线性状态空间系统,可以使用如下函数金宝appoperspecfindop,线性化从Simu金宝applink控制设计。

创建操作点规范。

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

指定初始条件下已知的进料浓度。

op.Inputs(1)。u = 10;op.Inputs(1)。知道= true;

在初始条件下指定已知的进料温度。

op.Inputs(2)。u = 298.15;op.Inputs(2)。知道= true;

指定初始条件下已知的冷却剂温度。

op.Inputs(3)。u = 298.15;op.Inputs(3)。知道= true;

计算初始条件。

[op_point, op_report] = findop (plant_mdl, op);
操作点搜索报告:---------------------------------模型mpc_cstr_plant的操作点搜索报告。(t=0时时变组件评估)工作点规范成功满足。州 : ---------- ( (1) mpc_cstr_plant /装运箱/集成商x: 311 dx: 8.12 e-11 (0) (2) mpc_cstr_plant /装运箱/ Integrator1 x: 8.57 dx: -6.87 e-12(0)输入 : ---------- ( 1) mpc_cstr_plant / CAi u: 10 (2) mpc_cstr_plant / Ti u: 298 (3) mpc_cstr_plant / Tc u: 298输出 : ---------- ( 1) mpc_cstr_plant / T y: 311(负无穷到正无穷)(2)mpc_cstr_plant / CA y:8.57(负无穷到正无穷)

获得的名义值Xy,

x0_initial = [op_report.States(1)方式;op_report.States(2)方式);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 =线性化(plant_mdl op_point);

将工厂模型离散化。

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

指定MPC中使用的信号类型和名称。

plant_initial.InputGroup。unmeasureddisturbance = [1 2];plant_initial.InputGroup。ManipulatedVariables = 3;plant_initial.OutputGroup。测量= [1 2];plant_initial。InputName = {'cai'“透明国际”“Tc”};plant_initial。OutputName = {“T”'CA'};

获得了中间工况下的线性厂房模型

创建工作点规范。

op = operspec (plant_mdl);

指定进料浓度。

op.Inputs(1)。u = 10;op.Inputs(1)。知道= true;

请指定进料温度。

op.Inputs(2)。u = 298.15;op.Inputs(2)。知道= true;

指定反应器浓度。

OP.OUTPUTS(2).Y = 5.5;op.outputs(2).known = true;

找到稳定的状态操作条件。

[op_point, op_report] = findop (plant_mdl, op);
操作点搜索报告:---------------------------------模型mpc_cstr_plant的操作点搜索报告。(t=0时时变组件评估)工作点规范成功满足。州 : ---------- ( (1) mpc_cstr_plant /装运箱/集成商x: 339 dx: 3.42 e-08 (0) (2) mpc_cstr_plant /装运箱/ Integrator1 x: 5.5 dx: -2.87 e-09(0)输入 : ---------- ( 1) mpc_cstr_plant / CAi u: 10 (2) mpc_cstr_plant / Ti u: 298 (3) mpc_cstr_plant / Tc u: 298(负无穷到正无穷)输出 : ---------- ( 1) mpc_cstr_plant / T y: 339(负无穷到正无穷)(2)mpc_cstr_plant / CA y:5.5 (5.5)

获得的名义值Xy,

x0_intermediate = [op_report.States(1)方式;op_report.States(2)方式);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 =线性化(plant_mdl op_point);

离散化植物模型

plant_intermediate = c2d(plant_intermediate,ts);

指定MPC中使用的信号类型和名称。

plant_intermediate.InputGroup。unmeasureddisturbance = [1 2];plant_intermediate.InputGroup。ManipulatedVariables = 3;plant_intermediate.OutputGroup。测量= [1 2];plant_intermediate。InputName = {'cai'“透明国际”“Tc”};plant_intermediate。OutputName = {“T”'CA'};

获得最终运行状态下的线性工厂模型

创建工作点规范。

op = operspec (plant_mdl);

指定进料浓度。

op.Inputs(1)。u = 10;op.Inputs(1)。知道= true;

请指定进料温度。

op.Inputs(2)。u = 298.15;op.Inputs(2)。知道= true;

指定反应器浓度。

OP.OUTPUTS(2).Y = 2;op.outputs(2).known = true;

找到稳态工况。

[op_point, op_report] = findop (plant_mdl, op);
操作点搜索报告:---------------------------------模型mpc_cstr_plant的操作点搜索报告。(t=0时时变组件评估)工作点规范成功满足。州 : ---------- ( (1) mpc_cstr_plant /装运箱/集成商x: 373 dx: 5.57 e-11 (0) (2) mpc_cstr_plant /装运箱/ Integrator1 x: 2 dx: -4.6 e-12(0)输入 : ---------- ( 1) mpc_cstr_plant / CAi u: 10 (2) mpc_cstr_plant / Ti u: 298 (3) mpc_cstr_plant / Tc u: 305(负无穷到正无穷)输出 : ---------- ( 1) mpc_cstr_plant / T y: 373(负无穷到正无穷)(2)mpc_cstr_plant / CA y: 2 (2)

获得的名义值Xy,

x0_final = [op_report.States(1)方式;op_report.States(2)方式);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 =线性化(plant_mdl op_point);

离散化植物模型

plant_final = c2d(plant_final,ts);

指定MPC中使用的信号类型和名称。

plant_final.inputgroup.unmeasureddisturbances = [1 2];plant_final.inputgroup.manipuldvariables = 3;plant_final.outputproup.measured = [1 2];plant_final.inputname = {'cai'“透明国际”“Tc”};plant_final。OutputName = {“T”'CA'};

构造线性变参数系统

使用LTI数组来存储三个线性工厂模型。

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

指定反应堆温度T.作为调度参数。

lpv。SamplingGrid =结构(“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;

您不需要提供输入信号到LPV系统块,因为工厂输出信号y在本例中不使用。

设计初始工况下的MPC控制器

在初始工况下设计MPC控制器。应该选择视野和调优权重等控制器设置,以便它们适用于整个操作范围。

创建一个具有默认预测和控制视野的MPC控制器

mpcobj = mpc (plant_initial, Ts);
——> mpc对象的“PredictionHorizon”属性为空。尝试PredictionHorizon = 10。mpc对象的“ControlHorizon”属性是空的。假设2。- - - >“权重。操控变量的“mpc”对象的属性为空。假设默认的0.00000。- - - >“权重。“mpc”对象的属性为空。假设默认的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 =结构(“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 =眼(2)* 10;setindist (mpcobj'模型'、距离);
- >“MPC”对象的“Model.Disturbance”属性为空:假设未测量的输入干扰#1是集成的白噪声。假设未测量的输入干扰#2是集成的白噪声。假设没有添加到测量的输出通道#2中的干扰。假设没有添加到测量的输出通道#1中的干扰。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。

保持所有其他MPC参数的默认值。

在Simulink中实现CSTR装置的自适应MPC控制金宝app

打开Simulin金宝appk模型。

mdl =“ampc_cstr_lpv”;open_system (mdl)

该模型包括三个部分:

  1. CSTR块实现非线性工厂模型。

  2. 自适应MPC控制器块以自适应模式运行设计的MPC控制器。

  3. LPV系统块(控制系统工具箱)通过在每个控制区间内插补提供一个局部状态空间对象模型及其标称值。然后,被控对象模型被输入自适应MPC控制器块,并更新由MPC控制器使用的预测模型。在本例中,初始工厂模型用于初始化LPV系统块。

您可以使用Simulink模型作金宝app为模板来开发基于LPV的自适应MPC应用程序。

验证自适应MPC控制性能

控制器的性能验证了设定点跟踪和干扰抑制。

  • 跟踪:反应堆温度T.设定点从原始311k(低转换率)转换为377k(高转换率)kgmol / m ^ 3。在过渡期间,工厂首先变得不稳定,然后再次稳定(参见杆曲线)。

  • 温度调节:喂“透明国际”具有由幅度为5度的正弦波表示的缓慢波动,这是馈送到MPC控制器的测量干扰。

仿真闭环性能。

open_system ([mdl'/专注'])Open_System([MDL/温度的]) sim (mdl)
假设没有添加到测量的输出通道#2中的干扰。假设没有添加到测量的输出通道#1中的干扰。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。

跟踪调节性能良好。

参考文献

Seborg, D. E., T. F. Edgar,和D. A. Mellichamp,过程动力学与控制,第2版,Wiley, 2004。

bdclose (mdl)

另请参阅

相关的话题