在AUTOSAR中,应用软件是由一系列相互交互的软件组件构成的。在基于AUTOSAR的应用软件开发过程中,软件组件是整个应用软件的基础,其他软件开发工作如配置、映射等,都是围绕软件组件展开的。
AUTOSAR软件组件
软件组件是封装了部分或者全部汽车电子功能的模块,包括了其具体的功能实现以及与对应的描述。各个软件组件通过虚拟功能总线进行交互,从而形成一个AUTOSAR应用软件。
AUTOSAR软件组件大体上可分为原子软件组件 (Atomic SWC)和部件 (Composition SWC)。部件可以包含若干原子软件组件或部件。原子软件组件则可根据不同用途分为以下几种类型:
应用软件组件 (Application SWC)
主要用于实现应用层控制算法
传感器/执行器软件组件 (Sensor/Actuator SWC)
用于处理具体传感器/执行器的信号,可以直接与ECU抽象层交互
标定参数软件组件 (Parameter SWC)
主要提供标定参数值
ECU抽象软件组件 (ECU Abstraction SWC)
提供访问ECU具体I/O的能力
复杂设备驱动软件组件 (Complex Device Driver SWC)
可定义端口与其他软件组件通信,还可以与ECU硬件直接交互
服务软件组件 (Service SWC)
主要用于基础软件层,可通过标准接口或标准AUTOSAR接口与其他类型的软件组件进行交互
虚拟功能总线
虚拟功能总线是对AUTOSAR提供的所有通信机制的一种抽象,是所有软件组件进行交互的桥梁。软件组件之间的通讯细节通过虚拟功能总线被抽象出来,软件组件通过AUTOSAR定义的接口对通讯进行描述,即可最大程度地独立于具体的通讯机制,实现与其他软件组件和硬件的交互。
在虚拟功能总线的帮助下,应用软件的各个软件组件不需要关注通信的区别,从而可以在独立的情况下设计开发软件组件,使得应用软件的开发可以独立于具体的ECU,开发人员可以将精力集中在应用软件及其软件组件的开发上。
软件组件的端口和接口
软件组件通过端口(Port)来进行不同软件组件间或者软件组件与硬件间的通讯或者交互。每个软件组件都需要定义端口,根据输入/输出方向可分为:
需型端口:用于从其他软件组件获得所需数据或者所请求的操作
供型端口:用于对外提供某种数据或者某类操作
供需端口:兼有需型端口与供型端口的特性
将一个软件组件的供型端口与另外一个软件组件的需型端口进行连接,即实现了两个软件组件直接的通信。
每个端口虽然定义了软件组件间通信内容及其方向,但是通信内容以及用于交互的操作却仍不得而知。AUTOSAR中使用端口接口(Port-Interface)来描述端口之间的供需关系。端口接口主要有以下几种类型:
发送者-接收者接口 (Sender-Receiver Interface,S/R)
客户端-服务器接口 (Client-Server Interface,C/S)
模式转换接口 (Mode Switch Interface )
非易失性数据接口 (Non-volatile Data Interface)
参数接口 (Parameter Interface)
触发接口 (Trigger Interface)
其中,发送者-接收者接口 (Sender-Receiver Interface,S/R)和客户端-服务器接口 (Client-Server Interface,C/S)最为常用。
发送者-接收者接口
发送者-接收者接口用于数据的传递关系,发送者发送数据到一个或多个接收者。需要指出的是,一个软件组件的多个需型端口、供型端口、供需端口可以引用同一个发送者-接收者接口,并且它们可以使用该接口中所定义的任意一个或者多个数据元素,而并不一定使用所有数据元素。
客户端-服务器接口
客户端-服务器接口用于操作 (Operation,OP),即函数调用关系,服务器是操作的提供者,多个客户端可以调用同一个操作,但同一个客户端不能调用多个操作。
每个端口只能定义其中一种接口类型,具有相同端口接口类型或者兼容接口类型的端口才可以进行通讯。
软件组件的内部行为
软件组件的内部行为 (Internal Behaviour,IB)是通过运行实体(Runable Entity)来表现的,主要包括:
运行实体 (Runnable Entity,RE)
软件组件被分成若干个可执行程序单元,即运行实体
运行实体的RTE事件 (RTE Event)
每个运行实体都会被赋予一个RTE事件 (Trigger Event),即RTE事件 (RTE Event) ,这个事件可以引发这个运行实体的执行
运行实体与所属软件组件的端口访问 (Port Access)
运行实体通过访问端口的数据或者操作来完成自身的功能,并把数据处理的结果或者提供的操作通过端口对外提供
运行实体间变量 (Inter Runnable Variable,IRV)
运行实体间变量 (Inter Runnable Variable,IRV) 即两个运行实体之间交互的变量
每个软件组件必须提供其代码的具体实现以及描述文件。代码实现即运行实体的实现,以C源文件或者目标文件的方式提供。而描述文件必须描述软件组件的属性,包括所使用的端口、端口接口、运行实体、以及运行实体所对应的RTE事件等,以arxml文件形式提供。综上所述,在AUTOSAR中的软件组件可以用如上图所示的示例图来表示。