该实施例显示了如何使用非线性模型预测控制器来控制乙烯氧化设备,因为它从一个操作点转换到另一个工作点。另外,线性MPC控制器直接从非线性MPC控制器生成,以实现产生相当性能的增益调度控制方案。
此示例需要优化工具箱™软件,以解决每个控制间隔的非线性编程问题。
如果~ mpcchecktoolboxinstalled (“optim”)disp('优化工具箱需要运行此示例。')返回结尾
本例还需要Simulink®软件在Simulink中模金宝app拟乙烯氧化装置的MPC控制。
如果~ mpcchecktoolboxinstalled (“金宝app模型”)disp('金宝appSimulink需要运行此示例。)返回结尾
在冷却的气相催化反应器中发生乙烯(C 2 H 4)氧化乙烯(C 2 H 4)。在反应器内的混合气相中同时发生三种反应:
C2H4 + 0.5 * O2 - > C2H4O
C2H4 + 3 * O2 - > 2 * CO2 + 2 * H2O
C2H4O + 2.5 * O2 - > 2 * CO2 + 2 * H2O
空气和乙烯的混合物连续喂养。该工厂由第一原理非线性动态模型描述,实现为一组常微分方程(ODES)oxidationstatefcn.
函数。有关更多信息,请参阅oxidationstatefcn.m.
.
该工厂包含四个州:
反应器内气体密度(X1)
C2H4浓度在反应器中(X2)
反应器中的C 2 H 4 O浓度(X3)
反应器中的温度(X4)
该工厂有两个输入:
总容积进料流量(u1)
进料C2H4浓度(u2)
该工厂有一个输出:
污水中C2H4O的浓度(y,相当于X3)
为方便起见,模型中的所有变量都是预先缩放的无量纲。所有国家都是可衡量的。植物方程和参数是从[1]获得的。
在此示例中,总体积馈送流量(u1)是流出物流的操纵变量(MV)和C2H4O浓度(y)是输出变量(OV)。良好的跟踪性能y要求在一个操作范围内0.03
来0.05
.相应的u1价值是0.38
和0.15
,分别。
进料流中的C2H4浓度(u2)是一种测量的干扰。它的标称价值是0.5
,一个典型的扰动的大小为0.1
.控制器需要拒绝这种干扰。
操纵变量u1范围从0.0704
来0.7042
由于执行机构的限制。
通常,使用具有精确非线性预测模型的非线性MPC提供基准性能;也就是说,您可以实现的最佳控制解决方案。然而,在实践中,线性MPC控制解决方案,例如自适应MPC或增益预定的MPC,比非线金宝搏官方网站性MPC更加计算。如果您的线性控制解决方案可以提供可比性的性能,则无需实现非线性控制解决方案,尤其是在实时环境中。
在本例中,首先设计一个非线性MPC控制器来获得基准性能。然后,您在不同的操作点从非线性控制器生成几个线性MPC对象ConvertTompc.
函数。最后,使用这些线性MPC对象实现增益调度MPC,并比较性能。
创建非线性MPC控制器4
州,1
输出,1
操纵变量,和1
测量干扰。
nlobj = nlmpc (4 1“MV”,1,'MD',2);
指定控制器采样时间以及预测和控制范围。
Ts = 5;PredictionHorizon = 10;ControlHorizon = 3;nlobj。Ts = t;nlobj。PredictionHorizon = PredictionHorizon;nlobj。ControlHorizon = ControlHorizon;
使用使用的非线性预测模型指定非线性预测模型oxidationstatefcn.m.
,这是一个连续时间模型。
nlobj.Model.StateFcn ='oxidationstatefcn';nlobj.States(1)。Name ='den';nlobj.states(2).name =“CE”;nlobj.states(3).name =“首席执行官”;nlobj.States(4)。Name ='tc';
指定返回流出物流中的C2H4O浓度的输出功能(与X3相同)。其标度因子是其典型的操作范围。
nlobj.Model.OutputFcn = @(x,u) x(3);nlobj.OV.Name ='CEOOUT';nlobj.ov.scalefactor = 0.03;
根据控制器执行器的限制指定MV约束。其标度因子是其典型的操作范围。
nlobj.mv.min = 0.0704;nlobj.mv.max = 0.7042;nlobj.mv.name =.“秦”;nlobj.MV.ScaleFactor = 0.6;
指定测量的扰动名称。其标度因子是其典型的操作范围。
nlobj.md.name =.“CEin”;nlobj.md.scalefactor = 0.5;
最初,工厂处于低浓度的C2H4O (y=0.03
)在流出物流中。找到状态的初始值并使用输出FSOLVE.
从优化工具箱。
选项= Optimoptions(“fsolve”,'展示','没有任何');ulow = [0.38 0.5];xlow = fsolve(@(x)oxidationstatefcn(x,ulow),[1 0.3.03 1],选项);ylow = xlow(3);
验证预测模型功能没有使用任何数值问题验证FCNS.
命令。在初始状态和输出值处验证函数。
validatefcns(nlobj,xlow,ulow(1),ulow(2));
model.statefcn是好的。model.outputfcn是好的。分析用户提供的模型,成本和约束函数完成。
在结构中指定参考信号,从中斜坡0.03
来0.05
在50
秒的时间100.
.
tstop = 300;时间=(0:TS :( tstop + predictionhorizon * ts)';r = [ylow * y(sum <100),1); linspace(ylow,ylow + 0.02,11)';(ylow + 0.02)*那样(总和(时间> 150),1)];ref.time =时间;ref.signals.values = r;
要评估非线性MPC性能,请使用Simulink模型。金宝app模型中的非线性MPC控制器块配置为使用nlobj
作为控制器。
mdlNMPC =“oxidationNMPC”;open_system (mdlNMPC)
运行模拟,并查看输出。
SIM(MDLNMPC)Open_System([MDLNMPC'/ y'])
根据所预期的,非线性MPC控制器产生良好的参考跟踪和扰动性能。
虽然C2H4O浓度在100到150秒(图中的黄色楼梯曲线)之间会出现类似斜坡的设定点变化,但由于参考预览,控制器早在50秒就知道了变化。由于目标是最小化整个视界的跟踪误差,控制器决定提前移动被控对象,使跟踪误差在整个预测视界中最小。如果预览被禁用,控制器将在100秒内开始反应,这将产生更大的跟踪错误。
在这个例子中,由于所有的状态都是可测量的,非线性MPC控制器采用了全状态反馈。一般情况下,当存在不可测状态时,必须设计非线性状态估计器,如扩展卡尔曼滤波器(EKF)或移动视界估计器(MHE)。
在实践中,在产生可比性性能时,由于其较高的计算效率,线性MPC始终优选非线性MPC。由于您设计了一个非线性MPC控制器作为基准,可以将其转换为特定操作点的线性MPC控制器。
在此示例中,您可以在C2H4O浓度下生成三个线性MPC控制器0.03
,0.04
, 和0.05
,分别。在转换过程中,非线性对象模型在指定的工作点被线性化。保留非线性MPC对象中定义的所有尺度因子、线性约束和二次权值。然而,任何自定义非线性代价函数或自定义非线性等式或不等式约束被丢弃。
在低C2H4O转化率的操作点生成线性MPC控制器y
=0.03
.使用相应的状态和输入值指定工作点,xlow.
和ulow
,分别。
mpcobjlow = converttompc(nlobj,xlow,ulow);
以介质C2H4O转换速率在操作点生成线性MPC控制器y
=0.04
.
uMedium = [0.24 0.5];xMedium = fsolve(@(x) oxidationStateFcn(x,uMedium),[1 0.3 0.03 1],options);mpcobjMedium = convertToMPC (nlobj xMedium uMedium);
在具有高C2H4O转换速率的操作点处生成线性MPC控制器y
=0.05
.
uHigh = [0.15 0.5];xHigh = fsolve(@(x) oxidationStateFcn(x,uHigh),[1 0.3 0.03 1],options);mpcobjHigh = convertToMPC (nlobj xHigh uHigh);
使用三个生成的线性MPC控制器实现增益调度的MPC解决方案。调度方案是:
如果y小于0.035,则使用mpcobjLow
.
如果Y高于0.045,请使用mpcobjHigh
.
否则,使用mpcobjmedium.
.
要评估增益预定的控制器性能,请使用另一个Simulink模型。金宝app
mdlmpc ='oxidationmpc';Open_System(MDLMPC)
运行模拟,并查看输出。
sim (mdlMPC) open_system ([mdlMPC'/ y'])
- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。 -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel. -->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
增益调度控制器产生可比的参考跟踪和干扰抑制性能。
此示例说明了常规工作流程:
设计和模拟MATLAB中的非线性MPC控制器,同时进行基准控制性能。金宝app
使用非线性MPC对象直接在所需的操作点处直接生成线性MPC控制器。
使用这些控制器实现增益预定的MPC控制方案。
如果增益调度控制器的性能与非线性控制器的性能相当,则可以自信地使用线性控制解决非线性控制问题。
关闭Simulink金宝app模型。
bdclose (mdlNMPC)
[1] H. Durand,M. Ellis,P. D. Christofides。“经济模式预测控制设计,用于改变变革的限制处理和保证经济绩效。”电脑和化学工程,卷。92,2016,第18-36页。