本文研究通过Simulink生成A2L文件的方法,以及其中的一些注意点。
ASAP2文件是用于汽车软件测量和标定的文件,其中包含观测量和标定量的很多信息,如名称、类型、地址等。
通常在模型生成代码的过程中,也会同时把A2L文件生成出来。最后用编译好的elf文件或是map文件来更新A2L中的地址信息。
Matlab给我们提供了一套 asap2.tlc 的目标文件,可以用来生成A2L文件。但是,为了生成正确的标定量和观测量,我们需要对模型和A2L文件的关系有足够的了解。后文就会通过一些例子来研究在不改动tlc文件的前提下,模型和A2L文件之间的对应关系。
本章节会从零开始建模、配置标定量、观测量和模型并生成代码和A2L文件。
1)首先打开Matlab,输入如下命令行,在工作空间中创建一个Signal对象和一个Parameter对象;
>> Measurement_1 = Simulink.Signal;
>> Calibration_1 = Simulink.Parameter;
在Simulink中,Parameter数据对象对应的是标定量(Calibration),Signal数据对象对应的是观测量(Measurement)。
2)双击工作区的两个数据对象,分别进行配置如下;
这里,对两个数据对象分别配置了属性,包括Data type,Dimensions等。可以留意一下这里的属性配置,会和后面的A2L文件中对应起来。
3)建立一个简单的Simulink模型如下;
图中把最左边的 const 模块的值设为了 Calibration_1 ,把输出的信号线明明为 Measurement_1 ,并关联了数据对象(也就是蓝色的小叉子)。
这样,模型和数据字典都建立好了。
在一般情况下,是把A2L文件和C代码一起生成出来了,所以先配置Embedded Coder的ert.tlc文件。具体可以参照《Simulink代码生成: Embedded Coder配置》这篇博客。
同时在设置界面的Interface分类中,勾选上ASAP2 interface,就可以顺便一起生成A2L文件。
上述配置完毕后,保存配置和模型,然后Ctrl + B生成代码如下。
生成的代码中,除了源文件和头文件,还多出了A2L文件。
打开A2L文件后,可以在其中找到模型中引用的标定量 Calibration_1 和观测量 Measurement_1 。在2.1章节所配置的属性信息,如数据类型、注释、最大最小值等,都生成在了ASAP2标准所规定的位置。关于ASAP2格式的描述,可以在ASAM的网站下载文档。http://www.asam.net
在Simulink中,非虚拟Bus信号生成代码后对应的是一种结构体类型,可以参考以前的博客《Simulink代码生成: Bus信号及其代码》。
如果同时生成ASAP2文件,其中也会生成结构体的定义。
1)创建一个 Bus_1 类型,其中有两个成员 a,a1;
2)再创建一个Signal对象 Measurement_2,但是要把它的Datatype设为Bus_1这个类型;
3)在模型中用Data Store Read模块输出Measurement_2;
4)然后Ctrl + B生成代码;
A2L文件中对结构体的每个成员都定义了一个MEASUREMENT字段,这和结构体的A2L定义规范是一样的。
再打开_type.h文件,可以看到把 Bus_1 定义了一个结构体类型。
查表模块也是建模中常用的模块,其中的断点和查表值用标定量来表示。这里的标定量生成的A2L文件又会有所不同。
1)在Matlab工作空间中再创建两个标定量,分别代表查表模块的断点和查表值;
>> Calibration_Table_Data = Simulink.Parameter;
>> Calibration_Breakpoints = Simulink.Parameter;
其中的配置如图所示;
2)在模型中加一个查表模块,将刚刚的两个参数名填入其中;
3)然后生成代码,观察以下A2L文件的定义;
生成的A2L文件中,会把Calibration_Breakpoints定义为一个轴(AXIS_PTS),然后查表值定义为一个CHARACTERISTIC标定量,再引用断点的那个轴。这个和查表得功能也是一致的,也就是通过标定工具修改查表值,来优化查表模块。
本文研究了一些生成A2L的基本用法,可以满足开发中的大部分需求。
>>返回个人博客总目录