主要内容

多输入多输出非线性工厂的模型预测控制

此示例显示了如何为多输入多输出非线性工厂设计模型预测控制器,并在Simulink中模拟闭环。万博1manbetx该工厂具有3个操纵变量和2个测量输出。

线性化非线性对象

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

检查Simulink和Simulin万博1manbetxk Control Design是否已安装,%否则显示消息并返回如果〜mpcchecktoolboxinstalled('万博1manbetxsimulink') disp ('万博1manbetxSimulink(R)需要运行此示例。'返回结尾如果〜mpcchecktoolboxinstalled('slcontrol') disp ('万博1manbetxSimulink控制设计(R)需要运行此示例。返回结尾

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

打开('mpc_nonlinmodel'

在默认运行条件下(传递函数块的初始状态全部为零)使用线性化来自Simulink Contro万博1manbetxl Design Toolbox的命令。

植物=线性化('mpc_nonlinmodel');

为I/O变量指定名称。

plant.inputname = {质量流量的'热流''压力'};工厂。OutputName = {'温度''等级'};工厂。InputUnit = {公斤/年代”“J / s”'PA'};工厂。OutputUnit = {“K”'M'};

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

设计MPC控制器

使用采样周期创建控制器对象,预测和控制视线0.2秒,5步和2移动;

mpcobj = mpc(植物,0.2,5,2);
- >“MPC”对象的“权重”属性为空。假设默认为0.00000。- >“权重”属性“MPC”对象的“权重”属性为空。假设默认为0.10000。- >“MPC”对象的“权重”属性为空。假设默认为1.0万。

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

mpcobj.mv = struct('min'{3; 2; 2},'最大限度',{3; 2; 2},“杀鼠灵”, {-1000; -1000; -1000});

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

mpcobj.weights = struct('mv',[0 0 0],“MVRate”,(。1。1。1)机汇的[1]);

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

mpcobj
MPC对象(2021年- 2月23日13:09:04创建 ): --------------------------------------------- 采样时间: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模拟闭环万博1manbetx

打开已有的Simulink模型进行闭环仿真。万博1manbetx该模型与用于线性化的模型相同,而MPC控制器是通过MPC控制器块实现的,该块具有MPC对象的工作空间mpcobj作为参数。第一输出的参考是一旦模拟开始时,第一输出的步进信号将Fron零一个上升到一个用于T = 0的。第二个输出的参考

mdl1 ='mpc_nonlinear';open_system (mdl1)

运行闭环模拟。

SIM(MDL1)
——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。

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

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

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

ouderAstmodel = TF({1 0; 0 1},{[1 0 0],1; 1,[1 0 0 0]});setoutdist(mpcobj,'模型',outdryAstmodel);

打开已有的Simulink模型进行闭环仿真。万博1manbetx它与先前的闭环模型是相同的,除了第一个工厂输出的参考是npo更长的一个步长,但斜坡信号在3秒后以0.2的斜率上升。

mdl2 ='mpc_nonlinear_setoutdist';open_system (mdl2)

运行闭环模拟12秒。

SIM(MDL2,12)
——>模型转换为离散时间。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。

模拟没有约束

当约束未激活时,MPC控制器的行为就像一个线性控制器。在闭环中模拟两个未受控MPC控制器的版本,以说明这一事实。

首先,删除约束McPobj.

mpcobj。MV = [];

然后将输出干扰模型重置为默认值,(仅在下一步骤中获取更简单的线性MPC控制器版本)。

setoutdist(mpcobj,'Intyorator');

将无约束的MPC控制器转换为线性时间不变(LTI)状态空间动态系统,其具有向量[YM; R]作为输入,其中YM是测量输出信号的向量(在给定的步骤),R是向量输出参考(在相同的给定步骤)。

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

打开已有的Simulink模型进行闭环仿真。万博1manbetx“参考文献”块包含两个步进信号(分别在4和0秒之后),其用作参考。“MPC控制回路”块等同于第一闭环,除了将参考信号作为输入提供给它的事实之外。“线性控制回路”块等同于“MPC控制回路”块,除了控制器是具有工作空间SS对象的LTI块的事实线性时不变作为参数。

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

运行闭环模拟12秒。

sim (mdl3)

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

比较仿真结果

fprintf('比较输出轨迹:|| ympc-ylin ||=%g \ n',符号(YMPC-Ylin));DISP(“MPC控制器和线性控制器产生相同的闭环轨迹。”);
比较输出轨迹:|| ympc-ylin ||= 1.68434E-14 MPC控制器和线性控制器产生相同的闭环轨迹。

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

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

bdClose.所有

也可以看看

||

相关话题