此示例显示了如何为多输入多输出非线性工厂设计模型预测控制器,并在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控制器创建基于植物
,在默认情况下,假设所有的植物输入都是被操纵的变量,所有的植物输出都是被测量的输出。
使用采样周期创建控制器对象,预测和控制视线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该模型与用于线性化的模型相同,而MPC控制器是通过MPC控制器块实现的,该块具有MPC对象的工作空间mpcobj
作为参数。第一输出的参考是一旦模拟开始时,第一输出的步进信号将Fron零一个上升到一个用于T = 0的。第二个输出的参考
mdl1 ='mpc_nonlinear';open_system (mdl1)
运行闭环模拟。
SIM(MDL1)
——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。
尽管存在非线性,但两个输出在几秒钟后良好地跟踪其参考,而正如预期的那样,操纵变量保持在预设的硬约束内。
为了在补偿非线性的同时追踪斜坡,在两个输出上定义一个扰动模型作为三个积分器(没有非线性,双积分器就足够了)。
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.所有