在运行时改变输入和输出边界
这个例子展示了如何在实时控制中改变输入和输出饱和限制。对于命令行和Simulink®模拟,您可以在每个控制金宝app间隔指定更新的输入和输出约束。MPC控制器然后将输入和输出信号保持在指定的范围内。
有关在运行时更新线性约束的详细信息,请参见在运行时更新约束.
创建工厂模型和MPC控制器
定义一个具有采样时间的SISO离散时间单元Ts
.
Ts = 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(plant,Ts,p,m);
- - - >“权重。属性为空。假设默认值为0.00000。- - - >“权重。属性为空。假设默认为0.10000。- - - >“权重。OutputVariables属性为空。假设默认值为1.00000。
指定控制器调优权重。
mpcobj.Weights.MV = 0;mpcobj.Weights.MVrate = 0.5;mpcobo . weights . ov = 1;
对于本例,被操作变量的上界和下界,以及输出变量的上界在运行时都是变化的。为此,您必须首先在MPC控制器对象中为这些约束定义初始虚拟有限值。为MV。最小值
,MV。马克斯
,机汇。马克斯
.
类在运行时更改这些约束mpcmoveopt
对象的命令行或相应的输入信号到MPC控制器块。
mpcobj.MV.Min = 1;mpcobj.MV.Max = 1;mpcobj.OV.Max = 1;
使用Simulink模拟模型金宝app
打开Sim金宝appulink模型。
mdl =“mpc_varbounds”;open_system (mdl)
在该模型中,输入最小和最大约束端口(umin
而且umax
)和输出最大约束端口(ymax
)使能MPC Controller块。由于最小输出边界是无约束的,因此ymin
输入端口被关闭。
配置输出设定值,裁判
,模拟持续时间,尖
.
Ref = 1;尖= 20;
运行模拟,并查看I/O范围内的输入和输出响应。
(mdl sim (mdl) open_system (' /我/ / O '])
——>转换“模型”。属性到状态空间。假设添加到测量输出通道#1的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。
在命令行模拟模型
指定设备和控制器的初始状态。
x = 0 (size(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,[],options);更新工厂状态,存储输入信号值。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型输入的,“下限”,...“上界”,“位置”,“东南”) subplot(1,2,2) plot(0:Ts:Tsim,[YY yout.Data(:,1) yout.Data(:,3)])“输出”)传说(的命令行输出,模金宝app型输出的,“上界”,...“位置”,“东南”)
命令行和Simulink模拟的结果是相同的。金宝appMPC控制器将输入和输出信号保持在指定的范围内,因为在整个模拟过程中约束条件会发生变化。
bdclose (mdl)