分享

INCA

 ghostvip 2022-10-09 发布于广东

0 前言

1 A2L文件简介

A2L文件是基于ASAP2标准,采用ASAP2指定的一套类XML语言的描述性语言(采用开标签和关标签来描述信息)书写,描述ECU的通信等相关的参数,以及标定,观测变量的地址以及物理值计算公式等等的文本格式文件。它用来指导上位机和ECU的通讯交互过程,让他们对交互的信息有一致的认识,从而是上位机工具准确且友好的将ECU中的信息展现给用户。

ASAP2标准是ASAM组织制定的一套标准,该标准规定了上位机(Master)和ECU(Slave)之间的通讯所需要的所有信息(可以是XCPonCAN,XCPonUSB等,也可以是CCP,还可以是UDS),而A2L文件就是ASAP2标准的表现形式。

ASAP2标准是ASAM在1998年提出来的,现在它的名字叫做ASAM MCD-2MC/D,是ASAP标准中的第二部分。
整个ASAP有3部分内容:

  • ASAP1描述了上位机(Master)和ECU(Slave)之间的通讯协议,XCP以及它的前身CCP都是属于ASAP1标准
  • ASAP2规定了Master端如何去描述和解析Slave端的信息,A2L文件就属于这个标准
  • ASAP3规定了如何使用第三方工具和设备操作和控制上位机(Master),例如如何使用台架软件来控制标定测量工具去对ECU进行控制和测试。

在这里插入图片描述

2 A2L文件结构

/begin PROJECT
  /begin HEADER  
  /end HEADER
    
  /begin MODULE
    /begin MOD_PAR
    /end MOD_PAR
        
    /begin MOD_COMMON
    /end MOD_COMMON

    /begin RECORD_LAYOUT
      /* Name               */  Scalar_BOOLEAN
      FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT
    /end RECORD_LAYOUT

    /begin RECORD_LAYOUT
      /* Name               */  Scalar_FLOAT32_IEEE
      FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT
    /end RECORD_LAYOUT
    
    /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

    /begin CHARACTERISTIC
      /* Name               */  K_DisplayTime_s
      /* Long Identifier    */  'description'
      /* Type               */  VALUE
      /* Memory Address     */  0
      /* Record Layout      */  Scalar_FLOAT32_IEEE
      /* Maximum Difference */  0
      /* Conversion Method  */  COMPU_METHOD_1
      /* Lower Limit        */  0.0
      /* Upper Limit        */  1000.0
    /end CHARACTERISTIC

    /begin CHARACTERISTIC
      /* Name               */  K_DisplayMax_cnt
      /* Long Identifier    */  'description'
      /* Type               */  VALUE
      /* Memory Address     */  0
      /* Record Layout      */  Scalar_UWORD
      /* Maximum Difference */  0
      /* Conversion Method  */  COMPU_METHOD_2
      /* Lower Limit        */  0.0
      /* Upper Limit        */  65535.0
    /end CHARACTERISTIC

    /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

    /begin COMPU_METHOD
      /* Name               */  COMPU_METHOD_0
      /* Description        */  'Boolean flag'
      /* Conversion Type    */  TAB_VERB
      /* Format             */  '%0.2'
      /* Units              */  ''
      COMPU_TAB_REF  VTAB_FOR_COMPU_METHOD_20
    /end COMPU_METHOD
    
    /begin COMPU_VTAB
      /* Name               */  VTAB_FOR_COMPU_METHOD_0
      /* Description        */  'Boolean flag'
      /* Conversion Type    */  TAB_VERB
      /* Num of Elements    */  2
      /* Table Element      */  0 'false'
      /* Table Element      */  1 'true'
    /end COMPU_VTAB

    /begin COMPU_METHOD
      /* Name               */  COMPU_METHOD_1
      /* Description        */  'Q = V'
      /* Conversion Type    */  RAT_FUNC
      /* Format             */  '%6.4'
      /* Units              */  's'
      COEFFS 0 1 0 0 0 1
    /end COMPU_METHOD

    /begin COMPU_METHOD
      /* Name               */  COMPU_METHOD_2
      /* Description        */  'Q = V'
      /* Conversion Type    */  RAT_FUNC
      /* Format             */  '%3.0'
      /* Units              */  ''
      COEFFS 0 1 0 0 0 1
    /end COMPU_METHOD
    
    /begin FUNCTION
    /end FUNCTION

    /begin GROUPS
    /end GROUPS
    
  /end MODULE
/end PROJECT
  1. PROJECT:一个A2L文件只能有一个PROJECT,而PROJECT中至少要有一个Module,A2L文件的注释和C语言的注释方式是一样的,支持 /* 和 // 两种方式。

  2. HEADER:该块里边包含了项目信息,包括项目编号,项目版本等信息

  3. MODULE:该块里边包含了在标定测量层面来描述ECU需要的所有信息,一个ECU对应一个MODULE块,MODULE由许多子块来组成

  4. MOD_PAR:这个块里包含了用于管理ECU的数据,例如客户名,编号,CPU类型,ECU的内存分配等,其中最重要的就是ECU的内存分配,开发人员需要根据ECU内存分段情况定义MEMORY SEGMENT和SEGMENT里边的PAGE,这里的SEGMENT/PAGE的概念和在线标定中的概念是一致的,一个MODULE里边只能出现一次。

  5. MOD_COMMON:该块用来指定ECU的一些标准的一般性描述信息,比如大小端,数据的对齐方式,FLOAT变量的处理方式等,一个MODULE里也只能出现一次。

  6. RECORD_LAYOUT:内存布局,描述数据的存放方式(单个变量,二维表,三维表等)。

/begin RECORD_LAYOUT
  /* Name               */  Scalar_BOOLEAN
  FNC_VALUES /*how the table values of CHARACTERISTIC are deposited in memory.*/
/end RECORD_LAYOUT

FNC_VALUES有4个参数:
Position:table values在structure中的位置
DataType:见A2L文件预定义类型[datatype类型]
IndexMode:见A2L文件预定义类型[IndexMode类型]
AddressType:见A2L文件预定义类型[addrtype类型]

  1. CHARACTERISTIC:该块用来定义标定变量,里边包含了可以被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息,一个MODULE里边可以出现很多次这样的块,也就是说一个ECU可以有很多的标定变量。
/begin CHARACTERISTIC
  /* Name               */  unique identifier
  /* Long Identifier    */  'comment, description'
  /* Type               */  见A2L文件预定义类型[Type类型]
  /* Memory Address     */  内存地址
  /* Record Layout      */  见RECORD_LAYOUT
  /* Maximum Difference */  table value最大浮动
  /* Conversion Method  */  见COMPU_METHOD
  /* Lower Limit        */  table values范围
  /* Upper Limit        */  table values范围
/end CHARACTERISTIC
  1. MEASUREMENT:该块用来定义测量变量,里边包含了可以被测量的变量的名字,地址,长度,计算公式,精度,最大最小值等信息,一个MODULE里边可以出现很多次这样的块,也就是说一个ECU可以有很多的测量变量。
/begin MEASUREMENT
  /* Name               */  unique identifier
  /* Long Identifier    */  'comment, description'
  /* Data Type          */  见A2L文件预定义类型[datatype类型]
  /* Conversion Method  */  见COMPU_METHOD
  /* Resolution         */  smallest possible change in bits
  /* Accuracy           */  possible variation from exact value in %
  /* Lower Limit        */  table values范围
  /* Upper Limit        */  table values范围
  ECU_ADDRESS               Addess in the memory
/end MEASUREMENT
  1. COMPU_METHOD:该块用于定义计算公式,及原始值和物理值之前的转换关系,这些公式可以被标定变量和测量变量来引用,从而将原始值转换成便于用户阅读和使用的物理值。具体有6种转换方法。
/begin COMPU_METHOD
  /* Name               */  unique identifier
  /* Long Identifier    */  'comment, description'
  /* ConversionType     */  见A2L文件预定义类型[ConversionType类型]
  /* Format             */  '%[总长].[小数点位数]'
  /* Unit               */  '物理单位'
  /* Lower Limit        */  table values范围
  /* Upper Limit        */  table values范围
  COMPU_TAB_REF            见COMPU_VTAB /*ConversionType选择TAB_VERB时需要*/
  COEFFS                   a b c d e f /*ConversionType选择RAT_FUNC时需要*/
/end COMPU_METHOD
  1. COMPU_VTAB:该块用来定义原始值和物理值的映射关系,是一种特殊的转换关系,它一般应用于枚举变量。
/begin COMPU_VTAB
  /* Name               */  VTAB_FOR_COMPU_METHOD_0
  /* Long Identifier    */  'comment, description'
  /* Conversion Type    */  只能选择TAB_VERB
  /* Num of Elements    */  number of value pairs
  /* Table Element      */  float 'string'
/end COMPU_VTAB
  1. FUNCTION:这个块不是必须。

  2. GROUPS:该块是把标定变量和测量变量按照一定的逻辑(比如功能模块)组织起来,在上位机中形成一个下拉菜单,使得用于可以从中选择变量,这块是可选的。

3 A2L文件预定义类型

datatype类型描述
UBYTE1字节无符号整型
SBYTE1字节有符号整型
UWORD2字节无符号整型
SWORD2字节有符号整型
ULONG4字节无符号整型
SLONG4字节有符号整型
A_UINT648字节无符号整型
A_INT648字节有符号整型
FLOAT32_IEEE4字节浮点型
FLOAT64_IEEE8字节浮点型
Type类型描述
VALUE
CURVE
MAP
ConversionType类型描述
RAT_FUNC有理转换Rational,y=(axx+bx+c)/(dxx+ex+f)
TAB_VERB字符表转换Verbal Table
IndexMode类型描述
COLUMN_DIRdeposited in columns
ROW_DIRdeposited in rows
addrtype类型描述
PBYTE相关内存位置有一个指向该表值或轴点值的1字节指针
PWORD相关内存位置有一个指向该表值或轴点值的2字节指针
PLONG相关内存位置有一个指向该表值或轴点值的4字节指针
DIRECT相关的内存位置具有第一个表值或轴点值,所有其他的都跟随递增地址

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多