这个例子展示了如何使用自适应MPC控制器来控制非线性连续搅拌釜式反应器(CSTR),因为它从低转化率过渡到高转化率。
离线构造了一个由三个线性电站模型组成的线性变参数系统,以描述整个运行范围内的电站动态。自适应MPC控制器利用LPV系统在每个控制区间更新内部预测模型,成功实现非线性控制。
连续搅拌槽式反应器(CSTR)是过程工业中常用的化学系统。CSTR系统的原理图如下:
该系统是夹套的非绝热罐反应器,其在[1]中进行了广泛描述的。假设血管完全混合,并且发生单一的一阶放热和不可逆的反应,A - > B。试剂A的入口流以恒定的体积速率送入罐。产物流以相同的体积速率连续退出,液体密度是恒定的。因此,反应液体的体积是恒定的。
CSTR模型的输入是:
该模型的输出,也是模型状态,是:
控制目标是保持试剂A的浓度,当反应器从低转化率过渡到高转化率时,其所需设定点随时间变化。冷却液温度是MPC控制器使用的操纵变量来跟踪参考。入口进料流浓度和温度被假定为恒定。Simu金宝applink模型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金宝applink Control Design™。
如果〜mpcchecktoolboxinstalled('金宝appsimulink') disp (“金宝app运行这个示例需要Simulink。”)回来结束如果〜mpcchecktoolboxinstalled(“slcontrol”) disp (“金宝app需要Simulink控制设计来运行这个例子。”)回来结束
首先,获得初始运行条件下的线性电厂模型,其中蔡
为10 kgmol/m^3,且两者均为“透明国际”
和TC.
是298.15 K。要从Simulink模型生成线性状态空间系统,请使用以下函数:金宝appoperspec
那芬多普
,线性化
来自Sim金宝appulink控制设计。
创建操作点规范。
plant_mdl ='mpc_cstr_plant';op = operspec (plant_mdl);
指定在初始条件下已知的进料浓度。
op.Inputs(1)。u = 10;op.Inputs(1)。知道= true;
在初始条件下指定已知的进料温度。
运算输入(2).u=298.15;运算输入(2).Known=true;
在初始条件下指定已知的冷却剂温度。
运算输入(3).u=298.15;运算输入(3).Known=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
,你
。
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.UnmeasuredDistrictions=[12];plant_initial.InputGroup.ManipulatedVariables=3;plant_initial.OutputGroup.Measured=[12];plant_initial.InputName={'cai'那“透明国际”那“Tc”};plant_initial。OutputName = {“T”那'CA'};
创建工作点规范。
op = operspec (plant_mdl);
指定进料浓度。
op.Inputs(1)。u = 10;op.Inputs(1)。知道= true;
指定进料温度。
运算输入(2).u=298.15;运算输入(2).Known=true;
指定反应器浓度。
OP.OUTPUTS(2).Y = 5.5;op.outputs(2).known = true;
找到稳定的状态操作条件。
[op_point, op_report] = findop (plant_mdl, op);
工作点搜索报告:--------------------------------------mpc_cstr_模型电厂的工作点搜索报告。(在时间t=0时评估的时变部件)成功满足工作点规范。状态:------------(1)mpc_cstr_电厂/cstr/积分器x:339 dx:3.42e-08(0)(2)mpc\u cstr\u设备/cstr/积分器1 x:5.5 dx:-2.87e-09(0)输入:-------------(1)mpc\u cstr\u设备/CAi u:10(2)mpc\u cstr\u设备/TIU:298(3)mpc\u cstr\u设备/TCU:298[-Inf-Inf]输出:-------------(1)mpc\u cstr\u设备/TY:339[-Inf](2)mpc\u cstr\u设备/CAY:5.5(5.5)
的标称值X
那y
,你
。
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];
得到初始条件下的线性模型。
工厂中间=线性化(工厂mdl,操作点);
离散化植物模型
plant_intermediate = c2d(plant_intermediate,ts);
指定MPC中使用的信号类型和名称。
plant_intermediate.InputGroup.UnmeasuredDistrictions=[12];plant_intermediate.InputGroup.ManipulatedVariables=3;plant_intermediate.OutputGroup.Measured=[12];plant_intermediate.InputName={'cai'那“透明国际”那“Tc”};plant_intermediate.OutputName={“T”那'CA'};
创建工作点规范。
op = operspec (plant_mdl);
指定进料浓度。
op.Inputs(1)。u = 10;op.Inputs(1)。知道= true;
指定进料温度。
运算输入(2).u=298.15;运算输入(2).Known=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)
的标称值X
那y
,你
。
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=struct(“T”,[y0_首字母(1);y0_中间字母(1);y0_最终字母(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控制器
mpcobj=mpc(设备初始值,Ts);
-->“mpc”对象的“PredictionHorizon”属性为空。正在尝试PredictionHorizon=10。-->“mpc”对象的“ControlHorizon”属性为空。假设2。-->“mpc”对象的“Weights.ManufacturedVariables”属性为空。假设默认值为0.00000。-->“mpc”的“Weights.ManufacturedVariablesRate”属性对象为空。假设默认值为0.10000。-->“mpc”对象的“Weights.OutputVariables”属性为空。“mpc”对象的“Weights.OutputVariables”属性为空。假设输出y1的默认值为1.00000,输出y2的默认值为零
在控制器中设置标称值。未测量扰动的标称值必须为零。
mpcobj.Model.Nominal=struct(“X”,x0_首字母,“U”,[0; 0; U0_initial(3)],“是的”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参数的默认值。
打开Simulin金宝appk模型。
mdl =“ampc_cstr_lpv”;开放式系统(mdl)
模型包括三个部分:
CSTR块实现非线性工厂模型。
自适应MPC控制器模块以自适应模式运行所设计的MPC控制器。
LPV系统块(控制系统工具箱)通过在每个控制区间内的插值提供局部状态空间对象模型及其标称值。然后将被试模型输入自适应MPC控制器块,并更新MPC控制器使用的预测模型。在本例中,初始设备模型用于初始化LPV系统块。
您可以使用Simulink模型作金宝app为模板来开发基于LPV的自适应MPC应用程序。
控制器性能验证了设置点跟踪和干扰抑制。
跟踪:反应堆温度T.
设定点从原始311k(低转换率)转换为377k(高转换率)kgmol / m ^ 3。在过渡期间,工厂首先变得不稳定,然后再次稳定(参见杆曲线)。
温度调节:喂“透明国际”
具有由幅度为5度的正弦波表示的缓慢波动,这是馈送到MPC控制器的测量干扰。
模拟闭环性能。
开放式系统([mdl'/专注'])Open_System([MDL“/温度”]) sim (mdl)
假设没有添加到测量的输出通道#2中的干扰。假设没有添加到测量的输出通道#1中的干扰。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。
跟踪调节性能良好。
塞堡,埃德加和梅利尚,过程动力学与控制,第二版,Wiley, 2004。
bdclose(mdl)