主要内容

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

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

定义植物模型

线性植物模型如下:

2个输入和1个输出的植物Plant = ss(tf({1,1},{[1 1.2 1],[1 1]}),“最小值”);获取状态空间实现矩阵,用于Simulink万博1manbetx[A,B,C,D] = ssdata(植物);初始植物状态%X0 = [0;0;0];

MPC控制器设计

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

第一个输入是被操纵的变量,第二个输入是被测量的扰动植物= setmpcsignals(植物,“MV”, 1“医学博士”2);

设计两个MPC控制器,在被操纵变量上有两个相等约束u = 1对于第一个和u = 1对于第二题。只有u在当前时间是量化的。后续计算的控制动作可以是-1到1之间的任何值。控制器使用后退视界方法,因此这些值实际上不会到植物。

Ts = 0.2;%采样时间P = 20;%预测水平M = 10;%控制水平mpc1 = mpc(plant,Ts,p,m);第一个MPC对象mpc2 = mpc(plant,Ts,p,m);第二个MPC对象指定重量mpc1。权重= struct(“MV”0,“MVRate”3,“输出”1);%的重量mpc2。权重= struct(“MV”0,“MVRate”3,“输出”1);%的重量指定约束条件第一个控制器对被操纵变量的约束:u = -1mpc1。MV = struct(“最小值”(1, 1),“马克斯”, (1, 1));第二个控制器被操纵变量的约束条件:u = 1mpc2。MV = struct(“最小值”(1, 1),“马克斯”, (1, 1));
- - - >“权重。属性为空。假设默认值为0.00000。- - - >“权重。属性为空。假设默认为0.10000。- - - >“权重。OutputVariables属性为空。假设默认值为1.00000。- - - >“权重。ManipulatedVariables" property is empty. Assuming default 0.00000. -->The "Weights.ManipulatedVariablesRate" property is empty. Assuming default 0.10000. -->The "Weights.OutputVariables" property is empty. Assuming default 1.00000.

在Simulink®中进万博1manbetx行模拟

指定信号:Tstop = 40;%参考信号:时间t=10时的步长变化ref.time = 0:Ts:(Tstop+p*Ts);Ref.signals.values = double(ref.time>10)';%实测扰动信号:t=30时刻的步长变化Md.time = ref.time;Md.signals.values = double(md.time>30)';

关系运算符块比较在视界范围内计算的代价,它的输出信号用于从控制器中选择在视界范围内代价最小的被操纵变量。

打开并模拟Simulink模型:万博1manbetx

mdl =“mpc_optimalcost”;open_system (mdl);打开Simul万博1manbetxink(R)模型sim (mdl Tstop);%开始模拟%打开Simu万博1manbetxlink作用域open_system ([mdl' / MV ']);open_system ([mdl' /最优成本']);open_system ([mdl/ /引用/输出的]);
——>转换模型到离散时间。假设添加到测量输出通道#1的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。——>转换模型到离散时间。假设添加到测量输出通道#1的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。

注意:

  • 从时间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(plant,Ts));%模拟步数Nsteps = round(Tstop/Ts);

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

YY = 0 (Nsteps+1,1);RR = 0 (Nsteps+1,1);UU = 0 (Nsteps+1,1);成本=零(Nsteps+1,1);X = x0;初始植物状态%Xt1 = mpcstate(mpc1);控制器#1的初始状态句柄Xt2 = mpcstate(mpc2);控制器#2的初始状态句柄

开始仿真。

td = 0: Nsteps%构造信号V = md.signals.values(td+1);R = ref.signals.values(td+1);%植物方程式:输出更新y = Cd*x + Dd(:,2)*v;% set选项只返回解决方案结构中的最优代价选项= mpcmoveopt;选项。只有ComputeCost = true;计算控件在两个控制器上移动[u1,Info1] = mpcmove(mpc1,xt1,y,r,v,options);[u2,Info2] = mpcmove(mpc2,xt2,y,r,v,options);比较结果的最佳成本,并选择移动。%对应于在地平线上预测的最小成本值如果Info1.Cost < = Info2。成本u = u1;成本= info1 .成本;将内部MPC状态更新为正确值此时假定。植物= xt1.植物;此时假定。扰动= xt1.扰动;此时假定。LastMove = xt1.LastMove;其他的U = u2;成本= Info2.Cost;将内部MPC状态更新为正确值处。植物= xt2.植物;处。扰动= xt2.扰动;处。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®中获得的仿真结果进行比较:万博1manbetx

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

结果与Simulink模型作用域中显示的结果相同。万博1manbetx

bdclose (mdl)

另请参阅

相关的话题