Mathwork推出的Embedded Coder Generation工具箱,已经成为汽车领域MBD开发标配。它可以根据模型文件,直接生成可以在嵌入式设备中运行的C/C++代码。该系列文章将介绍由模型生成代码的基本操作。文章中使用的Matlab版本为R2019b。
1.模型配置 Model Configuration
建立模型之后,首先需要对模型进行一些全局配置。
1.1 Solver 求解器
Type:Fixed-step - 程序在嵌入式设备中以固定周期运行,所以设定为定步长。
Solver:discrete(no countinuous state) - 同理,嵌入式设备中只存在离散状态。
Fixed-step size(fundamental sample time) - 该栏为模型的基础采样周期,即模型整体运行的周期,单位为s。
1.2 Code Generation 代码生成
主页面
System target file: ert.tlc(Embedded Coder) - 系统TLC文件。TLC文件直接控制代码生成过程,模型中的每个模块都有其对应的tlc文件(block target file),而系统tlc文件则相当于所有tlc文件的总调度,决定了模型生成代码的目标设备。一些软件供应商提供的工具链会有其定制的System target file,使生成的代码可以适配其硬件设备。在Simulink原生环境中,选择ert.tlc即可生成可以在嵌入式环境中运行的代码。
Generate Code Only - 在完成代码生成后,Simulink会将生成的代码与编译环境中的代码共同进行编译链接。但在实际应用中,集成和编译工作往往都在IDE中完成,并不需要其在Simulink环境中编译。勾选该选项,Simulink生成代码后即停止,不会进行编译操作。
Interface
non-finite numbers / complex number - 汽车控制领域几乎很少应用到无穷数与复数。取消勾选这两项可以减少不必要的代码生成。
ASAP2 interface - 勾选该选项,即在生成代码同时生成A2L文件。可应用于后续调试过程中的监测和标定。
1.3 Hardware Implementation 硬件实现
Device vendor/Device type - 选择运行代码芯片的厂商与架构。不同架构可能会影响生成代码的数据类型实际长度和编码方式。
以上,就是代码生成相关的常用基本配置。有关采样周期等参数的详细说明可能会在后续文章介绍。
2.模型搭建
模型搭建这里不再赘述,只使用了最简单的逻辑作为例子。
需要注意的是,并非所有模块都支持ert代码生成。在搭建时应避免使用ert.tlc不支持的模块。
模型的输入输出可以使用In/Out端口表示。
3.编译模型及代码生成 Build Model/Code Generation
模型搭建完成后,点击代码生成按钮或Ctrl+B即可。
代码会生成在Matlab当前工作路径下,生成进度会在Simulink下方Diagnostic中显示。
代码会保存在[模型名称]_[tlc名称]_rtw文件夹中。
至此,模型代码生成工作全部完成。