模型预测控制工具箱™软件为Matlab设计的控制器提供代码生成功能®或者模万博1manbetx拟®。
在MATLAB中设计MPC控制器后,您可以使用C代码使用Matlab Coder™并部署它以进行实时控制。
要生成用于计算最佳MPC控制的代码,用于隐式或显式线性MPC控制器的移动:
从MPC控制器或使用显式MPC控制器生成数据结构getcodegenerationData.
。
要验证控制器是否产生预期的闭环结果,请使用它mpcmovecodegeneration.
代替MPCMOVE.
。
生成代码mpcmovecodegeneration.
使用Codegen.
(MATLAB编码器)。这一步需要Matlab编码器软件。
例如,看到生成代码来计算Matlab中的最佳MPC移动。
您还可以为使用默认值生成非线性MPC控制器的代码粉刺
具有SQP算法的求解器。为了生成用于计算非线性MPC控制器的最佳控制的代码:
使用非线性MPC控制器生成数据结构getcodegenerationData.
。
要验证控制器是否产生预期的闭环结果,请使用它nlmpcmovecodegeneration.
代替nlmpcmove.
。
生成代码nlmpcmovecodegeneration.
使用Codegen.
(MATLAB编码器)。这一步需要Matlab编码器软件。
在使用任何MPC块中设计Simulink中的控制器后,您可以生成万博1manbetx代码并部署它以进行实时控制。您可以将控制器部署到以下产品支持的所有目标:s manbetx 845万博1manbetx
万博1manbetxSimulink编码器
嵌入式编码器®
万博1manbetxSimulink PLC编码器™
万博1manbetxSimulink Real-Time™
您可以为任何模型预测控制工具箱Simulink块生成代码。万博1manbetx
控制器的类型 | 块 |
---|---|
隐式MPC控制器 | |
显式MPC控制器 | |
增益预定的MPC控制器 | |
自适应MPC控制器 | |
MPC控制器用于汽车应用 | |
非线性MPC控制器使用粉刺 与SQP. |
有关生成代码的更多信息,请参阅使用Simulink编码器的仿真和代码生成万博1manbetx和使用Simulink PLC编码器模拟和结构化文本生成万博1manbetx。
笔记
这MPC控制器那显式MPC控制器那自适应MPC控制器, 和非线性MPC控制器块使用该块使用Matlab功能(万博1manbetxSimulink)堵塞。要查看结构,请右键单击该块,然后选择面具>看看面膜。然后,打开MPC.下面的子系统。
笔记
如果您的非线性MPC控制器使用可选参数,您还必须生成代码公共汽车创造者块连接到参数输入端口非线性MPC控制器堵塞。要这样做,放置非线性MPC控制器和公共汽车创造者子系统内的块,并为该子系统生成代码。
你可以生成cuda®使用GPU Coder™的MPC控制器代码。有关支持的GPU的更多信息,请参阅万博1manbetxGPU通万博1manbetx过发布支持(并行计算工具箱)。有关安装和设置先决条件的更多信息,请参阅安装先决品产品s manbetx 845(GPU编码器)和设置先决条件产品s manbetx 845(GPU编码器)。
要在MATLAB中生成和使用GPU代码:
使用一个设计线性控制器MPC.
目的。
使用Linear MPC控制器生成核心,状态和在线数据的结构getcodegenerationData.
功能。
可选地使用迭代地模拟闭环mpcmovecodegeneration.
函数和上一步中创建的数据结构。
使用该选项对象创建编码器配置选项对象Coder.gpuconfig.
功能,配置代码生成选项。
为此生成代码mpcmovecodegeneration.
使用函数Codegen.
函数和编码器配置选项对象。这样做生成一个新功能,它使用GPU上运行的代码。
使用新生成的函数和数据结构模拟您的控制器。
有关在MATLAB中使用GPU代码的示例,请参阅使用GPU在Matlab中计算MPC移动
您可以从中生成和使用GPU代码MPC控制器那自适应MPC控制器, 或者显式MPC控制器块。
要从包含任何这些块中的任何一个Simulink模型生成G万博1manbetxPU代码,请单击“打开”配置参数“对话框对话框模型设置。然后,在里面代码生成部分,选择生成GPU代码。
有关如何为GPU代码生成配置模型的详细信息,请参阅使用GPU编码器的Simulink模型生成万博1manbetx代码(GPU编码器)。
控制器可以在实时环境中实现的采样率是系统依赖的。例如,对于运行典型的小MIMO控制应用程序万博1manbetxSimulink实时,采样时间可以是线性MPC的1-10 ms,对于非线性MPC为100-1000 ms。为了确定采样时间,首先测试一个较少的激进控制器,其采样率在目标上产生可接受的性能。接下来,降低采样时间并监视控制器的执行时间。只要在正常植物操作条件下,优化在每个采样期内完全完成优化时,您可以进一步降低采样时间。要减少采样时间,还可以考虑使用:
小费
较低的控制器采样时间不一定提供更好的性能。事实上,您想选择足够小的采样时间,以为您提供良好的性能,但没有更小。对于相同的预测时间,更小的采样时间导致更大的预测步骤,这反过来产生更大的存储空间和更复杂的优化问题。
在每个控制间隔处,隐式或自适应MPC控制器构造一个新的QP问题,它被定义为:
受线性不等式限制
在哪里
X是解决方案矢量。
H是黑森州的矩阵。
一种是线性约束系数的矩阵。
F和B.是矢量。
在生成的C代码中,使用以下矩阵来提供H那一种那F, 和B.。根据MPC控制器的类型和配置,这些矩阵在每个控制间隔处是恒定的或再生。
恒定矩阵 | 尺寸 | 目的 | 隐含MPC | 具有在线权重调整的隐式MPC | 自适应MPC或LTV MPC |
---|---|---|---|---|---|
Hinv. |
Nm-经过-Nm | 黑森州矩阵的逆转,H | 不变 | 再生 | 再生 |
Linv. |
Nm-经过-Nm | 逆三角形尖弦分解的反向H | |||
AC. |
NC-经过-Nm | 线性约束系数,一种 | 不变 | ||
kx. |
NXQP.-经过-(Nm-1) | 用来生成F | 再生 | ||
kr. |
P.*Ny-经过-(Nm-1) | ||||
ku1. |
Nm-经过-(Nm-1) | ||||
kv. |
(Nm+1)*(P.+1)-经过-(Nm-1) | ||||
kut. |
P.*Nm-经过-(Nm-1) | ||||
MLIM |
NC-By-1 | 用来生成B. | 不变 | 常量,除了有自定义约束 | |
MX. |
NC-经过-NXQP. | 再生 | |||
mu1. |
NC-经过-Nm | ||||
m |
NC-经过-(Nm+1)*(P.+1) |
这里:
P.是预测的地平线。
Nm是操纵变量的数量。
Nm是测量障碍的数量。
Ny是输出变量的数量。
Nm是优化变量的数量(m*Nm+1, 在哪里m是控制地平线)。
NXQP.是用于QP问题的状态数量;也就是说,植物状态和扰动模型国家的总数。
NC是限制的总数。
在每个控制间隔处,所生成的C代码计算F和B.作为:
在哪里
X问:是卡尔曼滤波器估计的植物和干扰模型国家的载体。
mL.是操纵变量从先前的控制间隔移动。
你T.是操纵的可变目标。
V.P.是跨越预测地平线的测量干扰信号的序列。
R.P.是跨预测地平线的参考信号的序列。
笔记
在MATLAB中生成代码时,getcodegenerationData.
命令生成这些矩阵并返回它们configdata.
。
您可以为使用C或MATLAB代码中写入的自定义QP求解器生成线性MPC控制器的代码。控制器调用此求解器代替每个控制间隔的内置QP求解器。
例如,看到使用自定义QP求解器模拟和生成MPC控制器的代码。有关自定义QP求解器的更多信息,请参阅定制QP求解器。
有关使用强制专业求解器的信息,请参阅使用Embotech Forces Pro Solvers实现MPC控制器。