主要内容

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

这个例子展示了如何改变在运行时软约束的输出、输入和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个状态的状态空间模型。

MPC控制器设计

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

植物= 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);

使用仿真软件模拟®金宝app

开始仿真。

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

使用MPCMOVE命令进行模拟

定义真实的植物和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);

另请参阅

相关的话题