主要内容

在运行时调整MPC控制器权重

这个例子展示了如何使用Simulink®或在运行时改变输出、输入和ECR松弛变量的权重,以获得软约束金宝appmpcmove

在MPC对象中指定的权重将被提供给MPC控制器块的权重覆盖。如果一个权重信号没有连接到MPC控制器块,那么相应的权重是在MPC对象中指定的。

定义植物模型

定义一个多变量离散线性系统,没有直接I/O馈通,并假设输入#4是一个测量的扰动,输出#4是不可测量的。

Ts = 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]});plant = c2d(ss(plant),Ts);工厂。D = 0;%显示植物大小。大小(植物)
具有4个输出、4个输入和17个状态的状态空间模型。

MPC控制器设计

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

植物= setmpcsignals(植物,“医学博士”4“UO”4);创建具有采样周期、预测和控制的控制器对象%的视野:P = 20;%预测水平M = 3;%控制水平mpcobj = mpc(plant,Ts,p,m);请注意,输入、输入速率和输出的默认权重都是假设的
——>假设未指定的输入信号是被操纵的变量。——>假设未指定的输出信号是测量输出。- - - >“权重。属性为空。假设默认值为0.00000。- - - >“权重。属性为空。假设默认为0.10000。- - - >“权重。OutputVariables属性为空。 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 = struct(“时间”(0: Ts: Tstop) ');N = number (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);

使用Simulink®进行模拟金宝app

开始仿真。

mdl =“mpc_onlinetuning”;open_system (mdl);打开Simul金宝appink(R)模型sim (mdl);%开始模拟
假设添加到测量输出通道#1的输出扰动是集成白噪声。假设添加到测量输出通道#2的输出扰动是集成白噪声。假设添加到测量输出通道#3的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。

使用MPCMOVE命令模拟

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

[A,B,C,D] = ssdata(植物);x = 0 (size(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 = C*x+D(:,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),ref,v,options);UU = [UU;u'];更新工厂状态x = A*x + B(:,1:3)*u + B(:,4)*v;结束

绘制并比较模拟结果。

图(1);clf;subplot(121) plot(0:Ts:Tstop,[YY ysim])“输出”) subplot(122) plot(0:Ts:Tstop,[UU usim])“输入”

比较输入和输出信号。

规范(UU-usim)规范(YY-ysim)%结果除了数值错误外是相同的。
Ans = 4.1345e-11 Ans = 8.7018e-12
bdclose (mdl);

另请参阅

相关的话题