主要内容

生成代码并将控制器部署到实时目标

模型预测控制工具箱™软件为在MATLAB中设计的控制器提供代码生成功能®或仿真金宝app软件®

代码生成MATLAB

在MATLAB中设计MPC控制器后,可以使用C语言生成代码MATLAB编码器™并进行实时控制。

为隐式或显式线性MPC控制器生成计算最优MPC控制移动的代码:

  1. 从MPC控制器或显式MPC控制器生成数据结构getCodeGenerationData

  2. 要验证控制器是否产生了预期的闭环结果,请使用mpcmoveCodeGeneration代替mpcmove

  3. mpcmoveCodeGeneration使用codegen(MATLAB编码器).这个步骤需要MATLAB编码器软件

有关示例,请参见在MATLAB中生成代码来计算最优MPC移动

您还可以为使用默认值的非线性MPC控制器生成代码fminconSQP算法求解。生成计算非线性MPC控制器最优控制移动的代码:

  1. 从非线性MPC控制器生成数据结构使用getCodeGenerationData

  2. 要验证控制器是否产生了预期的闭环结果,请使用nlmpcmoveCodeGeneration代替nlmpcmove

  3. nlmpcmoveCodeGeneration使用codegen(MATLAB编码器).这个步骤需要MATLAB编码器软件

代码生成金宝app

在Simulink中使用任何MPC块设计控制器后,您可以生成代码金宝app并将其部署为实时控制。您可以将控制器部署到以下产品支持的所有目标:下载188bet金宝搏金宝app

  • 金宝app仿真软件编码器

  • 嵌入式编码器®

  • 金宝appSimulink PLC Coder™

  • 金宝app仿真软件实时™

您可以为任何模型预测控制工具箱Simulink块生成代码。金宝app

控制器类型
隐式MPC控制器

MPC控制器

显式MPC控制器

显式MPC控制器

增益调度MPC控制器

多MPC控制器

多个显式MPC控制器

自适应MPC控制器

自适应MPC控制器

汽车用MPC控制器

自适应巡航控制系统

车道保持辅助系统

路径跟踪控制系统

使用的非线性MPC控制器fmincon用SQP

非线性MPC控制器

多级非线性MPC控制器

有关生成代码的更多信息,请参见使用Simulink Coder进行仿真和代码生成金宝app而且使用Simulink PLC编码器进行仿真和结构化文本生成金宝app

请注意

MPC控制器显式MPC控制器自适应MPC控制器,非线性MPC控制器块是使用MATLAB函数(金宝app模型)块。要查看结构,右键单击块并选择面具>面具下的样子.然后,打开货币政策委员会子系统下面。

请注意

如果您的非线性MPC控制器使用可选参数,还必须为总线的创造者连接到参数个数接口输入端口非线性MPC控制器块。为此,放置非线性MPC控制器而且总线的创造者块,并为该子系统生成代码。

生成线性MPC控制器的CUDA代码

你可以生成CUDA®使用GPU Coder™的MPC控制器代码。有关支持的gpu的更多信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱).有关安装和设置必备产品的详细信息,请参见安装必备产品下载188bet金宝搏(GPU编码器)而且设置必备产品下载188bet金宝搏(GPU编码器)

在MATLAB中生成和使用GPU代码:

  1. 设计一个线性控制器货币政策委员会对象。

  2. 函数从线性MPC控制器生成核心、状态和在线数据的结构getCodeGenerationData函数。

  3. 控件迭代地模拟闭环(可选)mpcmoveCodeGeneration函数和在前一步中创建的数据结构。

  4. 对象创建编码器配置选项对象coder.gpuConfig函数,并配置代码生成选项。

  5. mpcmoveCodeGeneration函数使用codegen函数和编码器配置选项对象。这样做会生成一个使用GPU上运行的代码的新函数。

  6. 使用新生成的函数和数据结构模拟控制器。

有关在MATLAB中使用GPU代码的示例,请参见在MATLAB中使用GPU计算MPC移动

生成和使用图形处理器代码MPC控制器自适应MPC控制器,或显式MPC控制器块。

要从包含任何这些块的Simulink模型生成GPU代码,金宝app请单击打开“配置参数”对话框模型设置.然后,在代码生成部分中,选择生成GPU代码

有关如何为GPU代码生成配置模型的详细信息,请参见代码生成从Simulink模型与GPU编码金宝app器(GPU编码器)

实时环境中的采样率

控制器在实时环境中所能达到的采样率与系统有关。例如,对于一个典型的小型MIMO控制应用程序运行金宝app实时仿真软件线性MPC的采样时间可达1-10 ms,非线性MPC的采样时间可达100-1000 ms。为了确定采样时间,首先测试一个较低侵略性的控制器,其采样率对目标产生可接受的性能。其次,减少采样时间,监控控制器的执行时间。只要在工厂正常运行条件下,在每个采样周期内安全完成优化,就可以进一步减少采样时间。为了减少采样时间,还可以考虑使用:

  • 明确的政策委员会。虽然显式MPC控制器有更快的执行时间,但它们也有更大的内存占用,因为它们存储预先计算的控制律。有关更多信息,请参见显式MPC设计

  • 经过指定数量的最大求解迭代后的次优QP解决方案。有关更多信息,请参见次优QP解决方案

提示

较低的控制器采样时间不一定能提供更好的性能。事实上,你想要选择一个足够小的采样时间来提供良好的性能,但不能更小。对于相同的预测时间,较小的样本次数导致较大的预测步骤,从而产生更大的内存占用和更复杂的优化问题。

生成C代码的QP问题构造

在每个控制区间,隐式或自适应MPC控制器构造一个新的QP问题,定义为:

n x 1 2 x H x + f x

受线性不等式约束

一个 x b

在哪里

  • x是解向量。

  • H是黑森矩阵。

  • 一个是线性约束系数的矩阵。

  • f而且b是向量。

在生成的C代码中,使用以下矩阵来提供H一个f,b.根据MPC控制器的类型和配置,这些矩阵在每个控制间隔上都是常数或重新生成。

常数矩阵 大小 目的 隐性政策委员会 隐式MPC与在线权重调整 自适应MPC或LTV MPC
Hinv N——- - - - - -N 黑森矩阵的逆,H 常数 再生 再生
Linv N——- - - - - -N 的下三角Cholesky分解的逆H
交流 NC——- - - - - -N 线性约束系数,一个 常数
Kx Nxqp——- - - - - -N1) 用于生成f 再生
基米-雷克南 pNy——- - - - - -N1)
Ku1 Nmv——- - - - - -N1)
Kv N医学博士+ 1) * (p+ 1)——- - - - - -N1)
库特 pNmv——- - - - - -N1)
美林投资 NC1 用于生成b 常数 常量,除非存在自定义约束
Mx NC——- - - - - -Nxqp 再生
Mu1 NC——- - - - - -Nmv
Mv NC——- - - - - -N医学博士+ 1) * (p+ 1)

在这里:

  • p是预测视界。

  • Nmv是被操纵变量的数量。

  • N医学博士是测量扰动的数量。

  • Ny是输出变量的个数。

  • N为优化变量的数目(Nmv+1,在那里是控制视界)。

  • Nxqp为用于QP问题的状态数;即植物状态和扰动模型状态的总数。

  • NC是约束的总数。

在每个控制间隔,生成的C代码进行计算f而且b为:

f K x x + K r r p + K u 1 l + K v v p + K u t u t

b l + x x + u 1 l + v v p

在哪里

  • x为卡尔曼滤波估计的植物和扰动模型状态向量。

  • l是从上一个控制间隔移动的被操纵变量。

  • ut是被操纵的变量目标。

  • vp是跨越预测视界的测量扰动信号序列。

  • rp是横跨预测视界的参考信号序列。

请注意

在MATLAB中生成代码时,getCodeGenerationData命令生成这些矩阵并返回configData

自定义QP求解器的代码生成

您可以为线性MPC控制器生成代码,这些控制器使用C或MATLAB代码编写的自定义QP求解器。控制器在每个控制间隔调用这个求解器来代替内置的QP求解器。

有关示例,请参见用自定义QP求解器模拟和生成MPC控制器代码.有关自定义QP求解器的更多信息,请参见自定义QP求解器

有关使用FORCESPRO求解器的信息,请参见使用Embotech FORCESPRO求解器实现MPC控制器

另请参阅

功能

相关的话题