SWC之间交换信息的抽象描述,是靠PortInterface来完成的,详细可阅读之前的文章:
但是呢,PortInterface仅仅描述了交换信息的结构,并不保证通信是否可靠,或者数据不可用时是否有(默认)初始值可以用。
什么是Communication Specification
如果想添加可靠通信或者默认初始值等信息,需要在PortPrototype上应用,换个方式说就是,和通讯最相关的属性应当关联在SWC的PortPrototype上。
这样的属性,在AUTOSAR中被称作为communication specification,简称为ComSpec。ComSpec是可选的,不是设计PortPrototype时的必选项。

几种基本类型


以上两张图是ComSpec的关系图,分别是P-Port和R-Port的,其中P-Port有三种:
ModeSwitchSenderComSpec
ParameterProvideComSpec
SenderComSpec
R-Port有五种:
ClientComSpec
ModeSwitchReceiverComSpec
NvRequireComSpec
ParameterRequireComSpec
ReceiverComSpec
当然,ComSpec不光可以定义在AtomicSwComponentType的PortPrototype上,也可以定义在CompositionComponentType的PortPrototype上。
ComSpec需要指定数据元素(dataElement)或者是操作(operation)的,对于同一dataElement或operation,是不允许在PortPrototype中有多个ComSpec去指定的。
如果是PRPortPrototype,可以同时定义RPortComSpec和PPortComSpec。
不同的Interface对应不同ComSpec:
PortInterface | ComSpec |
---|---|
SenderReceiverInterface | SenderComSpec, ReceiverComSpec |
ClientServerInterface | ClientComSpec, ServerComSpec |
ModeSwitchInterface | ModeSwitchSenderComSpec, ModeSwitchReceiverComSpec |
ParameterInterface | ParameterProvideComSpec, ParameterRequrieComSpec |
NvDataInterface | NvRequireComSpec, NvProvideComSpec |
Sender-Receiver 通信的ComSpec
S/R通信可以是queued或non-queued的,如果对应的dataElement的swImplPolicy设置的是队列方式,那么对应也应该定义QueuedSenderComSpec或者QueuedReceiverComSpec。其他情况则对应地定义非queued的ComSpec。
ReceiverComSpec的dataElement不应当指定为一个ArgumentDataPrototype或ParameterDataPrototype。
如果NonqueuedReceiverComSpec设置了enableUpdate为True,无法做到指定一个dataElement,而这个dataElement的VariableAccess被设置为dataReadAccess。
一般来说,建议在设计SWC时为所有RPortPrototype的dateElement定义初始值,这样在有些时候在RTE层会很有帮助,例如:
未收到dataElement时提供一个默认值
RPortPrototype未连接时提供一个默认值
组合数据仅仅部分映射

另一方面,也有情况下是可以不需要设置初始值的:
SwAddrMethod的sectionInitializationPolilcy设置为NOINIT
SWC仅作partition内部通信(intra partition communication)
此外,你还可以设置DataFilter,用来做数据过滤。可以做数据过滤的类型有:字符,无符号整型,枚举型。
ReceiverComSpec.transformationComSpecProps用来定义当数据传输时,是否需要做对应的transformation,例如E2E transformation。
对应Sender方,以上概念同样适用。
networkRepresentation定义了dataElement在总线上的形式,dataElement的CompuMethod和networkRepresentation都可以用来做转换。
Client-Server 通信的ComSpec

RPortPrototype和上图一样,只是少了queueLength的设置。

一个Runnable Entity可以实现不止一个ClientServerOperation,对应的OIE也需要设置。

Mode Switch 通信的ComSpec

Mode Switch通信的ComSpec,在PPortPrototype上还能指定ModeSwitchAckRequest,来表示模式转换请求的成功执行。
Parameter的ComSpec
如果你学习过上一节,你可能会觉得奇怪,ParameterInterface本身也不是做通信用的,为什么还能在ParameterDataPrototype上定义ComSpec呢?
虽然不会作实际通信,用不到任何通信总线,但仍可以给ParameterDataPrototype设置ComSpec的默认值。
NV Data的ComSpec

为NV Data定义的ComSpec主要是为了给对应NVData的RAM Block和ROM Block定义初始值。
Data Transformation 数据转换
TransformationComSpecProps可以用来为ECU间的通信指定Transformer,开发人员在添加这个定义之后,配置内容只会在ECU间进行通信的情况下,为data transformation选定了对应的data transformer才会产生效果。
EndToEndTransformationComSpecProps可以应用E2E transformer,而UserDefinedTransformationComSpecProps则可以应用用户自定义的transformer。
点赞催更
"阅读原文"关注作者知乎