模型預測控制工具箱™ 软件允许您覆盖默认控制器状态估计方法。
为此,可以使用以下方法:
您可以覆盖默认的卡尔曼增益,和,使用setEstimator
作用要从控制器获取默认值,请使用getEstimator
.这些命令假设和以测量设备输出的工程单位表示。在内部,软件将其转换为无量纲形式。
您可以使用自定义估计选项,该选项跳过控制器内的所有卡尔曼增益计算。当控制器运行时,在每个控制间隔,您必须使用外部程序来估计控制器状态,并向控制器提供这些状态估计。
中不支持自定义状态估计金宝appMPC设计师。有关更多信息,请参阅控制器状态估计和实现与内置卡尔曼滤波器等效的自定义状态估计器.
考虑一个双积分器工厂的情况,其中所有的植物状态都是可测量的。在这种情况下,可以将测量的状态提供给MPC控制器而不是控制器估计状态。
线性开环对象模型是一个双积分器。
植物=tf(1[10]);
创建采样时间为的控制器对象0.1
秒,一个预测的地平线10
步骤和控制范围3.
步骤。
Ts=0.1;mpcobj=mpc(电厂,Ts,10,3);
-->“mpc”对象的“Weights.ManufacturedVariables”属性为空。“mpc”对象的“Weights.ManufacturedVariablesRate”属性为空。“mpc”对象的“Weights.OutputVariables”属性为空。假设默认值为1.00000。
指定驱动器饱和限制作为操纵变量约束。
mpcobj.MV=struct(“敏”,-1,“马克斯”1);
配置控制器以使用自定义状态估计。
setEstimator(mpcobj,“习俗”);
初始化变量以存储闭环响应。
Tf =圆(5 / Ts);YY = 0 (Tf, 1);UU = 0 (Tf, 1);
通过将模拟中使用的设备转换为离散时间模型并设置初始状态来准备该设备。
sys=c2d(ss(工厂),Ts);xsys=[0;0];
抓住机会mpcstate
对象,该对象用于存储控制器状态。
xmpc = mpcstate (mpcobj);
-->将“mpc”对象的“Model.Plant”属性转换为状态空间。-->将模型转换为离散时间。假设未向测量的输出通道#1。-->“mpc”对象的“Model.Noise”属性为空。假设每个测量的输出通道上都存在白噪声。
迭代模拟闭环响应使用mpcmove
作用
对于每个模拟步骤:
获得工厂产量,Y
,从当前状态。
存储设备输出。
在中设置设备状态mpcstate
对象设置为当前测量的状态值,xsys
,使用手柄xmpc
.对于状态不可测量的电厂,必须由观察员提供状态估计。使用内置估计器时,不需要这样做。
计算MPC控制动作,U
经过mpcstate
对象和输出引用,1.
.
存储控制信号。
更新设备状态。
对于t=0:tfy=sys.C*xsys;%植物方程式:产量YY (t + 1) = y;xmpc。工厂= xsys;%状态估计u=mpcmove(mpcobj,xmpc,[],1);%这是不需要的UU(t+1)=u;xsys=sys.A*xsys+sys.B*u;%植物方程:下一个状态终止
绘制仿真结果。
图子地块(2,1,1)图(0:Ts:5,YY)标题(“是的”)子地块(2,1,2)地块(0:Ts:5,UU)标题(“你”)
在Simulink中模拟线性对象模型的闭环控制。对于该模型,控制器金宝appmpcobj
在MPC控制器块中指定。
mdl=“mpc_customestimation”;开放式系统(mdl)sim卡(mdl)
MATLAB和Simulink仿真的闭环响应是相同的。金宝app
fprintf(“\n MATLAB和Simulink中的仿真之间的差异为%g\n”金宝app规范(UU-u));
MATLAB仿真与Simulink仿真的差异为4.1811e-14金宝app
关闭Simulink金宝app模型。
bdclose (mdl)