这个例子展示了如何改变在运行时软约束的输出、输入和ECR松弛变量的权重,使用Simulink®或金宝appmpcmove
.
MPC对象中指定的权重将被提供给MPC Controller块的权重覆盖。如果权重信号没有连接到MPC Controller块,则相应的权重是MPC对象中指定的。
定义一个没有直接I/O馈通的多变量离散时间线性系统,并假设输入#4是一个测量到的扰动,而输出#4是未测量到的。
t = 0.1;%采样时间植物特遣部队(= {1 [1]5 2;3,[1 - 5],1,0,0,0,1,[1];2,[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],[1 10],[1 1]});工厂=汇集(ss(植物),Ts);工厂。D = 0;%显示工厂大小。大小(植物)
有4个输出,4个输入,17个状态的状态空间模型。
指定输入和输出信号类型。
植物= setmpcsignals(植物,“医学博士”4“UO”4);%创建具有采样周期、预测和控制的控制器对象%的视野:p = 20;%预测地平线m = 3;%控制地平线mpcobj = mpc(植物、t、p、m);%注意,默认权重是在输入、输入速率和输出上假定的
——>假设未指定的输入信号是被操纵的变量。——>假设测量输出信号未指定。- - - >“权重。mpc对象的操纵变量属性为空。假设默认的0.00000。- - - >“权重。mpc对象的操控变量率属性为空。假设默认的0.10000。- - - >“权重。mpc对象的属性为空。 Assuming default 1.00000. for output(s) y1 y2 y3 and zero weight for output(s) y4
指定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;
定义参考信号。
Tstop = 10;Ref = [1 0 3 1];r =结构(“时间”(0: Ts: Tstop) ');N =元素个数(r.time);r.signals.values = (N - 1) *的裁判;
定义测量的干扰。
v = 0.5;
OV权值随时间线性增加,除了输出#2没有加权。
ywt。时间= r.time;ywt.signals.values = (1: N) *(。1 0 .1 .1];
MV率权值随时间线性减小。
duwt。时间= r.time;duwt.signals.values = (1 - (1: N) / 2 / N)‘*(。1。1。1);
ECR重量随时间呈指数增长。
ECRwt。时间= r.time;ECRwt.signals.values = 10 ^ (2 + (1: N) / N);
开始仿真。
mdl =“mpc_onlinetuning”;open_system (mdl);%打开Simu金宝applink(R)模型sim (mdl);%开始模拟
——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。——>假设添加到测量输出通道#3的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
定义真实的植物和MPC状态对象。
[A, B, C, D] = ssdata(植物);x = 0(大小(plant.B, 1), 1);%植物的初始状态xmpc = mpcstate (mpcobj);% MPC控制器的手柄状态
将闭环MPC轨迹存储在YY,UU,XX数组中。
YY = [];UU = [];XX = [];
使用mpcmoveopt
对象以在运行时提供权重。
选择= mpcmoveopt;
开始仿真。
为t = 0: n - 1,%存储状态XX = (XX, x);% #好< * AGROW >计算和存储工厂输出(从MV到Y无馈通)y = x + D C * (:, 4) * v;YY = (YY; y ');获取参考信号ref = r.signals.values (t + 1:) ';%使用运行时权重更新|mpcmoveopt|对象选项。: MVRateWeight = duwt.signals.values (t + 1);选项。: OutputWeight = ywt.signals.values (t + 1);选项。: 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;subplot(121) plot(0:Ts:Tstop,[YY ysim]) grid title(“输出”) subplot(122) plot(0:Ts:Tstop,[UU usim]) grid title(“输入”)
比较输入和输出信号。
规范(UU-usim)规范(YY-ysim)除数值误差外,结果完全相同。。
Ans = 4.2786e-11 Ans = 8.8298e-12
bdclose (mdl);