多输入单输出站控制

这个例子展示了如何在一个典型的工作流中设计一个测量输出、一个操作变量、一个测量扰动和一个未测量扰动的模型预测控制器。

定义工厂模型

离散时间线性开环动态模型下面采样时间定义TS

SYS = SS(TF({1,1,1},{[1 0.5 1],[1 1],[7 0.5。1]}));TS = 0.2;模型= C2D(SYS,TS);

设计MPC控制器

定义输入信号的类型:第一个信号是一个可操作的变量,第二个信号是一个可测量的扰动,第三个信号是一个不可测量的扰动。

模型= 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,UUXX

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控制器行为就像线性控制器。你可以得到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);

使用仿真软件模拟®金宝app

要运行这个例子,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.predictionhorizo​​n = 40;mpcobj.controlhorizo​​n = 3;

运行模拟。

Tstop = 150;mdl2 ='mpc_misonoise';open_system (mdl2) sim (mdl2 Tstop)
- >加入到测量的输出信道#1假设输出干扰被集成白噪声。- >在NoiseModel馈通通道插入,以防止与估计器的设计问题。

bdclose(mdl1)bdclose(MDL2)

另请参阅

||

相关话题