这个例子展示了如何与一个测量的输出,一个操纵变量,一个测量的干扰,并且在典型的工作流一个未测量的干扰设计模型预测控制器。
离散时间线性开环动态模型定义如下TS
。
sys=ss(tf({1,1,1},{[1.51],[1 1 1],[7.51]});Ts=0.2;model=c2d(sys,Ts);
定义输入信号的类型:所述第一信号是一个操纵变量,所述第二信号是一个测量的干扰,第三个是一个未测量的干扰。
模型=setmpcsignals(模型,'MV',1,'总经理',2岁,'UD',3);
创建具有采样周期,预测和控制的视野控制器对象。
mpcobj=mpc(型号,Ts,10,3);
- >“MPC”对象的“Weights.ManipulatedVariables”属性是空的。假设默认0.00000。- >“MPC”对象的“Weights.ManipulatedVariablesRate”属性是空的。假设默认0.10000。- >“MPC”对象的“Weights.OutputVariables”属性是空的。假设默认1.00000。
定义对操纵变量的约束。
mpcobj.MV =结构(“最低”,0,“最大”,1,'RateMin',-10,'最大速率',10);
对于未测量输入障碍,其模式是通过白噪声方差= 1000驱动的积分器。
mpcobj.Model.Disturbance = TF(SQRT(1000),[1 0]);
SIM卡
命令指定仿真参数。
TSTOP = 30;%仿真时间TF = ROUND(TSTOP / TS);%模拟步骤数R =那些铁蛋白(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 = 0.001 *(兰特(TF,1) - 5);%输出测量噪声SimOptions.InputNoise=.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)标题(“输出”)网格副区(2,1,2)情节(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,'总经理',2岁,'UD',3);simModel =结构('植物',simModel);simModel.Nominal.Y = 0.1;simModel.Nominal.X = -.1 * [1 1 1 1 1];
创建选项对象。
SimOptions.Model = simModel;SimOptions.plantinit = [0.1 0 -0.1 0 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约束被违反了。
模型預測控制工具箱™ 软件提供一个默认的Kalman滤波器来估计对象的状态、干扰和噪声模型。你可以改变卡尔曼增益。
首先,检索默认的Kalman增益和状态空间矩阵。
[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
设计由极点配置一个新的状态估计。
极点=[.8.75.7.85.6.81];L=位置(A1',Cm1',极点)';M=A1\L;setEstimator(mpcobj,L,M);
使用测试在开环厂的行为SIM卡
命令。设置开环
标志上
,并提供激发系统的操作变量序列。
SimOptions.OpenLoop ='上';SimOptions.MVSignal = SIN((0:TF-1)'/ 10);
由于参考信号将被忽略,我们可以避免指定它。
sim卡(mpcobj、Tf、[]、v、SimOptions)
假设没有干扰加到测量到的输出信道#1。- >的“MPC”对象的“Model.Noise”属性是空的。假设在每个测得的输出信道的白噪声。- >转换模型,以离散时间。
为了检查MPC控制器是否能够拒绝恒定的输出的干扰和跟踪恒定设定值与在稳态零点偏移,计算从输出的干扰DC增益使用受控输出cloffset
命令。
DC = cloffset(mpcobj);fprintf中('从输出的干扰DC增益以输出=%5.8f(=%克)\ N',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轨迹年
,UU公司
和二十
。
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;[~,Info]=mpcmove(mpcobj,xmpc,y,r,v);
提取最佳预测轨迹。
topt=Info.topt;yopt=Info.yopt;uopt=Info.uopt;图形子地块(2,1,1)楼梯(topt,yopt)标题(“预测输出的最优序列”)网格子地块(2,1,2)楼梯(顶部,uopt)标题(“操纵变量的优化序列”)网格
当约束未激活时,MPC控制器的行为类似于线性控制器。你可以得到MPC控制器的状态空间形式。
LTI=ss(mpcobj,'RV');
找的线性控制器的状态空间矩阵。
[AL,BL,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®的需要。万博1manbetx
如果〜mpcchecktoolboxinstalled('万博1manbetxSIMULINK')DISP(的万博1manbetxSimulink(R)是必需的运行示例的这个部分“。)返回结束
重新创建MPC控制器。
mpcobj=mpc(型号,Ts,10,3);mpcobj.MV=struct(“最低”,0,“最大”,1,'RateMin',-10,'最大速率',10);mpcobj.Model.Disturbance = TF(SQRT(1000),[1 0]);
- >“MPC”对象的“Weights.ManipulatedVariables”属性是空的。假设默认0.00000。- >“MPC”对象的“Weights.ManipulatedVariablesRate”属性是空的。假设默认0.10000。- >“MPC”对象的“Weights.OutputVariables”属性是空的。假设默认1.00000。
连续时间的植物被控制具有以下状态空间实现:
[A,B,C,D]=ssdata(系统);
模拟闭环MPC在Simulink。万博1manbetx
mdl1 ='mpc_miso';开放式系统(mdl1)sim卡(mdl1)
假设没有干扰加到测量到的输出信道#1。- >的“MPC”对象的“Model.Noise”属性是空的。假设在每个测得的输出信道的白噪声。
接下来,运行与正弦输出噪声的模拟。假定输出测量由频率0.1Hz的正弦测量噪声的影响。你想告知MPC对象有关这一点,以便状态估计可以提高。
ω=2*pi/10;mpcobj.Model.Noise=0.5*tf(ω^2,[10ω^2]);
修正MPC设计并指定一个均值和方差为零的高斯白噪声非测量干扰0.1
。
mpcobj.Model.inference=tf(0.1);mpcobj.weights=struct('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的输出干扰为积分白噪声。-->为了避免估计器设计中的问题,在噪声模型中插入了一个馈通信道。
bdclose(mdl1)bdclose(mdl2)