此示例示出了如何改变上的输出,输入,和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;
指定的输入和输出信号的类型。
植物= setmpcsignals(植物,'MD'4,'UO',4);%创建具有采样周期,预测和控制控制器对象%视野:P = 20;%的预测范围M = 3;%控制范围mpcobj = MPC(植物中,Ts,P,M);
- >假设未指定的输入信号被操纵变量。- >假设未指定的输出信号被测量的输出。- >“MPC”对象的“Weights.ManipulatedVariables”属性是空的。假设默认0.00000。- >“MPC”对象的“Weights.ManipulatedVariablesRate”属性是空的。假设默认0.10000。- >“MPC”对象的“Weights.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
如果〜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”属性是空的。假设在每个测得的输出信道的白噪声。
定义实际设备和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);