| 编辑推荐: |
本文主要介绍了汽车电子架构的“终极协议”与开发者实战指南ARXML相关内容,希望对你的学习有帮助。
本文来自于汽车嵌入式学堂,由火龙果软件Alice编辑,推荐。 |
|
现代汽车研发中,软件是车辆竞争力的核心,高端电动汽车代码量超1亿行,80%以上与电子系统相关。核心问题是如何在OEM、Tier
1、Tier 2间高效无歧义传递系统工作指令。传统用Excel、Word、邮件沟通的方式,存在沟通成本高、错误率高、追溯难的弊端。ARXML应运而生,它并非普通配置文件,而是AUTOSAR标准规定的汽车电子系统架构唯一官方语言。
本文将从工程师实际需求出发,解析ARXML核心内容,助力开发者快速上手。
ARXML不是工具的“配置文件”,而是系统的“唯一真相源”
很多开发者对ARXML存在误解,认为它是Vector、EB或ETAS工具生成的一个“配置文件”,为此感到困惑:为什么同一个工具,不同项目的ARXML文件结构千差万别?
核心洞见:ARXML = AUTOSAR Model + XML Serialization
ARXML的本质是AUTOSAR架构模型的“序列化”格式。它把抽象的系统架构——软件组件、ECU、通信、端口、数据类型——通过一套标准化的XML标签“翻译”成一个物理文件。
这套XML标签是严格遵循AUTOSAR标准定义的Schema的,不能随意更改。
因此,ARXML文件的根本作用,是在所有参与方之间建立一个“单一事实源”(Single Source
of Truth, SSoT)。
- 对于OEM:它定义了系统的整体架构、功能分配和通信需求。
- 对于Tier 1供应商:它是构建ECU软件的“设计规格书”。配置工具必须依赖ARXML来生成代码和配置。
- 对于测试工程师:它提供了测试用例所需的完整接口和数据模型。
- 对于集成工程师:它是分析总线负载、检查通信冲突、验证硬件资源分配的唯一依据。
开发者须知 -
你不能指望“看懂”所有ARXML文件。它是一个庞大的、分层的、动态的模型。你只需要关注与你当前工作相关的信息。
- “读懂ARXML”不等于“看懂XML文本”。任何正规工具(如DaVinci Developer、EB
tresos Studio)都会提供图形化界面,将模型可视化,这才是你日常工作的主要界面。
- 不要试图在XML文本文件里做手动修改。修改应在工具中进行,工具会自动维护XML结构和语义,避免人为引入错误。
ARXML的底层结构与关键元素详解
ARXML文件是一个遵循特定Schema的XML文档。它的结构是高度分层的,每个层级都对应AUTOSAR标准中的一个模型包(Package)。
1. 顶级结构:AUTOSAR Root
所有ARXML文件都以一个<AUTOSAR>元素作为根节点开始。它包含两个最重要的属性:
- xsi:schemaLocation:指明了该文件所依据的AUTOSAR标准版本(如http://autosar.org/schema/r4.3.0)。
- xmlns:xsi和xmlns:定义了命名空间(Namespace),用于区分不同版本的标准。
2. 核心包(Packages)
在<AUTOSAR>下面,会包含多个<AR-PACKAGE>,每个包代表一个特定的模型域(Domain)。对于应用开发者而言,最相关的几个包是:
- SWC-Types: 定义所有软件组件(Software Component, SWC)的类型。这是应用软件逻辑的载体。
- ECU-Extracts: 包含部署在特定ECU上的所有模型元素的“快照”。它是位于“系统级”与“ECU级”之间的关键桥梁。
- Communication: 包含通信相关的所有定义,如信号(Signal)、PDU(Protocol
Data Unit)、帧(Frame)、总线(Bus)等。
- DataType: 定义了所有基础数据类型和复合数据类型,如UINT8、INT32、Struct、Array等。
3. 核心元素解析
下面深入剖析几个对开发者至关重要的元素:
3.1 软件组件(SoftwareComponentType)
这是应用软件的最小单元。一个<SOFTWARE-COMPONENT-TYPE>包含:
- <SHORT-NAME>: 组件的短名称,如EngineControlSWC。
- <PORTS>: 组件的所有端口。端口是组件与外部世界交互的“接口”,分为发送端口(PROVIDED-PORT)和接收端口(REQUIRED-PORT)。
<SOFTWARE-COMPONENT-TYPE> <SHORT-NAME>EngineControlSWC</SHORT-NAME> <PORTS> <P-PORT> <SHORT-NAME>EngineSpeedOut</SHORT-NAME> <INTERFACE-REF DEST="SENDER-RECEIVER-INTERFACE"> /Interfaces/EngineSpeedInterface</INTERFACE-REF> </P-PORT> <R-PORT> <SHORT-NAME>ThrottleIn</SHORT-NAME> <INTERFACE-REF DEST="SENDER-RECEIVER-INTERFACE"> /Interfaces/ThrottleInterface</INTERFACE-REF> </R-PORT> </PORTS> </SOFTWARE-COMPONENT-TYPE>
|
关键点在于<INTERFACE-REF>,它指向一个定义好的接口(Interface),这个接口才是真正定义了数据结构和语义的地方。
3.2 接口(Interface)
接口定义了端口之间传递的数据格式和语义。最常用的是Sender-Receiver Interface。它包含一个或多个<DATA-ELEMENT>,每个元素定义了一个数据项。
<SENDER-RECEIVER-INTERFACE>
<SHORT-NAME>EngineSpeedInterface</SHORT-NAME>
<DATA-ELEMENTS>
<VARIABLE-DATA-PROTOTYPE>
<SHORT-NAME>EngineRPM</SHORT-NAME>
<TYPE-TREF DEST="DATA-TYPE">/DataTypes/UINT16</TYPE-TREF>
</VARIABLE-DATA-PROTOTYPE>
</DATA-ELEMENTS>
</SENDER-RECEIVER-INTERFACE> |
这里,EngineRPM是一个UINT16类型的数据。它描绘了“发送方在发送什么,接收方在接收什么”。
3.3 ECU Extract(ECU配置摘要)
这是开发中最常接触的包。它不是一个“真实”的ECU,而是一个包含该ECU上所有部署信息的模型快照。它包含了:
- 该ECU上所有被部署的软件组件(SWC)。
- 这些SWC的所有端口所连接的通信接口。
- 与通信相关的帧(Frames)、PDU、信号(Signals)的细节。
- 与底层驱动(BSW)模块(如Diag、Com、Rte)的配置。
3.4 通信配置(Com、PDU、Frame)
从应用层的接口,到物理层的CAN报文,ARXML精确地描述了这个映射过程。其核心流程为:
- Signal (信号): 定义了单个数据项(如EngineRPM),并赋予它最大值、最小值、单位、分辨率等物理属性。
- PDU (Protocol Data Unit,协议数据单元): 定义了如何将一个或多个信号“打包”进一个数据块。一个PDU可以包含多个信号,不同信号可以被“打包”到不同的PDU中。
- Frame (帧): 定义了如何将一个PDU“打包”进一个物理报文(如CAN报文),并指定报文的ID、周期、长度等物理属性。
<FRAME>
<SHORT-NAME>EngineFrame</SHORT-NAME>
<FRAME-TRIGGERING>
<CAN-FRAME-TRIGGERING>
<IDENTIFIER>0x100</IDENTIFIER>
<CAN-FRAME>
<FRAME-LENGTH>8</FRAME-LENGTH>
<PDU-TRIGGERING-REFS>
<PDU-TRIGGERING-REF DEST="PDU-TRIGGERING"> /ECUs/MyECU/Communication/PDUs/EnginePDU</PDU-TRIGGERING-REF>
</PDU-TRIGGERING-REFS>
</CAN-FRAME>
</CAN-FRAME-TRIGGERING>
</FRAME-TRIGGERING>
</FRAME>
|
开发者实战要点
- 不要过度关注“接口”本身。看接口是为了理解数据的“是什么”和“在哪里”。真正的“工作”是看这些接口在通信包中如何映射到具体的信号、PDU和帧。
- ECU Extract 是你的“工作台”。在工具中打开ECU Extract,你能看到该ECU上所有软件、所有通信、所有硬件资源的视图。这是排查通信问题、分析资源占用、验证部署方案的第一手资料。
开发者必知的ARXML使用实践
1. 如何在项目中定位信息
假设你需要知道“发动机转速信号EngineRPM”的传输周期。操作步骤如下:
1.全局搜索:在工具中(如DaVinci Developer)搜索EngineRPM。
2.定位到Signal:找到EngineRPM Signal的定义。
3.上溯到PDU:找到该Signal所属的PDU。
4.上溯到Frame:找到该PDU所属的Frame。
5.查看帧周期:Frame中通常有<CYCLE-TIME>字段,即为该信号的传输周期。
这个过程体现了AUTOSAR的“分层”和“追溯”思想。
2. 修改ARXML的正确方式 -
永远在图形化工具中进行修改。直接修改XML文本是极其危险的,很容易破坏结构或语义,导致工具无法识别。
- 遵循工具的“模型规则”。工具会自动校验你的修改是否符合AUTOSAR标准,例如,不能将一个无符号整数类型的数据赋给一个有符号整数类型的端口。
- 进行模型一致性检查(Check)。在完成修改后,务必运行工具的“Check”功能。它会检查模型中是否存在潜在的配置错误,如端口未连接、资源不足等。
3. 理解“部署图”(Deployment)
部署是将软件组件分配到物理ECU的过程。在ARXML中,它体现在<ECU-EXTRACT>中。通过部署图,你可以:
- 规划资源:查看某个ECU上部署了多少个SWC,占用了多少CPU和内存资源。
- 分析负载:查看该ECU上的通信负载(总线负载率),判断是否需要优化或调整。
- 进行版本管理:不同的车型或配置可能对应不同的部署方案。ARXML可以精确描述这些差异。
4. 与代码生成的联动
所有的代码生成工具(如DaVinci Configurator Pro, EB tresos Studio)的核心输入就是ARXML。你所做的每一个配置,最终都会转化为C代码。例如:
- 一个发送端口P-PORT会被生成为一个函数调用,如
Rte_Write_EngineControlSWC_ EngineSpeedOut_EngineRPM(value)。
- 一个接收端口R-PORT会被生成为一个函数调用,如
Rte_Read_EngineControlSWC_ ThrottleIn_Throttle(value)。
- 通信协议栈(Com、PduR)的配置会生成相应的配置表。
因此,理解ARXML,就是从源头理解你最终看到的那些C代码是如何生成的。 |