主要内容

非线性化学反应器的增益调度MPC控制

该实例演示了如何使用多个MPC控制器来控制非线性连续搅拌槽式反应器(CSTR)从低转化率到高转化率的转变。

在不同工况下设计了多个MPC控制器,并在Simulink中实现了多个MPC控制器模块。金宝app在运行时,一个调度信号被用来在控制器之间切换。

关于连续搅拌釜式反应器

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

该系统是[1]中广泛描述的一种夹套非绝热罐式反应器。假设容器完全混合,发生单一的一级放热和不可逆反应,a -> B。试剂A的进口流以恒定的容积率被送入储罐。产品流以相同的容积率连续流出,液体密度是恒定的。因此,反应液体的体积是恒定的。

CSTR模型的输入是:

$$ \begin{array} {ll}
u_1 = CA_i \;& # 38;[kgmol/m^3] \\
u_2 = T_i \;& # 38;[K] \\
u_3 = T_c \;& # 38;\textnormal{夹克冷却温度}[K] \\
\end{array} $$

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

$$ \begin{array} {ll}
& # 38;[kgmol/m^3] \\
y_2 = x_2 = T \;& # 38;\textnormal{Reactor temperature} [K] \\
\end{array} $$

控制目标是保持试剂A的浓度,CA美元在其所需的设定值,当反应器从低转化率转变为高转化率时,该设定值随时间而变化。冷却液温度T_c美元是MPC控制器用来跟踪参考的操纵变量。假设进料流浓度和温度是恒定的。仿真软件金宝app模型mpc_cstr_plant实现了非线性CSTR装置。

关于增益调度模型预测控制

众所周知,CSTR动力学对于反应堆温度变化是强烈的非线性,并且在从一种操作条件到另一种操作条件的过渡期间可能是开环不稳定的。单一的MPC控制器在特定的工作条件下设计,不能在大的工作范围内提供令人满意的控制性能。

要用线性MPC控制技术控制非线性CSTR装置,你有几个选项:

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

离线设计几个MPC控制器,每个工厂模型一个。在运行时,使用Multiple MPC Controller块,它根据所需的调度策略在控制器之间切换,如本例中所讨论的。当工厂模型有不同的订单或时间延迟时,使用这种方法。

(2)在标称工作点脱机设计一个MPC控制器。在运行时,使用自适应MPC控制器块和线性参数变化系统(LPV系统块)。自适应MPC控制器块在每个控制间隔更新预测模型,LPV系统块提供一个基于调度策略的线性对象模型。有关详细信息,请参见非线性化学反应器的线性变参数自适应MPC控制.当所有的对象模型具有相同的阶数和时间延迟时,使用这种方法。

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

(1)采用逐次线性化。有关详细信息,请参见采用逐次线性化的非线性化学反应器自适应MPC控制.当非线性对象模型可用并可在运行时进行线性化时,使用此方法。

(2)当回路闭合时,利用在线估计识别线性模型。有关详细信息,请参见基于在线模型估计的非线性化学反应器自适应MPC控制.当线性对象模型不能从LPV系统或连续线性化中得到时,可以使用这种方法。

获得初始运行条件下的线性对象模型

要运行此示例,需要Simulink®和Si金宝appmulink Control Design™软件。

如果~ mpcchecktoolboxinstalled (“金宝app模型”) disp (“金宝app运行这个示例需要Simulink。”返回结束如果~ mpcchecktoolboxinstalled (“slcontrol”) disp (“金宝app需要Simulink控制设计来运行这个例子。”返回结束

首先,得到初始运行条件下的线性对象模型,其中是10kgmol /m^3吗“透明国际”Tc298.15 K。要从Simulink模型生成线性状态空间系统,可以使用如下函数金宝appoperspecfindop,线性化来自Sim金宝appulink控制设计。

创建工作点规范。

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);
工作点搜索报告:--------------------------------- opreport = mpc_cstr_plant模型的工作点搜索报告。(t=0时评估的时变分量)成功满足工作点规范。状态:---------- < 强> Min < /强> < >强x < /强> <强> Max < /强> < >强dxMin < /强> < >强dx < /强> < >强dxMax < /强> <强> ___ < /强> <强> __ < /强> <强> ___ < /强> <强> ___ < /强> <强劲 >___________ <强> ___ < / >强(1)mpc_cstr_plant /装运箱/集成商0 311.26正0 8.1176 e-11 0(2)。mpc_cstr_plant /装运箱/ Integrator1 0 8.5698正0 -6.8709 e-12 0输入 : ---------- < 强> Min < /强> <强> u < /强> <强> Max < /强> <强> __ < /强> <强> __ < /强> <强> __ < / >强(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输出:---------- < 强> Min < /强> <强> y < /强> <强> Max < /强> <强> ___ < /强> <强> __ < /强> <强> ___ < / >强(1)mpc_cstr_plant / T 311.26负无穷到正无穷(2)mpc_cstr_plant / CA负8.5698正无穷

的标称值xy,u

x0 = [op_report.States(1)方式;op_report.States(2)方式);y0 = [op_report.Outputs (1) .y;op_report.Outputs (2) .y];情况= [op_report.Inputs (1) .u;op_report.Inputs (2) .u;op_report.Inputs (3) .u];

得到初始条件下的线性模型。

工厂=线性化(plant_mdl op_point);

验证线性模型在此条件下是开环稳定的。

eig(植物)
Ans = -0.5223 -0.8952

针对初始工况设计MPC控制器

指定MPC中使用的信号类型。假设反应堆温度和浓度都是可测量的。

plant. inputgroup . unmeasured扰动= [1 2];plant.InputGroup.ManipulatedVariables = 3;plant.OutputGroup.Measured = [1 2];工厂。InputName = {“蔡”“透明国际”“Tc”};工厂。OutputName = {“T”“CA”};

创建具有指定的样本时间和默认预测和控制范围的MPC控制器。

t = 0.5;mpcobj = mpc(植物、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,“U”,(0, 0,情况(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 =眼(2)* 10;setindist (mpcobj“模型”、距离);
——>模型转换为离散时间。——>”模式。“mpc”对象的干扰属性为空:假设未测输入干扰#1为综合白噪声。假设未经测量的输入干扰#2是集成白噪声。假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

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

在饲料浓度的阶跃干扰下测试控制器

mpc_cstr_single金宝appSimulink模型包含CSTR装置和MPC控制器的反馈配置。

mpc_mdl =“mpc_cstr_single”;open_system (mpc_mdl)

注意,MPC控制器块被配置为提前(预览)未来设置值的变化;也就是说,预测设定点的转变。这通常会改善设置点跟踪。

为输出定义一个常量设置点。

CSTR_Setpoints。时间= [0;60);CSTR_Setpoints.signals。[y0 y0]';

测试对饲料浓度增加5%的反应。

set_param ([mpc_mdl' /进料浓度的],“价值”“10.5”);

设置标尺并模拟响应。

open_system ([mpc_mdl' /测量']) open_system ([mpc_mdl/冷却液温度的]) set_param ([mpc_mdl' /测量'],“Ymin”305 ~ 8“Ymax”“320 ~ 9”) set_param ([mpc_mdl/冷却液温度的],“Ymin”“295”“Ymax”“305”) sim (mpc_mdl, 10)
——>模型转换为离散时间。假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

闭环响应是令人满意的。

利用全过渡对所设计的MPC控制器进行仿真

首先,定义所需的设置点转换。经过10分钟的预热期后,以0.25 /分钟的速率降低浓度设定值,直到达到2.0 kmol/m^3。

CSTR_Setpoints。时间= [0 10 11:39]';CSTR_Setpoints.signals。值= [y0(1) *(31日1),[y0 (2), y0 (2), (y0(2): -0.25 3:2)”;2;2]];

去除之前增加的5%的饲料浓度。

set_param ([mpc_mdl' /进料浓度的],“价值”“十”

设置标尺并模拟响应。

set_param ([mpc_mdl' /测量'],“Ymin”“300 ~ 0”“Ymax”400 ~ 10) set_param ([mpc_mdl/冷却液温度的],“Ymin”“240”“Ymax”“360”

模拟模型。

sim (mpc_mdl 60)

闭环响应是不可接受的。如果在整个过渡路径的不同工况下设计其他MPC控制器,则可以提高整个过渡过程的性能。在接下来的两部分中,您将设计用于中间和最后过渡阶段的MPC控制器。

设计中间工况MPC控制器

创建工作点规范。

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)。知道= true;

找到稳定的工作状态。

[op_point, op_report] = findop (plant_mdl, op);%获取|x|、|y|和|u|的标称值。x0 = [op_report.States(1)方式;op_report.States(2)方式);y0 = [op_report.Outputs (1) .y;op_report.Outputs (2) .y];情况= [op_report.Inputs (1) .u;op_report.Inputs (2) .u;op_report.Inputs (3) .u];
工作点搜索报告:--------------------------------- opreport = mpc_cstr_plant模型的工作点搜索报告。(t=0时评估的时变分量)成功满足工作点规范。状态:---------- < 强> Min < /强> < >强x < /强> <强> Max < /强> < >强dxMin < /强> < >强dx < /强> < >强dxMax < /强> <强> ___ < /强> <强> __ < /强> <强> ___ < /强> <强> ___ < /强> <强劲 >___________ <强> ___ < / >强(1)mpc_cstr_plant /装运箱/集成商0 339.43正0 3.416 e-08 0(2)。mpc_cstr_plant /装运箱/ Integrator1 0 5.5正0 -2.8663 e-09 0输入 : ---------- < 强> Min < /强> <强> u < /强> <强> Max < /强> <强> __ < /强> <强> __ < /强> <强> __ < / >强(1)mpc_cstr_plant / CAi 10 10 10 (2) mpc_cstr_plant / Ti 298.15 298.15 298.15 298.22 (3) mpc_cstr_plant / Tc负无穷到正无穷输出:---------- < 强> Min < /强> <强> y < /强> <强> Max < /强> <强> ___ < /强> <强> __ < /强> <强> ___ < / >强(1)mpc_cstr_plant / T 339.43负无穷到正无穷(2)mpc_cstr_plant / CA 5.5 5.5 5.5

得到初始条件下的线性模型。

plant_intermediate =线性化(plant_mdl op_point);

验证线性模型在此条件下是开环不稳定的。

eig (plant_intermediate)
Ans = 0.4941 -0.8357

指定MPC中使用的信号类型。假设反应堆温度和浓度都是可测量的。

plant_intermediate.InputGroup。unmeasured扰动= [1 2];plant_intermediate.InputGroup。ManipulatedVariables = 3;plant_intermediate.OutputGroup。Measured = [1 2];plant_intermediate。InputName = {“蔡”“透明国际”“Tc”};plant_intermediate。OutputName = {“T”“CA”};

创建MPC控制器。

mpcobj_intermediate = mpc (plant_intermediate, 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_intermediate.Model。名义=结构(“X”x0,“U”,(0, 0,情况(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,“模型”、距离);
——>模型转换为离散时间。——>”模式。“mpc”对象的干扰属性为空:假设未测输入干扰#1为综合白噪声。假设未经测量的输入干扰#2是集成白噪声。假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

针对最终工况设计MPC控制器

创建工作点规范。

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)。知道= true;

找到稳态操作条件。

[op_point, op_report] = findop (plant_mdl, op);%获取|x|、|y|和|u|的标称值。x0 = [op_report.States(1)方式;op_report.States(2)方式);y0 = [op_report.Outputs (1) .y;op_report.Outputs (2) .y];情况= [op_report.Inputs (1) .u;op_report.Inputs (2) .u;op_report.Inputs (3) .u];
工作点搜索报告:--------------------------------- opreport = mpc_cstr_plant模型的工作点搜索报告。(t=0时评估的时变分量)成功满足工作点规范。状态:---------- < 强> Min < /强> < >强x < /强> <强> Max < /强> < >强dxMin < /强> < >强dx < /强> < >强dxMax < /强> <强> ___ < /强> <强> __ < /强> <强> ___ < /强> <强> ___ < /强> <强劲 >___________ <强> ___ < / >强(1)mpc_cstr_plant /装运箱/集成商0 373.13正0 5.5692 e-11 0(2)。mpc_cstr_plant /装运箱/ Integrator1 0 2正0 -4.5972 e-12 0输入 : ---------- < 强> Min < /强> <强> u < /强> <强> Max < /强> <强> __ < /强> <强> __ < /强> <强> __ < / >强(1)mpc_cstr_plant / CAi 10 10 10 (2) mpc_cstr_plant / Ti 298.15 298.15 298.15 305.2 (3) mpc_cstr_plant / Tc负无穷到正无穷输出:---------- < 强> Min < /强> <强> y < /强> <强> Max < /强> <强> ___ < /强> <强> __ < /强> <强> ___ < / >强(1)mpc_cstr_plant / T 373.13负无穷到正无穷(2)mpc_cstr_plant / CA 2 2 2

得到初始条件下的线性模型。

plant_final =线性化(plant_mdl op_point);

验证线性模型在此条件下再次开环稳定。

eig (plant_final)
Ans = -1.1077 + 1.0901i

指定MPC中使用的信号类型。假设反应堆温度和浓度都是可测量的。

plant_final.InputGroup。unmeasured扰动= [1 2];plant_final.InputGroup。ManipulatedVariables = 3;plant_final.OutputGroup。Measured = [1 2];plant_final。InputName = {“蔡”“透明国际”“Tc”};plant_final。OutputName = {“T”“CA”};

创建MPC控制器。

mpcobj_final = mpc (plant_final, 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_final.Model。名义=结构(“X”x0,“U”,(0, 0,情况(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,“模型”、距离);
——>模型转换为离散时间。——>”模式。“mpc”对象的干扰属性为空:假设未测输入干扰#1为综合白噪声。假设未经测量的输入干扰#2是集成白噪声。假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

使用多个MPC控制器控制CSTR工厂

以下型号使用多个MPC控制器块在操作范围内实现三个MPC控制器。

mmpc_mdl =“mpc_cstr_multiple”;open_system (mmpc_mdl)

该模型配置为按顺序使用三个控制器:mpcobjmpcobj_intermediate,mpcobj_final

open_system ([mmpc_mdl' /多个MPC控制器”])

另外,两个开关指定何时从一个控制器切换到另一个控制器。规则是:

  1. 如果CSTR浓度>= 8,使用mpcobj

  2. 如果3 <= CSTR浓度< 8,使用mpcobj_intermediate

  3. 如果CSTR浓度< 3,使用mpcobj_final

使用多个MPC控制器模块进行模拟。

open_system ([mmpc_mdl' /测量']) open_system ([mmpc_mdl' / MV ']) sim (mmpc_mdl)
——>模型转换为离散时间。假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。——>模型转换为离散时间。假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

这种转变现在得到了很好的控制。主要的改进是通过开环不稳定区域的过渡。切换信号图显示控制器发生转换时的情况。由于新的预测模型所引入的动态特性的变化,MV特性在这些时刻发生变化。

参考文献

塞堡,埃德加和梅利尚,过程动力学与控制,第二版,Wiley, 2004。

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

另请参阅

|

相关的话题