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