这个例子展示了如何在实时控制中改变输入和输出的饱和限制。对于命令行和Simulink®模拟,您可以在每个控制万博1manbetx间隔指定更新的输入和输出约束。然后MPC控制器将输入和输出信号保持在其指定的范围内。
有关在运行时更新线性约束的详细信息,请参阅在运行时更新约束.
定义一个具有采样时间的SISO离散时间对象Ts
.
ts = 0.1;植物= C2D(TF(1,[1 .8 3]),TS);[A,B,C,D] = SSDATA(工厂);
创建具有指定预测视野的MPC控制器,p
、控制地平线,c
和采样时间,Ts
.使用植物
作为内部预测模型。
p = 10;m = 4;mpcobj = mpc(植物,ts,p,m);
- - - >“权重。操控变量的“mpc”对象的属性为空。假设默认的0.00000。- - - >“权重。“mpc”对象的属性为空。假设默认的0.10000。- - - >“权重。mpc对象的属性为空。假设默认的1.00000。
指定控制器调整权重。
mpcobj.Weights.MV = 0;mpcobj.Weights.MVrate = 0.5;mpcobj.Weights.OV = 1;
对于本例,操作变量的上界和下界以及输出变量的上界在运行时是不同的。为此,您必须首先为MPC控制器对象中的这些约束定义初始虚拟有限值。指定的值MV。最小值
,mv.max.
, 和机汇。马克斯
.
在运行时,使用mpcmoveopt.
对象或对应的MPC控制器块的输入信号。
mpcobj.mv.min = 1;mpcobj.mv.max = 1;mpcobj.ov.max = 1;
打开Sim万博1manbetxulink模型。
mdl =“mpc_varbounds”;Open_System(MDL)
在该模型中,输入最小和最大约束端口(um
和umax
)和输出最大约束端口(ymax
)的MPC Controller块已启用。由于最小输出界是无约束的,所以ymin
输入端口被禁用。
配置输出设定值,裁判
和仿真持续时间,尖
.
ref = 1;尖= 20;
运行模拟,并在I / O范围中查看输入和输出响应。
(mdl sim (mdl) open_system (' /我/ / O '])
- - - >转换”模型。将“mpc”对象的属性移植到状态空间。假设在测量输出通道#1上添加的输出扰动是集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
指定设备和控制器的初始状态。
x = 0(大小(B, 1), 1);xmpc = mpcstate (mpcobj);
存储闭环输出,操纵变量和MPC控制器的状态轨迹在阵列中YY
,UU
, 和XX
,分别。
YY = [];UU = [];XX = [];
创建一个mpcmoveopt.
用于指定运行时绑定值的对象。
选项= mpcmoveopt;
运行模拟循环。
为T = 0:圆形(TSIM / TS)%存储植物状态。XX = [XX;x];%计算并存储工厂输出。没有直接的馈通%从输入到输出。y = C * x;YY = [YY;y ');%从Simulink输出的数据中获得参考信号值万博1manbetx% 模拟。ref = yout.Data (t + 1、2);%更新输入和输出界限。为了一致性,使用%约束值由Simulink仿真输出。万博1manbetx选项。MVMin = uout.Data (t + 1、2);选项。MVMax = uout.Data (t + 1, 3);选项。OutputMax = yout.Data (t + 1, 3);%计算MPC控制操作。u = mpcmove (mpcobj xmpc y ref,[],选项);%更新设备状态并存储输入信号值。x = A*x + B*u;UU = [UU;u ');结束
绘制来自Simulink和命令行模拟的输入和输出信号以及不断变化的输入和输出边界。万博1manbetx
figure subplot(1,2,1) plot(0:Ts:尖,[UU uout.Data(:,1) uout.Data(:,2) uout.Data(:,3)])'输入')传说(命令行输入的,模万博1manbetx型输入的,'下限',...“上界”,'地点',“东南”)子图(1,2,2)绘图(0:TS:TSIM,[YY YOUT.DATA(:,1)YOUT.DATA(:,3)])网格标题('输出')传说(的命令行输出,'万博1manbetxSimulink输出',“上界”,...'地点',“东南”)
命令行和Simulink仿真的结果是相同的。万博1manbetx随着在整个模拟中的约束改变的情况下,MPC控制器将输入和输出信号保持在指定边界内。
BdClose(MDL)