主要内容

调谐控制器权重

此示例显示如何在实时改变输出,输入和ECR Slack变量的权重。

MPC对象中指定的权重被提供给MPC控制器块的权重覆盖。如果权重信号未连接到MPC控制器块,则相应的权重是在MPC对象中指定的权重。

定义工厂模型

定义多变量的离散时间线性系统,没有直接I / O馈通,并且假设输入#4是测量的干扰,输出#4是未测量的。

ts = 0.1;%采样时间植物= TF({1,[11],5,2; 3,[1 5],1,0; 0,0,1,[1 1]; 2,[1 -1],0,0}那......{[111],[11 4 5],[110],[1 5];[11],[11],[11] 8],[11];[11] 1],[1 3 1],[11],[1 2];[11],[1 3 10 10],[110],[1 1]});植物= C2D(SS(植物),TS);Plant.d = 0;

设计MPC控制器

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

植物= setmpcsignals(植物,'MD',4,'uo'4);%使用采样周期,预测和控制创建控制器对象%视野:p = 20;%预测地平线m = 3;%控制地平线mpcobj = mpc(植物,ts,p,m);
- >假设未指定的输入信号是被操纵变量的。- >假设未指定的输出信号是输出的。- >“MPC”对象的“权重”属性为空。假设默认为0.00000。- >“权重”属性“MPC”对象的“权重”属性为空。假设默认为0.10000。- >“MPC”对象的“权重”属性为空。假设默认为1.0万。对于输出的输出y1 y2 y3和输出零重量

指定MV约束。

mpcobj.mv(1).min = -6;mpcobj.mv(1).max = 6;mpcobj.mv(2).min = -6;mpcobj.mv(2).max = 6;mpcobj.mv(3).min = -6;mpcobj.mv(3).max = 6;

使用Simulink®模拟万博1manbetx

要运行此示例,需要Simulink®。万博1manbetx

如果〜mpcchecktoolboxinstalled('万博1manbetxsimulink')disp('万博1manbetxSimulink(R)需要运行此示例。'返回结尾%定义参考信号。tstop = 10;REF = [1 0 3 1];r = struct('时间',(0:TS:TSTOP)');n = numel(r.time);R.Signals.Values = ONE(N,1)* REF;

定义测量的干扰。

v = 0.5;

除了未加权的输出#2之外,OV权重随时间线性增加。

ywt.time = r.time;ywt.signals.values =(1:n)'* [.1 0 .1 .1];

MVRate重量随时间线性逐渐减小。

duwt.time = r.time;duwt.signals.values =(1-(1:n)/ 2 / n)'* [.1 .1];

ECR重量随着时间的推移呈指数增长。

Ecrwt.time = R.time;Ecrwt.Signals.Values = 10. ^(2+(1:n)'/ n);

开始模拟。

mdl ='mpc_onlineTuning';Open_System(MDL);%Open S万博1manbetximulink(R)模型SIM(MDL);%开始模拟
- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >假设添加到测量的输出干扰,输出通道#2是集成的白噪声。- >假设添加到测量的输出干扰,输出通道#3是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。

使用mpcmove命令模拟

定义真实工厂和MPC状态对象。

[A,B,C,D] = SSDATA(工厂);x =零(尺寸(植物,1),1);植物的初始状态xmpc = mpcstate(mpcobj);MPC控制器的%初始状态

将闭环MPC轨迹存储在阵列YY,UU,XX中。

yy = [];UU = [];xx = [];

使用mpcmoveopt对象在运行时提供权重。

选项= mpcmoveopt;

开始模拟。

为了t = 0:n-1,%商店状态xx = [xx,x];%#OK <* AGROW>%计算工厂输出(没有从MV到Y的馈通)Y = C * X + D(:,4)* v;yy = [yy; y'];%获得参考信号Ref = R.Signals.Values(T + 1,:)';%使用运行时权重更新mpcmoveopt对象options.mvratewight = duwt.signals.values(t + 1,:);options.outputweight = ywt.signals.values(t + 1,:);options.ECRWEIGHT = ECRWT.SIGNALS.VALUES(T + 1,:);%Compute Control Actionu = mpcmove(mpcobj,xmpc,y(1:3),ref,v,选项);UU = [UU; U'];%更新工厂状态x = a * x + b(:,1:3)* u + b(:,4)* v;结尾

绘图并比较仿真结果

图1);CLF;子图(121)绘图(0:TS:TSTOP,[YY YSIM])网格标题('输出')子图(122)绘图(0:TS:TSTOP,[UU USIM])网格标题('输入'

仿真结果是相同的。

fprintf('\ n \ n \ ndifference mpc s万博1manbetximulink块和mpcmove模拟:%g',常态(UU-USIM)+常态(YY-YSIM));
MPC Simulink块与MPCMove模拟万博1manbetx之间的差异:5.16159E-11
bdclose(mdl);

也可以看看

相关话题