校正控制权

此示例示出了如何改变上的输出,输入,和ECR松弛变量的权重用于在实时的软约束。

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

定义工厂模型

/定义一个多变量的离散时间线性系统,不直接I O馈通,以及假设输入#4是一个测量的干扰和输出#4是不可测量的。

TS = 0.1;%采样时间植物= TF({1,[1 1],5,2; 3,[1 5],1,0; 0,0,1,[11]; 2,[1-1],0,0},...{[1 1 1],[1 3 4 5],[1 10],[1 5];[1 1],[1 2],[1 2 8],[1 1];[1 2 1],[1 3 1 1],[1 1],[1 2];[1 1],[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”对象的“We​​ights.ManipulatedVariables”属性是空的。假设默认0.00000。- >“MPC”对象的“We​​ights.ManipulatedVariablesRate”属性是空的。假设默认0.10000。- >“MPC”对象的“We​​ights.OutputVariables”属性是空的。假设默认1.00000。输出(S)Y1 Y2 Y3和零权重输出(一个或多个)Y4

指定MV约束。

mpcobj.MV(1).Min = -6;mpcobj.MV(1)最大= 6;mpcobj.MV(2).Min = -6;mpcobj.MV(2)最大= 6;mpcobj.MV(3).Min = -6;mpcobj.MV(3)最大= 6;

模拟使用的Simulink金宝app

要运行这个例子,Simulink®的需要。金宝app

如果〜mpcchecktoolboxinstalled('金宝appSIMULINK')DISP(的金宝appSimulink(R)需要运行这个例子“。返回结束%定义参考信号。TSTOP = 10;REF = [1 0 3 1];R =结构('时间',(0:TS:TSTOP)');N = numel(r.time);r.signals.values =酮(N,1)* REF;

定义测量的干扰。

V = 0.5;

OV权重随时间线性增加,除了输出#2没有被加权。

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

MVRate权重随时间线性递减。

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

ECR重量随时间呈指数增加。

ECRwt.time = r.time;ECRwt.signals.values = 10 ^(2 +(1:N)'/ N)。

开始模拟。

MDL ='mpc_onlinetuning';open_system(MDL);%开放的Sim金宝appulink(R)模型SIM(MDL);%开始模拟
- >加入到测量的输出信道#1假设输出干扰被集成白噪声。- >加入到测量的输出信道#2假设输出干扰被集成白噪声。- >加入到测量的输出信道#3。假设输出干扰被集成白噪声。- >的“MPC”对象的“Model.Noise”属性是空的。假设在每个测得的输出信道的白噪声。

模拟使用MPCMOVE命令

定义实际设备和MPC状态对象。

[A,B,C,d] = SSDATA(植物);X =零(大小(plant.B,1),1);%的植物的初始状态xmpc = mpcstate(mpcobj);%MPC控制器的初始状态

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

YY = [];UU = [];XX = [];

使用MPCMOVEOPT目的是提供一种在运行时的权重。

选项= mpcmoveopt;

开始模拟。

对于T = 0:N-1,%存储的状态XX = [XX,X];%#确定<* AGROW>%计算电站输出(没有来自MV馈通到Y)Y = C * X + d(:,4)* V;YY = [YY; Y'];%获取参考信号REF = r.signals.values(T + 1,:)';与运行时的权重%更新MPCMOVEOPT对象options.MVRateWeight = duwt.signals.values(T + 1,:);options.OutputWeight = ywt.signals.values(T + 1,:);options.ECRWeight = ECRwt.signals.values(T + 1,:);%计算控制动作U = mpcmove(mpcobj,xmpc,Y(1:3),参考文献,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 \ nDifference MPC Simul金宝appink模块和MPCMOVE模拟之间:%G',范数(UU-USIM)+范数(YY-ysim));
MPC Simulink模块和MPCMOVE模金宝app拟之间差:5.16159e-11
bdclose(MDL);

也可以看看

相关话题