主要内容

通过展望提高控制性能(预览)

这个例子展示了如何设计一个模型预测控制器与前瞻(预览)的参考和测量扰动轨迹。

定义植物模型

将对象模型定义为具有两个输入(一个操纵变量和一个测量扰动)和一个输出的线性时不变系统。

ss(tf({1,1},{[1,5 1],[1 1]}),“最小值”);

获取工厂模型的状态空间矩阵,设置0.2 s的采样时间,获取离散时间矩阵,并指定初始条件。

[A, B, C, D] = ssdata(植物);连续时间ss实现t = 0.2;%采样时间[广告,BD,CD,DD] = SSDATA(C2D(植物,TS));%离散时间SS实现x0 = [0; 0; 0];%初始条件

设计模型预测控制器

定义输入信号类型。

植物= setmpcsignals(植物,“MV”,1,'MD',2);

创造MPC.目的。

p = 20;%预测地平线m = 10;%控制地平线mpcobj = mpc(植物、t、p、m);%指定MV约束。mpcobj。MV =结构(“最小值”,0,“马克斯”,2);%指定权重mpcobj。重量=结构(“MV”,0,“MVRate”, 0.1,'输出',1);
- - - >“权重。mpc对象的操纵变量属性为空。假设默认的0.00000。- - - >“权重。mpc对象的操控变量率属性为空。假设默认的0.10000。- - - >“权重。mpc对象的属性为空。假设默认的1.00000。

使用sim卡命令

Tstop = 30;%的模拟时间。时间=(0:TS :( tstop + p * ts))';%时间向量双(时间> r = 10);%的参考信号v =总价值(> 20);被测干扰信号百分比

使用mpcsimopt.对象在闭环模拟中打开预览功能。

params = mpcsimopt (mpcobj);参数个数。MDLookAhead =“上”;参数个数。RefLookAhead =“上”

在MATLAB®中使用MPC工具箱进行仿真sim卡命令。

YY1 = sim (mpcobj Tstop / Ts + 1, r, v, params);
- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。

模拟使用mpcmove命令

创建数组以存储闭环输出。

YY2 = [];%创建变量来存储设备和控制器的当前状态x = x0;%初始植物状态xmpc = mpcstate(mpcobj);指向当前控制器状态的指针

开始仿真环路

CT = 0:圆形(TSTOP / TS)%植物方程:输出更新y = C*x + D(:,2)*v(ct+1);%存储输出信号YY2 = [YY2,Y];%#OK <* AGROW>%计算MPC定律。提取文献r(t+1),r(t+2),…,r(t+p)和%测量扰动v(t),v(t+1),…,v(t+p)用于预览。u = mpcmove (mpcobj xmpc y r (ct + 2: ct + p + 1), v (ct + 1: ct + p + 1));%植物方程式:状态更新X = AD * X + BD(:,1)* U + BD(:,2)* v(CT + 1);结束

情节结果。

图t = 0:Ts:Tstop;情节(t, r(1:长度(t)),'C:'t YY1的r -t YY2'博');包含(“时间”);ylabel (“植物输出”);传奇({'参考'“从sim命令”'来自mpcmove命令'},'地点''东南');网格

答案是相同的。

最优预测轨迹由mpcmove.假设从当前状态开始,并且在5个步骤中将设定点更改为0.5,并且假设测量的干扰已经消失。

r1 = [α(5,1); 0.5 * on(p-5,1)];v1 =零(p + 1,1);[〜,INFO] = MPCMOVE(MPCOBJ,XMPC,Y,R1(1:P),V1(1:P + 1));

提取最优预测轨迹并绘制它们。

topt = Info.Topt;yopt = Info.Yopt;uopt = Info.Uopt;图次要情节(211)标题('最佳序列的预测输出')楼梯(topt yopt);网格轴([0 p*Ts -2 2]);次要情节(212)标题('被操纵变量的最佳序列')楼梯(topt uopt);轴([0 p*Ts -2 2]);网格

通过预览获得MPC控制器的LTI表示

当约束不主动时,MPC控制器表现为线性控制器。你可以得到MPC控制器的状态空间形式,用y, [r(t+1);r(t+2);…;r(t+p)]和[v(t);v(t+1);…;v(t+p)]作为控制器的输入。

获取线性化控制器的状态空间矩阵。

lti = ss(mpcobj,“房车”“上”“上”);[al,bl,cl,dl] = ssdata(lti);

创建一个数组来存储闭环输出。

YY3 = [];MPC控制器的%设置初始状态x = x0;xl = [x0; 0; 0];

启动主模拟回路

CT = 0:圆形(TSTOP / TS)%植物产量更新Y = CD * x + DD(:,2)* v(CT + 1);%保存输出和refs值YY3 = [YY3 y];%计算线性MPC控制操作u = CL*xL + DL*[y;r(ct+2:ct+p+1);v(ct+1:ct+p+1)];%注意MPC提供的最佳移动将是:mpcmove(MPCobj,xmpc,y,ref(t+2:t+p+1),v(t+1:t+p+1));%工厂更新x = Ad*x + Bd(:,1)*u + Bd(:,2)*v(ct+1);%控制器更新xL = AL * xL +提单* [y; r (ct + 2: ct + p + 1); v (ct + 1: ct + p + 1)];结束

情节结果。

图绘制(t, r(1:长度(t)),'C:'t YY3的r -);包含(“时间”);ylabel (“植物输出”);传奇({'参考''不受约束的MPC'},'地点''东南');网格

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

要运行此示例,需要Simulink®。金宝app

如果~ mpcchecktoolboxinstalled (“金宝app模型”)disp(运金宝app行这个示例需要Simulink(R)。返回结束时间=(0:TS :( tstop + p * ts))';%时间向量双(时间> r = 10);%的参考信号v =总价值(> 20);被测干扰信号百分比%定义了结构中的参考信号ref.time =时间;ref.signals.values = r;定义被测扰动md.time =时间;md.signals.values = v;%打开Simu金宝applink模型mdl ='mpc_preview';Open_System(MDL)%使用simulink模拟模型sim |金宝app命令SIM(MDL,TSTOP);

情节结果。

图t = 0:Ts:Tstop;情节(t, r(1:长度(t)),'C:'t YY1的r -t YY2'博't伊夫圣罗兰'GX');包含(“时间”);ylabel (“植物输出”);传奇({'参考'“从sim命令”'来自mpcmove命令''从Simu金宝applink'},'地点''东南');网格

答案是相同的。

bdclose ('mpc_preview'

另请参阅

|

相关话题