【汽车ECU电控数据管理篇】A2L文件格式解析篇章
一、什么是A2L文件
A2L文件是汽车电子领域中用于定义 ECU(Electronic Control Unit,电子控制单元)标定和测量数据的标准文件格式。它基于 ASAP2(Automotive Standard for Calibration and Measurement)标准,用于描述 ECU 中的变量、数据类型、存储结构、计算方法等信息。A2L 文件是标定工程师与 ECU 之间沟通的桥梁,使得标定工程师可以通过上位机软件(如 INCA、CANape)对 ECU 进行标定和测量。A2L是一个描述文件唯独没有变量的值。
二、A2L文件总体结构
以下展示的是A2L的文件框架,以及内部的格式标签。
三、A2L文件标签解析
下面我们来按照文件格式来解析每一个标签的作用。
3.1 ASAP2_VERSION 标签
该版本号有两个uint数,表示为VersionNo 主版本号 和UpgradeNo 表示升级号(版本号的小数部分)。
// ASAP2_VERSION VersinNo UpgradeNo
ASAP2_VERSION 1 60
3.2 Project 标签
一个A2L文件中必须包含一个Project.包含了项目信息。一般一个A2L中也就包含一个项目。
/begin PROJECT *****
/begin HEADER
/end HEADER
/begin MODULE
/end MODULE
/end PROJECT
3.2.1 Header 标签
HEADER包含Comment(描述信息),VERSION(版本,最多MAX_STRING个字符)和PROJECT_NO(项目号,最多MAX_IDENT个字符)是可选的。
/begin HEADER "" //描述信息
VERSION "" //版本
PROJECT_NO //项目号
/end HEADER
3.2.2 Module 标签
MODULE关键字描述一个完整的ECU或设备,包括所有可标定和测量的对象、转换方法和功能。为此,需要增加ECU接口相关参数的格式说明。
/begin MODULE modulename "this is moudles"
/end MOUDLE
3.2.2.1 A2ML 标签
主要是接口相关参数的格式说明,比如DAQ,DAQ event,传输层命令等数据类型大部分是定义的类型,数组结构.一般我这边是用不到,如果需要的同学可以自己进行查看。
/begin A2ML
struct Protocol_Layer {};
struct Daq{
(block "DAQ_LIST" struct { });
(block "EVENT" struct { });
};
taggedunion Daq_Event { };
struct Pag {};
struct Pgm {};
struct Segment {};
taggedstruct Common_Parameters { };
struct CAN_Parameters { };
struct TCP_IP_Parameters { };
struct UDP_IP_Parameters { };
struct buffer { };
struct FLX_Parameters { };
/end A2ML
3.2.2.2 MOD_COMMON 标签
主要定义对其格式,但是有一个非常重要的字节序的定义,这个影响数据解析是从高位到低位还是低位到高位。
/begin MOD_COMMON ""
BYTE_ORDER
/end MOD_COMMON
3.2.2.3 MOD_PAR 标签
内存的管理,每个内存段的分配;还有一些系统常量定义
/begin MOD_PAR "---"
VERSION "---"
ADDR_EPK 0x94403C8
EPK "---"
CUSTOMER_NO "---"
USER "---"
PHONE_NO ""
ECU "---"
CPU_TYPE "---"
/begin MEMORY_SEGMENT Pst8FC0000 "" RESERVED FLASH INTERN 0x8FC0000 0x20 -1 -1 -1 -1 -1
/end MEMORY_SEGMENT
/end MOD_PAR
3.2.2.4 IF_DATA 标签
接口信息定义,主要是XCP协议的一些信息,比如DAQlist定义,CAN配置信息等等,数据传输,开发XCP协议的基本参数都可以从中获取.目前在解析过程中不怎么用。
3.2.2.5 FUNCTION 标签
将软件程序更加功能分成不同模块,每个模块是一个function,每个function下面包含一堆程序,这里面有标定量也有测量量
/begin FUNCTION
Can
""
/begin DEF_CHARACTERISTIC
CHARACTERISTIC_1 CHARACTERISTIC_2
/end DEF_CHARACTERISTIC
/begin LOC_MEASUREMENT
/end LOC_MEASUREMENT
FUNCTION_VERSION "33.24.0"
/end FUNCTION
3.2.2.6 Characteristic 标签(重要处理标签)
-
用途:
CHARACTERISTIC
块用于定义标定变量,这些变量是可以被标定的参数。标定变量通常用于调整 ECU(电子控制单元)的行为,例如发动机控制、变速箱控制等。 -
包含的信息:
-
名称:变量的名称。
-
地址:变量在 ECU 内存中的地址。
-
长度:变量的长度(以字节为单位)。
-
计算公式:用于将原始值转换为物理值的计算方法。
-
精度:变量的精度。
-
最大值和最小值:变量的取值范围。
-
/begin CHARACTERISTIC /* Name */ K_CheckStatus_flag /* Long Identifier */ "description" /* Type */ VALUE /* Memory Address */ 0 /* Record Layout */ Scalar_BOOLEAN /* Maximum Difference */ 0 /* Conversion Method */ COMPU_METHOD_0 /* Lower Limit */ 0.0 /* Upper Limit */ 1.0 /end CHARACTERISTIC
-
CHARACTERISTIC
得类型包括(标定电控数据系统主要处理的数据)
类型 | 描述 |
ASCII | 表示一个 ASCII 字符串,用于存储文本信息 |
CURVE | 表示一维曲线,包含一个坐标轴(AXIS_DESCR ),用于定义一维查表或函数 |
MAP | 表示二维映射,包含两个坐标轴(AXIS_DESCR ),用于定义二维查表或函数 |
CUBOID | 表示三维数据块,包含三个坐标轴(AXIS_DESCR ),用于定义三维查表或函数 |
CUBE_4 | 表示四维数据块,包含四个坐标轴(AXIS_DESCR ),用于定义四维查表或函数 |
CUBE_5 | 表示五维数据块,包含五个坐标轴(AXIS_DESCR ),用于定义五维查表或函数 |
VAL_BLK | 表示一个值块,包含多个值。用于定义一组连续的标定值,例如一个数组或块数据。 |
VALUE | 表示一个单一的标定值,没有坐标轴 |
3.2.2.7 MEASUREMENT 标签
-
用途:
MEASUREMENT
块用于定义测量变量,这些变量是可以被测量的参数。测量变量通常用于监控 ECU 的运行状态,例如传感器数据、系统状态等。 -
包含的信息:
-
名称:变量的名称。
-
地址:变量在 ECU 内存中的地址。
-
数据类型:变量的数据类型(例如 UBYTE、FLOAT32_IEEE 等)。
-
计算公式:用于将原始值转换为物理值的计算方法。
-
精度:变量的精度。
-
最大值和最小值:变量的取值范围。
/begin MEASUREMENT /* Name */ V_DEMO2_flag /* Long Identifier */ "description" /* Data Type */ UBYTE /* Conversion Method */ COMPU_METHOD_0 /* Lower Limit */ 0.0 /* Upper Limit */ 1.0 ECU_ADDRESS 0 /end MEASUREMENT
-
3.2.2.8 COMPU_METHOD标签
计算方式,数据的转化关系,有以下几种,其中用的最多的是方程y=ax+b,a和b是定义的系数;还有枚举定义等
选项 | 描述 |
---|---|
NO_COMPU_METHOD | 无转换 |
IDENTICAL | 1:1转换 |
LINEAR | 线性转换 |
RATIONAL | 有理式转换 |
FORMULA | 方程式转换 |
NUMBERIC TABLE | 数值表转换 |
VERBAL TABLE | 字符表转换 |
M_LINEAR | 自定义转换 |
/begin COMPU_METHOD
AUTOSAR_CanSM_CompuMethods_CanSM_TimerStateType_Enum_comp
"Computation method for the enum CanSM_TimerStateType"
TAB_VERB
"%10.5"
"noUnit"
COMPU_TAB_REF AUTOSAR_CanSM_CompuMethods_CanSM_TimerStateType_Enum_comp
REF_UNIT AUTOSAR_CanSM_Units_NoUnit
/end COMPU_METHOD
3.2.2.9 RECORD_LAYOUT标签
定义了数据的类型,在处理Characteristic变量时需要把其数据转换成对应的数据类型byte位
数据类型 | 描述(在HEX文件中数据所占的字节数) |
---|---|
UBYTE | 1字节无符号整型 |
SBYTE | 1字节有符号整型 |
UWORD | 2字节无符号整型 |
SWORD | 2字节有符号整型 |
ULONG | 4字节无符号整型 |
SLONG | 4字节有符号整型 |
A_UINT64 | 8字节无符号整型 |
A_INT64 | 8字节有符号整型 |
FLOAT32_IEEE | 4字节浮点型 |
FLOAT64_IEEE | 8字节浮点型 |
/begin RECORD_LAYOUT Scalar_UBYTE
FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
3.2.2.10 GROUP标签
,用于将标定变量和测量变量按照一定的逻辑组织起来,通常在上位机中形成一个下拉菜单,方便用户选择变量。
-
组织变量:
group
可以将标定变量和测量变量按照功能模块或其他逻辑进行分类,使得用户可以更方便地管理和选择变量。 -
可选性:
group
是可选的,不是必须的。
3.2.2.11 axis_pts标签
该块用来定义数组或查表变量对应的轴的类型,它将被RECORD_LAYOUT块来引用,一个ECU里边可以有很多种不同的轴类型,用于实现查表和插值。一般在变量取值过程中X、Y轴的轴数据根据这里进行读取。
/begin AXIS_PTS
ACCtl_nEpmNEng_AX
"Group sampling point for curves (engine speed)"
0x94A111
Epm_nEng
RB_Axis_S6
32.50
EngN
4
-16.00
16.50
FORMAT "%8.2"
EXTENDED_LIMITS -16.00 16.50
DEPOSIT ABSOLUTE
/end AXIS_PTS
3.2.2.12 compu_vtab标签
compu_vtab
用于定义原始值和物理值的映射关系,通常应用于枚举变量。这种映射关系可以帮助将原始值转换为更易于理解和使用的物理值。
-
定义映射关系:
compu_vtab
定义了原始值和物理值之间的映射关系,例如将数字 0 映射为 "false",数字 1 映射为 "true"。 -
引用方式:
compu_vtab
通常被compu_method
引用,通过COMPU_TAB_REF
关键字指定。
/begin COMPU_VTAB
AUTOSAR_CanIf_C
"Computation method for enum type "
TAB_VERB
5
0 "CANIF_CS_UNINIT"
1 "CANIF_CS_STOPPED"
2 "CANIF_CS_STARTED"
3 "CANIF_CS_SLEEP"
4 "CANIF_CS_MAXMODE"
/end COMPU_VTAB