欢迎关注我的微信公众号【新能源动力电池与BMS】,头条号:【阿Q在江湖】;所有文章资料会在公众号首发。
本文已同步录制视频讲解:Simulink代码生成之模型配置_视频教程 - 知乎。
PS:前段时间,传出美国禁用一些高校使用正版Matlab软件,有些人说是否有可替代的软件?Python替代Matlab软件m语言编写的部分功能似乎问题不大,不过Simulink呢?似乎还没有可替代的吧?
Simulink是Matlab中非常独特而重要的一个建模工具,能够通过图形化模块快速建模并仿真,同时可自动生成C代码,下载到硬件中,使得复杂系统的算法仿真与开发变的非常高效(比如汽车行业、航空航天都已广泛使用Simulink建模仿真与开发)。要生成嵌入式C代码需要提前将模型进行一些参数配置。下面列举模型配置的一些步骤。
必须配置项
1. 打开模型参数配置面板(Configuration parameters)
在菜单栏打开上图图标或者快捷键Ctrl+E,打开模型配置参数面板。
2. 解算器设置(Solver)
Ø 解算器类型(Type):
路径:Solver-->>Solver options-->>Type
默认是变步长(Variable-step),需要设置为固定步长(Fixed-step)。因为嵌入式代码是要下载到硬件中实时执行,硬件的时钟源都是晶振提供的稳定时钟源,所以解算器必须采用固定步长。
Ø 解算器算法选择(Solver):
路径:Solver-->> Solver options -->> Solver
这里选择discrete算法
Ø 步长(Fixed-step size):
路径:Solver-->>Additional options-->> Fixed-step size
根据需要一般要选择一个固定数值,其单位为秒。步长是相邻两个采样点之间的时间间隔,相当于模型中算法的最小单位调用周期。这里选择0.1,即100ms采样一次。
3. Code Generation
Ø 系统目标文件(Target selection)
路径:Code Generation-->>Target selection-->> System Target file
这里一般选择与嵌入式相关的系统目标文件,如ert.tlc;如果选择autosar.tlc,那么会生成符合autosar接口标准的车规级代码。
Ø 编译过程(Build process)
路径:Code Generation-->> Build process
因为我们只为了看生成的C代码,这里勾选generate code only
4. 硬件设备选择(Device vendor)
路径:Hardware Implementation -->>Device vendor/ Device type
这里选择的是你要将代码下载到的硬件MCU/DSP的型号。
优化项
1. 信号与参数(Signal and Parameters)
路径:Optimization -->> Signal and Parameters-->>Code generation
勾选Inline invariant signals.提高生成的C代码可读性,将模型常量直接代入,如果不勾选则是变量代替。根据实际情况确定是否要勾选。
2. 代码打包文件
路径:Code Generation -->> Code Placement-->>Code Packaging
控件选择Compact,这样打包生成的C代码文件数量少而紧凑一些。
3. State-flow优化配置
本案例没有使用State-flow展示,但是状态机的应用是很广泛的。
路径:Optimization -->> Stateflow-->>Code generation
勾选两项,是将代码的整数换算成位运算,提高计算效率。比如BMS很多状态机都是位运算。
模型案例
生成C代码
菜单栏找到代码生成图标点击(或快捷键Ctrl+B)
生成的C代码主函数分为三部分结构,初始化函数、rt_onestep被定时中断调用(即本模型的算法函数)、终止函数。
上图为模型算法函数,中断定时调用。
总结
以上列举了Simulink自动生成嵌入式代码几个基础的必要配置以及一些优化代码的方法。当然生成的C代码与手写的相比,可读性还是比较差的,其实还有一些方法设置可以改善生成代码的可读性,留待下次再分享。以上仅供参考。
本文已同步录制视频讲解:Simulink代码生成之模型配置_视频教程 - 知乎。
欢迎关注我的微信公众号/知乎专栏:【新能源动力电池与BMS】,头条号:【阿Q在江湖】