温馨提示 :关注公众号“嵌入式软件实战派”回复“AUTOSAR”获得整个AUTOSAR实战教程。

在前面的文章《 AUTOSAR SWC详解 》提到了Port和Runnable是SWC的灵魂,配置好SWC还不能用的,接下来看看这个Port是什么东西?

在Davinchi Developer工具配置AUTOSAR中的Port的时候,遇到了两个概念:Port Prototype和Port Interface。
也许你会潜意识任务Port不就是Interface吗,Prototype是个啥玩意?
之前我也这么天真地认为,好长一段时间被AUTOSAR理解的这几个概念折腾得糊里糊涂。
1. Port Prototype和Port Interface
对于这个问题,找AUTOSAR官方文档看看:

PortPrototypes also referred as Ports in some places are the well-defined connection points for communication between different software-components. A PortPrototype is either required type or provided type.

这句话的意思是说,PortPrototype可以理解是端口,定义两个不同Component的连接点,用于两者之间通信。PortPrototype可以是Port 提供者(PPortPrototype)或Port的接收者(RPortPrototype)。

AUTOSAR官方对PortPrototype模型是这样的:

看不懂?
没关系!我举个例子,你一定能理解。
假设王家坝的王二狗家是一个Component,李家村的李翠花家是另一个Component,王二狗要娶李翠花,李家丈母娘要彩礼。那么王二狗家提供彩礼,就可以理解是PPortPrototype,而李翠花家接受彩礼,就可以理解为RPortPrototype。
这里引入另一个问题,彩礼怎么给过去呢,是转账还是用个皮箱子装着现金过去,这个就可以理解是彩礼的通信,即PortInterface。

这个好理解吧,那么接着来

其实,AUTOSAR官方是这样定义Port Interface的

The PortInterface defines the kind of information transported between two PortPrototypes. PortInterfaces are used to support a design-by-contract workflow. In other words, PortInterfaces represent a pivotal point in the AUTOSAR concept.

其实,我们可以简单粗暴地理解,Port Interface是将两个Component连接起来的桥梁。

2. SWC和Datatype的Prototype概念

提到Prototype这个概念,其实SWC也有Prototype这个东西,就想上次新建的SWC的例子,在Design窗口创建这个SWC就需要填写这个Prototype的名称。

按Vector支持的说法,这叫将SWC实例化。
上次的文章没有很关注这个概念,直接将这个名称填和Component Type同一个名称了,就看到的名称是CtApMySwc:CtApMySwc了

其实,更严谨地,这个Prototype处的名称,应该填CpApMySwc,即变成CpApMySwc:CtApMySwc,这样就更容易区分了。

除了SWC,Data Type也有个类似Prototype概念,那叫Application Data Type和Implement Data Type。

其实这个也很好理解,前者是在Developer中概念上得东西,后者是具体实现生成具体代码上得东西。

举例,上面讲到的彩礼,就好比是Application Data Type,而彩礼具体是什么,一部豪车、一栋房子或者一大笔钱,都可以是彩礼的具体实现方式,即Implement Data Type。彩礼是大家社会面口头上讲的东西,而钱、房子车等这些是亲家双方表达彩礼的实际的东西。

这个在后面专门将Data Type的时候详细讲解下,当然本次的教程也会用到这两个东西。

好了,搞全套了,SWC、Port和Data Type的这些让人糊里糊涂的概念扯清楚了。

3. Port Interface的种类特点

Prototype,像是一个抽象的象征性的概念,可能是为了便于人理解的,其在代码中却不是一个真是明确的存在,所以以下多讲下Interface,不太多关注这个Prototype的细节了。


一个发一个收,这种叫Send/Receiver Port

还有一种叫Client/Server Port

放在Component上就上这样的

以上这个图可能是大家经常看到的关于SWC Port的图了。
那么,Send/Receiver和Client/Server有啥区别。

继续王二狗和李翠花的例子,在他们两家结为亲家之后,亲戚之间是要走动的,比如李家托人送点礼物为王家,就好像是Send/Receiver,一个发一个收,很好理解。

那么,如果李翠花要回娘家,顺便带点礼物会来给王家,这就像是Client/Server,这个李家就像是提供了“跟李翠花唠唠嗑顺便给点小礼物”的这种服务,姑且叫它Server。

这样的比喻不是很严谨,如果你对这些概念很困惑,请暂且这样理解,如果你已经很理解了,就忽略这个比喻。

问题1:Port Interface的通信方式只能是一对一(1:1)的吗?

并不是,可以是一对多(1:n)或多对一(n:1).

怎么理解呢?就拿送礼物来说,李家可以送礼物给王家,也可以送礼物给孙家等啊,对吧。当然,孙家也可以送礼物给王家啊。

这就是一对多和多对一的概念了。

问题2:Port Interface只能传一个内容吗?

也不是,可以传多个元素,组成队列来传。

比如,李家托人送了一只鸡给王家,突然想了下,地里的大葱挺好的,再送一把大葱过去。对于王家,先收到了鸡,然后有收到了大葱,像一个队列传过来的。

有些读者就会想到了,这个送的礼物,鸡、大葱、钱、房子等等,这些就是Data Type了,在AUTOSAR中,可以是基本的uint8,、uint32等,也可以是自己创建的IdtCaili(彩礼)这样的名称,从C的角度来看就是结构体啊、数组啊等等复杂的数据类型了。这些后面再讲。

问题3:RTE在SWC之间的传输起到什么作用?

好问题,这个就比较深入了,后面具体的配置会讲解。

例如王二狗和李翠花的例子,彩礼是他们直接就给过去吗?并没那么简单,他们是出于中国这种社会风俗中的,这个复杂的社会里面的种种就是这个RTE了,例如送彩礼送钱如果是转账,那要通过银行吧,就算送现金,也得找个皮夹子吧,这些东西都是这个社会RTE提供的,RTE就是这个婚姻风俗的运行环境。

那么实际上他们是这样的。

4. AUTOSAR的多种Interface

我们都讲到社会这个RTE了,有必要讲讲其他的Interface了

这里有三种Interface,其实这个在《 这次我要通过Interface来贯穿整个AUTOSAR架构 》有讲过这个。

1. AUTOSAR Interface

AUTOSAR Interface 定义了软件组件和/或BSW模块之间交换的信息。该描述独立于特定的编程语言,ECU或网络技术。 AUTOSAR Interface 用于定义软件组件和/或BSW模块的端口。通过这些端口,软件组件和/或BSW模块可以彼此通信(发送或接收信息或调用服务)。AUTOSAR使得可以在本地或通过网络在SoftwareComponents和/或BSW模块之间实现这种通信。

2. Standardized AUTOSAR Interface

Standardized  AUTOSAR Interface 是其语法和语义在AUTOSAR中标准化的 AUTOSAR Interface Standardized AUTOSAR Interface 通常用于定义AUTOSAR服务,这是AUTOSAR基本软件向应用程序软件组件提供的标准化服务。

3. Standardized Interface

Standardized Interface 是一种在AUTOSAR中标准化的API,无需使用 AUTOSAR Interface 技术。这些 Standardized Interface 通常是为特定的编程语言(如C语言)定义的。因此,通常在始终位于同一ECU上的软件模块之间使用 Standardized Interface 。当软件模块通过 Standardized Interface 进行通信时,将无法再通过网络路由软件模块之间的通信。

好了,这些概念都讲清楚了,接着就实战吧,光说不练不是我的风格。
接着上面王二狗和李翠花的例子,在下面的设计和配置中都是根据这个例子来做,看看王二狗和李翠花在AUTOSAR是怎么成亲的。

由于篇幅比较长,这部分内容另开一篇文章详细讲解配置过程,敬请期待!

关注公众号“ 嵌入式软件实战派 ”回复“ AUTOSAR ”可获得整套实战教程

温馨提示:关注公众号“嵌入式软件实战派”回复“AUTOSAR”获得整个AUTOSAR实战教程。在前面的文章《AUTOSAR SWC详解》提到了Port和Runnable是SWC的灵魂,配置好SWC还不能用的,接下来看看这个Port是什么东西?在Davinchi Developer工具配置AUTOSAR中的Port的时候,遇到了两个概念:Port Prototype和Port Interface。也许你会潜意识任务Port不就是Interface吗,Prototype是个啥玩意?之前我也这么天真地
在本规范的早期版本中,对 Port Interfaces相互匹配的要求可能会导致以下情况:出于正式原因(例如dataElements的shortName不匹配),“实际”兼容的 Port Interfaces将被拒绝。 为了也支持CompositionSwComponentType的开发人员需要连接彼此匹配但不满足正式要求的 Port Prototype的情况,引入了“端口接口映射”的 概念
数据转换是Rte在SWC上使用时能够自动转换和重新缩放通过外部通信接收的数据的能力。 为啥需要数据转换? AUTO SAR SWC的设计要求有很好的通用性和重用性,能适配不同的项目平台。为了实现这个目标,重要的是要保证SWC的端口接口兼容性要好,可以集成到到不同的平台项目中。但是由于DBC中通信信号的定义没有标准化,主观性比较强。例如速度这个数据元素,你在一个项目总定义其单位为“km/h”,在另外一个项目中你定义速度的单位为“ m / s” ADT上定义的CompuMethod在生成代码