这个例子展示了如何设计一个模型预测控制器与前瞻(预览)的参考和测量扰动轨迹。
将对象模型定义为具有两个输入(一个操纵变量和一个测量扰动)和一个输出的线性时不变系统。
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控制器表现为线性控制器。你可以得到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'},'地点','东南');网格
要运行此示例,需要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')