该实例演示了如何使用自适应MPC控制器来控制非线性连续搅拌槽式反应器(CSTR)从低转化率向高转化率的转变。
离线构造了一个由三个线性电站模型组成的线性变参数系统,以描述整个运行范围内的电站动态。自适应MPC控制器利用LPV系统在每个控制区间更新内部预测模型,成功实现非线性控制。
连续搅拌槽式反应器(CSTR)是过程工业中常用的化学系统。CSTR系统的原理图如下:
该系统是[1]中广泛描述的一种夹套非绝热罐式反应器。假设容器完全混合,发生单一的一级放热和不可逆反应,a -> B。试剂A的进口流以恒定的容积率被送入储罐。产品流以相同的容积率连续流出,液体密度是恒定的。因此,反应液体的体积是恒定的。
CSTR模型的输入是:
模型的输出,也就是模型的状态,是:
控制目标是保持试剂A的浓度,在其所需的设定值,当反应器从低转化率转变为高转化率时,该设定值随时间而变化。冷却液温度是MPC控制器用来跟踪参考的操纵变量。假设进料流浓度和温度是恒定的。仿真软件万博1manbetx模型mpc_cstr_plant
实现了非线性CSTR装置。
众所周知,CSTR动力学对于反应堆温度变化是强烈的非线性,并且在从一种操作条件到另一种操作条件的过渡期间可能是开环不稳定的。单一的MPC控制器在特定的工作条件下设计,不能在大的工作范围内提供令人满意的控制性能。
要用线性MPC控制技术控制非线性CSTR装置,你有几个选项:
如果不能在运行时获得线性电厂模型,首先需要在不同的运行条件下获得覆盖典型运行范围的几个线性电厂模型。接下来,您可以选择两种方法中的一种来实现MPC控制策略:
离线设计几个MPC控制器,每个工厂模型一个。在运行时,使用Multiple MPC Controller块,它根据所需的调度策略在控制器之间切换。有关详细信息,请参见非线性化学反应器的增益调度MPC控制.当工厂模型有不同的订单或时间延迟时,使用这种方法。
(2)在初始工作点脱机设计一台MPC控制器。在运行时,使用自适应MPC控制器块(在每个控制区间更新预测模型)和线性参数变化(LPV)系统块(提供带有调度策略的线性对象模型),如本例所示。当所有的对象模型具有相同的阶数和时间延迟时,使用这种方法。
如果可以在运行时获得线性对象模型,则应该使用自适应MPC控制器块来实现非线性控制。有两种典型的在线获取线性植物模型的方法:
(1)采用逐次线性化。有关详细信息,请参见采用逐次线性化的非线性化学反应器自适应MPC控制.当非线性对象模型可用并可在运行时进行线性化时,使用此方法。
(2)当回路闭合时,利用在线估计识别线性模型。有关详细信息,请参见基于在线模型估计的非线性化学反应器自适应MPC控制.当线性对象模型不能从LPV系统或连续线性化中得到时,可以使用这种方法。
为了线性化工厂,需要Simulink®和Simu万博1manbetxlink控制设计™。
如果~ mpcchecktoolboxinstalled (“万博1manbetx模型”) disp (“万博1manbetx运行这个示例需要Simulink。”)返回结束如果~ mpcchecktoolboxinstalled (“slcontrol”) disp (“万博1manbetx需要Simulink控制设计来运行这个例子。”)返回结束
首先,得到初始运行条件下的线性对象模型,其中蔡
是10kgmol /m^3吗“透明国际”
和Tc
298.15 K。要从Simulink模型生成线性状态空间系统,可以使用如下函数万博1manbetxoperspec
,findop
,线性化
来自Sim万博1manbetxulink控制设计。
创建工作点规范。
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(负无穷到正无穷)
的标称值x
,y
,u
.
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);
将工厂模型离散化。
t = 0.5;plant_initial =汇集(plant_initial, Ts);
指定MPC中使用的信号类型和名称。
plant_initial.InputGroup。unmeasured扰动= [1 2];plant_initial.InputGroup。ManipulatedVariables = 3;plant_initial.OutputGroup。Measured = [1 2];plant_initial。InputName = {“蔡”,“透明国际”,“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)。知道= 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)
的标称值x
,y
,u
.
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 =汇集(plant_intermediate, Ts);
指定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”};
创建工作点规范。
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);
工作点搜索报告:--------------------------------- 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)
的标称值x
,y
,u
.
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 =汇集(plant_final, Ts);
指定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”};
使用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;
您不需要提供输入信号u
到LPV系统阻塞,因为工厂输出信号y
在本例中未使用。
在初始工况下设计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”对象的干扰属性为空:假设未测输入干扰#1为综合白噪声。假设未经测量的输入干扰#2是集成白噪声。假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
保持所有其他MPC参数的默认值。
打开Simulin万博1manbetxk模型。
mdl =“ampc_cstr_lpv”;open_system (mdl)
模型包括三个部分:
CSTR模块实现了非线性植物模型。
自适应MPC控制器模块以自适应模式运行所设计的MPC控制器。
LPV系统块(控制系统工具箱)通过在每个控制区间内的插值提供局部状态空间对象模型及其标称值。然后将被试模型输入自适应MPC控制器块,并更新MPC控制器使用的预测模型。在本例中,初始设备模型用于初始化LPV系统块。
您可以使用Simulink模型作万博1manbetx为模板来开发自己的基于lpv的自适应MPC应用程序。
控制器性能验证了设置点跟踪和干扰抑制。
跟踪:反应堆温度T
从原来的311 K(低转化率)到377 K(高转化率)kgmol/m^3的设定值变化。在转变过程中,植物首先变得不稳定,然后又稳定了(见极点图)。
温度调节:喂“透明国际”
具有缓慢的波动,由振幅为5度的正弦波表示,这是馈给MPC控制器的一种实测扰动。
模拟闭环性能。
open_system ([mdl/浓度的(mdl) open_system (/温度的]) sim (mdl)
假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
跟踪调节性能良好。
塞堡,埃德加和梅利尚,过程动力学与控制,第二版,Wiley, 2004。
bdclose (mdl)