目前汽车软件开发越来越多的使用了AUTOSAR架构,相比传统的开发方式,在AUTOSAR架构下开发应用层软件,需要和AUTOSAR Authoring Tools (简称AAT,比如ETAS的ISOLAR和Vector的Davinic) 有比较多的耦合关系,提高了开发的复杂度。
本文介绍了一种只需要在Matlab环境中就可以完成所有应用层SWC(Softare Component)以及Composition的Arxml文件的定义;然后根据生成的Arxml文件自动创建框架模型并自动merge控制模型到框架模型;并且还能把多个SWC组成的composition直接生成模型,方便整体的MIL测试。
阅读这篇文章可能需要基础的Autosar知识或者开发经验。
一般的AUTOSAR开发流程
下图是matlab官方文档上推荐的开发流程。但实际操作中,把matlab生成的arxml文件merge回AAT软件中,是比较麻烦而且,所以一般就不会再有下面那个动作了。
所以一般的做法就是在AAT工具中配置好应用层所有的SWC,然后将定义这些SWC的arxml文件都导出来,matlab再根据这些导出的arxml文件创建各个SWC的框架模型,然后再把控制逻辑添加到这些框架模型中,然后生成c代码。最后将应用层模型生成的c代码和AAT工具生成的bsw代码,rte代码,macl代码,以及手写代码一起编译生成hex文件。
但是在AAT工具中配置应用层SWC的描述是件很麻烦,很费时间的事情,很多公司大都有自动生成arxml文件的脚本来提高效率,但对于应用层SWC来说,由于最后还是要到matlab中去生成模型框架,搭建控制模型,生成模型代码,所以如果可以直接在matlab的环境中完成应用层所有SWC的arxml文件的定义,然后把这些arxml文件直接给到AAT工具去用,那么在AAT工具中就不需要对应用层SWC的描述进行任何操作了,只需要把各个SWC的runnable放到对应的OsTask中去,然后关联通信接口(比如CAN,LIN等),在连接应用层与底层的一些接口连线,就可以了,大大简化了在AAT工具中的配置操作。
而且,这样即使在没有AAT工具的情况下,仍然可以完整的开发应用层的软件,后期只需要将描述应用层SWC的arxml文件给到AAT工具,就能进行后续的开发,也方便分工合作。
优化的AUTOSAR开发流程
下图是本文推荐的一种AUTOSAR开发流程。这里需要开发一个工具(暂时就叫MAAT,matlab autosar authoring tool),可以根据各个SWC的数据词典(里面需要定义SWC接口喝Runnable的信息)以及项目整体的一个配置文件(可以定义数据词典里无法定义的的一些定义信息)自动生成所有应用层SWC的arxml描述文件。然后这些arxml文件给到AAT工具,来生成RTE以及BSW的c代码。另外matlab通过这些arxml文件直接生成各个SWC的模型框架,并且完成控制逻辑后生成所有应用层的c代码。最后把应用层的c代码,与AAT工具生成的BSW代码,RTE代码,再加上MCAL代码和手写代码,共同编译生成最后的二进制hex文件。
这样就几乎把应用层的开发和BSW层的开发分离开来,应用层的开发人员只需要专注与应用层各个SWC的接口和控制逻辑,当应用层与BSW的接口固定以后,应用层内部的接口变更就可以直接用应用层更新的arxml文件来直接生成rte代码来集成软件了,应用层的开发人员甚至可以不需要集成工作人员的帮助就可以直接编译代码去进行实车测试了。
一个简单的实例
比如我们就拿matlab中,Powertrain Blockset工具箱下的EV Reference Application模型中Controllers的控制模型做一个例子。假设这个简单的控制器的应用层由5个SWC组成,输出扭矩指令和刹车指令,输入加速信号,电池SOC,车速,电机转速和减速信号。输入输出信号都直接连接到Can上。
首先需要准备这五个SWC的数据词典和控制模型。
其中数据词典中最需要定义输入以及输出SR接口的interface名,interface中的Element名,Element的数据类型,以及Port名和定义interface的packsge名(不填就是用默认的规则补充)。如果有CS接口,Nvm变量的话也可以在数据词典中定义好,以及这些属于哪个runnable。
然后还需要准备一个总体的excel配置文件,里面可以定义各种数据词典里无法体现的而实际中需要用到的定义描述,比如这里就需要定义一个应用层整体的composition定义,把这个五个SWC放到一个叫EvPowertrainController的composition中。
这样根据这些数据词典和配置文件,就可以自动生成出所有的描述这个应用层定义的arxml文件。我这里的处理是把所有SWC用到的数据类型定义,SR接口定义,CS接口定义,数据类型Mapping定义等,统一去重后放到一个文件中,然后各个SWC的描述按照SWC的名称分别定义,Composition的定义统一放到一个文件中。
这里具体arxml的格式,一个可以参考官方文档的格式,另个方法就是手动在AAT工具中定义,然后看他保存出来arxml文件描述格式是什么样的,然后自己就按照这个格式生成。
matlab生成xml文件可以使用如下的命令:
com.mathworks.xml.XMLUtils.createDocument
setAttribute
appendChild
xmlwrite
具体可以参考帮助文档的“Exporting to XML Documents”
比如生成好的定义application datatype的arxml如下:
然后有了这些arxml文件,就可以直接生成框架模型了,生成框架模型的命令主要是:
arxml.importer(导入arxml文件,需要把涉及这个swc定义的所有arxml文件都导入)
createComponentAsModel(生成模型)
生成的框架模型就是只有输入输出接地。
然后就可以把控制模型放到这个框架模型中,这步可以手动去做,也可以通过脚本,自动匹配端口名去自动做,弄完后就是完整的控制模型了。
最后就是生成代码了,全都弄好后就是代码编译集成了。
接下来,由于composition的定义也都在生成的arxml文件中了,所以还能直接生成composition的模型,来进行整体的MIL测试。使用的命令如下:
arxml.importer
createCompositionAsModel
生成的composition模型如下,一对多的连线会用from/goto连接。
然后将这些arxml文件导出到AAT工具中,可以看到定义的内容如下:
定义的composition如下:
实列视频
感觉文字还不足以说明这个内容,下面是这个实例操作的一个小视频,具体的内容会说的清楚一些,有兴趣的同学可以看看
后记
本文主要介绍了作者自己觉得开发Autosar架构下应用层软件的一种比较高效的方法。主要思想就是在matlab的环境中完成应用层开发的所有工作(包括生成代码和arxml文件),然后将描述应用层的arxml文件再给到AAT工具。以实现ASW开发与BSW开发分离的目的。
完全自动生成ASW的arxml文件也是件比较复杂的事情,需要考虑的因素很多,而且随着项目的扩展和深入,很可能需要持续的添加需要自动生成的内容,修改模板的格式,这方面的工作量也不小,看到这里的同学有兴趣可以投票说说自己的看法。