一、A2L文件总体结构

1、文件查看方法【notepad++】

因为a2l文件不像.c、.cs等语言可以在notepad++直接通过选择语言,然后就可以看到文件的层次结构,方便折叠、展开、不同颜色标注等,方便程序员进行阅读。

本人通过notepad++的自定义语言,实现了a2l的结构性查看,可以帮助你更高效地阅读a2l文件。

详细操作见:https://star-302.blog.csdn.net/article/details/126385627

2、总体结构

在这里插入图片描述

A2L 文件包括:设备参数信息、接口数据信息和 ECU 参数信息。

  1. 设备参数信息: 描述了 ECU 的基本信息和 ECU 数据单元的一些公共属性;
  2. 接口数据信息: 描述了标定系统与 ECU 通信时所需配置的接口信息;
  3. ECU 参数信息:描述了内部数据单元的详细内容。
  /begin PROJECT /*表示一整个项目,一个文件一个项目*/

    /begin HEADER 
	/*描述项目信息,包括项目编号,项目版本等信息*/ 
    /end HEADER
 
    /begin MODLUE/*描述ECU需要的所有信息,一个ECU对应一个MODULE块*/
         /begin A2ML/*描述接口数据格式,包括传输命令,DAQ及传输层的定义*/
         /end  A2ML 

         /begin MOD_PAR /*管理ECU的数据,CPU 客户 编号等等,最重要的是内存的分段分页管理,类似DSP中的CMD文件*/
         /end   MOD_PAR 
 
         /begin MOD_COMMON/*一般性描述信息,比如数据的对齐方式*/
         /end   MOD_COMMON
         
         /begin IF_DATA/*接口数据具体的参数*/
         /end   IF_DATA
		 
		 /begin FUNCTION/*【非必须】FUNCTION这个在Vcetor提供的SIP包中会对XcpAppl的版本进行引用*/
         /end FUNCTION
 
         /begin CHARACTERISTIC/*定义标定变量,包含被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息*/
         /end   CHARACTERISTIC /*可定义多个*/
 
         /begin AXIS_PTS /*该块用来定义数组或查表变量对应的轴的类型,它将被标定变量【二维表(CURVE)、三维图(MAP)】等块来引用,一个ECU里边可以有很多种不同的轴类型,用于实现查表和插值*/
         /end AXIS_PTS
 
         /begin MEASUREMENT/*定义测量变量,包含了被测量的变量的名字,地址,长度,计算公式,精度(分辨率Resolution和准确度Accuracy),最大最小值等信息*/
         /end MEASUREMENT/*可定义多个*/
 
         /begin COMPU_METHOD/*定义计算公式,及原始值和物理值之前的转换关系 如phy = ax+b*/
         /end COMPU_METHOD
 
         /begin COMPU_VTAB /*定义原始值和物理值的映射关系 一般是枚举变量*/
         /end COMPU_VTAB
 
         /begin RECORD_LAYOUT/*定义标定变量的物理存储结构(一维,二维表,三维图等)*/
         /end RECORD_LAYOUT

         /begin MERGED UNIT /*【非必须】MERGED UNIT部分会对单位进行定义,如将“Seconds”定义为“s”等*/
         /end MERGED UNIT 
    /end MODLUE

/end PROJECT

在这里插入图片描述

小知识:关于准确度Accuracy和分辨率Resolution

关于准确度Accuracy和分辨率Resolution,举一个例子:一把尺子,最小是1mm,拿它量东西,就不能读出1mm以下的数来,那么这个1mm就是它的(最小)分辨率,即最小可分辨的度量。如果已经知道一个物体的实际长度是100mm,拿这把尺子来测量,量出来的数据是102mm,那么这个尺子的准确度就是(102-100)/100=0.02,即测量结果与真实数值之间的误差。
再说一个概念精密度Precision,这个是指同一个仪器每次数值之间的离散程度,比较的对象是自己每次测量的数据。也用上文的做测量,还是上次的那一个物体,测了5次,数据分别是108,109,107,107,108,108。这些数据和真实值100mm之间的误差都不小,但是这些数据之间的差距都很小,说明精密度不错。
很多人常常把精密度Precision误判断为精度,也有些厂家误导使用者故意使用精密度代替精度。一般而言大家讲的精度都是指准确度。
参考网址:
https://bbs.instrument.com.cn/topic/6313459/
https://www.cnblogs.com/jaxthon/p/4827804.html

二、分类详细介绍

0、PROJECT

表示一整个项目,一个文件一个项目。

/begin PROJECT  AUTOSAR_111 "XCP on CAN"
...
...
/end PROJECT

1、 HEADER

描述项目信息,包括项目编号,项目版本等信息。

  /begin HEADER ""
    VERSION   "1.0.0.0"
    PROJECT_NO AUTOSAR_111
  /end HEADER

2、MODULE

描述ECU需要的所有信息,一个ECU对应一个MODULE块 。

1)A2ML

A2ML描述接口数据格式,在该部分不会具体的描述出传输层,传输速率等。包括PROTOCAL_LAYER、DAQ及传输层相关的定义,相当于提前将可能用到的信息在这个部分定义好,在后面IF_DATA实际应用时就直接从这部分中引用。

PROTOCAL_LAYER部分会将用到的CMD罗列出来,如:

      ("OPTIONAL_CMD" enum {             /* XCP-Code of optional command */  
                                         /* supported by the slave       */ 
   
        "GET_COMM_MODE_INFO"       = 0xFB, 
        "GET_ID"                   = 0xFA, 
        "SET_REQUEST"              = 0xF9, 
        "GET_SEED"                 = 0xF8, 
        "UNLOCK"                   = 0xF7, 
        "SET_MTA"                  = 0xF6, 
        "UPLOAD"                   = 0xF5, 
		 ......
		 ......
		 })

2)MOD_COMMON与MOD_PAR

  • MOD_COMMON:此部分内容较少,主要是数据对齐方式的描述信息
  /begin MOD_COMMON  ""
    DEPOSIT          ABSOLUTE
    BYTE_ORDER       MSB_LAST
  /end MOD_COMMON
  • MOD_PAR:此部分管理ECU的数据,CPU 客户编号、CPU型号,CRC校验方式等,此外较为重要的信息还有内存的分段分页管理,这部分是在标定时的Overlay时会用到。
    1.FLASH:CODE存放程序代码;DATA存放标定量;
    2.RAM:存放测量量
    在这里插入图片描述

补充:Code和Data的定义
A2L文件中需要指定内存的分布情况,即在MOD_PAR关键字下编写MEMORY_SEGMENT关键字,MEMORY_SEGMENT关键字下通过PrgType属性和MemoryType属性指定Code和Data在内存中的地址。
MCD系统(INCA或CANape)认为Code和Data一定是存储在Flash中的,而不是RAM中,所以在指定Code内存段和Data内存段时,其MemoryType属性一定是FLASH,而CODE和DATA属性分别标识代码内存段和数据内存段。

在这里插入图片描述

补充:A2L文件中MEASUREMENT和CHARACTERISTIC的地址

对于MEASUREMENT来说,其A2L中的地址为MAP文件中对应的RAM地址,因为观测量只是可读而不可写,RAM中的地址是其对应的运行时地址,FLASH中存储的是其初始化的值,该值在statup copy-down的时候就会从FLASH中复制至RAM中,所以对于MEASUREMENT来说,只关心其RAM中的地址。
在这里插入图片描述
对于CHARACTERISTIC来说,其A2L中的地址为MAP文件中对应的FLASH地址,因为标定量是可读可写的,所以需要指出其在FLASH中的地址,供其进行修改。

不知道是否可以这样来考虑,对于观测量来说,其作用是用来显示一个变量的值,观测其变化趋势,而并不需要修改它的值,所以只需要提供它的RAM地址就可以了,RAM地址处对应的值是随着时间改变的,所以可以作为观测量。另外,对于标定量来说,既然要求可读可写,所以就一定要知道其在FLASH中的地址

3)IF_DATA

这块是A2L文件的核心内容,定义的内容如下:

  • 各个Timeout时间,如Connect、Checksum及发送PROGRAM_START/PROGRAM_VERIFY等命令的最大超时时间;

  • OPTIONAL_CMD,罗列了用到的CMD命令,这部分会影响实际的使用,如果后面大家在实际应用中发现不能发某个指令可以来此部分看看是不是没有;

  • DAQ的配置:DAQ类型(动态/静态?)数量,用到的Event(如2ms/5ms/10ms等);

  • CAN (如果选择的是CAN通讯)ID、波特率、采样点等。
    在这里插入图片描述
    在这里插入图片描述

4)FUNCTION与MERGED UNIT

这两个Block不是必须的部分,其中;

FUNCTION这个在Vcetor提供的SIP包中会对XcpAppl的版本进行引用;
MERGED UNIT部分会对单位进行定义,如将“Seconds”定义为“s”等

  /begin FUNCTION __DDS_EXPA2_DEFAULT_FUNC__
   "__DDS_EXPA2_DEFAULT_FUNC__"
  /end FUNCTION

5)CHARACTERISTIC

标定量存放部分,包含了被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息,一个MODULE里边可以有多个标定变量。

重要知识:标定变量按类型分为VALUE、CURVE和MAP,三者之间的区别在干该标定变量是否含有坐标轴(AXIS_DESCR)

形式1(VALUE)【其他形式见:6)AXIS_PTS】:

/begin CHARACTERISTIC

    CAL_MPC_IsCutOffFrq_f32		/*Name 变量名字*/
    "CAL_MPC_IsCutOffFrq_f32"	/*Long Identifier(类似Comment)*/
    VALUE						/*Type*/
    0x8014305C					/*地址*/
    Scalar_FLOAT32_IEEE			/*Record Layout*/
    0							/*Maximum Difference精度(分辨率)*/
    BSW_A2L_Ident_Float       	/*Conversion Method计算公式*/
    -3.4E+38					/*Lower Limit最小值*/
    3.4E+38						/*Upper Limit最大值*/
	
/end CHARACTERISTIC

6)AXIS_PTS

在ASAP2 Studio的统计中,AXIS_PTS也算在标定量中,如下图。
在这里插入图片描述
当有的标定量需要多个轴(X,Y)来决定时,需要用到AXIS_PTS,AXIS_PTS定义其中一个轴的量。
下图中标注的部分【CHARACTERISTIC引用AXIS_PTS】
在这里插入图片描述形式2【Curve(X—>Y)X为AXIS,Y为CHARACTERISTIC】:
在这里插入图片描述

在这里插入图片描述
CHARACTERISTIC部分的内容:
在这里插入图片描述

AXIS_PTS部分的内容:
在这里插入图片描述

形式3【MAP(X,Y—>Z)X、Y为AXIS,Z为CHARACTERISTIC】:
在这里插入图片描述

CHARACTERISTIC部分的内容:

/begin CHARACTERISTIC

    CAL_MPC_MtpvTableZ_idMot_af32
    ""
    MAP
    0x801421BC
    Lookup2D_FLOAT32_IEEE
    0
    SWC_MPC_CM_single
    -3.4E+38
    3.4E+38

/begin AXIS_DESCR

    COM_AXIS
    NO_INPUT_QUANTITY
    SWC_MPC_CM_single
    19
    -3.4E+38
    3.4E+38

    AXIS_PTS_REF CAL_MPC_MtpvTableY_N_af32

/end AXIS_DESCR


/begin AXIS_DESCR

    COM_AXIS
    NO_INPUT_QUANTITY
    SWC_MPC_CM_single
    8
    -3.4E+38
    3.4E+38

    AXIS_PTS_REF CAL_MPC_MtpvTableX_Udc_af32

/end AXIS_DESCR

AXIS_PTS部分的内容:

/begin  AXIS_PTS

    CAL_MPC_MtpvTableY_N_af32
    ""
    0x8014267C
    NO_INPUT_QUANTITY
    Lookup2D_X_FLOAT32_IEEE
    0
    SWC_MPC_CM_single
    19
    -3.4E+38
    3.4E+38

/end AXIS_PTS
/begin  AXIS_PTS

    CAL_MPC_MtpvTableX_Udc_af32
    ""
    0x801426C8
    NO_INPUT_QUANTITY
    Lookup2D_X_FLOAT32_IEEE
    0
    SWC_MPC_CM_single
    8
    -3.4E+38
    3.4E+38

/end AXIS_PTS

7)MEASUREMENT

定义测量变量,包含了被测量的变量的名字,地址,长度,计算公式,精度(分辨率Resolution和准确度Accuracy),最大最小值等信息,可定义多个。

/begin MEASUREMENT

    VAR_AdcInitSBC_u16			/*Name 变量名字*/
    "VAR_AdcInitSBC_u16"		/*Long identifier(类似Comment)*/
    UWORD						/*Data type 值类型*/
    BSW_A2L_Ident_Int			/*Conversion method 计算公式*/
    1							/*Resolution 分辨率*/
    100							/*Accuracy 准确度*/
    0							/*Lower limit 最小值*/
    65535						/*Upper limit 最大值*/
    ECU_ADDRESS 0x700094AA		/*ECU_Address 地址*/

/end MEASUREMENT

8)COMPU_METHOD与COMPU_VTAB

总的来说,COMPU_METHOD与COMPU_VTAB都是计算公式,只不过计算方式不同,一种是通过公式,一种是通过查表的方式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • COMPU_METHOD:定义计算公式,及原始值和物理值之前的转换关系。如:phy = ax+b【x即raw】
 /begin  COMPU_METHOD

    RTE_A2L_Ident_Float			/* Name of CompuMethod    */
    "Q = V"						/* Long identifier        */
    RAT_FUNC 					/* Conversion Type        */
    "%8.6"						/* Format                 */
    "" 							/* Units                  */

    COEFFS 0 1 0 0 0 1			/* Coefficients  系数     */

/end COMPU_METHOD

上述参数的理解可以见下图【a2l文件在ASAP2 Studio中打开】:
在这里插入图片描述在这里插入图片描述

  • COMPU_VTAB:定义原始值和物理值的映射关系 一般是枚举变量
/begin COMPU_VTAB
    FID_LIST
    ""
    TAB_VERB
    162
    1 "FIM_ADC_UPhaseBISTFail"
    2 "FIM_ADC_VPhaseBISTFail"
    3 "FIM_ADC_WPhaseBISTFail"
    4 "FIM_CANSM_E_BUS_OFF_NETWORK_0"
    5 "FIM_Can_Timeout"
 	...
 	 162 "FiM_FlagforFR"
    DEFAULT_VALUE "---"
/end COMPU_VTAB

在这里插入图片描述在这里插入图片描述

9)RECORD_LAYOUT

定义标定变量的物理存储结构(一维,二维表,三维表等)。

/begin RECORD_LAYOUT    Scalar_BOOLEAN
    FNC_VALUES        1 UBYTE COLUMN_DIR DIRECT

/end RECORD_LAYOUT


/begin RECORD_LAYOUT    Scalar_UBYTE
    FNC_VALUES        1 UBYTE COLUMN_DIR DIRECT

/end RECORD_LAYOUT


/begin RECORD_LAYOUT    Scalar_BYTE
    FNC_VALUES        1 SBYTE COLUMN_DIR DIRECT

/end RECORD_LAYOUT


/begin RECORD_LAYOUT    Scalar_UWORD
    FNC_VALUES        1 UWORD COLUMN_DIR DIRECT

/end RECORD_LAYOUT


/begin RECORD_LAYOUT    Scalar_SWORD
    FNC_VALUES        1 SWORD COLUMN_DIR DIRECT

/end RECORD_LAYOUT
/begin RECORD_LAYOUT    Lookup1D_BOOLEAN
    FNC_VALUES        1 UBYTE COLUMN_DIR DIRECT

/end RECORD_LAYOUT
/begin RECORD_LAYOUT    Lookup1D_X_BOOLEAN
    AXIS_PTS_X        1 UBYTE INDEX_INCR DIRECT

/end RECORD_LAYOUT

结合上边几段的内容,在ASAP2 Studio打开后,下边几张截图,是我的疑问点???
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

10) GROUP

把标定变量和测量变量按照一定的逻辑(比如功能模块)组织起来,在上位机中形成一个下拉菜单,使得用户可以从中选择变量,这块是可选的。【对标定量和观测量进行分类,方便在上位机中查看操作】
在这里插入图片描述


补充【ASAP2 Studio】:

你可以结合Vector的软件ASAP2 Studio来同步查看a2l文件,这样可以帮助你更快学习。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

参考:

Matlab导出 ASAP2 文件:
https://ww2.mathworks.cn/help/rtw/ug/asap2-data-measurement-and-calibration.html#bsqg34r-1

基于ASAP2标准的A2L文件生成与解析技术实现:
https://www.doc88.com/p-7307624724803.html?r=1

了解A2L文件预定义类型:
https://blog.csdn.net/u011079613/article/details/117033590
在这里插入图片描述
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐