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

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

多个MPC控制器在不同的操作条件下设计的,然后用在Simulink多元MPC控制器块实现。金宝app在运行时,调度信号用于控制器之间进行切换。

关于连续搅拌釜式反应器

连续搅拌釜式反应器(CSTR)是流程工业中常见的化工系统。CSTR系统示意图如下所示:

该系统是一个带夹套的非绝热罐式反应器中[1]中广泛描述。该容器被假设为完全混合,和一个单一的第一阶放热和不可逆反应,A - > B,发生。试剂A的入口流以恒定的体积速率被供给到罐中。产品流在相同的体积速率连续地离开,和液体密度是恒定的。因此,反应液的体积是恒定的。

CSTR模型的输入是:

$$\begin{array}{ll}
;u_1=CA_i\&;\textnormal{A在入口进料流中的浓度[kgmol/m^3]\
;u_2=T#i\&;\textnormal{入口进料流温度}[K]\
 xA;u#3=T#c\
 38;\textnormal温度{$$

该模型的输出,它们也是模型状态,分别是:

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

控制目标是保持试剂A的浓度,CA美元当反应器从低转化率过渡到高转化率时,其所需设定点随时间变化。冷却液温度$ T_C $是所使用的MPC控制器跟踪基准的操纵变量。入口进料流浓度和温度被假定为是恒定的。Simu金宝applink模型mpc_cstr_装置实现了非线性CSTR装置。

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

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

为了控制线性MPC控制技术,非线性CSTR工厂,你有几种选择:

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

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

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

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

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

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

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

要运行这个例子,的Simulink和Sim金宝appulink控制设计™软件是必需的。

如果〜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;

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

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 = [op_report.States(1).X;op_report.States(2).X];Y0 = [op_report.Outputs(1).Y;op_report.Outputs(2).Y];U0 = [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.UnmeasuredDistrictions=[12];plant.InputGroup.ManipulatedVariables=3;plant.OutputGroup.Measured=[12];plant.InputName={“蔡”“透明国际”“Tc”};plant.OutputName={“T”'CA'};

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

TS = 0.5;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(3)],“是的”, 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“/冷却剂温度”])设置参数([mpc\U mdl' /测量'],“Ymin”305 ~ 8“Ymax”'320~9') set_param ([mpc_mdl“/冷却剂温度”],“Ymin”“295”“Ymax”'305')sim卡(mpc_mdl,10)
-->将模型转换为离散时间。假设未向测量输出通道添加干扰#2。假设未向测量输出通道#1添加干扰。-->“mpc”对象的“model.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' /进料浓度的],“价值”'10'

设置标尺并模拟响应。

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).Known = TRUE;

寻找稳定运行状态。

[op_point, op_report] = findop (plant_mdl, op);%获取|x|、|y|和|u|的标称值。X0 = [op_report.States(1).X;op_report.States(2).X];Y0 = [op_report.Outputs(1).Y;op_report.Outputs(2).Y];U0 = [op_report.Inputs(1).U;op_report.Inputs(2).U;op_report.Inputs(3).U];
工作点搜索报告:--------------------------------- 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)

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

plant_intermediate =线性化(plant_mdl op_point);

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

eig (plant_intermediate)
Ans = 0.4941 -0.8357

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

plant_intermediate.InputGroup.UnmeasuredDistrictions=[12];plant_intermediate.InputGroup.ManipulatedVariables=3;plant_intermediate.OutputGroup.Measured=[12];plant_intermediate.InputName={“蔡”“透明国际”“Tc”};plant_intermediate.OutputName={“T”'CA'};

创建MPC控制器。

mpcobj_intermediate = mpc (plant_intermediate, 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_intermediate.Model.Nominal=struct(“X”x0,“U”,[0; 0; U0(3)],“是的”, 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).Known = TRUE;

找到稳态操作条件。

[op_point, op_report] = findop (plant_mdl, op);%获取|x|、|y|和|u|的标称值。X0 = [op_report.States(1).X;op_report.States(2).X];Y0 = [op_report.Outputs(1).Y;op_report.Outputs(2).Y];U0 = [op_report.Inputs(1).U;op_report.Inputs(2).U;op_report.Inputs(3).U];
工作点搜索报告:--------------------------------- 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)

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

plant_final =线性化(plant_mdl op_point);

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

eig (plant_final)
ans=-1.1077+1.0901i-1.1077-1.0901i

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

plant_final.InputGroup.UnmeasuredDisturbances = [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”对象的“Weights.ManufacturedVariables”属性为空。假设默认值为0.00000。-->“mpc”的“Weights.ManufacturedVariablesRate”属性对象为空。假设默认值为0.10000。-->“mpc”对象的“Weights.OutputVariables”属性为空。“mpc”对象的“Weights.OutputVariables”属性为空。假设输出y1的默认值为1.00000,输出y2的默认值为零

在控制器中设置标称值,缩放因子和权重。

mpcobj_final.Model.Nominal =结构(“X”x0,“U”,[0; 0; U0(3)],“是的”, 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(getindust.cobj=COBU)final*10、 赛迪斯特(mpcobj_决赛,'模型',区);
——>模型转换为离散时间。——>”模式。“mpc”对象的干扰属性为空:假设未测输入干扰#1为综合白噪声。假设未经测量的输入干扰#2是集成白噪声。假设没有干扰添加到测量输出通道#2。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

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

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

mmpc_mdl =“mpc_cstr_multiple”;open_system (mmpc_mdl)

模型配置为按顺序使用三个控制器:mpcobjmpcobj_intermediate,mpcobj_期末考试

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

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

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

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

  3. 如果CSTR浓度< 3,使用mpcobj_期末考试

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

open_system([mmpc_mdl' /测量'])开放式系统([mmpc\U mdl' / MV ']) sim (mmpc_mdl)
-->将模型转换为离散时间。“mpc”的“模型噪声”特性对象为空。“mpc”对象的“model.noise”属性为空。“mpc”对象的“model.noise”属性为空。“mpc”对象的“model.noise”属性为空。“mpc”对象的“model.noise”属性为空。

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

参考文献

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

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

另请参阅

|

相关的话题