主要内容

在运行时改变输入和输出边界

这个例子展示了如何在实时控制中改变输入和输出饱和限制。对于命令行和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控制器的闭环输出、操纵变量和状态轨迹存储在数组中YYUU,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)

另请参阅

相关的话题