首页 > 汽车技术 > 正文

基于Simulink的嵌入式系统自动代码生成浅谈

2020-06-27 21:04:33·  来源:新能源汽车控制  
 
当前,汽车电控软件开发普遍遵循V流程,而自动代码生成是V流程中极其重要的一环。很多朋友后台留言希望能介绍一下Simulink自动代码生成的相关内容,脚友群里也有
当前,汽车电控软件开发普遍遵循V流程,而自动代码生成是V流程中极其重要的一环。
 
很多朋友后台留言希望能介绍一下Simulink自动代码生成的相关内容,脚友群里也有脚友咨询自动代码生成相关的标定量设置问题。在这个领域,脚主了解其实不多,不过可以抛砖引玉,把自己的理解写出来,供大家一起交流学习。
这里就不谈自动代码生成的背景、意义,直接介绍具体的操作步骤吧。
01
Simulink模型设置
首先,需要一个搭建完成的Simulink模型,如下图所示,模型有一个子系统func1。
子系统func1内部逻辑如下图所示,两输入x1、x2的乘积再与一个参数r相乘,输出y1。
 
对于模型的输入输出信号线,鼠标双击信号线,即可编辑信号线名称(一般与输入或输出接口名称一致)。操作完成之后模型如下图,信号线上有了对应的名字。
 
然后选中某一条信号线右键选择Properties,在弹出的对话框中勾选下图红框的选项,把信号与信号对象关联起来(信号对象会在下个步骤中定义),所有的输入输出都需要关联上。
 
对于有多个子功能或者子系统的模型,不需要关联所有的子系统输入输出信号,只需要关联上整个模型最前端的输入信号和最后端的输出信号以及希望观测的中间信号。
02
数据对象定义
对于输入输出信号以及模型参数,需要设置对应的数据对象。
如下图,在工具栏单击打开Model Explorer,在base Workspace界面下再点击Add,选择Add Custom选项。
 
会弹出以下对话框中,选择mpt.Signal,即成功添加一个信号对象,如果选择mpt.Parameter。就可以添加一个参数对象。
 
mpt是Matlab自带一个用于代码生成的包,Signal/Parameter是mpt中的一个类,每一个类会定义合适的属性,这样引用类来创建对象就会很方便。
这里我们需要添加3个信号对象和1个参数对象,分别命名为x1、x2、y1、r,这样就与步骤1中的模型信号名及模型参数关联上了,通过改变信号或参数对象的属性,就可以很方便地改变模型输入输出或参数定义。
设置完成之后的对象如下图所示。这里重点关注一下,模型参数r的Storage class设置为ConstVolatile,这个设置可以保证最终单片机中的参数r可以实现在线标定。其他设置暂时使用默认即可,熟练以后可以继续使用更多的设置来满足其他个性化需求。
 
03
求解器配置
单片机上只能定步长执行,所以求解器一般设置为Fixed-step和discrete,步长可以按需要设置,汽车电控软件一般选择10ms。
 
04
代码自动生成设置
对于嵌入式代码生成,需要进行代码生成相关的配置。
还是在Configuration Parameters界面下,专门有一个代码生成的选项Code Generation,如下图。
 
这里可以重点关注的以下几个设置。
如下图,选择ert.tlc作为System target file,这是标准的嵌入式代码生成tlc;设置模型代码生成的目标优先级,如RAM、ROM、追溯性等等;勾选Generate code only;代码生成启动按钮Generate Code,或者使用快捷键Ctrl+B。
 
勾选代码报告生成及自动打开选项。
 
05
一键代码生成
以上设置完成之后,可以Ctrl+B,启动自动代码生成,报告如下图。
 
核心代码在Model.C文件中,定义了输入输出信号x1、x2、y1以及参数r,Model_step函数中定义了模型的计算逻辑:y1 = x1 * x2 * r,与模型的逻辑完全一致。这个函数会放到对应的10ms任务里面,周期性被调用执行。
以上,简要介绍了嵌入式系统自动代码生成的基本步骤,代码测试、数据管理、在线标定等更多内容后面继续介绍。不妥之处,欢迎交流。
 
 
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号