对于隐式和自适应MPC控制器,您可以在控制器运行时调整预测和控制范围。这样做对以下方面很有用:
在原型开发期间,有效地评估不同的水平选择
调整水平,而不重新部署后,工厂动态变化明显,如在一个批处理过程
要在运行时从命令行调整范围,请在每个控制间隔上指定mpcmoveopt
对象。
PredictionHorizon
-运行时预测地平线信号,指定为正整数
ControlHorizon
-运行时控制水平信号,指定为正整数或正整数的向量
然后你可以通过mpcmoveopt
对象是mpcmove
或mpcmoveAdaptive
。
在仿真金宝app软件®,以调整地平线的角度MPC控制器或自适应MPC控制器块,选择在运行时调整预测层和控制层参数。这样做会将以下输入端口添加到块中:
p
-运行时预测地平线信号,指定为标量整数信号
米
-运行时控制水平信号,指定为标量或向量信号
方法指定最大预测范围最大预测地平线参数。这样做可以确保块的最佳序列输出端口(mv.seq
,x.seq
,y.seq
)有固定的尺寸p马克斯+ 1行,p马克斯为最大预测层。
运行时水平调优在两个MATLAB中都支持代码生成金宝app®和仿真软金宝app件。为支持运行时视界更改的控制器生成代码允许您在部署的控制器硬件上调优视界值。金宝app
在调优地平线值之后,为了提高最终部署的控制器的计算效率,可以使用调优后的值为恒定地平线控制器生成代码。
部署启用了运行时水平调优的控制器会显著增加MPC应用程序的计算负载和内存占用。如果您计划仅在原型中使用运行时水平调优来查找合适的水平值,那么在调优之后,请确保禁用此功能。然后,您可以使用调优后的值使用一个恒视距控制器来生成代码。
如果您的控制器使用了被操纵的变量阻塞,并且您为控制器生成了代码,那么控制水平向量的大小必须在运行时保持不变。在这种情况下,您仍然可以在控制范围内调整值。
要为使用运行时水平调优的控制器生成代码,部署的硬件目标必须支持动态内存分配。金宝app例如,如果您的嵌入式系统不支持金宝appmalloc
函数,那么生成的代码将不会运行。
若要在MATLAB中生成代码,请设置“UseVariableHorizon”
名称-值对的getCodeGenerationData
来真正的
。在每个控制间隔,您可以在调用之前指定地平线mpcmoveCodeGeneration
。
[configData, stateData onlineData] = getCodeGenerationData (mpcobj,“UseVariableHorizon”,真正的);...onlineData.Horizons。p = 10;onlineData.Horizons。m = 3;[u, stateData] = mpcmoveCodeGeneration (configData, stateData onlineData);
如果您的应用程序使用在预测范围内变化的控制器参数,那么在运行时调整预测范围将影响这些时变参数的行为。
如果在控制器对象中定义时变约束,则预测范围内约束的概要不会在运行时更改。如果您的运行时预测地平线值Pr是:
大于控制器中指定的约束配置文件的长度,则控制器将约束配置文件的最终值用于预测范围的其余部分
如果长度小于控制器中指定的约束配置文件的长度,则控制器将随后截断约束配置文件Pr步骤
有关调整约束的更多信息,请参见在运行时更新约束。
要在运行时更改调优权重,可以指定权重数组,其中行数不能超过预测范围的长度。如果在运行时调整预测范围,那么最佳实践是调整调优权重数组中的行数,使之与新的范围值一致。
如果不调整调优权值数组的大小,则行数将以类似于时变约束概要文件长度的方式进行扩展或截断。
有关调优权重的更多信息,请参见在运行时调整权重。
对于线性时变MPC控制器,在预测范围内改变工厂模型和标称条件。如果您在运行时调整预测层,那么最好也调整时变模型和标称条件数组的长度,使之与新的层值一致。
如果不调整模型和标称条件数组的长度,则数组将以类似于时变约束配置文件的方式进行扩展或截断。
有关线性时变MPC的更多信息,请参见时变MPC。