虚拟功能总线(VFB)的规范解释了软件组件之间通信的主要通信范例:用于基于操作的通信的客户端/服务器,以及用于基于数据的通信的发送器/接收器。
两种通信范式的性质完全不同,SenderReceiverInterfaces和ClientServerInterfaces及其相关元类的建模也是如此。
PortInterface描述了信息交换的静态结构
PortInterfaces仅限于对交换信息的静态结构的描述;与通信相关的动态属性附加到PortPrototypes。
本章共有6小节
1、前言
2、发送/接收者通信
3、客户/服务通信
4、外部触发事件通信
5、通信模式
6、参数通信
本章分为两部分:
1、前言
2、发送/接收者通信
3、客户/服务通信
值编码的使用在PortInterfaces的上下文内受到限制。
PortInterfaces上下文中SwBaseType支持的值编码
PortInterface中使用的支持的值编码为:
上述描述仅在属性isService的值设置为false时适用。
PortInterfaces和类别DATA_REFERENCE
在由ApplicationSwComponentType或SensorActuatorSwComponentType使用的PortInterface上下文中定义的DataPrototype(在解析通过TYPE_REFERENCE的潜在间接调用之后)由类别DATA_REFERENCE键入或映射到ImplementationDataType的情况下,才应使用 信息表示ServiceSwComponentType,ComplexDeviceDriverSwComponentType,ParameterSwComponentType或NvBlockSwComponentType或EcuAbstractionSwComponentType。
SenderReceiverInterface
SenderReceiverInterfaces允许规范典型的异步通信模式,其中发送方提供一个或多个接收方所需的数据。
虽然实际的通信是通过相应的PortPrototypes进行的,但SenderReceiverInterface可以形式化地描述发送和接收的信息类型。
SenderReceiverInterface专注于由VariableDataPrototypes表示的信息项的描述。
以dataElement角色聚合的VariableDataPrototype表示在SenderReceiverInterface键入的PortPrototypes之间传输的原子信息。
invalidationPolicy无效政策
invalidationPolicy指定发送组件是否可以主动使特定的dataElement无效,以及应采用哪种在接收方处理接收invalidValue的策略。
请注意,SenderReceiverInterface为VariableDataPrototypes的定义提供了名称空间。 就AUTOSAR元模型而言,这方面是通过与DataPrototype的继承关系来指示的(后者继而从Identifiable继承)。
swImplPolicy软件实现政策
swImplPolicy指示在接收方如何处理VariableDataPrototype的方式。 如果将其设置为已排队,则语义是需要将相应的VariableDataPrototype添加到队列(或换句话说:FIFO数据结构),然后由实际的接收器软件组件从中使用它。
排队通信不适用于PRPortPrototype拥有的dataElements
swImplPolicy不得设置为对PRPortPrototype拥有的任何dataElement排队。
发送者-接收者通信的最后一句最佳语义
如果将swImplPolicy设置为SwImplPolicyEnum的任何其他有效值,则最后一种是最好的语义。
请注意,VariableDataPrototype的定义可能与读者对信号的想法非常接近。 但是,不同种类的信号在AUTOSAR概念中具有特定含义,尤其是在AUTOSAR系统模板的背景下。
发送方/接收方通信的通信模式
可以连接由SenderReceiverInterface类型的PortPrototype,以建立1:n(即一个发送者,多个接收者)通信关系。 也可以建立n:1(即,许多发送者,一个接收者)通信模式。
实际上,上述不适用于通过一个AssemblySwConnector或PassThroughSwConnectors链连接多个PRPortPrototype的情况。
AssemblySwConnector支持的SenderReceiverInterface或NvDataInterface类型的PortPrototypes连接
对于由SenderReceiverInterface或NvDataInterface键入的PortPrototype之间的AssemblySwConnector建模,AUTOSAR仅支持下表记录的连接。
对于由SenderReceiverInterface或NvDataInterface键入的PortPrototype,DepartmentSwConnector支持的连接
对于在SenderReceiverInterface或NvDataInterface键入的PortPrototype之间的委托委托连接器建模,AUTOSAR仅支持下表中记录的连接。
客户端/服务器通信的基本语义是,客户端可以通过支持该操作的服务器来发起操作的执行。
服务器执行该操作,并在完成后向客户端提供结果(同步操作调用),否则客户端将自己检查操作是否完成(异步操作调用)。
客户端不得连接到多台服务器
客户端不得连接到多台服务器,以使一个以上的服务器可以处理一个操作调用。
ClientServerInterface在某种程度上与SenderReceiverInterface相对
ClientServerInterface定义了ClientServerOperations的集合,而不是定义要在软件组件之间传递的信息。
ClientServerInterface由ClientServerOperation组成,即ClientServerOperation不能在其他ClientServerInterface的上下文中重用。
ClientServerOperation
ClientServerOperation由0个或若干个ArgumentDataPrototypes组成。可能是
聚集表示变体点。
ArgumentDataPrototypes的方向
为了解决这些情况,ArgumentDataPrototype定义了一个属性方向,可能的值是in(传递给操作),out(传递给操作),inout(传递给返回操作)。
本质上,ClientServerOperation中的所有ArgumentDataPrototypes都可以按值(概念上)(根据ArgumentDataPrototype的方向)从值传递(从客户端到服务器和/或从服务器到客户端)。
客户需要提供ArgumentDataPrototypes
当客户端调用一个操作时,它需要为每个ArgumentDataPrototype提供一个值,该值的方向为in或inout。
传递正确的数据类型
传递到方向为in或inout的ArgumentDataPrototype的值必须具有相应的Datatype。
ClientServerOperation的同步调用
在同步操作调用的情况下,客户端希望收到对操作调用的响应。
作为响应的一部分,它为每个ArgumentDataPrototype接收一个方向为out或inout的值(正确的AutosarDataType)。
每个ClientServerOperation为其ArgumentDataPrototypes提供一个名称空间,因此具有唯一的标识符,该标识符标识相应ClientServerInterface中的操作。
ClientServerOperations在ClientServerInterface中没有排序(没有“ first”操作之类的东西)。
没有ArgumentDataPrototypes的默认值
不能为在ClientServerOperation上下文中定义的ArgumentDataPrototypes定义默认值。 默认值可能会导致复杂的映射到编程语言。
在ClientServerOperation上下文中对ArgumentDataPrototypes的定义是有序的
与ClientServerInterface与ClientServerOperation的无序关系相反,在ClientServerOperation上下文中ArgumentDataPrototypes的定义是有序的,即ClientServerOperation可以具有第一个参数。
请注意,ArgumentDataPrototype继承自AutosarDataPrototype,因此具有对具体AutosarDataType的引用。
RTE生成器使用引用的AutosarDataTypes来确定参数的数据类型,具体取决于属性ArgumentDataPrototype.serverArgumentImplPolicy的值。
由原始数据类型键入的serverArgumentImplPolicy和ArgumentDataPrototype
对于带方向的ArgumentDataPrototype,属性ArgumentDataPrototype.serverArgumentImplPolicy的值不得设置为useVoid,其方向是由归类为原始C数据类型的AutosarDataType键入的。
请注意,服务器RunnableEntity需要通过使用客户端或通过PortDefinedArgumentValue传递的其他参数来获取有关当前使用的数组长度或结构大小的信息。
还要注意,ClientServerInterface没有定义任何计时信息(客户机期望服务器响应的速度)。 它没有定义线程的工作方式(例如,如果客户端阻塞,直到服务器返回响应)。
它还没有明确定义如何在客户端和服务器的实现与基础RTE之间传递信息(例如:通过“指针”或“按值”)。
对于由ClientServerInterface,ModeSwitchInterface或TriggerInterface键入的PortPrototypes,AssemblySwConnector支持的连接
对于由ClientServerInterface,ModeSwitchInterface或TriggerInterface键入的PortPrototypes之间的AssemblySwConnector建模,AUTOSAR仅支持下表中记录的连接。
对于由ClientServerInterface,ModeSwitchInterface或TriggerInterface键入的PortPrototypes,DepartmentSwConnector支持的连接
对于由ClientServerInterface,ModeSwitchInterface或TriggerInterface键入的PortPrototypes之间的委托委托连接器的建模,AUTOSAR仅支持下表中记录的连接。
本节描述了在应用软件组件内或通过VFB进行通信期间发生的错误的处理方法。由基本软件模块创建和使用的错误不在本文档的范围内,因此将不予讨论。
因此,本文档范围内的错误分为两个简单的类:
软件组件实现使用RTE API方法与其他软件组件进行通信。在此通信期间,由于基础结构故障可能会导致某些错误,例如总线无法正常工作,或者预期的数据值未及时到达。
这些错误在RTE规范中列出,因为它们是VFB提供的基础结构的固有功能。因此,软件组件通常不会自行引发基础结构错误。
相反,AUTOSAR基本软件和RTE将确定基础结构故障,并将相应的错误代码传达给相关的软件组件。
AUTOSAR系统无需明确描述基础设施错误
由于固定的基础结构错误集被定义为VFB的隐式部分,因此AUTOSAR系统的开发人员无需明确描述这些错误。
假定这些可能在运行时发生,并且应用程序开发人员应采取措施进行处理。
另一方面,应用程序错误特定于以PortInterface形式描述的功能或信息。 无法预先定义此类错误,而是在某个PortInterface的设计时进行定义。
原则上,此类ApplicationErrors可以是所有PortInterfaces的一部分。
一个SwComponentType范围内的ApplicationError
如果SwComponentType的PortPrototypes由不同的ClientServerInterfaces键入,且具有相同的shortName和定义的ApplicationErrors,则适用以下条件:具有相同shortName的ApplicationErrors必须具有相同的errorCodes值。
上述存在的理由:RTE生成器为其中出现ClientServerInterface的shortName和ApplicationError的shortName的错误代码创建符号。
ApplicationError.errorCode的值
ApplicationError.errorCode的值不得超过闭合区间[1 ..63]。
以下例外适用:仅在可能的错误应该表示E_OK的情况下,才允许值0。
通过上述,可以确保仅将返回值的六个最低有效位用于指示应用程序错误。
因此,ClientServerOperations可能与它们可能引发的许多ApplicationError相关联。 这些错误定义为ClientServerInterface的一部分。
对ApplicationError的引用
ClientServerOperation引用的可能错误应归PortInterface所有,PortInterface也拥有ClientServerOperation。
请注意,元类ApplicationError也在AUTOSAR自适应平台上使用,因此此条内容不能更具体地描述封闭PortInterface的性质。