汽车标定技术--A2L格式分析

目录

1.A2L由来

2.A2L格式

[2.1 PROJECT](#2.1 PROJECT)

[2.2 MODULE中包含的内容](#2.2 MODULE中包含的内容)

[3. INCA和CANape兼容吗?](#3. INCA和CANape兼容吗?)


最近有朋友用Vector ASAP2Editor编译的A2L文件在INCA7.4中无法识别,我记得以前做的时候是可以识别的,难不成最近有什么变动吗?出于好奇,我从A2L由来、格式等方面进行解析。

1.A2L由来

我们知道,要车规ECU的标定和测量,标定上位机如INCA\CANape是需要知道ECU内部标定量观测量的信息(访问地址、转换公式、单位等),还需要知道如何访问这些变量(只读、还是可读写)。

所以,ASAM组织就提出了一个标准ASAM MCD-2 MC(最初叫ASAP2),用于定义上面提到的这些内容的格式。这个标准定义全名叫做ECU Measurement and Calibration Data Exchange Format,很明显,这是一个描述文件格式标准,他们把这种格式叫做a2l(ASAM MCD-2 MC Language),久而久之,大家都把这个描述文件叫做A2L文件了。一说就知道是干标定的。

2.A2L格式

A2L文件是一种ASCII格式可读文件,记事本都可以打开,通常需要指定编码格式为UTF-8,如果没有指定就使用默认的Latin-1。

根据官网介绍,A2L文件至少应包含如下四个层级:

|------------|-------------------------------|-------------------------------------------|
| 层级 | 描述 | 备注 |
| PROJECT | 一个A2L一个PROJECT,描述当前项目所有标定测量数据 | APAP2_V:描述使用的那一版的标准 A2ML_V::描述使用那一半的AML标准 |
| Module | 每个module表示一个ECU | 目前接触的A2L都只有一个Module |
| L1 Keyword | 用于描述ECU的内部所有实际信息 | 包括A2ML、曲线坐标描述、转换公式、标定量等等,有关键词定义 |
| L2 Keyword | 从L1中继承下来的特性 | 这个一般是对齐方式,例如ALIGNMENT_BYTE等 |

今天主要聊一下上文的前三个层级

2.1 PROJECT

一个A2L文件包含一个PROJECT,描述当前项目所有标定测量数据,在声明PROJECT之前,通常是把ASAP2_VERSION说明出来。猜测CANape和INCA根据自己软件版本首先识别ASAP2这个版本。

完成版本定义后,继续描述当前项目编号和ECU软件、ECU所有信息。

示例Demo如下:

cpp 复制代码
ASAP2_VERSION 1 71
/begin PROJECT ASAP2_Example ""

  /begin HEADER "ASAP2 Example File"
    VERSION "V1.7.1"
    PROJECT_NO P2016_09_AE_MCD_2MC_BS_V1_7_1_main
  /end HEADER

  /begin MODULE Example ""

    ...
  /end MODULE

/end PEOJECT

MODULE表示一个ECU的所有数据描述,因此如上示例所示,MODULE必须处在一个PROJECT中。

2.2 MODULE中包含的内容

既然MODULE中包含了ECU所有的描述信息,那么有哪些关键字需要我们注意呢?

|------------|-----------------------------------------------------------------------|
| ECU描述关键字 | 描述 |
| A2ML | 用于定义标定测量上位机和ECU之间通信参数的格式 |
| IF_DATA | 用于定义标定测量上位机和ECU之间通信参数的具体值,包括协议栈配置,该部分语法要与A2ML语法一致 |
| MOD_COMMON | 定义MODULE其他参数,字节对齐、字节顺序、ECU内存中数据的大小和存储 |
| MOD_PAR | 定义MODULE特定参数,例如CPU名、版本、ECU指定参数;同时还包括ECU memory定义(通过关键字MEMORY_SEGMENT) |

上面这一部分,我通常把它整体叫做头部份,因为标定量、测量量这些都是可以通过Simulink生成的,因此研究比较少,但还是把一些关键字列举如下:

|------------------|-----------------------------|---------------------------------------------------------------------------------------------------|
| 标定测量关键字 | 描述 | |
| CHARACTERISTIC | 描述标定量的关键词,由地址、格式、转换方式、上下限构成 | |
| MEASUREMENT | 描述观测量的关键词,与标定量关键词类似 | |
| FUNCTION | 用于组测量,捆绑标定量和观测量一起使用 | |
| BLOB | 用于定义标定量的对象,如每个数组的字节 | |

当然还有标定量、观测量的转换公式关键字 COMPU_METHOD、COMPU_TAB(转换列表)等,这里就不一一提及了。

那么具体到A2L文件里,上述关键字应该怎么用呢?我们一一来看

最最重要的文件,A2ML

A2ML必须最先定义,因为它要为后续关键字提供类型定义,比如说协议层的参数结构体类型,DAQ列表结构体类型,举例如下:

cpp 复制代码
/begin A2ML
    block "IF_DATA" taggeunion if_data{
         "XCP" struct {
          taggedstruct {
            block "PROTOCOL_LAYER" struct {
                uint;  /* XCP protocol layer version, current 0x100*/
                uint;  /* T1 [ms] Time-out of the standard CTO, for example CONNECT*/
                uint;  /* T2 [ms] Time-out of the checksum calculation*/
                uint;  
                /* T3 [ms] Time-out of the non-volatile memory programming:PROGRAM_START, PROGRAM_VERIFY, PROGRAM_PREPARE*/
                uint;  /* T4 [ms] Time-out of the non-volatile memory programming: PROGRAM_CLEAR*/
                uint;  /* T5 [ms] Time-out of the non-volatile memory programming: PROGRAM, PROGRAM_RESET, PROGRAM_MAX*/
                uint;  /* T6 [ms] Time-out of the command CONNECT(USER_DEFINED)*/
                uint;  /* T7 [ms] Time-out of the pre-action*/
                uchar; /* MAX_CTO: Indicates the maximum length of a CTO packet in bytes. */
                uint;  /* MAX_DTO: Indicates the maximum length of a DTO packet in bytes. */
                enum {
                    "BYTE_ORDER_MSB_LAST" = 0,
                    "BYTE_ORDER_MSB_FIRST" = 1
                     };
                  };
                };
            };
/end A2ML

那么上述A2ML如何使用的呢?我们来看,关键词PROTOCOL_LAYER,举例如下:

cpp 复制代码
/begin IF_DATA XCP 
      /begin PROTOCOL_LAYER
        0x100 0x20 0x20 0x20 0x20 
        0x20  0x20 0x20 0x8  0x8 
        BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE
      /end PROTOCOL_LAYER
/end IF_DATA XCP

是不是非常清晰,0x100,表示当前XCP协议使用的1.00版本,后面数字就与A2ML里定义的一样,比如说各种timeout时间阈值,CTO长度等等。大家可以根据自己的A2L进行分析。

3. INCA和CANape兼容吗?

朋友最近遇到的问题如下:

首先是没有正确的项目描述,看了一下具体文档,由PROJECT关键字,那是否是ASAP2版本问题呢?

修改版本之后,暂时能获取到项目,但又出现了如下问题:

这里提到了AML的描述变化了,很明显,用CANape带的ASAP2Editor修改的A2L文件生成的头部份是与INCA有出入的。因此需要项目对比A2ML描述。

经过对比发现描述上有如下区别:

可以看到INCA报错也说没有定义 ECU_ACCESS_ALLOWED,可以从这里入手。

鉴于没有工具可以验证,将这方面猜想委托朋友验证一下,各位静候结果吧。

相关推荐
Renderbus瑞云渲染农场9 小时前
云渲染与汽车CGI图像技术优势和劣势
汽车
美格智能11 小时前
美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年
5g·汽车
车载诊断技术12 小时前
电子电气架构 --- 整车控制系统
网络·架构·汽车·soa·电子电器架构
叫我:松哥17 小时前
基于python多准则决策分析的汽车推荐算法设计与实现
python·算法·数据挖掘·数据分析·汽车·推荐算法
ACRELKY17 小时前
新能源汽车与公共充电桩布局
汽车
来可小闵儿20 小时前
智诊小助手-AP/Station模式切换
汽车·电脑
思茂信息1 天前
CST汽车天线仿真(双向混合求解)
javascript·人工智能·5g·汽车·ar·软件工程
朗迪锋2 天前
虚拟现实辅助工程技术如何加速汽车设计与制造
汽车·制造·vr
李恒-聆机智能专精数采2 天前
从零开始了解数采(十二)——汽车锂电池板自动装配线数据采集方案
大数据·数据挖掘·云计算·汽车·边缘计算·制造·数据可视化
EVERSPIN2 天前
汽车车辆控制单元SRAM存储解决方案
汽车