主要内容

多输入多输出非线性系统的模型预测控制

本例展示了如何为Simulink®中定义的多输入多输出非线性设备设计模型预测控制器,并对闭环进行仿真。万博1manbetx该装置有三个操纵变量和两个测量输出。

线性化非线性植物

要运行此示例,需要Simulink®和Si万博1manbetxmulink Control Design™。

%检查是否同时安装了Simulink万博1manbetx和Simulink控制设计,%否则显示一条消息并返回如果~ mpcchecktoolboxinstalled (“万博1manbetx模型”) disp (运万博1manbetx行此示例需要Simulink(R)。返回结束如果~ mpcchecktoolboxinstalled (“slcontrol”) disp (运万博1manbetx行此示例需要使用Simulink Control Design(R)。返回结束

在Simulink模型中实现了非线性植物万博1manbetxmpc_nonlinmodel.注意非线性0.2 * u (1) ^ 3从第一个输入到第一个输出。

打开(“mpc_nonlinmodel”

在默认操作条件(传递函数块的初始状态均为零)下线性化工厂线性化命令从Simulink控件设计工具万博1manbetx箱。

植物=线性化“mpc_nonlinmodel”);

为I/O变量分配名称。

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

请注意,由于您没有定义任何测量或不可测量的扰动,或任何不可测量的输出,当MPC控制器创建基于植物,默认情况下,所有工厂输入都假定为操作变量,所有工厂输出都假定为测量输出。

设计MPC控制器

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

Mpcobj = mpc(plant,0.2,5,2);
- - - >“权重。属性为空。假设默认值为0.00000。- - - >“权重。属性为空。假设默认为0.10000。- - - >“权重。OutputVariables属性为空。假设默认值为1.00000。

在被操作的变量上指定硬约束。

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

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

mpcobj。权重= struct(“MV”,[0 0 0],“MVRate”,(。1 .1 .1],机汇的[1]);

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

mpcobj
MPC对象(创建于2022年11月26日06:47:47):---------------------------------------------采样时间:0.2(秒)预测水平:5控制水平:2植物模型:-------------- 3操纵变量(s)—>| 5状态| | |—> 2测量输出(s) 0测量扰动(s)—>| 3输入| | |—> 0未测量输出(s) 0未测量扰动(s)—>| 2输出| --------------扰动和噪声模型:输出扰动模型:default (type "getoutdist(mpcobj)" for details)测量噪声模型:default(缩放后的单位增益)Weights: ManipulatedVariables: [0 000] 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模拟闭环万博1manbetx

打开预先存在的Simulink模型进行闭环仿万博1manbetx真。工厂模型与用于线性化的模型相同,而MPC控制器是用MPC控制器块实现的,MPC控制器块具有工作区MPC对象mpcobj作为参数。当模拟开始时,第一个输出的参考是t=0时从0上升到1的阶跃信号。第二个输出的引用

mdl1 =“mpc_nonlinear”;open_system (mdl1)

运行闭环模拟。

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

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

修改MPC设计以跟踪斜坡信号

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

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

打开预先存在的Simulink模型进行闭环仿万博1manbetx真。它与之前的闭环模型相同,只是第一个工厂输出的参考信号不再是阶跃,而是一个斜坡信号,在3秒后以0.2的斜率上升。

mdl2 =“mpc_nonlinear_setoutdist”;open_system (mdl2)

运行闭环模拟12秒。

sim (mdl2, 12)
——>转换模型到离散时间。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。

无约束模拟

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

首先,移除约束mcpobj

mpcobj。Mv = [];

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

setoutdist (mpcobj“集成商”);

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

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

打开预先存在的Simulink模型进行闭环仿万博1manbetx真。“references”块包含两个步进信号(分别在4秒和0秒后生效),用作引用。“MPC控制回路”块等效于第一个闭环,除了参考信号作为输入提供给它。“线性控制回路”块等效于“MPC控制回路”块,除了控制器是一个具有工作空间的LTI块党卫军对象线性时不变作为参数。

参考文献= [1;1];为步进信号引用设置值mdl3 =“mpc_nonlinear_ss”;open_system (mdl3)

运行闭环模拟12秒。

sim (mdl3)

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

比较模拟结果

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

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

关闭所有打开的Simulink万博1manbetx模型,不保存任何更改。

bdclose所有

另请参阅

对象

应用程序

相关的话题