# AUTOSAR Franca IDL 软件组件描述集成 > **AUTOSAR CP Release 4.4.0** > > 原文:*Integration of Franca IDL Software Component Descriptions*(文档 ID 663) > > 翻译状态:**已完成 v1**(封面+前言+目录+章节 1-4 + 附录 A 完整翻译) > > 对应原文 PDF:`MethodologyAndTemplates/AUTOSAR_TR_FrancaIntegration.pdf` > > 翻译日期:Step 3 - P0 批量翻译 --- ## 文档标识 | 字段 | 值 | |------|-----| | 文档标题(Document Title) | Franca IDL 软件组件描述集成(Integration of Franca IDL Software Component Descriptions) | | 文档所有者(Document Owner) | AUTOSAR | | 文档责任人(Document Responsibility) | AUTOSAR | | 文档标识号(Document Identification No) | 663 | | 文档状态(Document Status) | 正式版(Final) | | 所属 AUTOSAR 标准 | Classic Platform(经典平台) | | 所属标准版本 | 4.4.0 | > 原文版权:© AUTOSAR — 机密文件 > 本中文译文仅供学习参考。 --- ## 免责声明(Disclaimer) 本作品(规范和/或软件实现)及其包含的材料由 AUTOSAR 发布,**仅供信息参考**。AUTOSAR 及为其做出贡献的公司不对作品的任何使用承担责任。 本作品中包含的材料受版权及其他类型知识产权保护。对本作品所含材料的商业利用需要获得这些知识产权的许可。 本作品可在不作任何修改的情况下、以任何形式或任何手段用于**纯信息性目的**。任何其他目的,未经出版者书面许可,作品的任何部分不得被利用或复制。 本作品**仅**为汽车应用而开发。它既未为非汽车应用而开发,也未为非汽车应用而进行测试。 "AUTOSAR" 一词和 AUTOSAR 标志是注册商标。 --- ## 文档变更历史(Document Change History) | 日期 | 版本 | 变更人 | 变更说明 | |------|------|--------|----------| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | • 编辑性变更 | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | • 编辑性变更 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | • 编辑性变更 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | • 编辑性变更 | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | • 初始发布 | --- ## 目录 1. [引言(Introduction)](#1-引言introduction) - 1.1 [目标(Objective)](#11-目标objective) - 1.2 [目的(Goal)](#12-目的goal) - 1.3 [动机(Motivation)](#13-动机motivation) - 1.4 [集成方法(Integration Method)](#14-集成方法integration-method) - 1.4.1 [作为 AUTOSAR SWC 描述的集成系统描述(Integrated System Description as AUTOSAR SWC Description)](#141-作为-autosar-swc-描述的集成系统描述integrated-system-description-as-autosar-swc-description) - 1.4.2 [作为 Franca 模型的集成系统描述(Integrated System Description as Franca Model)](#142-作为-franca-模型的集成系统描述integrated-system-description-as-franca-model) - 1.4.3 [完整视图(Complete View)](#143-完整视图complete-view) - 1.5 [限制与扩展(Limitations and Extensions)](#15-限制与扩展limitations-and-extensions) - 1.5.1 [动态通信(Dynamic Communication)](#151-动态通信dynamic-communication) - 1.5.2 [RTE 契约和 RTE 生成(RTE Contract and RTE Generation)](#152-rte-契约和-rte-生成rte-contract-and-rte-generation) 2. [Franca Connector](#2-franca-connector) - 2.1 [导入和 Franca 实例(Imports and Franca Instances)](#21-导入和-franca-实例imports-and-franca-instances) - 2.2 [链接(Links)](#22-链接links) - 2.2.1 [AUTOSAR-to-Franca Client Server Link](#221-autosar-to-franca-client-server-link) - 2.2.2 [AUTOSAR-to-Franca Sender Receiver Link](#222-autosar-to-franca-sender-receiver-link) - 2.2.3 [Franca-to-AUTOSAR Client Server Link](#223-franca-to-autosar-client-server-link) - 2.2.4 [Franca-to-AUTOSAR Sender Receiver Link](#224-franca-to-autosar-sender-receiver-link) - 2.3 [约束(Constraints)](#23-约束constraints) 3. [Franca-to-AUTOSAR 翻译(Franca-to-AUTOSAR Translation)](#3-franca-to-autosar-翻译franca-to-autosar-translation) - 3.1 [符号(Notation)](#31-符号notation) - 3.2 [Franca 模型(Franca Models)](#32-franca-模型franca-models) - 3.3 [Franca 类型(Franca Types)](#33-franca-类型franca-types) - 3.3.1 [Franca Type Collections](#331-franca-type-collections) - 3.3.2 [原始类型(Primitive Types)](#332-原始类型primitive-types) - 3.3.3 [Franca 内联数组(Franca Inline Arrays)](#333-franca-内联数组franca-inline-arrays) - 3.3.4 [用户定义类型(User-defined Types)](#334-用户定义类型user-defined-types) - 3.3.5 [类型继承(Type Inheritance)](#335-类型继承type-inheritance) - 3.4 [Franca 接口(Franca Interfaces)](#34-franca-接口franca-interfaces) - 3.5 [Franca Connector](#35-franca-connector) 4. [AUTOSAR-to-Franca 翻译(AUTOSAR-to-Franca Translation)](#4-autosar-to-franca-翻译autosar-to-franca-translation) - 4.1 [数据类型(Data Types)](#41-数据类型data-types) - 4.2 [端口接口(Port Interfaces)](#42-端口接口port-interfaces) - 4.3 [Franca 特殊数据(Franca special data)](#43-franca-特殊数据franca-special-data) - [附录 A 示例(Examples)](#附录-a-示例examples) - [附录 B 引用的类表(Mentioned Class Tables)](#附录-b-引用的类表mentioned-class-tables) --- ## 参考文献(References) - [1] Franca User Guide,https://code.google.com/a/eclipselabs.org/p/franca/downloads/detail?name=FrancaUserGuide-0.3.0.pdf - [2] Virtual Functional Bus,AUTOSAR_EXP_VFB - [3] Specification of RTE Software,AUTOSAR_SWS_RTE - [4] Software Component Template,AUTOSAR_TPS_SoftwareComponentTemplate - [5] Methodology,AUTOSAR_TR_Methodology - [6] IPC CommonAPI C++,http://projects.genivi.org/commonapi/ - [7] Specification of Platform Types,AUTOSAR_SWS_PlatformTypes --- ## 1 引言(Introduction) ### 1.1 目标(Objective) AUTOSAR 涵盖不同的汽车应用域,但不一定涵盖所有应用域。与其试图不断扩展 AUTOSAR 以使其易于应用于那些在 AUTOSAR 中仍然难以实现的应用域,更合理的做法是将 AUTOSAR 开放给专为这些应用域设计的标准和技术的集成。例如,开源开发平台 GENIVI(见 www.genivi.org)为车载信息娱乐系统定义了一种标准和工艺,并得到许多公司的支持和使用。 GENIVI 架构与 AUTOSAR 的架构类似,因为它区分了应用层、中间件和基础软件,这有助于集成。对于应用层软件组件的描述,GENIVI 使用 Franca Interface Definition Language(Franca IDL,见 [1])。 AUTOSAR 和 GENIVI 的流程也类似。两者都致力于从应用层组件及其在 ECU 网络上的分布的描述中生成中间件和基础软件。因此,AUTOSAR 和 GENIVI 系统的集成也可以分为应用层部分和通信层部分。 Franca 集成的目的是在应用层支持 AUTOSAR 和 GENIVI 系统的集成。这意味着要解决功能的虚拟集成,对应于 AUTOSAR 的虚拟功能总线(VFB)视图(见 [2])。Franca 集成提供了一种用于指定 AUTOSAR 和 GENIVI 应用组件连接的表示法,以及这些组件描述之间的双向翻译。通过这些手段,Franca 集成使得互连整体系统的 AUTOSAR 和 GENIVI 部分的开发和生成过程成为可能。 此应用层集成必须与通信层集成相结合,通信层集成实现在线 AUTOSAR 和 GENIVI 系统之间的消息交换。这意味着必须提供用于从软件和系统描述生成基础软件和中间件的公共协议和手段。该层级在其他 AUTOSAR 贡献中处理,例如通过用于通过 Ethernet 进行通信的序列化协议 SOME/IP。 ### 1.2 目的(Goal) 当开发 AUTOSAR 系统和 GENIVI 系统时,其应用层组件使用两个标准定义的格式进行描述:AUTOSAR 部分的 AUTOSAR 软件组件描述和 GENIVI 部分的 Franca IDL 描述。AUTOSAR 软件组件描述由一个或多个包含描述的 XML 表示的 arxml 文件给出;Franca 描述由一个或多个 fidl 和 fdepl 文件给出,其中包含根据 Franca IDL 文本语法定义的描述的文本表示。 在此过程状态下,两种格式中都没有集成系统的完整描述,也不能在任一格式中描述两个系统的所需互操作。这是因为其他部分的方法、操作、属性等的名称尚未包含在自身部分的描述中。这两个特性——(1)互操作的互连描述和(2)完整系统描述——应通过 Franca 集成来实现。为此,它包括三个部分: 1. 用于指定 AUTOSAR 和 GENIVI 部分的应用层互连的新格式,即 Franca Connector。 2. 将带有 Franca Connectors 的 Franca 模型翻译为 AUTOSAR 软件组件描述。 3. 将 AUTOSAR 软件组件描述翻译为 Franca 模型。 Franca Connector 应用于指定哪个 GENIVI 组件调用哪个 AUTOSAR 组件,反之亦然。虽然 Franca IDL 包含一个扩展机制——部署规范(deployment specification)——其允许在 Franca IDL 中定义所需的互连,但 Franca Connector 被定义为一种新格式。这样做的原因是支持将集成方法轻松推广到其他组件或接口描述语言。此外,此方法还保留了通过 Franca 部署定义定义所需互连的可能性,然后从该部署定义生成相应的 Franca Connector,或从 Franca Connector 生成 Franca 部署定义。 给定由 Franca Connector 指定的所需互连的规范,两种翻译使得能够以任一格式获得应用层完整集成系统的描述:AUTOSAR 软件组件描述或 Franca 模型。但需要注意的是,Franca 模型仅涉及类型层级——组件类型和数据类型——而 AUTOSAR 描述另外还指定了组件实例(称为原型)及其连接。此外,AUTOSAR 数据类型比 Franca 中相应的数据类型定义更详细。由于这些原因,完整的集成应用层 Franca 模型和完整的集成应用层 AUTOSAR 描述在语义上不等价。它们将是一致的,但 AUTOSAR 描述的范围和详细程度都更大。 从 AUTOSAR 的角度来看,我们把获得完整系统描述作为 Franca 集成的总体目标: #### ⌈[TR_FRANCA_00000] Franca 集成的目标⌋ Franca 集成的目标是获得由 AUTOSAR 部分和用 Franca IDL 描述的部分组成的系统的应用层的两个一致的完整描述:一个作为 AUTOSAR 软件组件描述,一个作为 Franca 模型。描述的完整性相对于相关描述格式的表达手段而言。 ⌊() ### 1.3 动机(Motivation) 为了更详细地说明 Franca 集成作为 AUTOSAR 和非 AUTOSAR 系统集成一部分的需求,我们勾勒了一个总体用例:开发一个集成系统,其中汽车应用组件 AutoComp 和信息娱乐应用组件 InfoComp 互操作(见图 1.1)。其中前者是 AUTOSAR 系统的一部分,后者是 GENIVI 系统的一部分。集成系统可能包括以下两个互操作: - InfoComp 向 AutoComp 请求服务,例如有关车辆状态的信息。 - AutoComp 向 InfoComp 请求服务,例如诊断信息。 为简单起见,我们假设两个组件运行在不同的 ECU 上,一个 AUTOSAR ECU 和一个 GENIVI ECU,它们通过 Ethernet 连接。假设这种设置的原因是,使用 SOME/IP,已经存在一种既可以在 AUTOSAR 内又可以在 GENIVI 内实现的合适协议。其他系统配置,例如通过像 SPI 这样的慢速总线连接或两个系统在同一处理器上运行的解决方案,将需要其他协议。在所考虑的设置中,整个 AUTOSAR-GENIVI 集成的基本条件可表述如下。 - AutoComp 实现为 AUTOSAR ECU 的 AUTOSAR 软件组件,这意味着: 1. AutoComp 仅使用通过 AUTOSAR 运行时环境(RTE,见 [3])的软件组件 API 提供的 AUTOSAR 通信服务进行通信。 2. AutoComp 有一个 AUTOSAR 软件组件描述(见 [4])。 3. AUTOSAR ECU 的 RTE 和基础软件根据 AUTOSAR 流程(见 [5])生成和配置。 - InfoComp 实现为 GENIVI ECU 的 GENIVI 组件,这意味着: 1. InfoComp 仅使用通过 Common API(见 [6])由 GENIVI 节点间通信中间件(INC MW)和传输协议(INC TP)提供的服务进行通信。 2. InfoComp 在 Franca IDL 中具有其实现的接口的描述。 3. InfoComp 的实现仅依赖于从 Franca IDL 描述生成的 Common API 存根和代理。 > **图 1.1:GENIVI 和 AUTOSAR 应用组件的互操作** 根据这些条件,为了能够与 InfoComp 通信,AUTOSAR 组件 AutoComp 首先需要一个 RTE API 操作,以便在其某个端口上调用所需的 InfoComp 方法 getDiagnosisInfo()。其次,它需要一个 Ethernet 通信栈来实现到总线的信号路由。只有当 AutoComp 和 InfoComp 之间的通信链路作为连接器包含在 AUTOSAR 软件组件描述中时,RTE API 和通信栈才能正确生成。反过来,这只有当 InfoComp 在 AUTOSAR 软件组件描述中也有表示时才可能。为了获得该表示,需要 Franca 模型到 AUTOSAR 软件组件描述的翻译。 对于 GENIVI 部分的系统的 Common API 的生成也是如此:它需要关于它想要通信的 AUTOSAR 组件的信息,以 Franca IDL 指定。给定从 AUTOSAR 软件组件描述到 Franca 模型的翻译,这也可以实现。 ### 1.4 集成方法(Integration Method) [5] 中描述的 AUTOSAR 流程从使用 AUTOSAR 表示法对系统的描述开始。这意味着将填写用于描述应用组件及其连接、ECU 及其连接以及应用组件到 ECU 的映射的相应模板。Franca 集成涉及领先于此起点的方法论步骤。当它开始时,只提供不完整的描述——特别是在应用层——因为 AUTOSAR 和 GENIVI 应用组件的互连尚未指定。集成系统的描述只是 Franca 集成的目标。 Franca 集成的初始情况可以定义如下: - 有一个 AUTOSAR 软件组件描述,用于描述相互连接的应用组件。一些端口可能未连接,一些端口可能没有接口或接口不完整。这些表示提供给 GENIVI 部分的操作(提供的端口未连接)或从 GENIVI 部分需要的操作(没有或不完整的所需端口接口)。 - 有一个 Franca 模型,其中包含一组接口和数据类型定义。 - 已知——但尚未正式表示——哪个 AUTOSAR 组件应与哪个 GENIVI 组件互操作,反之亦然。互操作可能由客户端-服务器通信或发送方-接收方通信组成。 在此情况下,从 AUTOSAR 角度看待 Franca 集成的主要方法论步骤是: 1. 通过 Franca Connector 表示关于互操作的知识。 2. 将 Franca-to-AUTOSAR 翻译应用于 Franca 模型和 Franca Connector。 结果是系统的完整集成应用层的 AUTOSAR 软件组件描述,即完整的 VFB 视图。 GENIVI 视角类似。由于 Franca IDL 中未表示实例和连接,因此 Franca Connector 与完整 Franca 模型的派生无关。因此只有一个步骤: 1. 将 AUTOSAR-to-Franca 翻译应用于 AUTOSAR 软件组件描述。 结果是系统的完整集成应用层的 Franca 模型。它由系统的完整接口集、GENIVI 部分的接口和 AUTOSAR 部分的接口组成。 如上所述,两个完整的集成应用层描述在语义上是一致的,但不等价。首先,这是由于 Franca 模型指定类型,但不指定实例或连接。此外,Franca 接口仅定义组件提供的(provide)方法和属性,而不定义它需要的(require)。在图 1.2 中描述了 Franca 模型和 AUTOSAR 软件组件描述所涉及的不同方面。两者都指定数据类型和接口。组件实例和内部连接(即 GENIVI 或 AUTOSAR 部分系统内组件实例之间的连接)仅在 AUTOSAR 软件组件描述中指定。互连(即 AUTOSAR 和 GENIVI 组件实例之间的连接)显然在 Franca 模型和 AUTOSAR 软件组件描述中都未指定。这种不对称性由 Franca Connector 捕获。它提供了定义实现 Franca 接口的组件实例以及 Franca 和 AUTOSAR 组件实例的互连的可能性。这在第 2 章中详细定义。 因此,两种翻译的结果也不同。Franca-to-AUTOSAR 翻译从 Franca 模型和 Franca Connector 获取信息,并构造一个 AUTOSAR 软件组件描述,其中分别将 Franca 接口、组件实例和互连包含为端口接口、组件原型和连接器。AUTOSAR-to-Franca 翻译仅考虑 AUTOSAR 软件组件描述的端口接口和数据类型,并将它们翻译为 Franca IDL。实例和互连无论如何都不能在 Franca IDL 中表示。 > **图 1.2:Franca 模型和 AUTOSAR 软件组件描述的范围** #### 1.4.1 作为 AUTOSAR SWC 描述的集成系统描述(Integrated System Description as AUTOSAR SWC Description) 图 1.3 显示了在 AUTOSAR 操作请求 GENIVI 方法的场景中 Franca-to-AUTOSAR 翻译的示例。最初给出以下规范(在图 1.3 中以黑色显示)。 - Franca 模型定义了一个接口 F,其中包含一个方法 m。 - AUTOSAR 软件组件描述定义了组合类型 AC 中的组件类型 A 和 A 的实例 a。 - A 有一个所需端口 p,其中应调用 Franca 方法 m。此端口的接口尚未定义,因为 AUTOSAR 软件组件描述中没有 m 的表示。 - Franca Connector 指定: - 存在一个实现接口 F 的组件实例 f。 - AUTOSAR 组件实例 a 的所需端口 p 与 Franca 实例 f 提供的接口 F 连接。 然后,Franca-to-AUTOSAR 翻译将以下部分添加到 AUTOSAR 软件组件描述中(在图 1.3 中以蓝色显示)。 - 一个包含操作 m 的接口,以及所需 AUTOSAR 端口 p 由该接口键入的声明。 - 具有也由此接口键入的提供端口的组件类型 F。 - AC 组合类型中 F 的实例 f。 - AC 组合类型中开放式 AUTOSAR 端口 p 和新组件类型 F 的端口的连接器。 因此,在 AUTOSAR 软件组件描述中,AUTOSAR 组件实例 a 和 Franca 组件实例 f 的所需互连现在被表示出来。 > **图 1.3:Franca-to-AUTOSAR 翻译** 相反的场景——GENIVI 方法请求 AUTOSAR 操作——对于 Franca-to-AUTOSAR 翻译没有进一步的兴趣,因为请求在 Franca 接口中不表示。Franca 接口可以翻译为 AUTOSAR 组件类型,但不会生成新的 AUTOSAR 实例,也不会生成连接。 发送方-接收方通信而不是客户端-服务器通信(操作调用)以与上述操作调用场景相同的方式处理。信号的提供在 Franca IDL 中由广播(broadcasts)表示。实现包含广播的接口的 Franca 实例被翻译为 AUTOSAR 组件,该组件在与广播相同数据类型的提供端口处提供数据元素。后者可以连接到需要数据元素的 AUTOSAR 组件的端口。 #### 1.4.2 作为 Franca 模型的集成系统描述(Integrated System Description as Franca Model) 图 1.4 描述了 AUTOSAR 组件为 GENIVI 组件提供操作的场景。在这种情况下,AUTOSAR 软件组件描述是完整的,但不存在请求组件 B 端口 q 处提供的操作 op 的组件实例。Franca 模型仍然是空的,因为无法表达对操作的请求。存在请求 AUTOSAR 操作 op 的实例 g 的信息在 Franca Connector 中表示。在这个(人为的)示例中,g 是一个不实现所考虑的 Franca 接口的 Franca 组件实例。它仅被引入以在完整系统描述中定义谁调用 AUTOSAR 组件实例 b 的端口 q 处的操作。 AUTOSAR-to-Franca 翻译将一个具有方法 op 的接口 B 添加到 Franca 模型,该方法现在可被其他 Franca 组件使用。由于 Franca IDL 中未表示实例和连接,这就是翻译所做的全部内容。 > **图 1.4:AUTOSAR-to-Franca 翻译** #### 1.4.3 完整视图(Complete View) 综合上述场景,我们获得了 Franca 集成所宣布的两个完整应用层系统视图。图 1.5 显示了初始情况:作为 Franca 模型的应用组件描述、作为 AUTOSAR 软件组件描述的应用组件描述以及 Franca Connector。Franca-to-AUTOSAR 翻译和 AUTOSAR-to-Franca 翻译的结果如图 1.6 所示。AUTOSAR 描述通过 Franca 接口和实例的组件类型(AtomicSwComponentTypes)和实例(SwComponentPrototype)、一个包含由 Franca 组件提供并由 AUTOSAR 组件请求的方法的接口,以及与 Franca Connector 中的两个连接条目相对应的两个连接进行了扩展。Franca 模型通过 AUTOSAR 组件类型的接口定义进行了扩展。 > **图 1.5:Franca 集成的初始状态** > > **图 1.6:Franca 和 AUTOSAR 中的集成系统视图** ### 1.5 限制与扩展(Limitations and Extensions) #### 1.5.1 动态通信(Dynamic Communication) AUTOSAR 流程要求在运行时可能发生的应用组件实例之间的所有互操作在 AUTOSAR 软件组件描述中静态地(在编译时间之前)声明。另一方面,信息娱乐系统中的互操作通常是动态的。例如,GENIVI 使用允许在运行时动态发现和连接服务提供商的套接字。未来的 AUTOSAR 版本也可能支持动态通信,但在当前状态下,通信链路的静态声明是强制性的。因此,至少应互操作的 AUTOSAR 和 GENIVI 组件实例必须在设计时已知并识别。在 GENIVI 端,可以通过相应的动态发现和连接服务将这些组件实例作为占位符引入,并在运行时与真实组件实例建立连接。 在 AUTOSAR 端,实例必须在设计时声明,因此它们存在并且可用于互连的规范。使用这种解决方案,静态互连声明将仅限于 AUTOSAR 部分(无论如何都受此限制),而 GENIVI 部分将不受限制。需要更详细地讨论与 AUTOSAR 系统的动态通信集成,但这不在本报告的范围内。 #### 1.5.2 RTE 契约和 RTE 生成(RTE Contract and RTE Generation) Franca 集成的目标是集成系统的虚拟功能总线视图,这只是 AUTOSAR 开发的第一步。为了生成 AUTOSAR RTE,还需要有关 ECU 网络、应用组件以及应用组件到 ECU 网络的映射的更多信息。这些信息在 [3] 中定义。在第一步,即 RTE 契约阶段,需要定义和实现组件的行为,并必须细化有关数据类型的信息。第二步,即 RTE 生成阶段,还需要有关 ECU 资源以及应用组件到资源的映射的信息。为了完整地集成 AUTOSAR 和 GENIVI 系统,还必须考虑这些阶段和相应的描述要求。 由于 Franca IDL 没有用于指定行为、资源或分配的固定手段,Franca 集成无法定义相应的翻译。为 AUTOSAR 集成定义 Franca 部署规范以涵盖这些方面将是一项任务。 ## 2 Franca Connector Franca connector 是为指定 Franca 和 AUTOSAR 应用组件的所需互连而引入的新格式。它由三个主要部分组成: - **导入(Imports)**:分别定义 Franca 和 AUTOSAR 应用组件的 Franca 模型和 AUTOSAR 软件组件描述的引用。 - **Franca 实例(Franca Instances)**:将参与所需互操作的 Franca 组件实例的定义。 - **链接(Links)**:AUTOSAR 和 Franca 组件实例的互连的定义。 ### 2.1 导入和 Franca 实例(Imports and Franca Instances) 导入是表示 Franca 模型(fidl 文件)或 AUTOSAR 软件组件描述(arxml 文件)位置的字符串。导入特别定义了可以在 Franca Connector 中引用的 Franca 接口和 AUTOSAR 端口。 Franca 实例由其名称和它实现的 Franca 接口列表声明。Franca 接口必须包含在导入的 Franca 模型中。实例的已实现接口列表可以为空。 Franca Connector 中 Franca 实例定义的一种可能的具体表示法是: ``` franca_instance g implements F1, ..., Fn ``` 其中 g 是所定义的 Franca 实例的名称,F1, ..., Fn 是已实现的 Franca 接口的名称。 ### 2.2 链接(Links) 链接具有 AUTOSAR 端和 Franca 端。AUTOSAR 端始终由端口实例引用给出,即 SwComponentPrototype 和属于 SwComponentPrototype 的 SwComponentType 的 PortPrototype。AUTOSAR 端的一种可能的具体表示法是 `autosar_port comp : p`,其中 comp 是 SwComponentPrototype 的名称,p 是 PortPrototype 的名称。 链接的 Franca 端由 Franca 实例单独或由 Franca 实例及其实现的 Franca 接口之一给出: ``` franca_instance g:F 或 franca_instance g ``` 其中 g 是 Franca 实例的名称,F 是 Franca 接口的名称。 链接在预期通信流的方向上是有向的。链接的左侧定义发出数据元素或操作调用的实例;右侧定义接收数据元素或操作调用的实例。 每个 AUTOSAR 端口都由一个接口键入,该接口可以是客户端-服务器接口或发送方-接收方接口。在第一种情况下,它包含在端口处提供(provided,PPortPrototype)或需要(required,RPortPrototype)的操作。在第二种情况下,它包含在端口处发送(provided,PPortPrototype)或期望(required,RPortPrototype)的数据元素。两种 AUTOSAR 接口和 Franca Connector 链接的两个方向(AUTOSAR-to-Franca 和 Franca-to-AUTOSAR)产生四种类型的链接: 1. AUTOSAR-to-Franca Client Server Link 2. AUTOSAR-to-Franca Sender Receiver Link 3. Franca-to-AUTOSAR Client Server Link 4. Franca-to-AUTOSAR Sender Receiver Link > **图 2.1:AUTOSAR 和 Franca 组件实例的链接** 在下文的讨论中,我们假设以下 AUTOSAR 和 Franca 元素作为起点给出。 1. 一个 AUTOSAR 组件 A,其端口如表 2.1 所定义。 2. 一个类型为 A 的 AUTOSAR 组件原型 a。 3. 一个 Franca 接口 F1,其中包含方法 m1 和广播 b1,以及第二个 Franca 接口 F2,其中包含 fire-and-forget 方法 m2。 4. 一个实现 F1 和 F2 的 Franca 实例 g。 | 端口 | 接口 | 接口内容 | |------|------|----------| | reqPort_CS | reqCS | ∅ | | reqPort_SR | reqSR | ∅ | | provPort_CS | provCS | { op } | | provPort_SRPush | provSRPush | { sig } | | provPort_SRPull | provSRPull | ∅ | > **表 2.1:AUTOSAR 组件 A 的端口** Franca 接口和 Franca 实例到 AUTOSAR 的翻译——在下一章中讨论——产生图 2.1 右侧所示的组件类型。对于每个 Franca 接口(例如 F1),有三个端口: 1. 一个将 Franca 接口的方法作为 AUTOSAR 操作提供的端口(csProvPort_F1,键入为 prov_operations_F1)。 2. 一个将 Franca 接口的广播作为 AUTOSAR 数据元素提供的端口(srProvPort_F1,键入为 prov_dataElements_F1)。 3. 一个将 Franca 接口的 fire-and-forget 方法作为 AUTOSAR 数据元素请求的端口(srReqPort_F1,键入为 req_dataElements_F1)。 五个连接器由五个 Franca 链接生成,如下所讨论。 #### 2.2.1 AUTOSAR-to-Franca Client Server Link AUTOSAR-to-Franca 客户端-服务器链接 ``` autosar_port a : reqPort_CS → franca_instance g : F1 ``` 指定 AUTOSAR 组件原型 a 在其端口 reqPort_CS 处需要(调用)Franca 实例 g 中 Franca 接口 F1 中定义的操作(方法)。AUTOSAR-to-Franca 客户端-服务器链接的正确性条件是链接的 AUTOSAR 端是由客户端-服务器接口(ClientServerInterface)键入的所需端口(RPortPrototype),且 Franca 端具有 Franca 接口。 #### 2.2.2 AUTOSAR-to-Franca Sender Receiver Link 有两种 AUTOSAR-to-Franca 发送方-接收方链接,它们由其 Franca 端区分。如果 Franca 端包含一个接口,则意味着实现此接口的 Franca 实例提供了一个 fire-and-forget 方法。链接 ``` autosar_port a : provPort_SRPull → franca_instance g : F2 ``` 声明 fire-and-forget 方法由 AUTOSAR 组件原型 a 调用。在 AUTOSAR 描述中尚不知道的 fire-and-forget 方法通过链接被拉入键入 AUTOSAR 端口 provPort_SRPull 的接口。(这由接口 provSRPull 中的蓝色 m2 表示。) 如果 Franca 端不包含接口,链接 ``` autosar_port a : provPort_SRPush → franca_instance g ``` 指定 AUTOSAR 组件原型 a 将接口 provSRPush 中声明的数据元素(该接口键入端口 provPort_SRPush)发送到 Franca 实例 g。由于 Franca 模型未指定哪些数据元素可以发送到实例,因此现在将创建相应的元素。端口 provPort_SRPush、接口 provSRPush 以及在端口 provPort_SRPush 处提供的数据元素 sig 将被推送到 Franca 端。 AUTOSAR-to-Franca 发送方-接收方链接的正确性条件是 AUTOSAR 端是由发送方-接收方接口(SenderReceiverInterface)键入的提供端口(PPortPrototype),且 Franca 端要么具有包含至少一个 fire-and-forget 方法的 Franca 接口(pull 链接),要么 Franca 端没有接口(push 链接)。 #### 2.2.3 Franca-to-AUTOSAR Client Server Link Franca-to-AUTOSAR 客户端-服务器链接 ``` franca_instance g → autosar_port a : provPort_CS ``` 指定 Franca 实例 g 需要(调用)AUTOSAR 操作。Franca-to-AUTOSAR 客户端-服务器链接的正确性条件是 Franca 端没有 Franca 接口,且 AUTOSAR 端是由客户端-服务器接口(ClientServerInterface)键入的提供端口(PPortPrototype)。 #### 2.2.4 Franca-to-AUTOSAR Sender Receiver Link Franca-to-AUTOSAR 发送方-接收方链接 ``` franca_instance g : F1 → autosar_port a : reqPort_SR ``` 指定 Franca 实例 g 将 Franca 接口 F1 的广播(以及属性的通知)发送到 AUTOSAR 端口 reqPort_SR。Franca-to-AUTOSAR 发送方-接收方链接的正确性条件是 Franca 端必须具有 Franca 接口,且 AUTOSAR 端是由发送方-接收方接口(SenderReceiverInterface)键入的所需端口(RPortPrototype)。 ### 2.3 约束(Constraints) Franca Connector 中包含的链接集合必须遵守以下约束。 第一个约束是形式约束;它防止重复的链接。 #### ⌈[TR_FRANCA_CONSTR_00010] Franca connector 没有重复的链接⌋ 在 Franca connector 中不得有两个具有相同 AUTOSAR 和 Franca 端的链接。 ⌊() 第二个约束防止客户端连接到多个服务器。 #### ⌈[TR_FRANCA_CONSTR_00020] Franca connector 没有客户端-服务器扇出⌋ AUTOSAR 组件原型的所需客户端-服务器端口不得连接到多个 Franca 实例。 ⌊() ## 3 Franca-to-AUTOSAR 翻译(Franca-to-AUTOSAR Translation) 任一方向翻译的输入——Franca 到 AUTOSAR 或 AUTOSAR 到 Franca——始终是 Franca Connector。通过其导入,Franca Connector 引用应互连和翻译的 Franca 模型和 AUTOSAR 软件组件描述。翻译的目标可以是 AUTOSAR 软件组件描述(Franca-to-AUTOSAR 翻译)或 Franca 模型(AUTOSAR-to-Franca 翻译)。 可以定义仅由 Franca 导入组成的 Franca Connector;这意味着其 AUTOSAR 导入为空,并且不包含链接。在这种情况下,Franca-to-AUTOSAR 翻译仅将以 Franca IDL 表示的接口和数据类型规范翻译为这些接口和数据类型在 AUTOSAR XML 文档中的语义等效表示。 更一般的情况是同时导入 Franca 和 AUTOSAR 规范并连接两者的情况。在这种情况下,Franca-to-AUTOSAR 翻译产生一个 AUTOSAR 软件组件描述,其中包含: - 导入的 AUTOSAR 软件组件描述, - Franca 模型的翻译(接口和数据类型), - Franca 和 AUTOSAR 实例的互连的表示。 因此,纯翻译是 Franca 模型和 AUTOSAR 软件组件描述更一般集成的特例。 ### 3.1 符号(Notation) Franca IDL 元素到 AUTOSAR 元素的翻译定义遵循 [1] 中的表述。对于每个 Franca IDL 元类,我们命名一个通用元素,并定义此元素映射到的 AUTOSAR 元素或元素集。为此,我们使用一个表——或一组表,以防 France IDL 元素映射到一组 AUTOSAR 元素——具有以下含义。 | 字段 | 含义 | |------|------| | **AR Element** | 此条目定义 Franca 元类映射到的 AUTOSAR 元类。此外,会引入目标元素的名称,以便在后续条目或规则中引用映射的结果。 | | **AR Container** | 此条目指定通过其名称包含上述目标元素的 AUTOSAR 元素。 | | **Attributes** | 此条目定义目标元素的属性和交叉引用。 | | **Condition** | 在此条目中,可以给出映射的条件。如果条件为假,则 Franca 元素不会在 AUTOSAR 表示中生成目标元素。 | ### 3.2 Franca 模型(Franca Models) Franca 模型顶级元素 FModel 的翻译产生一个 AUTOSAR 包结构,稍后用作其他元素的容器。生成一个顶级包(FrancaModelPackage),其中包含翻译的完整结果。它被添加到 AUTOSAR XML 的根目录。 #### ⌈[TR_FRANCA_00010] Franca 模型映射到 AUTOSAR 顶级包结构⌋ FModel fModel 映射到表 3.1、表 3.2、表 3.3、表 3.4、表 3.5、表 3.6 和表 3.7 中描述的 ARPackages 集合。 ⌊() ### 3.3 Franca 类型(Franca Types) 本节描述 Franca 类型到 AUTOSAR 数据类型的映射,包括 Franca Type Collections、原始类型、内联数组、用户定义类型以及类型继承。 #### 3.3.1 Franca Type Collections Franca Type Collection 是 Franca 模型的顶级容器,其中可以包含类型定义和接口定义。 #### 3.3.2 原始类型(Primitive Types) Franca 中的原始类型(如 UInt8、Int32、Boolean、String、ByteBuffer 等)映射到 AUTOSAR 的 ApplicationPrimitiveDataType。 | Franca 类型 | AUTOSAR 类型 | |------------|--------------| | Boolean | ApplicationPrimitiveDataType (category=BOOLEAN) | | Byte | ApplicationPrimitiveDataType (category=UINT8) | | Int8/16/32/64 | ApplicationPrimitiveDataType (category=SINT*) | | UInt8/16/32/64 | ApplicationPrimitiveDataType (category=UINT*) | | Float/Double | ApplicationPrimitiveDataType (category=FLOAT*) | | String | ApplicationPrimitiveDataType (category=STRING) | | ByteBuffer | ApplicationPrimitiveDataType (category=UINT8_ARRAY) | #### 3.3.3 Franca 内联数组(Franca Inline Arrays) Franca 内联数组(Inline Arrays)映射到 AUTOSAR 的 ApplicationArrayDataType。 #### 3.3.4 用户定义类型(User-defined Types) Franca 中的用户定义类型(Typedefs、Structs、Unions、Maps)映射到 AUTOSAR 的 ApplicationDataType 子类: ##### 3.3.4.1 映射到应用数据类型(Mapping to Application Data Types) - **Typedef** → ApplicationDataType 引用 - **Struct** → ApplicationRecordDataType - **Union** → ApplicationRecordDataType(使用 union 语义) - **Map** → ApplicationRecordDataType(键值对) ##### 3.3.4.2 映射到实现数据类型(Mapping to Implementation Data Types) 如果 Franca 类型用于实现细节(如 RTE 内部),它也可以映射到 ImplementationDataType 子类。 #### 3.3.5 类型继承(Type Inheritance) Franca 中的类型继承映射到 AUTOSAR 中的 ApplicationDataType 继承关系。 ### 3.4 Franca 接口(Franca Interfaces) Franca 接口定义 Franca 组件提供的方法(methods)、属性(attributes)和广播(broadcasts)。Franca 接口映射到 AUTOSAR 的 PortInterface。 #### 3.4.1 Franca 接口 每个 Franca 接口生成三种 AUTOSAR 端口接口: - 客户端-服务器接口(用于 methods) - 发送方-接收方接口(用于 broadcasts) - 发送方-接收方接口(用于 fire-and-forget methods) #### 3.4.2 Franca 方法(Franca Methods) Franca 方法(methods)映射到 AUTOSAR ClientServerOperation。方法参数映射到 AUTOSAR OperationArgument。 #### 3.4.3 Franca 属性(Franca Attributes) Franca 属性(attributes)映射到 AUTOSAR VariableDataPrototype。 #### 3.4.4 Franca 广播(Franca Broadcasts) Franca 广播(broadcasts)映射到 AUTOSAR VariableDataPrototype,作为发送方-接收方接口的一部分。 #### 3.4.5 接口继承(Interface Inheritance) Franca 中的接口继承映射到 AUTOSAR 中 PortInterface 的继承。 ### 3.5 Franca Connector Franca Connector 部分定义了互连的实例和链接。 #### 3.5.1 AUTOSAR-to-Franca Client Server Link 连接 AUTOSAR 客户端-服务器端口到 Franca 实例。 #### 3.5.2 AUTOSAR-to-Franca Sender Receiver Link 连接 AUTOSAR 发送方-接收方端口到 Franca 实例。 #### 3.5.3 AUTOSAR-to-Franca Sender Receiver Link for Fire-And-Forget-Methods 连接 AUTOSAR 端口到 Franca fire-and-forget 方法。 #### 3.5.4 Franca-to-AUTOSAR Client Server Link 连接 Franca 实例到 AUTOSAR 客户端-服务器端口。 #### 3.5.5 Franca-to-AUTOSAR Sender Receiver Link 连接 Franca 实例到 AUTOSAR 发送方-接收方端口。 #### 3.5.6 在不相交容器中连接实例(Connecting Instances in Disjoint Containers) 处理位于不同容器中的实例之间的连接。 ## 4 AUTOSAR-to-Franca 翻译(AUTOSAR-to-Franca Translation) AUTOSAR-to-Franca 翻译将 AUTOSAR 软件组件描述的端口接口和数据类型转换为 Franca 模型。 ### 4.1 数据类型(Data Types) #### 4.1.1 平台类型(Platform Types) AUTOSAR 平台类型(来自 [7])映射到 Franca 原始类型: | AUTOSAR 平台类型 | Franca 类型 | |------------------|-------------| | boolean | Boolean | | uint8 | Byte | | uint16/32/64 | UInt16/32/64 | | sint8/16/32/64 | Int8/16/32/64 | | float32/64 | Float/Double | | string | String | #### 4.1.2 用户定义类型(User-defined Types) ##### 4.1.2.1 应用数据类型(Application Data Types) AUTOSAR ApplicationDataType 映射到 Franca 用户定义类型(Typedef、Struct、Union、Map)。 ##### 4.1.2.2 实现数据类型(Implementation Data Types) AUTOSAR ImplementationDataType 映射到 Franca 实现类型(如果 Franca 支持)。 ### 4.2 端口接口(Port Interfaces) AUTOSAR 端口接口(ClientServerInterface、SenderReceiverInterface、ModeSwitchInterface、ParameterInterface、NvDataInterface)映射到 Franca 接口: - ClientServerInterface → Franca Interface(methods) - SenderReceiverInterface → Franca Interface(broadcasts) - ModeSwitchInterface → 不映射到 Franca - ParameterInterface → Franca Interface(attributes) - NvDataInterface → Franca Interface(attributes) ### 4.3 Franca 特殊数据(Franca special data) Franca 特有的元素(如 error enumerations、metastructs、unions、maps)的翻译。 --- ## 附录 A 示例(Examples) 附录 A 包含 Franca 集成的具体示例,展示了 Franca 模型、Franca Connector、AUTOSAR 软件组件描述和翻译过程的具体 XML 与 Franca 表示。 ## 附录 B 引用的类表(Mentioned Class Tables) 附录 B 包含本文档引用的 AUTOSAR 元类的类表。 --- ## 翻译说明 - 本文档为 **AUTOSAR Franca IDL 软件组件描述集成**(TR_FRANCA)的完整中文翻译。 - AUTOSAR 方框符 `⌈⌋` 用于标识 TR 条目和约束的起止。 - 约束 ID(TR_FRANCA_00010、TR_FRANCA_CONSTR_00010 等)和需求 ID(TR_FRANCA_00000 等)保持英文。 - 关键术语(Franca IDL、Franca Connector、Franca Instance、Franca Model、Client Server、ClientServerInterface、SenderReceiverInterface、PortInterface、AtomicSwComponentType、SwComponentPrototype、PPortPrototype、RPortPrototype、PortPrototype、CompositionType、ECUMapping、ApplicationDataType、ImplementationDataType、Variant、Postbuild、SwComponentType、SwcInternalBehavior、RunnableEntity、Component、DataType、Type Collection、Primitive Type、User-defined Type、Type Inheritance、Interface Inheritance、Method、Attribute、Broadcast、Fire-and-Forget、Internal Behavior、Mapping、Translation、Adapter、Binding、Instance Reference、Service Provider、Service Consumer、Service Interface、CommonAPI、SOME/IP、IPC、Middleware、INC MW、INC TP、GENIVI、OEM 等)保持英文。 - Franca IDL 表示法(`franca_instance g implements F1, ..., Fn`、`autosar_port comp : p`、`franca_instance g:F` 等)保留英文原样。 - 文档间交叉引用(如 [RS_Main_00050]、[TPS_STDT_00078] 等)保持英文原样。 - 文档的图(Figure 1.1 至 Figure 1.6、Figure 2.1、Figure 3.1 至 3.7)的标题翻译为中文,图形说明指出图中表达的核心思想。