生成代码并将控制器部署到实时目标
模型预测控制工具箱™软件为在MATLAB中设计的控制器提供代码生成功能®或仿真金宝app软件®.
代码生成MATLAB
在MATLAB中设计MPC控制器后,可以使用C语言生成代码MATLAB编码器™并进行实时控制。
为隐式或显式线性MPC控制器生成计算最优MPC控制移动的代码:
从MPC控制器或显式MPC控制器生成数据结构
getCodeGenerationData
.要验证控制器是否产生了预期的闭环结果,请使用
mpcmoveCodeGeneration
代替mpcmove
.为
mpcmoveCodeGeneration
使用codegen
(MATLAB编码器).这个步骤需要MATLAB编码器软件
有关示例,请参见在MATLAB中生成代码来计算最优MPC移动.
您还可以为使用默认值的非线性MPC控制器生成代码fmincon
SQP算法求解。生成计算非线性MPC控制器最优控制移动的代码:
从非线性MPC控制器生成数据结构使用
getCodeGenerationData
.要验证控制器是否产生了预期的闭环结果,请使用
nlmpcmoveCodeGeneration
代替nlmpcmove
.为
nlmpcmoveCodeGeneration
使用codegen
(MATLAB编码器).这个步骤需要MATLAB编码器软件
代码生成金宝app
在Simulink中使用任何MPC块设计控制器后,您可以生成代码金宝app并将其部署为实时控制。您可以将控制器部署到以下产品支持的所有目标:下载188bet金宝搏金宝app
金宝app仿真软件编码器
嵌入式编码器®
金宝appSimulink PLC Coder™
金宝app仿真软件实时™
您可以为任何模型预测控制工具箱Simulink块生成代码。金宝app
控制器类型 | 块 |
---|---|
隐式MPC控制器 | |
显式MPC控制器 | |
增益调度MPC控制器 | |
自适应MPC控制器 | |
汽车用MPC控制器 | |
使用的非线性MPC控制器fmincon 用SQP |
有关生成代码的更多信息,请参见使用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代码:
设计一个线性控制器
货币政策委员会
对象。函数从线性MPC控制器生成核心、状态和在线数据的结构
getCodeGenerationData
函数。控件迭代地模拟闭环(可选)
mpcmoveCodeGeneration
函数和在前一步中创建的数据结构。对象创建编码器配置选项对象
coder.gpuConfig
函数,并配置代码生成选项。为
mpcmoveCodeGeneration
函数使用codegen
函数和编码器配置选项对象。这样做会生成一个使用GPU上运行的代码的新函数。使用新生成的函数和数据结构模拟控制器。
有关在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。为了确定采样时间,首先测试一个较低侵略性的控制器,其采样率对目标产生可接受的性能。其次,减少采样时间,监控控制器的执行时间。只要在工厂正常运行条件下,在每个采样周期内安全完成优化,就可以进一步减少采样时间。为了减少采样时间,还可以考虑使用:
提示
较低的控制器采样时间不一定能提供更好的性能。事实上,你想要选择一个足够小的采样时间来提供良好的性能,但不能更小。对于相同的预测时间,较小的样本次数导致较大的预测步骤,从而产生更大的内存占用和更复杂的优化问题。
生成C代码的QP问题构造
在每个控制区间,隐式或自适应MPC控制器构造一个新的QP问题,定义为:
受线性不等式约束
在哪里
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——- - - - - -(N米1) | 用于生成f | 再生 | ||
基米-雷克南 |
p*Ny——- - - - - -(N米1) | ||||
Ku1 |
Nmv——- - - - - -(N米1) | ||||
Kv |
(N医学博士+ 1) * (p+ 1)——- - - - - -(N米1) | ||||
库特 |
p*Nmv——- - - - - -(N米1) | ||||
美林投资 |
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为:
在哪里
x问为卡尔曼滤波估计的植物和扰动模型状态向量。
米l是从上一个控制间隔移动的被操纵变量。
ut是被操纵的变量目标。
vp是跨越预测视界的测量扰动信号序列。
rp是横跨预测视界的参考信号序列。
请注意
在MATLAB中生成代码时,getCodeGenerationData
命令生成这些矩阵并返回configData
.
自定义QP求解器的代码生成
您可以为线性MPC控制器生成代码,这些控制器使用C或MATLAB代码编写的自定义QP求解器。控制器在每个控制间隔调用这个求解器来代替内置的QP求解器。
有关示例,请参见用自定义QP求解器模拟和生成MPC控制器代码.有关自定义QP求解器的更多信息,请参见自定义QP求解器.
有关使用FORCESPRO求解器的信息,请参见使用Embotech FORCESPRO求解器实现MPC控制器.