这个例子展示了如何在实时控制中改变输入和输出饱和限制。对于命令行和Simulink®模拟,您可以在每个控制金宝app间隔指定更新的输入和输出约束。MPC控制器将输入和输出信号保持在指定的范围内。
有关在运行时更新线性约束的更多信息,请参见在运行时更新约束.
定义一个具有采样时间的SISO离散时间工厂Ts
.
t = 0.1;plant = c2d(tf(1,[1 .8 3]),Ts);[A, B, C, D] = ssdata(植物);
创建具有指定预测地平线的MPC控制器,p
、控制地平线,c
,采样时间,Ts
.使用植物
作为内部预测模型。
p = 10;m = 4;mpcobj = mpc(植物、t、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。马克斯
,机汇。马克斯
.
在运行时,使用mpcmoveopt
对象或MPC控制器模块的相应输入信号。
mpcobj.MV.Min = 1;mpcobj.MV.Max = 1;mpcobj.OV.Max = 1;
打开仿真软金宝app件模型。
mdl =“mpc_varbounds”;open_system (mdl)
在该模型中,输入最小约束端口和最大约束端口(umin
和umax
)和输出最大约束端口(ymax
)使能。由于最小输出边界是无约束的,因此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:圆形(尖/ Ts)%存储植物状态。XX = [XX;x];%计算和存储工厂输出。没有直接的馈通%从输入到输出。y = C * x;YY = [YY;y ');%从Simulink输出的数据中获取参考信号值金宝app%的模拟。ref = yout.Data (t + 1、2);%更新输入和输出边界。为了保持一致性,请使用由Simulink仿真输出的%约束值。金宝app选项。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和命令行模拟的输入和输出信号以及变化的输入和输出边界。金宝app
图subplot(1,2,1) plot(0:Ts:Tsim,[UU uout.Data(:,1) uout.Data(:,2) uout.Data(:,3)])“输入”)传说(命令行输入的,模金宝app型输入的,“下限”,...“上界”,“位置”,“东南”)子plot(1,2,2) plot(0:Ts:Tsim,[YY yout.Data(:,1) yout.Data(:,3)])“输出”)传说(的命令行输出,模金宝app型输出的,“上界”,...“位置”,“东南”)
命令行模拟和Simulink模拟的结果是相同的。金宝appMPC控制器保持输入和输出信号在指定的范围内,因为约束在整个仿真过程中变化。
bdclose (mdl)