这个例子展示了如何在一个典型的工作流中设计一个测量输出、一个操作变量、一个测量扰动和一个未测量扰动的模型预测控制器。
离散时间线性开环动态模型下面采样时间定义TS
。
SYS = SS(TF({1,1,1},{[1 0.5 1],[1 1],[7 0.5。1]}));TS = 0.2;模型= C2D(SYS,TS);
定义输入信号的类型:第一个信号是一个可操作的变量,第二个信号是一个可测量的扰动,第三个信号是一个不可测量的扰动。
模型= setmpcsignals(型号,'MV'1,'MD',2,'UD'3);
创建具有采样周期,预测和控制的视野控制器对象。
mpcobj = MPC(模型中,Ts,10,3);
- - >“权重。操作变量“mpc”对象的属性为空。假设默认的0.00000。- - >“权重。“mpc”对象的“操作可变率”属性为空。假设默认的0.10000。- - >“权重。“mpc”对象的“OutputVariables”属性为空。假设默认的1.00000。
定义对操纵变量的约束。
mpcobj.MV =结构(“最低”,0,“最大”1,“杀鼠灵”,-10,'RateMax'10);
对于不可测的输入干扰,其模型是一个由方差= 1000的白噪声驱动的积分器。
mpcobj.Model.Disturbance = TF(SQRT(1000),[1 0]);
sim卡
命令指定仿真参数。
Tstop = 30;%的仿真时间Tf =圆(Tstop / Ts);的模拟步骤数%r = 1 (Tf, 1);%基准信号V = [零(TF / 3,1);酮(2 * TF / 3,1)];实测干扰信号%
运行闭环仿真和绘图结果。
SIM(mpcobj,TF,R,V)
假设在测量的输出通道1上没有增加干扰。- >的“MPC”对象的“Model.Noise”属性是空的。假设每个测量的输出通道上都有白噪声。
指定模拟选项物体干扰和噪声信号。
SimOptions = mpcsimopt(mpcobj);d = [零(2 * TF / 3,1); - 0.5 *那些铁蛋白(Tf / 3,1)];SimOptions.Unmeas = d;%不可测输入干扰信号SimOptions.OutputNoise =措施*(兰德(Tf, 1)闲置);%输出测量噪声SimOptions.InputNoise = 0.05 *(兰特(TF,1) - 5);上操纵变量%噪声
运行闭环仿真,并将结果保存到工作区。
[y, t, u, xp] = sim (mpcobj, Tf, r, v, SimOptions);
绘图效果。
图副区(2,1,1)情节(0:TF-1,Y,0:TF-1,r)的标题(“输出”) grid subplot(2,1,2) plot(0:Tf-1,u)“输入”)网格
测试针对模型不匹配的MPC控制器的鲁棒性。指定真正的工厂simModel
,其名义产值为0.1
。
simModel = SS(TF({1,1,1},{[1 0.8 1],[1 2],[6 0.6。1]}));simModel = setmpcsignals(simModel,'MV'1,'MD',2,'UD'3);simModel =结构('厂',simModel);simModel.Nominal.Y = 0.1;simModel.Nominal.X = -.1 * [1 1 1 1 1];
创建选项对象。
SimOptions。模型= simModel;SimOptions。plantinit = [0.1 0 -0.1 0 .05];真实植物的初始状态SimOptions.OutputNoise = [];%删除输出测量噪声SimOptions.InputNoise = [];删除操作变量上的噪声%执行闭环仿真和情节的结果。SIM(mpcobj,TF,R,V,SimOptions)
——>转换模型离散时间。
将操作变量的约束由硬放宽到软。
mpcobj.MV。MinECR = 1;mpcobj.MV。MaxECR = 1;
定义一个输出的制约条件。
mpcobj.OV。Max = 1.1;
运行一个新的闭环仿真。
SIM(mpcobj,TF,R,V)
假设在测量的输出通道1上没有增加干扰。- >的“MPC”对象的“Model.Noise”属性是空的。假设每个测量的输出通道上都有白噪声。
MV约束也同时MO违反约束,更被轻微侵犯。惩罚更多的输出限制,并重新运行模拟。
mpcobj.OV。MaxECR = 0.001;%越接近零,就越难约束SIM(mpcobj,TF,R,V)
假设在测量的输出通道1上没有增加干扰。- >的“MPC”对象的“Model.Noise”属性是空的。假设每个测量的输出通道上都有白噪声。
现在MO约束而MV违反约束,如预期更已略有侵犯。
模型预测控制工具箱™软件提供了一个默认的卡尔曼滤波器来估计植物,干扰和噪声模型的状态。您可以更改卡尔曼收益。
首先,检索默认卡尔曼增益和状态空间矩阵。
[L,M,A1,CM1] = getEstimator(mpcobj);
默认的观测极有:
e = eig (A1-A1 * M * Cm1)
e = 0.5708 + 0.4144i 0.5708 - 0.4144i 0.4967 + 0.0000i 0.9334 + 0.1831i 0.9334 - 0.1831i 0.8189 + 0.0000i
设计由极点配置一个新的状态估计。
极= [0.8 0.75 0.7 0.85 0.6 0.81];L =地方(A1' ,CM1' ,极)';M = A1 \ L,setEstimator(mpcobj,L,M);
使用测试在开环厂的行为sim卡
命令。设置开环
标志上
,并提供激励系统操纵变量的顺序。
SimOptions.OpenLoop =“上”;SimOptions。MVSignal =罪((0:Tf-1) / 10);
作为参考信号将被忽略,我们能够避免指定它。
SIM(mpcobj,TF,[],V,SimOptions)
假设在测量的输出通道1上没有增加干扰。- >的“MPC”对象的“Model.Noise”属性是空的。假设每个测量的输出通道上都有白噪声。——>转换模型离散时间。
为了检查MPC控制器是否能够拒绝恒定输出干扰,并跟踪恒定设定值与零偏移的稳态,计算从输出干扰到被控输出的直流增益cloffset
命令。
DC = cloffset(mpcobj);fprintf中('从输出干扰到输出的直流增益=% 5.8f (=%g) \n',DC,DC);
从输出的干扰,以输出DC增益= 0.00000000(= 5.21805e-15)
零个增益的装置,该输出将跟踪期望的设定点。
mpcmove
首先,获得植物的离散时间状态空间矩阵。
[A,B,C,d] = SSDATA(模型);Tstop = 5;%的仿真时间X = [0 0 0 0 0]';%的植物的初始状态xmpc = mpcstate (mpcobj);%MPC控制器的初始状态R = 1;%输出的参考信号
将闭环MPC轨迹存储在数组中YY
,UU
和XX
。
YY = [];UU = [];XX = [];
运行模拟循环
为t = 0时:圆形(TSTOP / TS)-1-%存储的状态XX = (XX, x);% #好< * AGROW >%定义测量的干扰信号v = 0;如果T * TS> = 10 V = 1;结束%定义未测量的干扰信号d = 0;如果T * TS> = 20 d = -0.5;结束%植物方程:输出更新(没有从MV到Y的馈通)y = C*x + D(:,2)*v + D(:,3)* D;YY = (YY, y);%计算MPC行动U = mpcmove(mpcobj,xmpc,Y,R,V);%植物方程:状态更新X = A * X + B(:,1)* U + B(:,2)* V + B(:,3)* d;UU = [UU U];结束
绘制的结果。
图副区(2,1,1)情节(0:TS:TSTOP-TS,YY)网格标题(“输出”)副区(2,1,2)情节(0:TS:TSTOP-TS,UU)网格标题(“输入”)
如果在模拟过程中任何时候你要检查的最佳预测轨迹,它可以通过返回mpcmove
为好。假设你想从当前状态开始,有一组点变更为0.5,并假定测量的干扰消失了。
R = 0.5;v = 0;[〜,信息] = mpcmove(mpcobj,xmpc,Y,R,V);
提取最佳预测轨迹。
TOPT = Info.Topt;yopt = Info.Yopt;uopt = Info.Uopt;图副区(2,1,1)楼梯(TOPT,yopt)称号(“预测输出的最优序列”)格副区(2,1,2)楼梯(TOPT,uopt)称号(“操纵变量的优化序列”)网格
当约束不是活动的,则MPC控制器行为就像线性控制器。你可以得到MPC控制器的状态空间形式。
LTI = SS(mpcobj,“房车”);
找的线性控制器的状态空间矩阵。
(铝、提单、CL, DL) = ssdata (LTI);
模拟线性MPC的闭环系统和与原来的MPC控制器比较所述线性MPC控制器与约束截止。
mpcobj。MV = [];%无输入约束mpcobj.OV = [];%无输出限制Tstop = 5;%的仿真时间xL的=零(大小(BL,1),1);%线性MPC控制器的初始状态X = [0 0 0 0 0]';%设备初始状态y = 0;%初始测量的输出R = 1;%输出参考设定点u = 0;%上一页输入命令YY = [];XX = [];xmpc = mpcstate (mpcobj);为t = 0时:圆形(TSTOP / TS)-1- YY = [YY,Y];XX = (XX, x);v = 0;如果T * TS> = 10 V = 1;结束d = 0;如果T * TS> = 20 d = -0.5;结束uold = u;%计算线性MPC控制动作U = CL * xL的+ DL * [Y; R; V];%比较输入移动与MPCMOVE提供的uMPC = mpcmove (mpcobj xmpc y, r, v);dispStr (t + 1) = {sprintf ('t=%5.2f, u=%7.4f(由LTI提供),u=%7.4f(由MPCOBJ提供)',T * Ts时,U,UMPC)};% #好< * SAGROW >%更新厂方程X = A * X + B(:,1)* U + B(:,2)* V + B(:,3)* d;%更新控制器方程xL = AL*xL + BL*[y;r;v];更新输出方程y = C*x + D(:,1)*u + D(:,2)*v + D(:,3)* D;结束
假设在测量的输出通道1上没有增加干扰。- >的“MPC”对象的“Model.Noise”属性是空的。假设每个测量的输出通道上都有白噪声。
显示结果。
为t = 0时:圆形(TSTOP / TS)-1- DISP(dispStr {T + 1});结束
T = 0.00,U = 5.2478(由LTI提供),U = 5.2478(由MPCOBJ提供)T = 0.20,U = 3.0134(由LTI提供),U = 3.0134(由MPCOBJ提供)T = 0.40,U = 0.2281(由LTI)提供,U = 0.2281(由MPCOBJ提供)T = 0.60,U = -0.9952(由LTI提供)中,u = -0.9952(由MPCOBJ)T = 0.80,U = -0.8749(由LTI提供)提供,U = -0.8749(由MPCOBJ提供)T = 1.00,U = -0.2022(由LTI提供)中,u = -0.2022(由MPCOBJ提供)T = 1.20,U = 0.4459(由LTI提供),U = 0.4459(条件通过MPCOBJ)T = 1.40,U = 0.8489(由LTI提供),U = 0.8489(由MPCOBJ提供)T = 1.60,U = 1.0192(由LTI提供),U = 1.0192(由MPCOBJ提供)T = 1.80,U= 1.0511(由LTI提供),U = 1.0511(由MPCOBJ提供)T = 2.00,U = 1.0304(由LTI提供)中,u = 1.0304吨= 2.20(由MPCOBJ提供),U = 1.0053(由LTI提供),U = 1.0053(由MPCOBJ提供)T = 2.40,U = 0.9920(由LTI提供),U = 0.9920(由MPCOBJ提供)T = 2.60,U = 0.9896(由LTI提供),U = 0.9896(由MPCOBJ提供)T = 2.80,U = 0.9925(由LT提供I)中,U = 0.9925(由MPCOBJ提供)T = 3.00,U = 0.9964(由LTI提供),U =(由MPCOBJ提供)T = 3.20,U = 0.9990(由LTI提供),U = 0.9990(条件0.9964通过MPCOBJ)T = 3.40,U = 1.0002(由LTI提供),U = 1.0002(由MPCOBJ提供)T = 3.60,U = 1.0004(由LTI提供),U = 1.0004(由MPCOBJ提供)T = 3.80,U= 1.0003(由LTI提供),U = 1.0003(由MPCOBJ提供)T = 4.00,U = 1.0001(由LTI提供)中,u = 1.0001吨= 4.20(由MPCOBJ提供),U = 1.0000(由LTI提供),U = 1.0000(由MPCOBJ提供)T = 4.40,U = 0.9999(由LTI提供),U = 0.9999(由MPCOBJ提供)T = 4.60,U = 1.0000(由LTI提供),U = 1.0000(由MPCOBJ提供) t= 4.80, u= 1.0000 (provided by LTI), u= 1.0000 (provided by MPCOBJ)
绘制的结果。
图情节(0:TS:TSTOP-TS,YY)格
运行闭环,其中所有的约束都截止容易使用sim卡
。我们只是指定了一个选项SimOptions
结构体:
SimOptions = mpcsimopt(mpcobj);SimOptions.Constr =“关”;%删除所有MPC约束SimOptions.Unmeas = d;%不可测输入干扰SIM(mpcobj,TF,R,V,SimOptions);
要运行这个例子,Simulink®的需要。金宝app
如果〜mpcchecktoolboxinstalled('金宝appSIMULINK')disp (运金宝app行示例的这一部分需要Simulink(R)。)返回结束
重新创建MPC控制器。
mpcobj = MPC(模型中,Ts,10,3);mpcobj.MV =结构(“最低”,0,“最大”1,“杀鼠灵”,-10,'RateMax'10);mpcobj.Model.Disturbance = TF(SQRT(1000),[1 0]);
- - >“权重。操作变量“mpc”对象的属性为空。假设默认的0.00000。- - >“权重。“mpc”对象的“操作可变率”属性为空。假设默认的0.10000。- - >“权重。“mpc”对象的“OutputVariables”属性为空。假设默认的1.00000。
要控制的连续时间工厂有以下状态空间实现:
[A,B,C,d] = SSDATA(SYS);
在Simulink中模拟闭环MPC。金宝app
mdl1 =“mpc_miso”;open_system(mdl1)SIM(mdl1)
假设在测量的输出通道1上没有增加干扰。- >的“MPC”对象的“Model.Noise”属性是空的。假设每个测量的输出通道上都有白噪声。
接下来,使用正弦输出噪声运行仿真。假设输出测量受到频率为0.1 Hz的正弦测量噪声的影响。您需要将此信息通知MPC对象,以便对状态估计进行改进。
欧米加= 2 * PI / 10;mpcobj.Model.Noise = 0.5 * TF(σ-^ 2,[1 0的ω^ 2]);
修改MPC的设计,并与零均值和方差指定高斯白噪声未测量的干扰0.1
。
mpcobj.Model.Disturbance = TF(0.1);mpcobj.weights =结构('MV',0,'MVRate',0.1,'OV',0.005);mpcobj.predictionhorizon = 40;mpcobj.controlhorizon = 3;
运行模拟。
Tstop = 150;mdl2 ='mpc_misonoise';open_system (mdl2) sim (mdl2 Tstop)
- >加入到测量的输出信道#1假设输出干扰被集成白噪声。- >在NoiseModel馈通通道插入,以防止与估计器的设计问题。
bdclose(mdl1)bdclose(MDL2)