主要内容

多输入多输出非线性对象的模型预测控制

这个例子展示了如何为Simulink®中定义的多输入多输出非线性对象设计模型预测控制器,并对闭环进行仿真。金宝app该工厂有三个操作变量和两个测量输出。

线性化非线性对象

要运行此示例,需要Simulink®和Si金宝appmulink Control Design™。

检查Simulink和Simulin金宝appk Control Design是否已安装,%否则显示一条消息并返回如果~ mpcchecktoolboxinstalled (“金宝app模型”) disp (运金宝app行这个示例需要Simulink(R)。返回结束如果~ mpcchecktoolboxinstalled (“slcontrol”) disp (“金宝app需要Simulink Control Design(R)来运行这个例子。”返回结束

在Simulink模型中实现了该非线性对象金宝appmpc_nonlinmodel.注意到非线性0.2 * u (1) ^ 3从第一个输入到第一个输出。

打开(“mpc_nonlinmodel”

在默认运行条件下(传递函数块的初始状态全部为零)使用线性化命令来自Simulink控件设计工金宝app具箱。

工厂=线性化(“mpc_nonlinmodel”);

为I/O变量指定名称。

工厂。InputName = {质量流量的“热流”“压力”};工厂。OutputName = {“温度”“水平”};工厂。InputUnit = {公斤/年代”“J / s”“爸爸”};工厂。OutputUnit = {“K”“米”};

注意,由于您没有定义任何测量或未测量的扰动,或任何未测量的输出,当MPC控制器创建基于植物,在默认情况下,假设所有的植物输入都是被操纵的变量,所有的植物输出都是被测量的输出。

设计MPC控制器

创建采样周期为0.2秒、预测和控制范围为5步、2步的控制器对象;

mpcobj = mpc(植物,0.2,5,2);
- - - >“权重。mpc对象的操纵变量属性为空。假设默认的0.00000。- - - >“权重。mpc对象的操控变量率属性为空。假设默认的0.10000。- - - >“权重。mpc对象的属性为空。假设默认的1.00000。

指定受操纵变量的硬约束。

mpcobj。MV =结构(“最小值”{3; 2; 2},“马克斯”{3; 2; 2},“杀鼠灵”, {-1000; -1000; -1000});

定义操纵变量和输出信号的权重。

mpcobj。重量=结构(“MV”(0 0 0),“MVRate”,(。1。1。1)机汇的[1]);

显示MPC对象以查看其属性。

mpcobj
MPC对象(01 - 9 - 2021 09:22:07上创建 ): --------------------------------------------- 采样时间:0.2(秒)预测地平线:5控制层:2植物模型:-------------- 3被控变量(s) - > | 5个州  | | |--> 2测量输出(s) 0测量扰动(s) - > | 3的输入  | | |--> 无边无际的输出(s) 0无边无际的干扰(s) - > | 2输出  | -------------- 干扰和噪声模型:输出扰动模型:默认(类型”getoutdist (mpcobj)”)测量噪声模型:权重:ManipulatedVariables: [0 00] ManipulatedVariablesRate: [0.1000 0.1000 0.1000] OutputVariables: [1 1] ECR: 100000 State Estimation: default Kalman Filter (type "getEstimator(mpcobj)" for details)-3 <=质量流量(kg/s) <= 3, -1000 <=质量流量/速率(kg/s) <= Inf,温度(K)不受约束-2 <=热流(J/s) <= 2, -1000 <=热流/速率(J/s) <= Inf,水平(m)不受约束-2 <=压力(Pa) <= 2, -1000 <=压力/速率(Pa) <= Inf

使用Simulink进行闭环仿真金宝app

打开已有的Simulink模型进行闭环仿真。金宝app工厂模型与用于线性化的模型相同,而MPC控制器是通过MPC控制器块实现的,该块具有MPC对象的工作空间mpcobj作为参数。当仿真开始时,第一个输出的参考是一个从0上升到1的阶跃信号(t=0)。第二个输出的参考

mdl1 =“mpc_nonlinear”;open_system (mdl1)

运行闭环模拟。

sim (mdl1)
——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

尽管存在非线性,两个输出都能在几秒钟后很好地跟踪它们的参考,而正如预期的那样,操纵变量保持在预设的硬约束内。

修改跟踪坡道信号的MPC设计

为了在对非线性进行补偿的同时同时跟踪斜坡,在两个输出上定义一个扰动模型为三重积分器(没有非线性,双积分器就足够了)。

特遣部队(outdistmodel = {1 1 0; 0}, {1 0 0 0, 1; 1, [1 0 0 0]});setoutdist (mpcobj“模型”, outdistmodel);

打开已有的Simulink模型进行闭环仿真。金宝app它与之前的闭环模型是相同的,除了第一个工厂输出的参考不再是一个阶跃,而是一个斜坡信号,斜坡在3秒后以0.2的斜率上升。

mdl2 =“mpc_nonlinear_setoutdist”;open_system (mdl2)

运行闭环模拟12秒。

sim (mdl2, 12)
——>模型转换为离散时间。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

模拟没有约束

当约束不主动时,MPC控制器表现为线性控制器。在闭环中模拟两个版本的无约束MPC控制器来说明这一事实。

首先,删除约束mcpobj

mpcobj。MV = [];

然后将输出扰动模型重置为默认值(这只是为了在下一个步骤中得到一个更简单的线性MPC控制器)。

setoutdist (mpcobj“集成商”);

将无约束MPC控制器转换为具有矢量的线性时不变(LTI)状态空间动态系统(ym; r)作为输入,ym是测量的输出信号的矢量(在一个给定的步骤),和r是输出引用的向量(在相同的给定步骤)。

LTI = ss (mpcobj,“r”);使用参考作为附加的输入信号
——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

打开已有的Simulink模型进行闭环仿真。金宝app“引用”块包含两个作为引用的步进信号(分别在4秒和0秒之后执行)。“MPC控制回路”块相当于第一个闭环,除了参考信号作为输入提供给它的事实。除了控制器是具有工作空间的LTI块之外,“线性控制回路”块与“MPC控制回路”块是等价的党卫军对象线性时不变作为参数。

参= (1,1);%设置阶跃信号参考值mdl3 =“mpc_nonlinear_ss”;open_system (mdl3)

运行闭环模拟12秒。

sim (mdl3)

两个循环的输入和输出信号看起来是相同的。还要注意,被操纵的变量不再受前面的约束。

比较仿真结果

流('比较输出轨迹:||ympc-ylin|| = %g\n'规范(ympc-ylin));disp (MPC控制器和线性控制器产生相同的闭环轨迹。);
输出轨迹比较:||ympc-ylin|| = 1.68434e-14 MPC控制器与线性控制器产生相同的闭环轨迹。

正如预期的那样,由于数值误差,只有可以忽略不计的差异。

关闭所有打开的Simulink金宝app模型,不保存任何更改。

bdclose所有

另请参阅

对象

应用程序

相关的话题