XCP协议和A2L文件 – A2L(ASAP2)解析

发布: Edward  •  分类: Protocol  •  June 17, 2017, 10 p.m.  •  编辑

XCP协议和A2L文件系列文章将要接近尾声了,我们最后将要讲解的是同样重要的A2L文件和ASAP2标准,ASAP2标准是一个比较复杂的标准,详细的一条一条讲解标准内容并没有太大的价格,我们将主要以一种应用的方式来带领大家认识ASAP2标准理解作为ASAP2表现形式的A2L文件的作用,最后学会如何阅读和修改A2L文件。

首先我们要搞清楚什么是A2L什么是ASAP2标准,简单来说ASAP2标准是ASAM组织制定的一套标准,该标准规定了上位机(Master)和ECU(Slave)之间的通讯所需要的所有信息(可以是XCPonCAN,XCPonUSB等,也可以是CCP,还可以是UDS),而A2L文件就是ASAP2标准的表现形式,符合ASAP2标准的A2L文件主要含有两部分内容:ECU的描述信息和通讯方式的描述信息。

什么是ASAP2标准

ASAP2标准是ASAM在1998年提出来的,现在它的名字叫做ASAM MCD-2MC/D,是ASAP标准中的第二部分。整个ASAP有3部分内容,ASAP1描述了上位机(Master)和ECU(Slave)之间的通讯协议,我们这个系列文章介绍的XCP以及它的前身CCP都是属于ASAP1标准,ASAP2规定了Master端如何去描述和解析Slave端的信息,ASAP3规定了如何使用第三方工具和设备操作和控制上位机(Master),例如如何使用台架软件来控制标定测量工具去对ECU进行控制和测试。

ASAP_Overview

ASAP2标准目前的版本为v1.6,对应的文件全名为:ASAM_MCD-2MC_DataSpecifcation_V1.6.pdf

什么是A2L文件

前边介绍了,A2L文件是基于ASAP2标准书写完成的,那么A2L文件到底是什么东西了。首先它是采用ASAP2指定的一套类XML语言的描述性语言(采用开标签和关标签来描述信息)书写的文件,它里边包含了某个特定的ECU中的软件和系统信息,还包含了上位机和ECU通讯方式的约定,它用来指导上位机和ECU的通讯交互过程,让他们对交互的信息有一致的认识,从而是上位机工具准确且友好的将ECU中的信息展现给用户。下面我们来看一下A2L文件的结构和组成。

PROJECT
{
    HEADER{...} /* Project description */
    MODULE Device
    {
        MOD_PAR{...} /* Control unit management data */
        MOD_COMMON {...} /* Module-wide (ECU specific) definitions */
        CHARACTERISTIC{...} /* Adjustable objects */
        CHARACTERISTIC{...}
        ...
        AXIS_PTS{...} /* Axis points objects */
        AXIS_PTS{...}
        ...
        MEASUREMENT{...} /* Measurement objects */
        MEASUREMENT{...}
        ...
        COMPU_METHOD{...} /* Conversion method */
        COMPU_METHOD{...}
        ...
        COMPU_TAB{...} /* Conversion tables */
        COMPU_TAB{...}
        ...
        FUNCTION{...} /* Function allocations */
        FUNCTION{...}
        ...
        GROUP{...} /* Groups */
        GROUP{...}
        ...
        RECORD_LAYOUT{...} /* Record layouts of adjustable objects */
        RECORD_LAYOUT{...}
    }
} /* END OF PROJECT */

一个A2L文件只能有一个Project(项目),而项目中至少要有一个Module,A2L文件的注释和C语言的注释方式是一样的,支持/**/和//两种方式。上边文件结构中,不同的文件块都有着重要的意义:

  • HEADER:这个块里边包含了项目信息,包括项目编号,项目版本等信息。
  • MODULE:这个块里边包含了在标定测量层面来描述ECU需要的所有信息,一个ECU对应一个MODULE块,MODULE由许多子块来组成。
    • MOD_PAR:这个块里包含了用于管理ECU的数据,例如客户名,编号,CPU类型,ECU的内存分配等,其中最重要的就是ECU的内存分配,开发人员需要根据ECU内存分段情况定义MEMORY SEGMENT和SEGMENT里边的PAGE,这里的SEGMENT/PAGE的概念和在线标定中的概念是一致的,请参考在线标定篇章,一个MODULE里边只能出现一次;
    • MOD_COMMON:这个块用来指定ECU的一些标准的一般性描述信息,比如大小端,数据的对齐方式,FLOAT变量的处理方式等,一个MODULE里边只能出现一次;
    • CHARACTERISTIC:这个块用来定义标定变量,里边包含了可以被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息,一个MODULE里边可以出现很多次这样的块,也就是说一个ECU可以有很多的标定变量;
    • AXIS_PTS:这个块用来定义数组或查表变量对应的轴的类型,它将被RECORD_LAYOUT块来引用,一个ECU里边可以有很多种不同的轴类型,用于实现查表和插值;
    • MEASUREMENT:这个块用来定义测量变量,里边包含了可以被测量的变量的名字,地址,长度,计算公式,精度,最大最小值等信息,一个MODULE里边可以出现很多次这样的块,也就是说一个ECU可以有很多的测量变量;
    • COMPU_METHOD:用于定义计算公式,及原始值和物理值之前的转换关系,这些公司可以被标定变量和测量变量来引用,从而将原始值转换成便于用户阅读和使用的物理值;
    • COMPU_TAB:这个块用来定义原始值和物理值的映射关系,是一种特殊的转换关系,它一般应用于枚举变量,例如我们想采集一个代表XCP状态机的变量,分别为0对应DISCONNECTED,1对应CONNECTED,2对应RESUME,那么我们就可以把这样的映射关系定义层一个COMPU_TAB,然后关联到对应的变量上,这时候如果上位机采集到1这样的原始值,它就可以将当前的状态显示成“CONNECTED”字样,方便用于阅读和使用;
    • FUNCTION:这个块不是必须;
    • GROUPS:这个块这个把标定变量和测量变量按照一定的逻辑(比如功能模块)组织起来,在上位机工具中形成一个下拉菜单,使得用于可以从中选择变量,这个块不是必须的;
    • RECORD_LAYOUT:这个块用来定义标定变量的物理存储结构(单个变量,二维表,三维表等)。

上述的这些信息块可以分为两类,一类是随着ECU和XCP实施完成以后就确定的,这类信息一经确定以后再后续的使用过程中是不需要修改的,例如大小端,MEMORY SEGMENT内存分配等,上述HEADER/MOD_PAR/MOD_COMMON属于这一类,另外一类是当ECU软件有所调整的时候就会变化的,例如已有的标定变量和测量变量的地址,甚至变量名,或者可能会新增变量,上述CHARACTERISTIC/AXIS_PTS/MEASUREMENT/COMPU_METHOD/COMPU_TAB/FUNCTION/GROUPS/RECORD_LAYOUT属于这一类。在第二类中改动最多的尤其是CHARACTERISTIC和MEASUREMENT快中的变量地址信息,因为每次软件变化重新编译都会造成这部分信息的更新,地址更新导致的块信息更新需要手动的更改A2L文件才能使得A2L和当前的软件配置起来,只有两者相匹配才能实现正确的标定和测量。

A2L块示例

1.测量变量vechicle_speed可以进行如下定义,该变量处于RAM中,对应的地址是0xD0001234,它的范围是[0-230] ,它在ECU中以一个UWORD类型来表示,原始值和物理值的转换关系为:Phy = 0.003 X Raw ,即Ax+B中A=0.003,B=0v

     /begin MEASUREMENT         VEH_SPD
                    "Vehicle Speed."
                    UWORD
                    Vehicle_Speed_Conversion
                    0 0.000000
                    0.000000 230.000000 
       ECU_ADDRESS          0xD0001234
       DISPLAY_IDENTIFIER       vehicle_speed
    /end MEASUREMENT

    /begin COMPU_METHOD         Vehicle_Speed_Conversion
                    "Ax + B"
                    RAT_FUNC
                    "%4.3"
                    "fact"
       COEFFS           0.0 1.0 0.000000 0.0 0.0 0.003000000
    /end COMPU_METHOD

2.测量变量xcp_state代表XCP的状态,可以进行如下定义,它处于RAM中,在ECU中的地址是0xD0005678,它是一个枚举量,0对应DISCONNECTED,1对应CONNECTED,2对应RESUME

 /begin MEASUREMENT         XCP_STATE
                    "XCP state"
                    UBYTE
                    XCP_STATE_ENUM
                    0 0.000000
                    0.000000 2.000000
       ECU_ADDRESS          0xD0005678
       DISPLAY_IDENTIFIER       xcp_state
    /end MEASUREMENT

    /begin COMPU_METHOD         XCP_STATE_ENUM
                    ""
                    TAB_VERB
                    "%10.4"
                    ""
       COMPU_TAB_REF        XCP_STATE_ENUM_TAB
    /end COMPU_METHOD

   /begin COMPU_VTAB  XCP_STATE_ENUM_TAB
             ""
             TAB_VERB
             3
             0 "DISCONNECTED"
             1 "CONNECTED"
             2 "RESUME"
    /end COMPU_VTAB    

3.标定变量Current_threshold可以进行如下定义,它处在FLASH标定区域,在ECU中的地址是0x00012345,它的范围是[-20,20],是一个有符号量,精度为0.125,即Phy = 0.125 X Raw

    /begin CHARACTERISTIC               Current_threshold
                    "Cur"
                    VALUE
                    0x00012345
                    Standard_SW
                    0
                    current_cmpu
                    -20.0 20.0
       DISPLAY_IDENTIFIER           Current_Vaule
    /end CHARACTERISTIC

    /begin RECORD_LAYOUT            Standard_SW
       FNC_VALUES           1 SWORD COLUMN_DIR DIRECT
    /end RECORD_LAYOUT

    /begin COMPU_METHOD         current_cmpu
                    ""
                    RAT_FUNC
                    "%6.2"
                    "A"
       COEFFS               0.0 1.0 0.000000 0.0 0.0 0.125000000000
    /end COMPU_METHOD

我们前边提到的,在每次软件有更新重新编译以后,会导致这些变量在ECU中的地址有变化,那么上边这些变量对应的ECU ADDRESS条目的内容就需要随着改变,变量的地址信息可以从编译生成的MAP文件中获得,然后手动更新到A2L中。

标签: Automotive Software 软件构架 汽车 软件 标定 测量 MCD CAN Calibration

评论(4)

欢迎留言

This template was modified by Edward