AUTOSAR规范与车用控制器软件开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 AUTOSAR软件组件

软件组件(SWC)不仅仅是应用层的核心,也是一些抽象层、复杂驱动层等实现的载体。由于软件组件包含的概念较多,这里单独介绍AUTOSAR软件组件相关概念,这是后期进行应用层、抽象层等开发的基础。

AUTOSAR软件组件大体上可分为原子软件组件(Atomic SWC)和部件(Composition SWC)。其中,部件可以包含若干原子软件组件或部件。原子软件组件则可根据不同用途分为以下几种类型:

①应用软件组件(Application SWC);

②传感器/执行器软件组件(Sensor/Actuator SWC);

③标定参数软件组件(Parameter SWC);

④ECU抽象软件组件(ECU Abstraction SWC);

⑤复杂设备驱动软件组件(Complex Device Driver SWC);

⑥服务软件组件(Service SWC)。

应用软件组件(Application SWC)主要用于实现应用层控制算法。

传感器/执行器软件组件(Sensor/Actuator SWC)用于处理具体传感器/执行器的信号,可以直接与ECU抽象层交互。

标定参数软件组件(Parameter SWC)主要提供标定参数值。

ECU抽象软件组件(ECU Abstraction SWC)提供访问ECU具体I/O的能力。该软件组件一般提供引用C/S接口的供型端口,即Server端,由其他软件组件(如传感器/执行器软件组件)的需型端口(Client端)调用。此外,ECU抽象软件组件也可以直接和一些基础软件进行交互。

复杂设备驱动软件组件(Complex Device Driver SWC)推广了ECU抽象软件组件,它可以定义端口与其他软件组件通信,还可以与ECU硬件直接交互。所以,该类软件组件灵活性最强,但由于其和应用对象强相关,从而导致其可移植性较差。

服务软件组件(Service SWC)主要用于基础软件层,可通过标准接口或标准AUTOSAR接口与其他类型的软件组件进行交互。

需要指出的是,上述这些软件组件有的仅仅是概念上的区分,从具体实现及代码生成角度而言都是相通的。下面将详细介绍AUTOSAR软件组件的几个重要概念:数据类型、端口、端口接口以及内部行为。

2.3.1 软件组件的数据类型

AUTOSAR规范中定义了如下三种数据类型(Data Type):

①应用数据类型(Application Data Type,ADT);

②实现数据类型(Implementation Data Type,IDT);

③基础数据类型(Base Type)。

应用数据类型(Application Data Type,ADT)是在软件组件设计阶段抽象出来的数据类型,用于表征实际物理世界的量,是提供给应用层使用的,仅仅是一种功能的定义,并不生成实际代码。

实现数据类型(Implementation Data Type,IDT)是代码级别的数据类型,是对应用数据类型的具体实现;它需要引用基础数据类型(Base Type),并且还可以配置一些计算方法(Compute Method)与限制条件(Data Constaint)。

在AUTOSAR中,对于Application Data Type没有强制要求使用,用户可以直接使用Implementation Data Type。若使用了Application Data Type,则必须进行数据类型映射(Data Type Mapping),即将Application Data Type与Implementation Data Type进行映射,从而来对每个Application Data Type进行具体实现。

2.3.2 软件组件的端口与端口接口

软件组件的端口根据输入/输出方向可分为需型端口(Require Port,RPort)与供型端口(Provide Port,PPort),在AUTOSAR 4.1.1标准中又提出了供需端口(Provide and Require Port,PRPort)。

①需型端口:用于从其他软件组件获得所需数据或者所请求的操作。

②供型端口:用于对外提供某种数据或者某类操作。

③供需端口:兼有需型端口与供型端口的特性。

需型端口可以和供型端口连接。如图2.7所示,软件组件SWC1有一个需型端口(R)和一个供型端口(P),其中需型端口与SWC2的供型端口相连,它们之间的交互关系通过连线箭头表示,由SWC2的供型端口指向SWC1的需型端口。SWC3具有一个供需端口,它可被认为自我相连。

图2.7 AUTOSAR软件组件端口

由于端口仅仅定义了方向,所以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)。如图2.8所示,软件组件SWC1具有两个端口,其中一个引用的端口接口类型为发送者-接收者(S/R)接口,另一个引用的端口接口类型为客户端-服务器(C/S)接口。从中也可以看出,对于引用发送者-接收者接口的一组端口而言,需型端口为接收者(Receiver),供型端口为发送者(Sender)。对于引用客户端-服务器接口的一组端口而言,需型端口为客户端(Client),供型端口为服务器(Server)。

图2.8 AUTOSAR软件组件端口接口

下面详细讨论发送者-接收者接口(Sender-Receiver Interface,S/R)与客户端-服务器接口(Client-Server Interface,C/S)的特性。

(1)发送者-接收者接口

发送者-接收者接口用于数据的传递关系,发送者发送数据到一个或多个接收者。该类型接口中定义了一系列的数据元素(Data Element,DE),这些数据元素之间是相互独立的。如图2.9所示,该发送者-接收者接口SR_Interface中定义了两个数据元素,名字分别为DE_1与DE_2,并且需要为每个数据元素赋予相应的数据类型。

图2.9 发送者-接收者接口定义

需要指出的是,一个软件组件的多个需型端口、供型端口、供需端口可以引用同一个发送者-接收者接口,并且它们可以使用该接口中所定义的任意一个或者多个数据元素,而并不一定使用所有数据元素。

 (2)客户端-服务器接口

客户端-服务器接口用于操作(Operation,OP),即函数调用关系,服务器是操作的提供者,多个客户端可以调用同一个操作,但同一个客户端不能调用多个操作。客户端-服务器接口定义了一系列操作(Operation),即函数,它(们)由引用该接口的供型端口所在的软件组件来实现,并提供给引用该接口的需型端口所在的软件组件调用。如图2.10所示,该客户端-服务器接口CS_Interface中定义了两个操作OP_1与OP_2,对于每一个操作需要定义相关参数及其方向,即函数的形参。

图2.10 客户端-服务器接口定义

需要注意的是,每个端口只能引用一种接口类型,并且引用相同端口接口类型的端口才可以进行交互。

2.3.3 软件组件的内部行为

软件组件的内部行为(Internal Behaviour,IB)如图2.11所示,其主要包括:

图2.11 软件组件的内部行为

①运行实体(Runnable Entity,RE);

②运行实体的RTE事件(RTE Event);

③运行实体与所属软件组件的端口访问(Port Access);

④运行实体间变量(Inter Runnable Variable,IRV)。

(1)运行实体

运行实体(Runnable Entity,RE)是一段可执行的代码,其封装了一些算法。一个软件组件可以包含一个或者多个运行实体。

(2)运行实体的RTE事件

每个运行实体都会被赋予一个RTE事件(Trigger Event),即RTE事件(RTE Event),这个事件可以引发这个运行实体的执行。对于RTE事件可以细分为很多种类,这将在后续章节介绍软件组件的内部行为设计时结合工具进行介绍。较常用的RTE事件有以下几种:

①周期性(Periodic)事件,即Timing Event;

②数据接收事件(Data-received Event);

③客户端调用服务器事件(Server-call Event)。

如图2.12所示,其中Runnable_1、Runnable_2和Runnable_3分别采用了Timing Event、Data-received Event以及Server-call Event。

图2.12 运行实体的RTE事件示意

(3)运行实体与所属软件组件的端口访问

运行实体与所属软件组件的端口访问(Port Access)是和端口所引用的端口接口类型密切相关的。

对于S/R通信模式,可分为显示(Explicit)和隐式(Implicit)两种模式。若运行实体采用显示模式的S/R通信方式,数据读写是即时的;当多个运行实体需要读取相同的数据时,若能在运行实体运行之前先把数据读到缓存中,在运行实体运行结束后再把数据写出去,则可以改善运行效率,这就是隐式模式。显示模式与隐式模式的对比如图2.13所示,可见后者的实现方式中,会在运行实体被调用之前读数据,在运行结束后写数据。

图2.13 显式模式与隐式模式的对比

对于C/S通信模式,可分为同步(Synchronous)和异步(Asynchronous)两种模式,它们的对比如图2.14所示。

图2.14 同步模式和异步模式的对比

(4)运行实体间变量

运行实体间变量(Inter Runnable Variable,IRV)即两个运行实体之间交互的变量,如图2.15所示。

图2.15 运行实体间变量示意