这个例子展示了如何使用自适应MPC控制器来控制非线性连续搅拌釜式反应器(CSTR),因为它从低转化率过渡到高转化率。
离线构造了一个由三个线性电站模型组成的线性变参数系统,以描述整个运行范围内的电站动态。自适应MPC控制器利用LPV系统在每个控制区间更新内部预测模型,成功实现非线性控制。
连续搅拌釜式反应器(CSTR)是流程工业中常见的化工系统。CSTR系统示意图如下所示:
该系统是[1]中广泛描述的一种夹套非绝热罐式反应器。假设容器完全混合,发生单一的一级放热和不可逆反应,a -> B。试剂A的进口流以恒定的容积率被送入储罐。产品流以相同的容积率连续流出,液体密度是恒定的。因此,反应液体的体积是恒定的。
CSTR模型的输入是:
模型的输出,也就是模型的状态,是:
控制目标是保持试剂A的浓度,当反应器从低转化率过渡到高转化率时,其所需设定点随时间变化。冷却液温度是MPC控制器用来跟踪参考的操纵变量。假设进料流浓度和温度是恒定的。仿真软件万博1manbetx模型mpc_cstr_装置
实现了非线性CSTR装置。有关CSTR反应器和相关示例的更多信息,请参见CSTR模型.
众所周知,CSTR动力学对于反应堆温度变化是强烈的非线性,并且在从一种操作条件到另一种操作条件的过渡期间可能是开环不稳定的。单一的MPC控制器在特定的工作条件下设计,不能在大的工作范围内提供令人满意的控制性能。
要用线性MPC控制技术控制非线性CSTR装置,你有几个选项:
如果不能在运行时获得线性电厂模型,首先需要在不同的运行条件下获得覆盖典型运行范围的几个线性电厂模型。接下来,您可以选择两种方法中的一种来实现MPC控制策略:
离线设计几个MPC控制器,每个工厂模型一个。在运行时,使用Multiple MPC Controller块,它根据所需的调度策略在控制器之间切换。有关详细信息,请参见非线性化学反应器的增益调度MPC控制.当工厂模型有不同的订单或时间延迟时,使用这种方法。
(2)在初始工作点脱机设计一台MPC控制器。在运行时,使用自适应MPC控制器块(在每个控制区间更新预测模型)和线性参数变化(LPV)系统块(提供带有调度策略的线性对象模型),如本例所示。当所有的对象模型具有相同的阶数和时间延迟时,使用这种方法。
如果可以在运行时获得线性对象模型,则应该使用自适应MPC控制器块来实现非线性控制。有两种典型的在线获取线性植物模型的方法:
(1)采用逐次线性化。有关详细信息,请参见采用逐次线性化的非线性化学反应器自适应MPC控制.当非线性对象模型可用并可在运行时进行线性化时,使用此方法。
(2)当回路闭合时,利用在线估计识别线性模型。有关详细信息,请参见基于在线模型估计的非线性化学反应器自适应MPC控制.当线性对象模型不能从LPV系统或连续线性化中得到时,可以使用这种方法。
首先,得到初始运行条件下的线性对象模型,其中蔡
是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);
运行点搜索报告:-------------------------------------opreport=mpc\U cstr\U型核电厂的运行点搜索报告。(在t=0时评估的时变部件)成功满足工作点规范。州:————————————————————————————————————————————————————————————————————————————————————————————————————————mpc\u cstr\u设备/cstr/Integrator 0 311.26 Inf 0 8.1176e-11 0(2)mpc\u cstr\u设备/cstr/Integrator 1 0 8.5698 Inf 0-6.8709e-12 0输入:---------------最小值最大值mpc\U cstr\U设备/Ti 298.15 298.15 298.15(3)mpc\U cstr\U设备/Tc 298.15 298.15 298.15输出:---------------MinyMax<1.26 Inf(2)mpc\u cstr\u设备/Inf
的标称值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);
运行点搜索报告:-------------------------------------opreport=mpc\U cstr\U型核电厂的运行点搜索报告。(在t=0时评估的时变部件)成功满足工作点规范。州:————————————————————————————————————————————————————————————————————————————————————————————————————————mpc\u cstr\u设备/cstr/Integrator 0 339.43 Inf 0 3.416e-08 0(2)mpc\u cstr\u设备/cstr/Integrator 1 0 5.5 Inf 0-2.8663e-09 0输入:---------------MinuMaxmpc\U cstr\U设备/Ti 298.15 298.15.15(3)mpc\U cstr\U设备/Tc-Inf 298.22 Inf输出:---------------MinyMax最小值最大值
的标称值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);
工作点搜索报告:--------------------------------- 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
的标称值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控制器的一种实测扰动。
模拟闭环性能。
开放式系统([mdl/浓度的(mdl) open_system (“/温度”]) sim (mdl)
假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
跟踪调节性能良好。
[1] Seborg,D.E.,T.F.Edgar和D.A.Mellichamp,过程动力学与控制,第二版,Wiley, 2004。
bdclose (mdl)