分享

python a2l数据

 ghostvip 2022-10-09 发布于广东

大家好,半年都快结束,自己的simulink文章还没有全部写完,自己要加油呀,一定要完成自己的Smart Goal, 同时也要对一直支持偶的老铁一个交代!加油,屌丝攻城师!!!

按照淡出文章的顺序,此次给大家唠唠A2L的生成,以及应用! 咱们开始!

A2L是干啥的?

A2L文件是建立在ASAP标准上的ECU标定文件。ASAP标准是由德国汽车厂商联合提议和制定的应用于汽车电子标定的企业标准,以致在汽车电子的开发阶段达到工具和方法上的通用及一致。

利用A2L文件,我们可以很方便的进行标定,并且与行业中其他厂商进行接口,如下图所示:

A2L的文件格式就是描述我们生成的mot,hex,s19,这些那件中的那些标定变量,测量信号以及一些参数化的附加信息,如变量地址,转换规则等。如下图

同时A2L中也描述对应的通讯信息,对于控制单元,有多种通讯信息,例如UDS,XCP,CCP,ETK,KW2000,等等 ,如下图:

总结一句话,就是A2L包含标定与测量所必须的一些信息,沟通过程中的协议,对应变量的参数化信息!

MBD中A2L的生成步骤!

A2L的生成方法很多,在这里就基于MBD开发过程中生成的步骤进行讲述,本屌丝手绘版,细节如下图所示:

Step 1:当你生成代码的时候,在模型的设置里面勾选这个就可以生成一个A2L文件。

Step 2: 当你生成基础版本的A2L时候,里面缺少地址信息与通讯协议的定义信息,第一步你可以先merge对应的头文件,包含对应的CCP通讯信息的设置。这里的merge一般我们都用bat脚本或者python脚本进行。

Step 3:将对应的中间版A2L,与代码编译后含有的地址信息文件,进行merge,这个merge可以有matlab自带的,也可以用perl脚本进行,这样也方便进行post build。

生成的步骤大概就这些,下面我们就来搞几个例子,看看让大家看看如何搞!

A2L Header File 示例

CCP协议的格式规定位于A2L文件的前半部分,内容基本固定不变。Matlabroot/toolbox/rtw/targets/asap2/asap2/user/asap2userlib.tlc中的ASAP2UserFcnWriteHardwareInterface函数即为定义该部分内容的模板函数,

我们可以将原平台使用的A2L文件中该部分内容原封不动的抄入这个函数中,即可在A2L文件中生成。由于代码过多且没有技术含量,具体内容请自行参看该函数,这里不再详细进行说明。

单个变量更改示例

这个需要更改的话,我们就需要你对应的TLC文件,下面偶就以观测量为例子,看看如何搞TLC文档。

成观测量定义的模板函数位于Matlabroot/toolbox/rtw/targets/asap2/asap2/user/asap2userlib.tlc中,函数ASAP2UserFcnWriteMeasurement(signal)对每个Signal Object的属性进行分析,并且依据函数中的内容将每个Signal Object在A2L文件中生成measurement定义。原来的函数已经包括measurement的基本内容,函数如下:

按照原来的模板,生成的观测量定义部分为(以变量LV_IGK为例子):

/begin MEASUREMENT

/* Name */ LV_IGK

/* Long identifier */ ''

/* Data type */ UBYTE

/* Conversion method */ COMPU_METHOD_1

/* Resolution (Not used) */ 0

/* Accuracy (Not used) */ 0

/* Lower limit */ 0

/* Upper limit */ 1.0

ECU_ADDRESS @MemoryAddress@

/end MEASUREMENT

其中,Long identifier、Data type、Lower limit、Upper limit都是从Signal Object的属性中得到;Resolution和Accuracy在A2L中不需要,可以删掉;由于在生成A2L时还没有进行CodeWarrior工程编译,因此没有真实确切的地址,只能先用字符串@MemoryAddress@来代替ECU_ADDRESS的内容,在调用CodeWarrior编译后再对A2L中的变量地址进行后期处理,

由于我们需要的A2L文件中,必须要有每个观测量对应于ASAP1B协议的部分,因此还要在原函数中添加一段程序:

/begin IF_DATA ASAP1B_CCP

KP_BLOB

0x00

%

@MemorySize@%@

/end IF_DATA

定制完毕,生成的观测量定义为:

@MemorySize@为观测量在flash中的存储大小,与地址一样,必须进行后期处理。

地址替换修改示例

修改完A2L文件的模板后,系统自动生成的A2L文件已经是符合我们需要的格式了。但是由于A2L文件在CodeWarrior工程编译之前生成,这时map文件还未更新,即标定量还没有指定确切的地址,

因此A2L文件中的标定量是没有真实地址的(生成的时候全部用@MemoryAddress@代替),只能在CodeWarrior工程编译完成之后,自动查找map文件里的标定量地址,并将生成的原A2L文件中的“@MemoryAddress@”用真实地址替换。

实际的过程中,我们大多用perl语言进行处理,方便自动化,但由于全部perl的语言比较难懂,咱们还是以matlab自带的为例!

Matlab为用户提供了一个模板文件——matlabroot/toolbox/rtw/targets/asap2/asap2/asap2post.m,来进行A2L文件的后期处理。该文件中,利用perl语言asap2post.pl对map文件和A2L文件进行对比匹配,来修改A2L文件中的地址。但是该文件依据“标定量名称标定量值”(中间用空格和回车隔开,如“a 0xffffb 0x1111”)的规律来进行map文件的查找。

然后进行代码更新,如下图所示:

整理完后,将matlabroot/toolbox/rtw/targets/asap2/asap2/asap2post.pl拷入库文件夹中,pl为perl文件的后缀,这些就需要进行简单修改,这些修改就不讲了,感兴趣,先学习学习perl的基础。

小结

大致的架构,基本就是这些,但是更改这些东西大多都是代码的东西,需要静下心去逐个更改,如果每个都讲一下,注释一下,估计这篇文章长度,要有1000行以上,其实还有个很好方法就是matlab的help文档,看那个函数不懂 ,就查一下就可以。方便实用。

若对以上文中代码有疑问,或需要源代码学习,将分享个朋友圈和一个大一些的技术交流群,私信小编即可!多谢各位老铁支持!

本文的图片来源于网络,手绘版来源于本屌丝,如有雷同,你必是盗版!哈哈!

如果觉着本文不错,请点个赞!关注一下本专栏与偶的公众号,或转发一下朋友圈,你的举手之劳将是对我的莫大鼓励!

Live名称:电池管系统BMS 技术,市场,工作现状与挑战

微信公众号: 新能源控制系统及MBD开发  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多