目錄
- 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文件。