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

news2024/9/23 15:28:55

     

目录

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 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,举例如下:

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

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

 

 

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

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

相关文章

JavaScript的学习,就这一篇就OK了!(超详细)

目录 Day27 JavaScript(1) 1、JS的引入方式 2、ECMAScript基本语法 3、ECMAScript 基本数据类型​编辑 3.1 数字类型 3.2 字符串 3.3 布尔值 3.4 空值(Undefined和Null) 3.5 类型转换 3.6 原始值和引用值 4、运算符 5、流程控制语句 5.1 分…

云原生微服务-理论篇

文章目录 分布式应用的需求分布式架构治理模式演进ESB 是什么?微服务架构 MSA微服务实践细节微服务治理框架sidercar 什么是service mesh?康威定律微服务的扩展性什么是MSA 架构?中台战略和微服务微服务总体架构组件微服务网关服务发现与路由…

ps找不到msvcp140.dll怎么办?亲测5个有效的修复方法分享

运行Photoshop时提示找不到MSVCP140.dll,这是因为计算机MSVCP140.dll文件丢失或者损坏。msvcp140.dll是微软Visual C 2015运行库的一部分,它包含了许多用于支持C运行的函数和类。当我们在使用某些程序时,如果这个程序依赖于msvcp140.dll&…

【c++随笔13】多态

【c随笔13】多态 多态性(Polymorphism)在面向对象编程中是一个重要概念,它允许以统一的方式处理不同类型的对象,并在运行时动态确定实际执行的方法或函数。一、什么是多态性?1、关键概念:C的多态性2、多态定…

构造函数,原型对象,实例对象

1.构造函数、原型对象、实例对象三者分别是什么? 构造函数:用来创建对象的函数,创建实例对象的模板 。构造函数的函数名尽量首字母大写(为了区分普通函数和构造函数)原型对象:每一个函数在创建的时候,系统都会给分配一…

【Android Jetpack】DataStore的介绍

DataStore Jetpack DataStore是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore使用Kotlin协程和Flow以异步、一致的事务方式存储数据。 注意:如果您需要支持大型或复杂数据集、部分更新或参照完整性,请考虑使…

【算法挨揍日记】day28——413. 等差数列划分、978. 最长湍流子数组

413. 等差数列划分 413. 等差数列划分 题目描述: 如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums…

【wp】2023第七届HECTF信息安全挑战赛 Web

伪装者 考点:http协议flask的session伪造ssrf读取文件 首先根据题目要求就行伪造HTTP 这里不多说,比较基础 然后下面得到是个登入 页面,我们输入zxk1ing 得到 说什么要白马王子 ,一眼session伪造 看到ey开头感觉是jwt 输入看看 得…

动态规划专项---最长上升子序列模型

文章目录 怪盗基德的滑翔翼登山合唱队形友好城市最大上升子序列和拦截导弹导弹防御系统最长公共上升子序列 一、怪盗基德的滑翔翼OJ链接 本题思路:本题是上升子序列模型中比较简单的模型&#xff0c;分别是从前往后和从后往前走一遍LIS即可。 #include <bits/stdc.h>co…

深度学习中的图像融合:图像融合论文阅读与实战

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 abs 介绍图像融合概念&#xff0c;回顾sota模型&#xff0c;其中包括数字摄像图像融合&#xff0c;多模态图像融合&#xff0c; 接着评估一些代表方法 介绍一些常见应用&#xff0c;比如RGBT目标跟踪&#xff0c;…

PgSQL技术内幕-Bitmap Index Scan

PgSQL技术内幕-Bitmap Index Scan 1、简介 Bitmap索引扫描是对索引扫描的一个优化&#xff0c;通过建立位图的方式将原来的随机堆表访问转换成顺序堆表访问。主要分为两点&#xff1a;1&#xff09;管理每个Bitmap的hash slot没用完时&#xff0c;每个Bitmap代表每个heap页中满…

LeetCode【92】翻转链表II

题目&#xff1a; 思路&#xff1a; https://blog.csdn.net/DarkAndGrey/article/details/122146216 public ListNode reverseBetween(ListNode head, int left, int right) {if(head null || right left){return head;// 头节点为null&#xff0c;链表为空&#xff0c;反…

340条样本就能让GPT-4崩溃,输出有害内容高达95%?OpenAI的安全防护措施再次失效

仅需340个示例微调GPT-4&#xff0c;即可绕过安全限制&#xff0c;让模型说出“枪支改装方法”、“生化武器制作过程”等有害内容&#xff1f; OpenAI的安全防护措施再次失效&#xff0c;攻击的成功率高达95%&#xff01; 近日&#xff0c;美国顶尖大学UIUC与斯坦福联合对GPT…

华为麒麟服务器--硬盘问题

记录以下今天处理的服务器&#xff1a; 情况说明&#xff1a;linux 系统&#xff0c;不知道什么原因系统就突然不能用了&#xff08;据说是前段时间断电来着&#xff0c;但是机房有应急电源&#xff09;。 系统环境&#xff1a; 服务器&#xff1a;华为RH2288H V3 服务器 服…

(数据库管理系统)DBMS与(数据库系统)DBS的区别

数据库管理系统&#xff08;DBMS&#xff0c;Database Management System&#xff09;和数据库系统&#xff08;DBS&#xff0c;Database System&#xff09;是两个相关但不同的概念。 DBS是一个更广泛的概念&#xff0c;指的是计算机系统引入数据库后的系统&#xff0c;包括数…

vscode设置代码模板

一键生成vue3模板代码 效果演示 输入vue3 显示快捷键 按回车键 一键生成自定义模板 实现方法 进入用户代码片段设置 选择片段语言 vue.json输入自定义的代码片段 prefix是触发的内容&#xff0c;按自己的喜好来就行&#xff1b; body是模板代码&#xff0c;写入自己需要的…

SpringBoot常见注解

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

leetcode刷题日志-68.文本左右对齐

给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单词。必要时可…

基于截图页面生成前端项目

前两天&#xff0c;在群里看见一个视频&#xff0c;视频中&#xff0c;作者截图twitter首页&#xff0c;然后使用截图直接生成与截图布局非常相近的前端项目&#xff0c;效果还是比较惊艳的。 今天陪老婆回老家&#xff0c;路上clone这个项目的代码到本地&#xff0c;学习了一下…

IDEA自动注解设置(中文版)

IDEA自动注解设置 1、添加类自动注释 文件 - 设置 - 编辑器 - 文件和代码模板 - Include - File Header /** *description&#xff1a;TODO *author&#xff1a; ${USER} *create&#xff1a; ${DATE} ${TIME} */2、添加类方法自动注释 文件 - 设置 - 编辑器 - 实时模版 - …