A2L文件是用于标定的一种文件,其作为ASAP2标准的表现形式,主要包含了ECU信息描述部分和ECU通讯信息描述部分。

什么是ASAP2标准?

此处要引用别人的话来说明了,因为我本人对其也不是很了解。ASAP2标准是ASAM在1998年提出来的,现在它的名字叫做ASAM MCD-2MC/D,是ASAP标准中的第二部分。整个ASAP有3部分内容,ASAP1描述了上位机(Master)和ECU(Slave)之间的通讯协议(可以是XCPonCAN,XCPonUSB等,也可以是CCP,还可以是UDS)。ASAP2规定了Master端如何去描述和解析Slave端的信息,ASAP3规定了如何使用第三方工具和设备操作和控制上位机(Master),例如如何使用台架软件来控制标定测量工具去对ECU进行控制和测试。

什么是A2L文件?

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

/begin PROJECT

ident Name

string LongIdentifier

[->HEADER]

{->MODULE}*

/end PROJECT

PROJECT是关键字,指明当前变量的类型,/begin和/end是分界符,表示PROJECT的作用范围,通常称为一个模块。Name表示PROJECT的名称,LongIdentifier表示当前变量注释。HEADER和MODULE当前变量的成员,分别表示头信息和设备信息。头信息是可选项,出现一次或者没有,MODULE是任选项,出现多次或者不出现。一个A2L文件只能有一个PROJECT,对应一个ECU,其设备信息由一个MODULE来描述。一个设备中比较重要的成员变量有以下几种:

  1. A2ML:描述接口数据格式
  2. MOD_PAR:设备参数描述
  3. MOD_COMMON:设备公共参数
  4. IF_DATA:接口数据具体参数
  5. CHARACTERISTIC:标定变量,其类型包括VALUE,CURVE,MAP
  6. MEASUREMENT:测量变量
  7. COMPU_METHOD:转换方法,具体有6种转换方法
  8. RECORD_LAYOUT:内存布局,描述数据的存放方式

好了,了解了以上的内容,我们就可以去研究如何去获得A2L文件了,1.A2L文件是由第三方提供的;要么2.利用专用工具生成A2L文件(CANape、Targetlink等)。通常情况下,专用工具生成的文件是不能够直接用于标定的,因为它里面不包含准确的内存地址,无法对应我们要标定的参数和测量的信号。标定的工具一般有INCA、CANape等等,我目前手里面有的设备是dSPACE的DCI-CAN1,目前应该用的都是DCI-CAN2了,所以本文主要是针对simulink软件生成自定义用于dSPACE工具标定的A2L文件的方法进行探讨。

假定我们的算法模型如下:

其中ParF_A和ParF_B是需要标定的参数,X和Y是需要监测的信号。在simulink自带的数据字典中做相应的配置,包括准确的数据类型,存储类型,初值等。然后control+E打开simulink configuration,在code generation下面找到interface栏,Data Exchange->ASAP2。这样配置完成后其实对模型进行build已经能够生成A2L文件了,关于生成代码的配置我这里没有一一描述。

并且也能够找到CHARACTERISTIC对应的参数,但是我们发现其生成的A2L文件缺少一些内容,如IF_DATA字段,MD_COMMEN字段,而且HEADER中也没有内容。所以想要的到包含IF_DATA等字段的A2L文件就需要对其TLC文件进行自定义。打开‘MATLABroot/toolbox/rtw/twrgets/asap2/asap2/user’目录下的asap2userlib.tlc文件,对其进行编辑

%function ASAP2UserFcnWriteHeader() Output
  /begin HEADER "Header Comments go here"
   
  /end HEADER
%endfunction

%% Function: ASAP2UserFcnWriteHardwareInterface
%% Abstract: Used to define hardware interface for ASAP2 file.
%%
%% NOTE: It may be easiest to inline separate files for each section:
%% For example:
%%   %include "./user_a2ml.txt"
%% 
%function ASAP2UserFcnWriteHardwareInterface() Output

/begin MOD_PAR "%<ASAP2ModParComment>"

/end MOD_PAR
    
     /begin MOD_COMMON  "%<ASAP2MOD_COMMON_Comment>" 
        BYTE_ORDER     %<ASAP2BYTE_ORDER>
     /end MOD_COMMON
%endfunction

我主要对这两个函数进行修改,插入了IF_DATA和MOD_PAR内容,

%function ASAP2UserFcnWriteHardwareInterface() Output
    /begin A2ML
        /include XCP_v1_0_definitions.aml
       block "IF_DATA" taggedunion if_data {
         /include XCP.aml
         /include dSPACE_XCP.aml
       };
    /end A2ML
    
     /begin MOD_COMMON  "%<ASAP2MOD_COMMON_Comment>"
        ALIGNMENT_BYTE 1
        ALIGNMENT_WORD 2
        ALIGNMENT_LONG 4
        ALIGNMENT_FLOAT32_IEEE 4
        ALIGNMENT_FLOAT64_IEEE 4
        DEPOSIT ABSOLUTE
        BYTE_ORDER     %<ASAP2BYTE_ORDER>
    /end MOD_COMMON

/begin MOD_PAR "%<ASAP2ModParComment>"
        NO_OF_INTERFACES 1
        /begin MEMORY_SEGMENT
            CalibrationData                                                 /* Name */
            "Memory segment for page CalibrationData"                       /* LongIdentifier */
            DATA                                                            /* PrgType */
            RAM                                                             /* MemoryType */
            EXTERN                                                          /* Attribute */
            0x40000000                                                      /* Address */
            0x9FFF                                                          /* Size */
            -1 -1 -1 -1 -1                                                  /* Offset */
            /begin IF_DATA XCP
                /begin SEGMENT。。。。。还有内容

保存,回到模型路径,对算法重新build,生成心的A2L如下:

已经包含了接口数据具体参数等内容。接下来把算法的代码放到IDE中,将工程重新编译。MATLAB提供了两种方法更新A2L中的ECU地址。分别利用工程编译后的.map文件和.elf文件。前者在更新完地址后可以对比检查,但是对于不同的编译器其.map问价的格式有不同,所以有的时候MATLAB会提示错误,这就需要再次更改tlc文件来实现,后者一般不会报错,但是.elf无法打开,从而无法查证更新的地址的准确性。两种方法利用到的函数分别是:asap2post(A2L,MAP);rtw.asap2SetAddress(A2L,ELF);我采用的是后者进行更新,同时我所使用的的IDE编译后还有.map文件,进行对比检查,没有错误。到此A2L就完成了,将其导入到controlDesk中,就可以进行标定测量了。

由于每次编译都可能导致变量地址的变化,所以在每次编译后都要重新更新A2L中的ECU地址,再将其reload到上位机中,以保证变量读取写入正确的位置。

在实际应用过程中发现,MATLAB对定义为结构体的参数或者变量不会生成对应的字段,据说是此功能用户量较少,很多问题没有暴露出来,所以在应用此方法是应尽量避免定义结构体参数。

整理就到这里,欢迎交流指正!

利用Simulink生成自定义的A2L相关推荐

  1. spring mvc项目中利用freemarker生成自定义标签

    2019独角兽企业重金招聘Python工程师标准>>> spring mvc项目中利用freemarker生成自定义标签 博客分类: java spring mvc +freemar ...

  2. 利用Simulink、STM32CUBEMX、STM32-MAT/TARGET自动生成简单的led灯闪烁代码(保姆级教程)

    1.简介 这里利用基于STM32F103RCT6的一块自带led灯的开发板,首先通过STM32CUBEMX产生.ioc配置文件,其次对Simulink进行所必须的配置,然后利用Simulink的图形化 ...

  3. Vue:利用Vue生成的网页,在浏览器中的标签页中的图标与标题怎么修改为自己的?

    Vue:利用Vue生成的网页,在浏览器中的标签页中的图标与标题怎么修改为自己的? 在解决这个问题的时候,在网上搜到了许多答案,可以说是众说纷纭,作者结合了多个答案,最后解决了这个问题,下面把用到的资源 ...

  4. python 词云_利用Python生成词云

    利用Python生成词云 一.第三方库的安装与介绍 1.1  Python第三方库jieba(中文分词) 1.介绍 "结巴"中文分词:做最好的 Python 中文分词组件. 2.特 ...

  5. 利用C++实现自定义插件

    利用C++实现自定义插件 插件机制能够方便地扩展已有应用程序的功能.用C++实现插件机制的基本思路是:应用程序提供接口,由用户或第三方实现这些接口,并编译出相应的动态链接库(即插件):将所有插件放到某 ...

  6. CodeSmith实用技巧(五):利用继承生成可变化的代码

    用CodeSmith生成可变化的代码,其实是先利用CodeSmith生成一个基类,然后自定义其它类继承于该类.当我们重新生成基类时CodeSmith不要接触继承的子类中的代码.看下面的这段模版脚本:& ...

  7. 利用Photoshop生成Sprite sheet

    利用Photoshop生成Sprite sheet 在unity开发或其他项目中,往往希望把帧动画的每一帧.或者是同一场景中用到的素材,存在同一张Sprite图中,避免引擎反复读取素材而降低效率.但是 ...

  8. Java根据word 模板,生成自定义内容的word 文件

    处理思路: 将word模板以xml格式另存一份,得到xml格式模板 在xml 文件中,使用freemark标签,替换一些自定义值 使用freemark 解析xml ,输出到.doc 文件 在处理的时候 ...

  9. 利用Django生成PDF文档

    利用Django生成PDF文档 本小节说明如何利用Django视图动态生成PDF文档.此功能是由优秀的开源Python PDF库ReportLab实现的. 动态生成PDF文档的好处在于你可以定制PDF ...

最新文章

  1. linux 下安装 php 扩展 典型安装 mysql curl mb_string
  2. IPv6网络协议的安全疑云
  3. PFLD:简单高效的实用人脸关键点检测算法
  4. 电脑桌面点任何文件都打开计算机,桌面上的文件全部都打不开
  5. linux怎么改目录位置,Linux下更改MySQL数据目录位置具体操作方法
  6. html是非结构数据吗,Python处理非结构数据
  7. 【最短路径问题笔记】SPFA算法及负环的判断
  8. JedisCluster设置密码
  9. WIN计算机左侧没有桌面,电脑桌面没有计算机图标!三步解决!
  10. javaWeb图书购物商城
  11. 易语言 mysql操作_易语言数据库应用手册
  12. 800万像素摄像头,评估可以看到多远的红绿灯【1】?
  13. 2018时间的朋友罗振宇跨年演讲主题是什么?
  14. mysql日期转为周数
  15. 上手阿里云服务器(一)——搭建LAMP开发环境、防火墙、文件传输
  16. 微信公众号的开发和使用注意事项有哪些?
  17. 内嵌html5,显示:内嵌HTML5元素
  18. 杭州衣服批发市场服饰外贸SOHO族:实战运营
  19. 怎样去掉超级链接的下划线和颜色.
  20. Linux各个发行版本代号整理

热门文章

  1. Android 下载网络图片保存到本地
  2. [附源码]Python计算机毕业设计 校园疫情防控系统
  3. 电脑配置留底2019.10
  4. Python制作华氏摄氏温度转化器
  5. Fliqlo——翻页时钟屏保(最新版本,附有链接)
  6. 数字IC手撕代码-同步FIFO
  7. Proe5.0滚轮不能使用的设置
  8. 如何卸载Android自带系统应用
  9. 合天CTF-签到般的包含
  10. H5页面中调起高德地图app,如果未安装应用,则提示用户安装