ARTICLE · 1197622
读懂汽车软件的“基因图谱”:一文彻底搞懂 AUTOSAR ARXML 文件与核心属性
一、 什么是 ARXML?为什么需要它?
它在开发流程中扮演什么角色?
跨工具链的桥梁 :无论你用的是 Vector 的 DaVinci、ETAS 的 ISOLAR,还是 EB tresos,大家都能导出和导入 ARXML,实现无缝衔接。代码生成的源泉 :配置工具读取 ARXML 文件后,可以直接自动生成 RTE(运行时环境)代码和 BSW(基础软件)配置代码。单一数据源 :从系统级网络拓扑,到 ECU 级配置,再到 SWC(软件组件)内部逻辑,全部统一在 ARXML 体系中。
二、 庖丁解牛:ARXML 的基本骨架
<?xml version="1.0" encoding="UTF-8"?><AUTOSARxmlns="http://autosar.org/schema/r4.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_00046.xsd"><AR-PACKAGES><AR-PACKAGEUUID="12345678-1234-1234-1234-123456789abc"><SHORT-NAME>MyProjectPackage</SHORT-NAME><ELEMENTS><!-- 这里存放具体的组件、接口、数据类型等元素 --></ELEMENTS></AR-PACKAGE></AR-PACKAGES></AUTOSAR><AUTOSAR>:根目录(整个硬盘)。 <AR-PACKAGES> & <AR-PACKAGE>:文件夹(用于分类存放不同的模块,比如把数据类型放一个包,把端口接口放一个包)。 <ELEMENTS>:文件夹里的具体文件(里面包含了真正在干活的软件组件、接口、信号等定义)。
三、 核心干货:ARXML 中最常用的属性解析
1. 基础身份属性
① SHORT-NAME(短名称 / 唯一标识符)
作用 :这是 ARXML 中最重要、出现频率最高 的标签!它相当于变量名,在同一个包(Package)路径下必须唯一。代码生成工具生成的 C 语言函数名、变量名,基本都是直接取自 SHORT-NAME。示例 :<SHORT-NAME>App_DoorLock</SHORT-NAME>
② LONG-NAME & DESC(长名称与描述)
作用 :SHORT-NAME 受限于命名规范(不能有空格、特殊字符),有时不够直观。LONG-NAME 用于提供人类易读的完整名称,而 DESC 则相当于代码注释,用来写详细说明。
③ UUID(通用唯一识别码)
作用 :通常作为标签内部的 XML 属性出现(如 <AR-PACKAGE UUID="...">)。它由一串 32 位的十六进制数字组成,用来在工具链底层全局唯一地追踪某个对象,即使你修改了 SHORT-NAME,工具也能通过 UUID 知道它还是原来那个对象。
2. 引用与关联属性(ARXML 的灵魂)
④ DEST 与 ...-REF(目标类型与引用路径)
作用 :当一个元素需要关联另一个元素时,会使用带有 -REF 后缀的标签,并配合 DEST(Destination,目标元模型类型)属性。路径写法类似于 Linux 的文件路径(用 / 分隔各层级的 SHORT-NAME)。示例 :为一个端口(Port)指定它所使用的接口(Interface):<PROVIDED-INTERFACE-TREF DEST="SENDER-RECEIVER-INTERFACE">/Interfaces/IF_VehicleSpeed</PROVIDED-INTERFACE-TREF>解读:这个提供端口(P-Port)引用了一个位于 /Interfaces/ 包下、名叫 IF_VehicleSpeed 的接口,且明确指出该目标的类型是 SENDER-RECEIVER-INTERFACE(发送-接收接口)。
3. 软件组件(SWC)与接口常用属性
⑤ 组件与端口类
APPLICATION-SW-COMPONENT-TYPE:声明这是一个应用层软件组件。 P-PORT-PROTOTYPE(Provided Port):提供端口(发送数据或提供服务)。 R-PORT-PROTOTYPE(Required Port):需求端口(接收数据或请求服务)。
⑥ 接口类
SENDER-RECEIVER-INTERFACE(S/R 接口):用于传递数据(信号),最常用的接口类型。其内部包含 <DATA-ELEMENTS>。 CLIENT-SERVER-INTERFACE(C/S 接口):用于函数调用(客户端调用服务端的操作)。其内部包含 <OPERATIONS>。
⑦ 内部行为与运行实体(Internal Behavior & Runnable)
RUNNABLE-ENTITY:可运行实体, essentially 就是最终生成的 C 语言函数。 SYMBOL:指定该 Runnable 生成 C 代码时的 真实函数名 。MINIMUM-START-INTERVAL:最小启动间隔时间(通常设为 0.0)。 CAN-BE-INVOKED-CONCURRENTLY:是否允许被多个任务并发调用(true 或 false)。 TIMING-EVENT & PERIOD:周期触发事件及周期时间(例如 <PERIOD>0.01</PERIOD> 表示 10ms 周期任务)。
4. 数据类型与转换属性(Data Types & CompuMethod)
⑧ 数据类型三剑客
SW-BASE-TYPE:最底层的基础类型(如 uint8, float32,决定内存占多少字节)。 IMPLEMENTATION-DATA-TYPE(IDT):代码实现层面的数据类型(可定义数组、结构体、指针等)。 APPLICATION-DATA-TYPE(ADT):应用层物理意义上的数据类型(如“车速”、“水温”)。
⑨ COMPU-METHOD(计算方法 / 物理值与原始值转换)
作用 :汽车总线上传输的是原始值(Raw Value),而算法需要物理值(Physical Value)。COMPU-METHOD 就是用来定义转换公式以及枚举值映射(Texttable)的地方。
P h y s i c a l = O f f s e t + F a c t o r × R a w UNIT-REF:关联物理单位(如 km/h、℃)。
5. BSW(基础软件)配置专用属性(ECUC)
ECUC-MODULE-CONFIGURATION-VALUES:代表一个 BSW 模块的配置(比如 Can、Os、Com 模块)。 ECUC-CONTAINER-VALUE:配置容器(相当于配置项的分组文件夹)。 DEFINITION-REF:指向官方标准参数定义文件的路径(告诉工具这个容器或参数到底代表什么含义)。 参数值三兄弟 :ECUC-NUMERICAL-PARAM-VALUE:数值型参数(如波特率 500000、周期时间、开关 0/1)。 ECUC-TEXTUAL-PARAM-VALUE:文本型参数(如回调函数名称、枚举字符串)。 ECUC-REFERENCE-VALUE:引用型参数(比如某条 PDU 引用了底层某个硬件 CAN 邮箱)。 具体的数值统一存放在 <VALUE> 标签内。
四、 实战演练:1分钟看懂一段真实的 ARXML
<AR-PACKAGES><!-- 1. 定义接口包 --><AR-PACKAGE><SHORT-NAME>PortInterfaces</SHORT-NAME><ELEMENTS><SENDER-RECEIVER-INTERFACE><SHORT-NAME>IF_VehSpd</SHORT-NAME><IS-SERVICE>false</IS-SERVICE><DATA-ELEMENTS><VARIABLE-DATA-PROTOTYPE><SHORT-NAME>VehSpd_Val</SHORT-NAME><TYPE-TREFDEST="IMPLEMENTATION-DATA-TYPE">/DataTypes/IDT_uint16</TYPE-TREF></VARIABLE-DATA-PROTOTYPE></DATA-ELEMENTS></SENDER-RECEIVER-INTERFACE></ELEMENTS></AR-PACKAGE><!-- 2. 定义软件组件包 --><AR-PACKAGE><SHORT-NAME>SwComponents</SHORT-NAME><ELEMENTS><APPLICATION-SW-COMPONENT-TYPE><SHORT-NAME>SWC_SpeedSensor</SHORT-NAME><PORTS><P-PORT-PROTOTYPE><SHORT-NAME>PP_VehSpd</SHORT-NAME><PROVIDED-INTERFACE-TREFDEST="SENDER-RECEIVER-INTERFACE">/PortInterfaces/IF_VehSpd</PROVIDED-INTERFACE-TREF></P-PORT-PROTOTYPE></PORTS></APPLICATION-SW-COMPONENT-TYPE></ELEMENTS></AR-PACKAGE></AR-PACKAGES>第一个包 PortInterfaces 里定义了一个 S/R 接口,名叫 IF_VehSpd,它不是底层系统服务(<IS-SERVICE>false</IS-SERVICE>)。 这个接口里包含一个数据元素叫 VehSpd_Val,它的数据类型引用了 /DataTypes/IDT_uint16。 第二个包 SwComponents 里定义了一个应用层组件叫 SWC_SpeedSensor。 该组件有一个发送端口(P-Port)叫 PP_VehSpd,它调用的接口正是前面定义的 /PortInterfaces/IF_VehSpd。
五、 工程师日常处理 ARXML 的实用建议
永远不要手动从零编写 ARXML :ARXML 是给机器看的,Schema 校验极其严格,哪怕写错一个字母或者顺序不对,导入工具就会报错。日常创建和修改请务必使用建模或配置工具(如 DaVinci Developer/Configurator、Simulink 等)。善用文本对比工具(Beyond Compare / Git Diff) :当代码生成报错,或者需要排查不同版本配置的差异时,直接把两个 ARXML 扔进 Beyond Compare,顺着 SHORT-NAME 和 <VALUE> 看变化,比在 GUI 工具里一层层点开找要快得多!拥抱 Python 自动化脚本 :对于大型项目,如果有成百上千个信号需要批量建 Port 或修改属性,可以使用 Python 的 lxml 库或专门的 autosar 第三方库来批量解析和生成 ARXML,效率直接起飞!















































































