Simulink代码生成:生成ASAP2文件

本文研究通过Simulink生成A2L文件的方法,以及其中的一些注意点。

文章目录

  • 1 ASAP2文件
  • 2 生成标定量、观测量的A2L文件
    • 2.1 建模过程
    • 2.2 配置界面
    • 2.3 生成A2L文件
  • 3 生成结构体的A2L文件
  • 4 生成查表相关的A2L文件
  • 5 总结

1 ASAP2文件

ASAP2文件是用于汽车软件测量和标定的文件,其中包含观测量和标定量的很多信息,如名称、类型、地址等。

通常在模型生成代码的过程中,也会同时把A2L文件生成出来。最后用编译好的elf文件或是map文件来更新A2L中的地址信息。

Matlab给我们提供了一套 asap2.tlc 的目标文件,可以用来生成A2L文件。但是,为了生成正确的标定量和观测量,我们需要对模型和A2L文件的关系有足够的了解。后文就会通过一些例子来研究在不改动tlc文件的前提下,模型和A2L文件之间的对应关系。

2 生成标定量、观测量的A2L文件

本章节会从零开始建模、配置标定量、观测量和模型并生成代码和A2L文件。

2.1 建模过程

1)首先打开Matlab,输入如下命令行,在工作空间中创建一个Signal对象和一个Parameter对象;

>> Measurement_1 = Simulink.Signal;
>> Calibration_1 = Simulink.Parameter;

在这里插入图片描述
在Simulink中,Parameter数据对象对应的是标定量(Calibration),Signal数据对象对应的是观测量(Measurement)。

2)双击工作区的两个数据对象,分别进行配置如下;
Simulink代码生成:生成ASAP2文件_第1张图片
Simulink代码生成:生成ASAP2文件_第2张图片
这里,对两个数据对象分别配置了属性,包括Data type,Dimensions等。可以留意一下这里的属性配置,会和后面的A2L文件中对应起来。

3)建立一个简单的Simulink模型如下;
Simulink代码生成:生成ASAP2文件_第3张图片
图中把最左边的 const 模块的值设为了 Calibration_1 ,把输出的信号线明明为 Measurement_1 ,并关联了数据对象(也就是蓝色的小叉子)。

这样,模型和数据字典都建立好了。

2.2 配置界面

在一般情况下,是把A2L文件和C代码一起生成出来了,所以先配置Embedded Coder的ert.tlc文件。具体可以参照《Simulink代码生成: Embedded Coder配置》这篇博客。

同时在设置界面的Interface分类中,勾选上ASAP2 interface,就可以顺便一起生成A2L文件。
Simulink代码生成:生成ASAP2文件_第4张图片

2.3 生成A2L文件

上述配置完毕后,保存配置和模型,然后Ctrl + B生成代码如下。
Simulink代码生成:生成ASAP2文件_第5张图片
生成的代码中,除了源文件和头文件,还多出了A2L文件。

打开A2L文件后,可以在其中找到模型中引用的标定量 Calibration_1 和观测量 Measurement_1 。在2.1章节所配置的属性信息,如数据类型、注释、最大最小值等,都生成在了ASAP2标准所规定的位置。关于ASAP2格式的描述,可以在ASAM的网站下载文档。http://www.asam.net

3 生成结构体的A2L文件

在Simulink中,非虚拟Bus信号生成代码后对应的是一种结构体类型,可以参考以前的博客《Simulink代码生成: Bus信号及其代码》。
如果同时生成ASAP2文件,其中也会生成结构体的定义。

1)创建一个 Bus_1 类型,其中有两个成员 a,a1;
Simulink代码生成:生成ASAP2文件_第6张图片
2)再创建一个Signal对象 Measurement_2,但是要把它的Datatype设为Bus_1这个类型;
Simulink代码生成:生成ASAP2文件_第7张图片
3)在模型中用Data Store Read模块输出Measurement_2;
Simulink代码生成:生成ASAP2文件_第8张图片
4)然后Ctrl + B生成代码;
Simulink代码生成:生成ASAP2文件_第9张图片
A2L文件中对结构体的每个成员都定义了一个MEASUREMENT字段,这和结构体的A2L定义规范是一样的。

再打开_type.h文件,可以看到把 Bus_1 定义了一个结构体类型。
Simulink代码生成:生成ASAP2文件_第10张图片

4 生成查表相关的A2L文件

查表模块也是建模中常用的模块,其中的断点和查表值用标定量来表示。这里的标定量生成的A2L文件又会有所不同。

1)在Matlab工作空间中再创建两个标定量,分别代表查表模块的断点和查表值;

>> Calibration_Table_Data = Simulink.Parameter;
>> Calibration_Breakpoints = Simulink.Parameter;

其中的配置如图所示;
Simulink代码生成:生成ASAP2文件_第11张图片
Simulink代码生成:生成ASAP2文件_第12张图片
2)在模型中加一个查表模块,将刚刚的两个参数名填入其中;
Simulink代码生成:生成ASAP2文件_第13张图片
3)然后生成代码,观察以下A2L文件的定义;
Simulink代码生成:生成ASAP2文件_第14张图片
生成的A2L文件中,会把Calibration_Breakpoints定义为一个轴(AXIS_PTS),然后查表值定义为一个CHARACTERISTIC标定量,再引用断点的那个轴。这个和查表得功能也是一致的,也就是通过标定工具修改查表值,来优化查表模块。

5 总结

本文研究了一些生成A2L的基本用法,可以满足开发中的大部分需求。

>>返回个人博客总目录

你可能感兴趣的:(simulink)