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

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

定义植物模型

线性工厂模型如下:

植物= 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);%第一MPC对象mpc2 = mpc(植物、t、p、m);%第二MPC对象%指定权重mpc1.Weights =结构(“MV”0,“MVRate”.3,“输出”,1);%权重mpc2。重量=结构(“MV”0,“MVRate”.3,“输出”,1);%权重%指定约束mpc1.MV =结构(“最小值”(1,1),“马克斯”,[ -  1; 1]);操作变量的约束:u = -1mpc2。MV =结构(“最小值”(1,1),“马克斯”[1; 1]);对操纵变量%限制条件:U = 1
- >“MPC”对象的“We​​ights.ManipulatedVariables”属性是空的。假设默认0.00000。- >“MPC”对象的“We​​ights.ManipulatedVariablesRate”属性是空的。假设默认0.10000。- >“MPC”对象的“We​​ights.OutputVariables”属性是空的。假设默认1.00000。- >“MPC”对象的“We​​ights.ManipulatedVariables”属性是空的。假设默认0.00000。- >“MPC”对象的“We​​ights.ManipulatedVariablesRate”属性是空的。假设默认0.10000。 -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

在仿真软件模拟®金宝app

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

如果~ mpcchecktoolboxinstalled (“金宝app模型”)disp (运金宝app行这个例子需要Simulink(R)。)返回结束%指定信号:TSTOP = 40;ref.time = 0:TS:(TSTOP + P * TS);ref.signals.values =双(ref.time> 10)';在时间t在参考信号%步骤变化= 10md.time = ref.time;md.signals。值=双(md.time > 30) ';t=30时被测干扰信号的阶跃变化%

打开和模拟的Simulink模型:金宝app

mdl =“mpc_optimalcost”;open_system (mdl);打开Simul金宝appink(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,它需要在1控制器输出达到稳定状态(植物增益为1),其可以通过MPC2来实现。

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

模拟使用MPCMOVE命令

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

[AD,BD,CD,DD] = SSDATA(C2D(植物中,Ts));%离散时间动态n步= ROUND(TSTOP / TS);仿真步骤的数目

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

YY =零(n步+ 1,1);RR =零(n步+ 1,1);UU =零(n步+ 1,1);COST =零(n步+ 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 =镉* 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;COST(TD + 1)=费用;%植物方程:状态更新x = Ad*x + Bd(:,1)*u + Bd(:,2)*v;结束

绘制mpcmove与Simulink®仿真结果比较:金宝app

副区(131)曲线图((0:n步)* Ts时,[YY,RR]);绘制输出和参考信号网格标题(“OV和参考”)次要情节(132)图((0:Nsteps) * Ts, UU);图操作变量网格标题(“MV”)副区(133)曲线图((0:n步)* Ts时,COST);%绘制最优MPC值函数网格标题(“最优成本”)

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

bdclose (mdl);

另请参阅

相关话题