主要内容

基于最优成本的切换控制器

这个例子展示了如何使用MPC控制器块的“最优成本”输出端口在多个输出受限为离散值的模型预测控制器之间切换。

定义植物模型

线性植物模型如下:

Plant = SS(TF({1,1},{[1 1.2 1],[1 1]}),“最小值”);种植2个输入和1个输出[A, B, C, D] = ssdata(植物);%获取状态空间实现矩阵,在Simulink中使用金宝appx0 = [0; 0; 0];初始状态%

设计MPC控制器

指定输入和输出信号类型。

植物= setmpcsignals(植物,“MV”, 1'MD'2);百分比首次输入被操纵,第二个是测量干扰

设计了两个具有MV约束的MPC控制器u = 1u = 1,分别。只有u在当前时间被量化。随后计算的控制动作可以是-1到1之间的任何值。控制器使用一个后退的地平线方法,所以这些值实际上不会进入植物。

t = 0.2;%采样时间p = 20;%预测地平线m = 10;%控制地平线MPC1 = MPC(植物,TS,P,M);%First MPC对象mpc2 = mpc(植物、t、p、m);%第二MPC对象%指定权重mpc1.weights = struct(“MV”0,“MVRate”,.3,'输出',1);%重量mpc2。重量=结构(“MV”0,“MVRate”,.3,'输出',1);%重量%指定约束mpc1.mv = struct(“最小值”(1, 1),“马克斯”,[ -  1; 1]);操纵变量的约束:u = -1mpc2。MV =结构(“最小值”(1, 1),“马克斯”,[1; 1]);在操纵变量上的%约束:u = 1
- >“MPC”对象的“权重”属性为空。假设默认为0.00000。- >“MPC”对象的“权重”属性为空。假设默认为0.10000。- >“MPC”对象的“权重”属性为空。假设默认为1.0万。- >“MPC”对象的“权重”属性为空。假设默认为0.00000。- >“MPC”对象的“权重”属性为空。假设默认为0.10000。 -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

在仿真软件模拟®金宝app

要运行此示例,需要使用Simulink®。金宝app

如果~ mpcchecktoolboxinstalled (“金宝app模型”) disp (“金宝appSimulink(R)需要运行此示例。”返回结束%指定信号:tstop = 40;ref.time = 0:TS :( Tstop + P * TS);ref.signals.values = double(ref.time> 10)';%步骤在时间t = 10的参考信号改变md.time = ref.time;双(md.time md.signals.values = > 30) ';% t=30时所测扰动信号的阶跃变化

打开并模拟Simulink®型号:金宝app

mdl =“mpc_optimalcost”;open_system (mdl);%打开Simu金宝applink(R)模型SIM(MDL,TSTOP);%开始模拟
- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。

注意:

  • 从时间0到时间10,控制动作不断在MPC1(-1)和MPC2(+1)之间切换。这是因为参考信号为0,需要在0处有一个控制器输出才能达到稳态,这是任何一个MPC控制器都无法实现的。

  • 从时间10到30时,选择MPC2控制输出(+1),因为参考信号变为+1,它需要AT +1的控制器输出以达到稳定状态(工厂增益为1),这可以通过MPC2实现。

  • 从时间30到40,控制动作开始再次切换。这是因为当测量扰动(+1)存在时,MPC1导致稳态为0,MPC2导致稳态为+2,而参考信号仍然需要+1。

使用mpcmove命令模拟

利用mpcmove分步仿真,计算当前MPC控制动作:

[广告,BD,CD,DD] = SSDATA(C2D(植物,TS));%离散时间动态nsteps = round(tstop / ts);%模拟步数

初始化矩阵以存储模拟结果

yy =零(nsteps + 1,1);rr = zeros(nsteps + 1,1);UU =零(nsteps + 1,1);成本=零(nsteps + 1,1);x = x0;初始状态%处= mpcstate (mpc1);MPC控制器#1的%初始状态此时= mpcstate (mpc2);MPC控制器#2的%初始状态

开始仿真。

td = 0: Nsteps%建立信号v = md.signals.values (td + 1);r = ref.signals.values (td + 1);植物方程:输出更新Y = CD * x + DD(:,2)* v;%计算两个MPC移动选项= mpcmoveopt;options.onlycomputecost = true;%最后一个输入参数告诉“mpcmove”只计算最优成本[u1, Info1] = mpcmove (mpc1处,y, r, v,选项);(u2, Info2) = mpcmove (mpc2,此时,y, r, v,选项);%比较产生的最佳成本并选择输入值%对应最小成本如果info1.cost <= info2.cost u = u1;成本= INFO1.COST;%更新内部MPC状态到正确的值此时假定。工厂= xt1.Plant;此时假定。干扰= xt1.Disturbance;此时假定。LastMove = xt1.LastMove;其他的u = u2;成本= Info2.Cost;%更新内部MPC状态到正确的值处。工厂= xt2.Plant;处。干扰= xt2.Disturbance;处。LastMove = xt2.LastMove;结束%存储植物信息YY(TD + 1)= Y;rr(td + 1)= r;UU(TD + 1)= U;成本(TD + 1)=成本;%植物方程式:状态更新x = Ad*x + Bd(:,1)*u + Bd(:,2)*v;结束

绘制结果mpcmove与在Simulink®中获得的仿真结果进行比较:金宝app

子图(131)绘图((0:nsteps)* ts,[yy,rr]);%绘制输出和参考信号网格标题('ov和参考')次要情节(132)图((0:Nsteps) * Ts, UU);% Plot操纵变量网格标题(“MV”)子图(133)绘图((0:nsteps)* ts,成本);绘制最优MPC值函数网格标题('最佳成本'

这些图类似于Simulink®模型中作用域中的图。金宝app

bdclose (mdl);

另请参阅

相关话题