模型预测控制工具箱™软件允许您覆盖默认的控制器状态估计方法。
要做到这一点,可以使用以下方法:
你可以覆盖默认的卡尔曼增益,和,使用setEstimator
函数。获取控制器使用的默认值getEstimator
.这些命令假设和均在工程单位测量的工厂产出。在内部,软件将它们转换为无量纲形式。
您可以使用自定义估计选项,它跳过控制器内的所有卡尔曼增益计算。当控制器运行时,在每个控制间隔,您必须使用一个外部过程来估计控制器的状态,并将这些状态估计提供给控制器。
中不支持自定义状态估计万博1manbetxMPC设计师.有关更多信息,请参见控制器状态估计和实现自定义状态估计相当于内置卡尔曼滤波器.
考虑一个双积分器装置的情况,该装置的所有状态都是可测量的。在这种情况下,您可以向MPC控制器提供测量到的状态,而不是让控制器估计状态。
线性开环植物模型是一个双积分器。
Plant = tf(1,[1 0 0]);
创建采样时间为的控制器对象0.1
秒,一个预测的地平线10
步骤,并控制地平线3.
步骤。
t = 0.1;mpcobj = mpc(3)植物,Ts, 10日;
- - - >“权重。mpc对象的操纵变量属性为空。假设默认的0.00000。- - - >“权重。mpc对象的操控变量率属性为空。假设默认的0.10000。- - - >“权重。mpc对象的属性为空。假设默认的1.00000。
指定驱动器饱和限制作为操纵变量约束。
mpcobj。MV =结构(“最小值”, 1“马克斯”1);
配置控制器以使用自定义状态估计。
setEstimator (mpcobj“自定义”);
初始化变量以存储闭环响应。
Tf =圆(5 / Ts);YY = 0 (Tf, 1);UU = 0 (Tf, 1);
通过将其转换为离散时间模型并设置初始状态来准备在模拟中使用的设备。
sys =汇集(ss(植物),Ts);xsys = (0, 0);
弄个把手mpcstate
对象,该对象用于存储控制器状态。
xmpc = mpcstate (mpcobj);
- - - >转换”模型。将“mpc”对象的“属性”放入状态空间。——>模型转换为离散时间。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
迭代模拟闭环响应使用mpcmove
函数。
对于每个模拟步骤:
获得植物的产量,y
,从当前状态。
储存工厂的产出。
属性中设置植物状态mpcstate
对象的当前测量状态值,xsys
,使用手柄xmpc
.对于状态不可测量的植物,状态估计必须由观察者提供。当使用内置估计器时,这是不需要的。
计算MPC控制动作,u
经过mpcstate
对象和输出引用,1
.
存储控制信号。
更新植物状态。
为t = 0:Tf y = sys.C*xsys;%植物方程:输出YY (t + 1) = y;xmpc。工厂= xsys;%状态估计u = mpcmove (mpcobj xmpc, [], 1);% y不需要UU (t + 1) = u;xsys =系统。* xsys + sys.B * u;%植物方程:下一个状态结束
绘制仿真结果。
图subplot(2,1,1) plot(0:Ts:5,YY) title(“y”) subplot(2,1,2) plot(0:Ts:5,UU) title(“u”)
在Simulink中对线性被控对象模型进行闭环控制仿真。万博1manbetx对于这个模型,控制器mpcobj
在MPC Controller块中指定。
mdl =“mpc_customestimation”;open_system (mdl) sim (mdl)
MATLAB和Simulink仿真的闭环响应是相同的。万博1manbetx
流(MATLAB仿真与Simulink仿真的区别是%g\n'万博1manbetx规范(UU-u));
MATLAB仿真与Simulink仿真的差异为4.1811e-14万博1manbetx
关闭Simulink万博1manbetx模型。
bdclose (mdl)