模型预测控制的多输入多输出非线性植物
这个例子展示了如何设计一个多输入多输出非线性模型预测控制器装置仿真软件中定义®和模拟闭环。金宝app工厂有三个操作变量和两个测量输出。
线性化的非线性植物
这个例子中,运行仿真软件®和仿真软件控制设金宝app计™是必需的。
%检查模型和仿真软件控制设计安装,金宝app%,否则显示一条消息并返回如果~ mpcchecktoolboxinstalled (“金宝app模型”)disp (”金宝app模型(R)需要运行这个例子。)返回结束如果~ mpcchecktoolboxinstalled (“slcontrol”)disp (仿金宝app真软件控制设计(R)需要运行这个例子。)返回结束
非线性植物是在仿真软件中实现模型金宝appmpc_nonlinmodel
。注意到非线性0.2 * u (1) ^ 3
从第一个输入第一个输出。
打开(“mpc_nonlinmodel”)
线性化的工厂默认的操作条件(传递函数块的初始状态都是零)使用线性化
命令从仿真软件控制设计工具箱。金宝app
工厂=线性化(“mpc_nonlinmodel”);
分配I / O变量名称。
工厂。InputName = {质量流量的;“热流”;“压力”};工厂。OutputName = {“温度”;“水平”};工厂。InputUnit = {公斤/年代”“J / s”“爸爸”};工厂。OutputUnit = {“K”“米”};
注意,因为你没有定义任何测量或不可测量的干扰,或任何一个无边无际的输出,当一个MPC控制器是基于创建的植物
所有植物输入,默认情况下认为是被操纵的变量和所有植物输出是假定为测量输出。
MPC控制器设计
创建控制器对象与采样周期、预测和控制视野的0.2秒,5步骤,和2个动作,分别;
mpcobj = mpc(植物,0.2,5,2);
- - >“权重。ManipulatedVariables”属性是空的。假设默认的0.00000。- - >“权重。ManipulatedVariablesRate”属性是空的。假设默认的0.10000。- - >“权重。OutputVariables”属性是空的。假设默认的1.00000。
被控变量指定硬约束。
mpcobj。MV =结构(“最小值”{3;2;2},“马克斯”{3;2;2},“杀鼠灵”,{-1000;-1000;-1000});
定义权重操纵变量和输出信号。
mpcobj。重量=结构(“MV”(0 0 0),“MVRate”,(。1。1。1)机汇的[1]);
显示货币政策委员会反对审查它的属性。
mpcobj
MPC对象(创建2022年- 2月26日12:00:09):- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -采样时间:0.2(秒)预测地平线:5控制层:2植物模型:- - - - - - - - - - - - - - - - 3被控变量(s) - - > | 5个州| | | - - > 2测量输出(s) 0测量扰动(s) - - >输入| 3 | | | - - > 0无边无际的输出(s) 0无边无际的干扰(s) - - > | | 2输出- - - - - - - - - - - - - - - -干扰和噪声模型:输出扰动模型:默认(类型”getoutdist (mpcobj)”)测量噪声模型:默认(缩放后单位增益)重量:ManipulatedVariables: [0 0 0] ManipulatedVariablesRate: [0.1000 0.1000 0.1000] OutputVariables: [1] ECR: 100000状态估计:默认的卡尔曼滤波器类型(“getEstimator (mpcobj)”)约束:3 < =质量流量(公斤/ s) < = 3, -1000 < =质量流率(公斤/ s) < =正无穷,温度(K)是无约束2 < =热流(J / s) < = -1000 < =热流/率(J / s) < =正无穷,水平(m)是无约束2 < =压力(Pa) < = -1000 < =压力/率(Pa) < =正无穷
使用仿真软件模拟闭环金宝app
打开已存在的模型闭环仿真模型。金宝app工厂一个用于线性化模型是相同的,而MPC控制器实现一个MPC控制器,工作区MPC对象mpcobj
作为参数。参考第一输出信号上升一步从0到1在t = 0时,一旦开始仿真。参考第二输出
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);
打开已存在的模型闭环仿真模型。金宝app前面的闭环模型是相同的,除了一个事实,即参考第一核电站输出不再是一个一步但是斜坡信号,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是集成的白噪声。- - >”模型。噪音”属性是空的。假设白噪声在每个测量输出。
打开已存在的模型闭环仿真模型。金宝app“引用”块信号包含两个步骤(分别为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.53023 e-14 MPC控制器和线性控制器产生相同的闭环轨迹。
正如预期的那样,只有微不足道的差异由于数值错误。
关闭所有打开的Simulink金宝app仿真模型不保存任何更改。
bdclose所有