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

     

目录

1.A2L由来

2.A2L格式

2.1 PROJECT

2.2 MODULE中包含的内容

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如下:

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列表结构体类型,举例如下:

/begin A2MLblock "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,举例如下:

/begin IF_DATA XCP /begin PROTOCOL_LAYER0x100 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,可以从这里入手。

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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/152626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django 入门学习总结2 创建一个投票系统

通过学习,我们可以实现一个简单的投票系统。这个投票系统有两部分组成。 公共部分,公众可以查看和进行投票。管理员可以进行增加、删除、修改投票信息。 这里投票系统Python语言版本为3.10.13,Django Web框架版本为4.2.7。 投票系统的实现…

系列二、Lock接口

一、多线程编程模板 线程 操作 资源类 高内聚 低耦合 二、实现步骤 1、创建资源类 2、资源类里创建同步方法、同步代码块 三、12306卖票程序 3.1、synchronized实现 3.1.1、Ticket /*** Author : 一叶浮萍归大海* Date: 2023/11/20 8:54* …

试用无线调试器PowerDebugger小记

试用无线调试器PowerDebugger小记 文章目录 试用无线调试器PowerDebugger小记引言准备软硬件环境PowerDebugger 无线调试器EVB-YTM32B1LE0-Q64 开发板 开始调试小结参考文献 引言 多年前调试智能车时,抱着电脑连着小车在跑道上一边跑一边看数据的经历,让…

计算机毕业设计选题推荐-家庭理财微信小程序/安卓APP-项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

leetcode:504. 七进制数

一、题目: 链接: 504. 七进制数 - 力扣(LeetCode) 函数原型: char* convertToBase7(int num) 二、思路 本题要将十进制数转换为二进制数,只要将十进制num数模7再除7,直到num等于0 每次将模7的结…

hologres 索引与查询优化

hologres 优化部分 1 hologres 建表优化1.1 建表中的配置优化1.1 字典索引 dictionary_encoding_columns1.2 位图索引 bitmap_columns1.2.2 Bitmap和Clustering Key的区别 1.3 聚簇索引Clustering Key 1 hologres 建表优化 1.1 建表中的配置优化 根据 holo的 存储引擎部分的知…

【AI视野·今日Robot 机器人论文速览 第六十四期】Fri, 27 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 27 Oct 2023 Totally 27 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers 6-DoF Stability Field via Diffusion Models Authors Takuma Yoneda, Tianchong Jiang, Gregory Shakhnarovich, Matthew R. …

PostgreSQL数据库结合内网穿透实现公网远程连接

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统(RDBMS),下…

Python的os.path.join()详解

当你需要构建文件路径时,os.path.join() 是一个很有用的方法。这个方法会根据你的操作系统使用正确的路径分隔符(例如,在 Windows 上是反斜杠 \,在类 Unix 系统上是正斜杠 /)来连接路径中的各个部分。这样你就可以确保…

【洛谷 P3743】kotori的设备 题解(二分答案+循环)

kotori的设备 题目背景 kotori 有 n n n 个可同时使用的设备。 题目描述 第 i i i 个设备每秒消耗 a i a_i ai​ 个单位能量。能量的使用是连续的,也就是说能量不是某时刻突然消耗的,而是匀速消耗。也就是说,对于任意实数,…

数据结构--串的基本概念

目录 串的基本概念 串的定义 串与线性表对比 ​串的基本操作​ 串的比较 字符集编码 乱码问题​编辑 总结 ​串的存储结构 ​串的顺序存储​编辑 串的链式存储 串的基本操作 1、求字串 2、比较 3、定位操作 总结 串的基本概念 串的定义 串与线性表对比 串的…

python的socket模块以及通信相关学习笔记

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯(最初设计是为了是使同一台计算机中的不同进程进行信息传递通信),最后拓展到可以使网络上两台计…

俄罗斯方块游戏制作

创建包和文件夹 1.创建小方块类 package eluosifangkuai; import java.awt.image.BufferedImage; import java.util.Objects;/*** author xiaoZhao* date 2022/5/7* describe* 小方块类* 方法: 左移、右移、下落*/ public class Cell {// 行private int row;//…

猫12分类:使用多线程爬取图片的Python程序

本文目标 对于猫12目标检测部分的数据集,采用网络爬虫来制作数据集。 在网络爬虫中,经常需要下载大量的图片。为了提高下载效率,可以使用多线程来并发地下载图片。本文将介绍如何使用Python编写一个多线程爬虫程序,用于爬取图片…

小黑子的SSM整合

SSM整合 一、基于restful页面数据交互1.1 后台接口开发1.2 页面访问处理 二、ssm整合2.1 流程分析2.2 整合配置2.3 功能模块开发2.4 接口测试2.5 表现层与前端数据传输协议定义2.5.1 协议实现 2.6 异常处理器2.6.1 RestControllerAdvice2.6.2 ExceptionHandler2.6.3 项目异常处…

.Net6 Api Swagger配置

1、定义个Swagger版本&#xff08;组&#xff09;的枚举 namespace WebApp.Enums {/// <summary>/// api版本枚举/// </summary>public enum ApiVersion{/// <summary>/// v1版本/// </summary>v1 1,/// <summary>/// v2版本/// </summary&…

内存学习(4):内存分类与常用概念3(ROM)

1 ROM介绍 ROM即为只读存储器&#xff0c;全拼是Read Only Memory。 1.1 “只读”的由来 ROM叫只读存储器是因为最早的ROM&#xff08;MROM&#xff09;确实是只能读取不能写入&#xff0c;一旦出厂不能再写&#xff0c;需要在出厂之前预设好它的数据&#xff0c;并且它是掉…

十四、Docker的基本操作

目录 &#xff08;一&#xff09;镜像命令 一、拉取Nginx 二、查看镜像 三、导出文件 四、删除镜像 五、加载镜像 &#xff08;二&#xff09;容器命令 一、例子&#xff1a;运行一个nginx容器 1、输入运行命令 2、使用命令查看宿主机ip 3、在外部浏览器访问 4、查看…

【机器学习】037_暂退法

一、实现原理 具有输入噪音的训练&#xff0c;等价于Tikhonov正则化 核心方法&#xff1a;在前向传播的过程中&#xff0c;计算每一内部层的同时注入噪声 从作用上来看&#xff0c;表面上来说是在训练过程中丢弃一些神经元 假设x是某一层神经网络层的输出&#xff0c;是下一…

【机器学习】036_权重衰退

一、范数 定义&#xff1a;向量的范数表示一个向量有多大&#xff08;分量的大小&#xff09; L1范数&#xff1a; 即向量元素绝对值之和&#xff0c;用符号 ‖ v ‖ 1 表示。 公式&#xff1a; L2范数&#xff1a; 即向量的模&#xff0c;向量各元素绝对值的平方之和再…