目录
- 1 摘要
- 2 常见ARXML文件注意事项以及常见问题
- 2.1 注意事项
- 2.2 常见问题
- 2.3 答疑
- 3 ARXML解读/编辑指南
- 3.1 解读ARXML文件的步骤
- 3.2 编辑ARXML文件的方法
- 3.3 验证与调试
- 4 总结
1 摘要
本文主要对ARXML文件的注意事项、常见问题以及解读与编辑进行详细介绍。
上文回顾:
ARXML文件解析-1
2 常见ARXML文件注意事项以及常见问题
2.1 注意事项
-
语法规则
- 起始符:
<?xml
(严格小写,无空格)。 - 属性顺序:
version
→encoding
→standalone
(顺序不可调换)。 - 引号:属性值必须用 ASCII双引号
"
包裹。 - 结束符:
?>
(无空格)
- 起始符:
-
ARXML文件的特殊要求
- 工具链兼容性:
ARXML常用于汽车软件架构(如AUTOSAR),需确保工具链(如Vector PREEvision、ETAS ISOLAR)能解析该声明。 - 编码一致性:
若文件含非英文字符(如中文注释),必须保存为UTF-8且声明匹配,否则会乱码。 - 格式验证:
建议通过XML验证工具(如Notepad++ XML插件、在线校验器)检查语法。
- 工具链兼容性:
-
工具链注意事项
- 语言切换:
- 工具(如Vector PREEvision)会根据
<LANGUAGE>
显示默认语言的文本。 - 若未找到匹配语言,可能回退到
EN
或显示空值。
- 工具(如Vector PREEvision)会根据
- 版本兼容性:
- AUTOSAR R4.0+ 强制要求
<ADMIN-DATA>
,但部分旧工具可能忽略其内容。
- AUTOSAR R4.0+ 强制要求
- 验证规则:
<L-2>
中的语言代码必须在<USED-LANGUAGES>
中声明,否则可能报错。
- 语言切换:
-
工具验证建议
- XML语法检查:
- 使用 XMLSpy 或 Oxygen XML Editor 验证文件格式。
- 在线工具:https://www.xmlvalidation.com/
- 编码检测:
- 通过 Notepad++ → 「编码」菜单确认文件编码。
- AUTOSAR工具链验证:
- 在Vector PREEvision或ETAS ISOLAR中导入文件,检查是否报错。
- XML语法检查:
-
TAG的命名规则
- 大小写敏感:
- 所有TAG名称区分大小写(如
<SHORT-NAME>
不能写成<short-name>
)。
- 所有TAG名称区分大小写(如
- 命名风格:
- 使用大写字母+连字符(如
<ECUC-CONTAINER-VALUE>
)。
- 使用大写字母+连字符(如
- 唯一性:
- 同一父元素下,
<SHORT-NAME>
必须唯一。
- 同一父元素下,
- 大小写敏感:
-
如何查看完整的TAG类型?
- AUTOSAR官方XSD文件:
- 下载对应版本的XSD(如
AUTOSAR_4-2-2.xsd
),所有合法TAG均在其中定义。
- 下载对应版本的XSD(如
- 工具链文档:
- Vector PREEvision/ETAS ISOLAR的文档会列出支持的TAG类型。
- 实例文件参考:
- 通过工具生成的ARXML文件学习实际用法。
- AUTOSAR官方XSD文件:
提示:具体TAG类型需参考AUTOSAR版本对应的规范文档,不同版本(如R4.0 vs R21-11)可能有差异。
2.2 常见问题
-
错误1:
XML parsing failure: Invalid byte 1 of 1-byte UTF-8 sequence
- 原因:文件实际编码与声明的
encoding
属性不一致。
- 原因:文件实际编码与声明的
-
错误2:
XML declaration allowed only at the start of the document
- 原因:XML声明前有空格、注释或其他内容。
-
错误3:
Invalid content starting with 'AR-PACKAGE'
- 原因:元素顺序不符合XSD要求(如
AR-PACKAGE
必须位于AR-PACKAGES
内)。
- 原因:元素顺序不符合XSD要求(如
-
错误4:
Undefined UUID reference
- 原因:引用的UUID未在文件中定义。
-
错误5:
Encoding mismatch
- 解决:确保文件实际编码与XML声明的
encoding
一致(推荐UTF-8无BOM)。
- 解决:确保文件实际编码与XML声明的
-
错误6:
Unbound namespace prefix 'xsi'
- 原因:未声明
xmlns:xsi
命名空间。 - 解决:添加
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
。
- 原因:未声明
-
错误7:
SchemaLocation Warning: No XSD found
- 原因:
xsi:schemaLocation
指定的XSD文件路径错误。 - 解决:确保XSD文件存在,并修正路径(如使用绝对路径
C:\AUTOSAR\AUTOSAR_4-2-2.xsd
)。
- 原因:
-
错误8:
Element not allowed in namespace
- 原因:元素未在默认命名空间或指定命名空间中定义。
- 解决:检查命名空间URI是否与AUTOSAR版本匹配。
-
错误9:未定义的TAG
<!-- 错误示例 -->
<MY-CUSTOM-TAG> <!-- 非AUTOSAR标准TAG -->Value
</MY-CUSTOM-TAG>
后果:工具链报错(如Unknown element 'MY-CUSTOM-TAG'
)。
- 错误10:TAG顺序错误
<!-- 错误示例 -->
<AR-PACKAGE><ELEMENTS>...</ELEMENTS> <!-- 必须在SHORT-NAME之后 --><SHORT-NAME>Com</SHORT-NAME>
</AR-PACKAGE>
解决:遵循XSD中定义的子元素顺序。
- 其他错误表格示例:
错误现象 | 原因分析 | 解决方案 |
---|---|---|
Invalid encoding declaration | 文件实际编码与声明不一致(如声明UTF-8但保存为ANSI) | 用文本编辑器(如Notepad++)将文件另存为UTF-8无BOM格式。 |
Malformed XML declaration | 使用全角引号或错误符号(如 <?xml ) | 替换全角符号为ASCII字符,确保 <?xml 格式正确。 |
XML declaration allowed only at the start | XML声明前有空格、注释或其他内容 | 确保XML声明为文件第一行,且无空行或注释。 |
Standalone document cannot have external references | standalone="yes" 但引用了外部XSD | 改为 standalone="no" 或移除外部依赖。 |
2.3 答疑
-
Q1: 能否省略
<ADMIN-DATA>
?
答案:不建议。AUTOSAR规范要求保留该节点(内容可为空),否则工具可能警告。 -
Q2: 如何添加自定义语言(如法语)?
<USED-LANGUAGES><L-2 L="FR" xml:space="default"/> <!-- 新增法语 -->
</USED-LANGUAGES>
<DESC><L-2 L="FR" xml:space="default">Configuration Réseau</L-2>
</DESC>
-
Q3:
xml:space="default"
能否省略?
答案:可以省略(工具通常默认处理为default
),但显式声明可提高可读性。 -
Q4: UUID是否可以手动指定?
答案:可以,但需确保全局唯一性。推荐使用工具(如Vector PREEvision)自动生成。 -
Q5:
<SHORT-NAME>
能否重复?
答案:同一父元素下不能重复,但不同包内可以同名(如两个<AR-PACKAGE>
均可包含<SHORT-NAME>Comunication
)。 -
Q6: 如何定义具体的转换链(Transformer Chain)?
答案:需在另一个<AR-PACKAGE>
中定义<TRANSFORMER-CHAIN>
,并通过<TARGET-REF>
引用其路径或UUID。 -
Q7:
<L-10>
能否嵌套其他标签?
答案:通常不允许,其内容应为纯文本。若需结构化内容,应使用其他专用标签(如<DESC>
中的<P>
段落标签,需工具支持)。 -
Q8: 为什么工具不显示
<L-10>
的内容?
可能原因:- 未在
<USED-LANGUAGES>
中声明对应语言。 - 工具未激活多语言切换功能。
- 标签名称不兼容(如工具期望
<LONG-TEXT>
而非<L-10>
)。
- 未在
-
Q9: 如何提取所有语言的
<L-10>
文本?
方法:
使用XPath查询(示例)://L-10[@L='EN']/text() <!-- 提取英文文本 --> //L-10[@L='CN']/text() <!-- 提取中文文本 -->
3 ARXML解读/编辑指南
3.1 解读ARXML文件的步骤
步骤1:确定目标内容
- 通信配置:查找
EthernetFrame
、PDU
、Signal
相关标签。 - 服务接口:搜索
SERVICE-INTERFACE
、METHOD
、EVENT
。 - ECU信息:定位
ECU-INSTANCE
、ETHERNET-INTERFACE
。
步骤2:理解元素属性
- 关键属性示例:
<SERVICE-ID>0x1234</SERVICE-ID>
:服务唯一标识符(16进制)。<METHOD-ID>0x01</METHOD-ID>
:方法ID,与服务内唯一。<START-BIT>0</START-BIT>
:信号在PDU中的起始位。
步骤3:追踪引用关系
- 通过
<REF>
或<TYPE-TREF>
追踪跨元素的依赖:<SIGNAL-TO-PDU-MAPPING><I-SIGNAL-REF DEST="I-SIGNAL">/Signals/SpeedSignal</I-SIGNAL-REF> </SIGNAL-TO-PDU-MAPPING>
步骤4:验证逻辑一致性
- 检查ID唯一性(如
SERVICE-ID
不可重复)。 - 确认信号映射的位范围不重叠(如两个信号不能占用PDU的同一段比特位)。
3.2 编辑ARXML文件的方法
方法1:使用专业工具(推荐)
- 工具示例:
- Vector PREEvision:图形化编辑通信矩阵和服务接口。
- ETAS ISOLAR:AUTOSAR兼容的完整开发环境。
- Elektrobit Tresos:专注于基础软件配置。
- 优势:自动处理引用关系、语法验证和版本兼容性。
方法2:手动编辑(需谨慎)
- 文本编辑器:使用VSCode、Notepad++等支持XML高亮和折叠的工具。
- 注意事项:
- 备份文件:编辑前复制原始文件以防错误。
- 修改属性:直接调整标签内的值(如更改
<CYCLE-TIME>100</CYCLE-TIME>
为200)。 - 添加元素:遵循现有结构插入新节点(如新增
METHOD
)。 - 处理引用:确保新元素的ID唯一,且引用路径正确。
示例:手动添加一个方法
<METHODS><CLIENT-SERVER-OPERATION><SHORT-NAME>NewMethod</SHORT-NAME><METHOD-ID>0x02</METHOD-ID><CALL-TYPE>FIRE_AND_FORGET</CALL-TYPE></CLIENT-SERVER-OPERATION>
</METHODS>
方法3:脚本自动化
- Python + XML库:使用
xml.etree.ElementTree
解析和修改ARXML。 - 示例脚本:批量修改服务端口号
import xml.etree.ElementTree as ET tree = ET.parse('example.arxml') root = tree.getroot() for elem in root.findall(".//ENDPOINT-PORT"):elem.text = "30500" # 修改所有端口为30500 tree.write('modified.arxml')
3.3 验证与调试
验证工具:
- XML Schema验证:使用AUTOSAR提供的XSD文件检查语法。
xmllint --schema AUTOSAR_4-2-2.xsd example.arxml
- AUTOSAR工具链:如ISOLAR的完整性检查功能,检测逻辑错误。
常见错误处理:
- ID冲突:重复的
SERVICE-ID
或METHOD-ID
导致通信失败。 - 引用失效:删除被引用的元素后未更新相关引用。
- 位映射错误:信号超出PDU长度或位重叠。
4 总结
ARXML文件通过分层包和元素描述汽车电子系统,解读需关注模块功能及引用关系,编辑推荐使用专业工具或谨慎手动调整,并始终验证文件正确性。本专题相关介绍有利于更好地理解ARXML文件。