编辑推荐: |
在本文中,
先在PREEvision中定义软件组件及其内部行为并导出arxml,然后将arxml导入到Simulink,并定义运行实体的算法模型图,最后生成C代码并导出arxml
。
本文来自于怿星科技,由火龙果软件Alice编辑、推荐。 |
|
在业界,比较著名的电子电气架构开发工具要属德国Vector公司开发的PREEvision工具了,而MATLAB/Simulink软件是非常高效且实用的基于模型的应用软件开发工具。利用PREEvision与Simulink联合开发AUTOSAR应用软件组件的开发流程有三种,分别是:“自上而下”开发流程(从PREEvision开始),“自下而上”开发流程(从Simulink开始),以及“双向”开发流程。如下图所示,无论哪一种开发流程,PREEvision与Simulink工具都是通过arxml文件进行信息交互的。
今天要给大家介绍的是“自上而下”的开发流程(从PREEvision开始),即先在PREEvision中定义软件组件及其内部行为并导出arxml,然后将arxml导入到Simulink,并定义运行实体的算法模型图,最后生成C代码并导出arxml,详细过程如下:
一、用PREEvision定义软件组件及其内部行为
核心:定义符合AUTOSAR规范的SWC;
方法:首先需要明确软件组件类型、通信类型以及传输方向,并定义符合要求的软件组件SWC及端口;其次要定义各软件组件端口间通信所使用的接口以及数据类型,最后定义各软件组件的功能,为其创建RTE事件,运行实体以及函数间变量。
① 定义软件组件SWC:软件组件是软件架构中最小的逻辑功能单元,是存储代码的部分。在Classic AUTOSAR架构中,绝大部分情况下使用的都是Application SWC和Sensor Actuator SWC。下图是PREEvision9.0中支持的SWC类型。
② 定义通信端口Port:完成SWC模块定义后,需要为SWC添加相应的通信端口,根据SWC类型、通信类型及传输方向,可将端口分为以下三类:
Sender/Receiver(S/R)接口
Client/Server(C/S)接口
Adaptive Provided/Required(P/R)接口
S/R接口是用来传输数据的,C/S接口是用来执行操作的,P/R接口只能用于Adaptive Application SWC模块。对于传统的CAN/LIN网络使用S/R接口就可以了,对于请求与响应的通信方式需要使用C/S接口,如SOME/IP的Method。下图是PREEvision9.0支持的端口类型。
③ 定义通信接口Interface:通信接口声明了给定端口所需或提供的数据、服务、操作等元素。比较常用的是Sender/Receiver Interface(用于Sender/Receiver Port),Client Server Interface(用于Client/Server Port)。下图是PREEvision支持的Interface。
Interface只是定义了通信数据的接口,对于Sender/Receiver Interface要传输的数据其实是在Data Element中定义的,对于Client Server Interface要传输的数据其实是在Operation下的Operation Argument中定义的。
除此之外,还需要定义数据类型来约束Interface中传输的数据。如下图所示,在AUTOSAR4.0以上版本中数据类型由应用数据类型、实现数据类型和基础数据类型组成。其中应用数据类型需要与实现数据类型建立映射关系以及转换方法,实现数据类型需要关联基础数据类型。
④ 定义内部行为Internal Behavior:前面完成了软件组件的框架部分,还需要完善软件组件的内部行为。一般有RTE事件(Event),运行实体(Runnable Entity)以及函数间变量(Inter Runnable Variable)组成。运行实体是软件组件内最小的逻辑功能单元,可以被RTE事件触发,比如被定时器触发、被接收数据触发,被操作调用触发等。下图是PREEvision9.0支持的RTE事件。
运行实体通过数据访问端口与SWC的Port建立访问关系。对于Sender/Receiver Port需要创建Data Read/Write(隐形无队列调用)或者Data Receive/Send(显性队列调用)数据访问端口。对于Client/Receiver Port需要定义Operation Invoke数据访问端口。
运行实体之间的数据交互是通过函数间变量实现的,因此运行实体还需要定义变量访问端口(Variable Read/Write)来接收其他实体通过函数间变量发送过来的数据。函数间变量是由RTE管理,可以设置为显性/隐形调用方式,也可以根据实际需要为其设置标定参数的读写权限。
经过以上几个步骤,就完成了在PREEvision中对软件组件的定义。下图是一个简单的软件组件部分内部元素示例,最后将其导成arxml文件即完成了SWC在PREEvsion中的定义。
二、导入arxml到Simulink
需提前安装AUTOSAR支持包“AUTOSAR Standard”,并将要导入的SWC描述文件存放到MATLAB当前的工作目录,在MATLAB的命令行窗口通过如下语句即可导入arxml并创建Simulink模块。
导入单个SWC描述文件:
ar = arxml.importer('filename.arxml'),filename是指SWC描述文件的名称。
运行完上述导入单个SWC描述文件命令后在命令行窗口会返回导入结果,如下图所示。其中蓝色框标记的语句将在第二步创建Simulink模块时会用到。
根据导入的arxml创建Simulink模块:
ar.createComponentAsModel('/SoftwareTypes/ComponentTypes/swcName, ModelPeriodicRunnablesAs',' FunctionCallSubsystem')
输入命令后MATLAB会根据arxml自动创建与SWC,Port, Interface以及Runnable相对应的Simulink模块,并自动打开Simulink软件。下图是MATLAB根据arxml自动创建的SWC的内部行为模型。
三、用Simulink定义运行实体的算法模型
Simulink对AUTOSAR的支持是通过Simulink模块(如I/O端口,子系统等)与AUTOSAR元素(如Sender/Receiver Port,Client/Server Port,Runnable等)建立映射关系而实现的。下表是一些常见的Simulink模块与AUTOSAR元素的映射关系。在I/O模块作为RTE Event使用时必须勾选“Out Function Call”属性。
如果在PREEvision中SWC定义的不精确,则在导入arxml后需要检查一下Simulink模块与AUTOSAR元素的映射关系是否缺失。通过Ctrl+Shift+C将模型在“Code Perspective”中打开,然后在“Code Mapping-AUTOSAR”窗口中检查输入输出端口模型、运行实体模型与AUTOSAR元素的映射关系是否缺失。如下图所示Simulink的两个输入模块与AUTOSAR元素的映射关系缺失,只需点击Select即可选择AUTOSAR的Port以及Data Element。
有了这些Runnable,我们可根据软件功能需求文档在Simulink中搭建相应的算法模型图以实现其功能,操作过程此处就不详细展开了。下图是运行实体RE_PPort_3的内部算法模型示例。
四、生成C代码及arxml文件
当所有的Runnable内部算法模型都搭建完成之后,即可生成C代码及arxml文件了,在生成C代码之前有一些设置项需要注意一下:
配置Configuration Parameters:将求解器设为固定步长。在AUTOSAR Code Generation选项中设置AUTOSAR的版本,根据实际情况勾选“Use AUTOSAR complier abstraction macros”等选项。
配置XML选项:打开AUTOSAR Dictionary,在XML Option选项“Export XML fille packaging”中选择“Single file”,否则一个SWC会生成多个arxml文件。
在配置好上述设置项后,按Ctrl+B即可生成C代码以及arxml文件,在编译完成之后,会有一个报告窗口弹出,根据里面的路径即可找到刚刚生成的C代码以及arxml文件。下图为本示例生成的相关文件。
综上所述,PREEvision与MATLAB联合开发AUTOSAR软件组件的主要流程是通过在PREEvision中定义SWC及其内部行为并导出arxml,然后将arxml文件导入到Simulink并定义运行实体的内部算法模型,最后通过Simulink生成C代码及arxml文件。
总结:OEM软件架构师可以在PREEvision工具中,从整车系统层面定义符合AUTOSAR规范的软件架构,以arxml文件的形式与下游设计软件(MATALAB、DaVinci等)无缝对接,从而保证设计信息的准确传递。为了应对汽车电子功能的快速迭代,OEM可以通过这种设计方式,主导汽车软件开发,提升车型开发效率及质量。
|