[车联网/计算机网络] Autosar 的 `ARXML` 配置数据库文件协议

序: 缘起 ARXML

xml 复制代码
//ARXML_AP_V2.9.arxml
<AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://autosar.org/schema/r4.0" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_00048.xsd">

//ARXML_CP_V2.9.arxml
<AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://autosar.org/schema/r4.0" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-3-0.xsd">

概述 : Autosar 的 ARXML 配置数据库文件协议

ARXML 文件

  • ARXML文件: AUTOSAR系统描述文件 ,后缀*.arxml
  • 实质是一个XML文件,一般通过Autosar标准的XSD进行约束
  • 可用专用工具Artop,Systemdesk,Matlab,DaVinci developer,Autosar Explorer...生成。
  • XMLDBC文件一样,ARXML是一个通用的配置/数据库文件

所以,这里只需了解ARXML文件的结构(方便在将ARXML导入工具前,能够检查一些基本的错误),无需想着用过多的时间手动生成它(生成的工作,专业工具已经帮你做解决了)。

XML

XML简介

  • XML : 可扩展标记语言(eXtensible Markup Language),是是一种非常灵活的标记语言,没有固定的标签,所有的标签,在符合XML命名规则的基础上,都可以自定义,但是在写标签名的时候一定要有含义。

通常,XML被用于信息的记录和传递。因此,XML经常被用来充当"配置文件"和"数据库"。

  • 一般可通过"Eclipse "和"网页浏览器 "等软件工具打开XML文件。

ARXML文件的后缀名修改为XML,可以通过这些工具打开。

XML 文件数据结构

以下是一个简单Demo

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<books>
<!-- 图书信息 -->
    <book id="book_1">
        <author>张三</author>
        <title>XML高级教程</title>
        <description>介绍XML和XML实战</description>
    </book>
</books>
  • XML文档是树状结构;
  • 第1行:XML声明。 必须放在第一行,第一列,声明语句之前,不能有任何的空格和注释。定义了XML版本和编码信息。其中,版本永远都是1.0;编码方式一般都使用UTF-8(该编码支持中文标签),编码信息不区分大小写。
  • 第2行:根元素 : <books>。XML有且仅有一个根元素。元素由开始标签、元素内容、结束标签组成,没有被其它元素包围的元素称为根元素;
  • 第3行:注释的写法<!-- 注释内容 -->,但不能嵌套使用。
  • 第4行:属性 : id="book_1"。属性必有值,值必须使用引号(单引号,双引号)。属性其实是描述标签一些额外的信息,一个标签可以有多个属性。可以将属性看为元素的另一种写法。
  • 第5~7行:表示元素
  • XML中的标签区分大小写,对应的开始标签和结束标签必须大小写一致。
  • 标签命名:普通字符有:字母,数字,-中横线,_下划线,.点号,数字不能作为首字母出现等。大段内容有许多特殊符号内容,使用转义,如下的例子:了看可是lj lkdjlsjd ls ksj lsjdlks d]]>
  • XML中的标签是成对的,而且要正确嵌套:标签可以嵌套,但不可以交叉嵌套。
  • 实际的项目当中,第4~8行这部分经常是重复的。
  • 特殊符号使用符号实体:
  • 单引号:用&apos表示
  • 双引号:用&quot表示
  • 空格:用&nbsp表示
  • &符号:用&amp表示
  • >符号:用&gt表示
  • <符号:用&lt表示
  • 如下根元素下,可以存在多个并列的元素:
xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<books>
<!-- 图书信息 -->
    <book id="book_1">
        <author>张三</author>
        <title>XML高级教程</title>
        <description>介绍XML和XML实战</description>
    </book>
    <book id="book_2">
        <author>李四</author>
        <title>XML中级教程</title>
        <description>介绍XML和XML实战</description>
    </book>
</books>

有效的XML

  • XML首先必须是格式良好 的,一般使用DTDXSDXML Schema)定义语义约束。ARXML文件使用XSD进行约束。

认识DTD

DTD简介

  • DTD全称: Document Type Definition

用于约束XML的文档格式,保证XML是一个有效的XML。定义好接口和格式,方便多个人同时开发。

  • DTD可以分为两种:内部DTD;外部DTD

  • DTDXML之间的关系:

  • 类(人类)和对象(我)
  • 数据库(表)和行(一条记录)
  • DTD的缺点:
  • DTD约束XML的时候,不能对XML中数据类型做详细的限定。
  • DTD约束有自己的语法,书写时必须遵守DTD的语法;
  • 一个XML文件中只能引入一个DTD约束,而无法通过多个DTD文件来约束同一个XML文件。

内部的 DOCTYPE 声明

  • 内部DTD的定义,语法如下:
    a)
    b) 元素声明语法:
shell 复制代码
<!ELEMENT 元素名 (子元素[,子元素...])>

c) 数量词:

txt 复制代码
+:表示元素出现至少出现一次

?:表示元素出现0次或1次

*:表示元素出现任意次。举例<!ELEMENT books (book*)>

d) 属性声明语法:

  • 属性类型:CDATA,表示字符数据(character data)
  • 默认值:
txt 复制代码
#REQUIRED,表示必须出现

#IMPLIED,表示不是必须出现
  • 带内部DTD的完整XML
xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<!-- 声明内部DTD -->
<!DOCTYPE books [
  <!ELEMENT books (book+)>
  <!ELEMENT book  (author, title, description)>
  <!ATTLIST book id CDATA #REQUIRED >
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
]>

<books>
<!-- 图书信息 -->
    <book id="book_1">
        <author>张三</author>
        <title>XML高级教程</title>
        <description>介绍XML和XML实战</description>
    </book>
    <book id="book_2">
        <author>李四</author>
        <title>XML中级教程</title>
        <description>介绍XML和XML实战</description>
    </book>
</books>

外部的 DOCTYPE 声明

  • 创建一各独立的外部DTD文件,内容如下:
xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<!---声明内部DTD-->
  <!ELEMENT books (book+)>
  <!ELEMENT book (author, title, description)>
  <!ATTLIST book id CDATA #REQUIRED >
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  • 在XML中引入外部DTD文件,完整的语法如下:
xml 复制代码
<!DOCTYPE 根元素 SYSTEM "文件名">
  • 带外部DTD的完整XML
xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<!-- 声明外部DTD -->
<!DOCTYPE books SYSTEM "books.dtd">
<books>
<!-- 图书信息 -->
    <book id="book_1">
        <author>张三</author>
        <title>XML高级教程</title>
        <description>介绍XML和XML实战</description>
    </book>
    <book id="book_2">
        <author>李四</author>
        <title>XML中级教程</title>
        <description>介绍XML和XML实战</description>
    </book>
</books>

认识XSD

XSD简介

  • XSD全称:XML结构定义(XML Schema Definition),是DTD的替代者。

  • 不仅可以定义XML文档的结构,还可以规范XML文档的内容。XSD本身也是XML文档。

  • XSD采用XML文档来定义语义约束,比DTD要复杂一些,但是功能强大的多:

  • 定义可出现在文档中的元素;
  • 定义可出现在文档中的属性;
  • 定义哪个元素是子元素;
  • 定义子元素的次序;
  • 定义子元素的数目;
  • 定义元素是否为空,或者是否可包含文本;
  • 定义元素的数据类型;
  • 定义元素和属性的默认值以及固定值。
  • 允许开发这自定义数据类型
  • 可读性强
  • 可针对未来需求进行扩展
  • 一个XML中可以引入N个Schema进行约束。
  • 书写的时候,它遵守XML的语法规则,它的文件扩展名XSD

XSD举例

  • 这一章节仅做了解,无需过多深入。知道XML和XSD的之间的关系就行。

  • book.xsd文件

xml 复制代码
<?xml version="1.0" encoding="utf-8">
<!--
	Schema文件中使用W3C对Schema文件的约束信息

	不管是XML还是XSD文件,都需要被约束
	在根标签上使用xmls属性(xmlns="http://www.w3.org/2001/XMLSchema")引用W3C的约束

	在schema中使用
	targetNamespace定义当前schema被xml引用是的名称(名称空间);
	targetNamespace="http://www.example.org/book"定义当前的schema的名称为:http://www.example.org/book值,这个值可以随便写,用来标识约束文件
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.example.org/book"
        xmlns:tns="http://www.example.org/book"
        elementFormDefault="qualified">
	<!--
	在Schema文件中使用element标签来定义xml中可以书写的标签名	
	-->
    <element name="books">
		<!--
		在books中的子标签,需要在Schema中定义的books的标签内部嵌入element来定义。
		简单标签:如果一个标签没有子标签,也没有属性,这个标签是一个简单标签。
		复杂标签:如果标签拥有属性或者拥有子标签,那么这个标签就是一个复杂标签。
		
		在element标签中
		complexType来声明当前element定义的那个标签是一个复杂标签
		simpleType来声明当前element定义的那个标签是一个简单标签		
		-->
		<complexType>
		    <!--在complexType使用sequence定义子标签之间的顺序-->
			<sequence>
			    <element name="book">
				    <complexType>
					    <sequence>
						     <element name="name" type="string"></element>
						     <element name="price" type="double"></element>
						     <element name="author" type="string"></element>							 
						</sequence>					
					</complexType>
				</element>			
			</sequence>
		</complexType>		
    </element>
</schema>
  • book.xml文件
xml 复制代码
<?xml version="1.0" encoding="utf-8">
<!--
	在根标签上使用xmls属性(xmlns="http://www.example.org/book")引用Schema的约束
	当引用多个约束时,需要在xmlns后追加
	xmlns:context="***"
	xmlns:p="***"

	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	声明当前的XML文件是schema一个实例(当前这是一个自定义的xml文件,是被某个schema文件约束)

	xsi:schemaLocation="http://www.example.org/book book.xsd"引用schema的位置,其中的"http://www.example.org/book"要与XSD中的targetNamespace里的字符串保持一致
-->
<books
	xmlns="http://www.example.org/book"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.example.org/book book.xsd"
>
    <book>
	    <name>XML高级教程</name>
	    <price>59</price>
	    <author>张三</author>		
	</book>
</books>

应用场景

CASE: 创建一个Classic CAN(经典CAN2.0)的系统描述ARXML文件

参考文献

0 序言

  • AUTOSAR System Description Network Explorer是一个文件编辑器 ,支持可视化和编辑系统描述的AUTOSAR系统描述文件(.arxml)ECU摘录的通信内容
  • 它支持架构版本4.0.3、4.1.2、4.2.1、4.2.2和4.3.0。
  • AUTOSAR系统描述ARXML)文件是基于XML的文件格式,描述网络通信的元素基于AUTOSAR系统模板。
  • 其界面如下:

1 创建一个AUTOSAR系统描述

  • 双击"AUTOSAR Explorer 2.0"快捷方式(见图1-1),打开"AUTOSAR System Description Network Explorer"(见图1-2)。

图1-1

图1-2

  • 在菜单栏中,依次选择 File --> New File ...(见图1-3),弹出"Create New File"对话框。接着在该对话框中选择项目需要的"Autosar格式版本"和"物理层的通信方式",单击"OK" (见图1-4)。

图1-3

图1-4
注意:

  • 创建完成后,就无法再修改"Autosar格式版本"。
  • 根据所选类型创建一个具有通信Cluster和物理通道的AUTOSAR系统描述文件(见图1-5)。单击"保存"按钮,选择合适的路径,并命名这个描述文件(见图1-6)。

图1-5

图1-6

2 物理层命名以及创建ECU

  • 完成第1章后,重新打开Test_CAN.arxml(见图2-1),选中通信Cluster,在其右侧的属性视图中,重命名这个Cluster,并设置这个CAN通信的波特率(见图2-2)。

图2-1

图2-2

  • 创建ECU方法,有两种:
  • 菜单栏中,依次选择"Edit"à"Create Ecu..."(见图2-3);
  • 工具栏中,单击"Create ECU"(见图2-4)。

图2-3

图2-4

  • 弹出"New ECU"对话框(见图2-5)。

图2-5

  • 重命名ECU,单击"OK"(见图2-6)。

图2-6

  • 完成后的效果如下(见图2-7):

图2-7

3 新建一个Frame

  • 创建Frame方法,有三种:
  • +先在"导航栏"中选择"Frames",然后在主视图中鼠标右键,在上下文中选择"Create Frame..."(见图3-1);

图3-1

  • 依次在菜单栏中选择"Edit-->"Create Frame..."(见图3-2);

图3-2

  • 工具栏中,单击"Create Frame"(见图3-3)。

图3-3

  • 弹出"Edit Frame"对话框(见图3-4)。
  • "Edit Frame"对话框修改如下(见图3-5)。

图3-5

  • 注意:
  • 1、"Edit Frame"对话框中的"Name",可以理解为"DBC中Message名称";
  • 2、"Edit Frame"对话框中的"Length"表示帧的数据域长度,单位Byte;
  • 3、"Edit Frame"对话框中的"ID"表示CAN_ID,十六进制表示;
  • 4、"Edit Frame"对话框中的"Addressing Mode"有:Standard(标准帧)和Extended(扩展帧)两个选项,表示"帧类型",可以理解为"DBC中Message里的Type";
  • 5、"Edit Frame"对话框中的"CAN FD Supported"选项:不勾选,表示是经典CAN2.0帧;勾选,表示是CAN FD帧;
  • 6、"Edit Frame"对话框中的"Sender/Receiver Relations"用来定义该Frame帧的发送和接收ECU。图3-6表示该Frame帧的发送节点是OBC;图3-7表示该Frame帧的接收节点是OBC。

图3-6

图3-7

  • 完成后的效果如下(见图3-8) ,按照此方法可以添加其它的Frame帧:

图3-8

4 新建一个PDU(协议数据单元)

  • PDU的概念在DBC中是没有的。
  • PDU(Protoco> +Data Unit:协议数据单元)代表在帧上传输的数据单元
  • 它包含在协议栈中交换的有效负载和控制信息。
  • 根据PDU的应用和AUTOSAR格式版本,AUTOSAR模型可以区分不同类型的PDU。
  • 实际的使用:将Signal信号映射的PDU当中。
  • 接着图3-5,在PDU-Frame-Mapping中,选择"Signal-I-PDU" (见图4-1),弹出"Edit Signal-I-PDU"对话框,根据需要编辑相关的信息(见图4-2)。

图4-1

  • 注意:常用的有以下PDU。
  • Signal-I-PDU:
  • N-PDU: 网络层PDU。由传输协议模块用于分段I-PDU;
  • NM-PDU:
  • XCP-PDU:
  • General-Purpose-I-PDU(XCP):
  • multiplexed I-PDU: I-PDU在两个COM I-PDU中组装在IpduM模块中, 将Signal-I-PDU映射到静态和动态段。
  • DCM-I-PDU:

图4-2

  • 注意:
  • "Edit Signal-I-PDU"中的信息一般默认不修改。

5 新建一个signal

  • 接着图3-5,在Mapped Signals中,选择"Signal" (见图5-1),弹出"Edit Signal"对话框(见图5-2)。

图5-1

图5-2

  • 根据需要编辑相关的信息(见图5-3,图5-4,图5-5,图5-6)。

图5-3

图5-4

图5-5

图5-6

  • 注意:
  • "Edit Signal"对话框中的"Name",可以理解为"DBC中Signal名称";
  • "Edit Signal"对话框中的"Length",表示信号的长度,单位Bit;
    +"Edit Signal"对话框中的"Data Type Policy",对于每个ISignal,都有一个DataTypePolicy定义,在大多数情况下将确定信息源。
    +"Edit Signal"对话框中的"Position[Bit]",表示信号的起始位;
    +"Edit Signal"对话框中的"Update Bit",表示信号的更新位;
    +"Edit Signal"对话框中的"Byte Order",表示信号的字节顺序:Intel,Motorola,Opaque;
    +"Edit Signal"对话框中的"Transfer Property",表示信号的触发方式:Pending,Triggered,TriggeredOnChange,TriggeredWithoutRepetition,TriggeredOnChangeWithoutRepetition。相关的解释参加AUTOSAR COM标准;
    +"Edit Signal"对话框中的"Sender/Receiver Relations",表示该信号是接收信号,还是发送信号,或者及不接收也发不发送;
    +"Edit Signal"对话框中的"Base Type",定义了信号的一种编码:数据类型名称,符号类型(是否有符号),长度。当多个信号表示的物理含义相同,且信号长度相同时,可以在下拉框中选择相同的Base Type;
    +"Edit Signal"对话框中的"Computation Method",描述了将信号传输的原始值转换为物理值的转换规则,信号的范围,信号的单位,无效信号的定义
  • 完成后的效果如下(见图5-7),按照此方法可以添加其它的Signal信号:

图5-7
自此一个AUTOSAR的系统描述ARXML文件就生成好了。

CASE: 在CAN FD/2.0的ARXML文件实现Multiplexor多路复用信号

  • 推荐文献

ARXML 软件工具支持 : 有哪些开源项目支持解析 .ARXML 文件?

  • 解析 ARXMLAUTOSAR XML)文件的开源工具 相对较少,因为 AUTOSAR 标准汽车电子领域 较为复杂且通常依赖商业工具链(如 Vector CANoe)。

不过,以下开源项目和工具可以支持 ARXML 文件的解析或部分处理:(CANoe除外)

Vector CANoe (商业/闭源/付费)

  • CANoe是Vector公司的商业工具,常用于汽车网络分析和仿真

pyAUTOSAR

  • 简介:一个 Python 库,专注于读写 AUTOSAR 4.x 标准的 ARXML 文件,支持解析和生成 ARXML 文件中的 ECU 配置、通信矩阵、软件组件等。

  • 功能:

  • 解析 ARXML 文件并提取通信矩阵(Signals、PDUs、ECU 配置等)。
  • 支持 AUTOSAR 4.x 的核心模型。
  • 提供简单的 API 用于生成或修改 ARXML 内容。
  • URL
  • 适用场景:适合需要自动化处理 ARXML 文件的开发者,例如生成代码或配置 SOME/IP 服务。

Autosar XML Parser (AUTOSAR Schema Tools)

  • 简介 :部分开源项目基于 AUTOSAR 的 XML Schema(XSD)提供基础解析功能,例如使用通用 XML 解析库(如 lxmlxml.etree)结合 AUTOSAR Schema 解析 ARXML。

  • 实现方式

  • 使用 Python 的 lxmlxml.etree.ElementTree 解析 XML。
  • 通过 XPath 或手动遍历节点提取数据。
  • 示例代码
python 复制代码
import xml.etree.ElementTree as ET

tree = ET.parse("example.arxml")
root = tree.getroot()
# 提取信号定义(示例)
for signal in root.findall(".//{http://autosar.org/schema/r4.0}SYSTEM-SIGNAL"):
    name = signal.find("{http://autosar.org/schema/r4.0}SHORT-NAME").text
    length = signal.find("{http://autosar.org/schema/r4.0}LENGTH").text
    print(f"Signal: {name}, Length: {length}")
  • 限制:需要开发者熟悉 AUTOSAR 的 XML 结构和命名空间,适合简单需求。

ARXML Converter (开源工具链)

  • 简介 :某些开源工具链(如 COVESA Vehicle Signal Specification 相关工具)支持将 ARXML 转换为其他格式(如 JSON、YAML 或 FIBEX),便于后续处理。
  • 工具示例
    • vsomeip 的代码生成工具:通过 ARXML 提取 SOME/IP 服务定义(需自行实现解析逻辑)。
    • Franca IDL 转换工具:将 ARXML 转换为 Franca 接口定义文件(需定制脚本)。

Eclipse 插件(部分开源)

  • 简介 :Eclipse 生态中有一些支持 AUTOSAR 开发的插件(如 ARTop),但通常需要结合商业工具链使用,开源功能有限。

通用 XML 工具

如果仅需简单解析,可以使用通用 XML 工具(如 xmllint 或 Python 的 xmltodict)结合 AUTOSAR Schema 进行验证和数据提取:

  • xmllint:验证 ARXML 是否符合 AUTOSAR XSD。
bash 复制代码
xmllint --schema AUTOSAR_4.3.0.xsd example.arxml --noout
  • xmltodict(Python 库):将 ARXML 转换为 Python 字典,方便处理。
python 复制代码
import xmltodict
with open("example.arxml") as f:
  arxml_dict = xmltodict.parse(f.read())

注意事项

  1. AUTOSAR 版本兼容性:不同版本的 AUTOSAR(如 3.x 和 4.x)的 ARXML 结构差异较大,需确认工具支持的版本。
  2. 复杂度 :ARXML 文件通常包含数千行 XML 代码,手动解析耗时且易出错,建议优先使用 pyAUTOSAR
  3. 自定义需求:如果开源工具无法满足需求,可能需要基于 XML 解析库自行开发解析逻辑。

推荐方案

  • 快速解析 :使用 pyAUTOSAR(支持 AUTOSAR 4.x)。
  • 简单提取 :用 Python 的 lxmlxmltodict 结合 XPath 查询。
  • 格式转换:开发自定义脚本将 ARXML 转换为 JSON/YAML,再结合其他工具链处理。

Y 推荐文献

  • Github 相关项目

https://canmatrix.readthedocs.io/en/latest/installation.html

Converting Can (Controller Area Network) Database Formats .arxml .dbc .dbf .kcd ...

A set of python modules for working with AUTOSAR XML files

主要用例是使Python能够生成ARXML文件,以便在其他(商业)AUTOSAR工具链中导入。它还对解析AUTOSAR XML文件提供了一些支持。

基于Vue+Node JS的纯前端/ARXML可视化项目

This tool aims to visualize ARXML files in human readable form with easy search operations.

X 参考文献

相关推荐
探索java6 小时前
深入解析 Spring 获取 XML 验证模式的过程
xml·java·spring
阿华的代码王国7 小时前
【Android】卡片式布局 && 滚动容器ScrollView
android·xml·java·前端·后端·卡片布局·滚动容器
卸载引擎15 小时前
【计算机网络】OSI七层模型
计算机网络
卸载引擎19 小时前
【计算机网络】计算机网络中光猫、交换机、路由器、网关、MAC地址是什么?两台电脑是如何联通的?
网关·计算机网络·电脑·路由器·光猫·交换机·mac地址
SHtop1119 小时前
计算机网络(基础篇)
计算机网络
Changerone19 小时前
计算机网络面经
计算机网络·四非保研面经
柊二三1 天前
XML的简略知识点
xml·数据库·oracle
探索java1 天前
Spring 解析 XML 配置文件的过程(从读取 XML 到生成 BeanDefinition)
xml·java·spring·xmlbeanfactory
shinelord明2 天前
【计算机网络架构】网状型架构简介
大数据·分布式·计算机网络·架构·计算机科学与技术
xzkyd outpaper2 天前
QUIC协议如何在UDP基础上解决网络切换问题
网络·计算机网络·udp·quic