?

基于Python的汽車CAN總線報文格式轉換系統的設計與實現

2021-07-05 05:04劉淞銘馬洪彥王貴山佟新禹張成慶王家雁
汽車電器 2021年6期
關鍵詞:報文總線界面

劉淞銘,馬洪彥,王貴山,佟新禹,張成慶,王家雁

(東風汽車股份有限公司商品研發院,湖北 武漢 430000)

1 引言

近年來,汽車電子系統的功能越來越強大,其電子控制單元(Electronic control unit,ECU)越來越多,各ECU之間的信息交換主要依賴于車載網絡技術,而控制器局域網絡(Controller area network,CAN)總線作為車載網絡系統的重要組成部分,在汽車電子系統的網絡通信與控制中得到廣泛應用[1-2]。

在汽車行業中,CAN總線報文的分析貫穿于汽車電子系統開發的全過程,從前期的系統開發,到中期的系統標定,再到后期的系統維護,都依賴于CAN總線報文的分析,CAN總線報文是汽車開發、調試、維護過程中分析解決問題的“第一手數據”。然而,目前市面上的CAN總線報文采集與錄制工具種類繁多,不同工具錄制的報文格式往往不同,具體體現在報文文件類型不同或報文信息排列方式不同,因此,報文文件往往只能通過錄制報文時所采用的上位機工具或其同一公司的分析工具進行解析。在實際開發過程中,開發人員經常要解析不同公司錄制的報文,如主機廠解析供應商錄制的報文,如果沒有相應的報文解析工具,報文分析過程將會異常繁瑣甚至無法進行。

現目前,應用比較廣泛的CAN總線報文格式轉換工具為德國PEAK-System公司提供的PEAK-Converter軟件,此軟件實現了部分報文格式的轉換,但此軟件只支持目前國際上應用比較廣泛的報文格式,對于國內開發的CAN卡錄制的報文格式以及一些小眾的報文格式則無法提供很好的支持。一些國內的CAN卡廠家也開發了面向自家產品的報文格式轉換工具,但其一般只支持自家產品錄制報文的格式轉換,且大多并未得到廣泛的應用。綜上所述,現目前國內亟須開發一種低成本、通用性強、二次開發方便的CAN總線報文格式轉換系統。

本文旨在開發一種CAN總線報文格式轉換系統,實現CAN總線報文文件格式轉換的功能,進而解決汽車電子系統開發過程中因CAN總線報文文件格式的多樣性給報文分析帶來的諸多困難,提高開發效率。

2 系統架構

本系統面向的報文錄制軟件為目前現場應用比較廣泛的CAN Test和ECAN Tools軟件,具體包括5種格式的報文:由CAN Test錄制的*.txt格式報文、*.csv格式報文以及由ECAN Tools錄制的*.txt格式報文、*.csv格式報文、*.can格式報文。

本系統面向的報文分析軟件為德國Vector公司開發的CAN open environment(CANoe)軟件,即將上述5種格式的報文轉換為CANoe軟件能夠直接解析的*.asc格式報文。

本系統基于Python語言實現CAN總線報文格式轉換功能,從整體架構上分為3個層次:工具層、應用層和人機交互層,如圖1所示。

圖1 系統整體架構圖

工具層是一系列通用方法的集合,按原始報文錄制工具分類,定義了報文處理過程中的通用方法,供應用層中的報文類繼承。應用層是報文屬性與非通用方法的集合,按報文格式分類,分別定義了不同格式報文具有的不同屬性及處理不同格式報文過程中用到的個性方法,并繼承了工具層中定義的通用方法,負責實際的報文格式轉換過程。目標格式報文類定義了目標報文的屬性,并提供了生成及儲存目標格式報文的方法。同時,目標格式報文類提供了與原始報文類之間的通用化接口,只需在二次開發接口中添加相應的屬性和方法,便可實現系統的功能拓展。人機交互層提供了用戶的操作界面以及系統狀態的指示界面,是用戶與系統之間溝通的橋梁。

本系統主要由3個功能模塊組成,分別為:人機交互、數據處理、目標格式報文生成。系統整體流程如圖2所示。人機交互主要包括原始報文路徑的選擇、目標報文路徑的選擇、原始報文錄制工具的選擇、原始報文錄制格式的選擇、系統工作狀態的提示等,并實現將原始報文中包含的信息和數據傳遞給系統應用層的功能。數據處理包括數據的提取、Time轉換、Channel轉換、ID轉換、Dir轉換、Message轉換等,實現將原始報文中的信息和數據按一定的規則存儲在原始報文對象的屬性中,并通過通用化接口將這些屬性傳遞給目標格式報文對象。目標格式報文生成包括數據重組、數據寫入、目標格式報文文件生成等,實現將接收到的報文對象屬性按一定的規則重組為CANoe能夠直接解析的格式,并生成新的報文文件。

圖2 系統整體流程圖

3 系統功能

Python是一種面向對象的、交互式的、解釋型的計算機編程語言,具有實用性強、功能全面、性能高的特點,擁有豐富的標準庫和第三方庫[3]。本系統基于Python3平臺,通過面向對象開發方式進行軟件開發。

3.1 人機交互功能

本系統的人機交互功能基于Qt的Python庫——PySide2實現,PySide2提供了Python與Qt之間的接口,通過調用PySide2中的API,便可以快速完成GUI應用程序的創建。

系統主界面包括:原始報文路徑和目標報文路徑的選擇和顯示、原始報文錄制工具和格式的選擇、開始轉換按鈕。對于原始報文路徑和目標報文路徑的選擇和顯示,通過QPushButton類和QLineEdit類創建對象push_button_om(原始報文選擇按鈕)、line_edit_om(原始報文路徑顯示框)、push_button_tm(目標報文選擇按鈕)、line_edit_tm(目標報文路徑顯示框),通過QFileDialog類中的getOpenFileName方法和getSaveFileName方法實現文件的選擇和文件路徑的獲取,并將返回的文件路徑分別傳遞到UI界面的報文路徑顯示框和系統的應用層中。對于原始報文錄制工具和格式的選擇通過QComboBox類創建對象combo_box_tool(工具選擇框)和combo_box_format(格式選擇框),并通過currentText方法獲取用戶當前選項并傳遞到系統的應用層中。系統主界面效果如圖3a所示。

狀態提示界面包括轉換進度條界面和轉換完成提示界面。其中轉換進度條界面通過QProgressBar類創建進度條對象并調用相關方法來實現,轉換進度條界面和轉換完成提示界面如圖3b、圖3c所示。

圖3 人機交互界面效果展示

使用時,用戶分別在主窗口選擇“原始報文路徑”、“目標報文路徑”、“錄制工具”及“報文格式”后,點擊“轉換”按鈕,系統將開始報文格式轉換并彈出轉換進度條界面,提示用戶轉換進度,轉換完成后,系統將彈出轉換完成提示界面,提示用戶轉換完成。

3.2 數據處理功能

3.2.1 原始報文格式分析要實現信息提取的功能,首先要了解原始報文的記錄規則。本文以ECAN Tools軟件錄制的*.can格式報文為例進行分析,圖4是一段ECANTools_*.can格式的報文范例。

圖4 ECANTools_*.can報文范例

ECAN Tools軟件的用戶手冊中對*.can格式的報文進行了介紹,每條報文中包含的數據可以分為5組。第1組表示幀時間間隔,記錄格式為:s.ms.μs;第2組表示此條報文為標準幀還是擴展幀,標準幀為0,擴展幀為1;第3組表示此條報文為數據幀還是遠程幀,數據幀為0,遠程幀為1;第4組和第5組分別用于記錄幀ID和幀數據,具體如圖5所示。

圖5 ECANTools_*.can報文格式

3.2.2 模塊功能

數據處理功能是本系統的核心功能。此模塊的代碼主要包括通用方法類和原始報文類,通用方法類為原始報文類提供一系列方法,原始報文類則執行具體任務。數據處理功能的實現主要分為兩個部分:第1部分,系統分別將原始報文以參數的形式逐條傳遞給原始報文類,原始報文類分別為每條原始報文創建一個通用化報文對象,通用化報文對象調用原始報文類中的方法將原始報文中的信息提取出來并轉換為通用化的格式(符合目標格式報文類通用化接口規定的格式)存儲在對象的屬性中;第2部分,系統分別將通用化報文對象以參數形式逐條傳入目標格式報文類,提供給目標格式報文生成模塊使用。數據處理模塊的工作流程如圖6所示。

圖6 數據處理流程圖

3.3 目標格式報文生成功能

3.3.1 目標報文格式分析

CANoe軟件的說明文檔《CAN_LOG_TRIGGER_ASC_Format》中規定了*.asc格式報文的記錄方式。文件的開頭需要聲明報文記錄的開始時間、信息記錄方式和時間戳格式,文檔中規定信息記錄方式可以為十六進制(“base hex”)或十進制(“base dec”),時間戳可以為絕對時間戳(“timestamps absolute”)或相對時間戳(“timestamps relative”)。本文選用十六進制和絕對時間戳的記錄方式。

文檔中規定的報文記錄的內容包括:時間、通道序號、報文ID、報文傳輸方向、信息長度、信息、特殊消息標志,具體如圖7所示。

圖7 *.asc報文格式

報文文件以“End TriggerBlock”結束,因此,完成數據錄入后,需要在文件結尾輸入“End TriggerBlock”,表示記錄結束。

3.3.2 模塊功能

此模塊的功能主要包括數據重組、數據寫入、文件生成。系統將數據處理模塊創建的通用化報文對象以參數形式傳遞給目標格式報文類,目標格式報文類創建目標報文對象接收通用化報文對象中包含的數據,并按照規定的格式進行組合,組合完成后,系統將重組后的數據寫入文件中。本模塊的部分實現代碼請詳見附錄1。

3.4 多線程工作模式

上述功能如果均在系統主線程中執行,會導致本系統無法同時進行多個報文格式轉換任務,此外,在報文格式轉換任務進行的過程中,系統的主界面也將無法操作。為了進一步優化系統性能,實現多任務同時處理的功能,本系統采用多線程工作模式。

本功能通過Python3的標準庫threading實現。本系統的人機交互模塊在系統主線程中執行,系統中的數據處理模塊和目標格式報文生成模塊則封裝到子線程調用函數中,當用戶發起“轉換”指令后,系統將為此任務創建一個子線程,并在子線程中執行數據處理和目標格式報文生成的工作。系統會為每項“轉換”任務分別創建一個子線程,并在任務結束后關閉對應的子線程。

4 實驗測試

4.1 實驗搭建

本文中報文采集的硬件工具為:德國Vector公司的VN1630A和國產的CAN總線分析儀USBCAN-ⅡC,報文錄制的軟件工具為:CANoe 11.0 SP3、CAN Test 2.70、ECAN Tools 5.99,報文分析軟件工具為:CANoe 11.0 SP3。IDE環境為PyCharm。報文采集硬件工具如圖8所示,其中圖8a為VN1630A,圖8b為USBCAN-ⅡC。

圖8 報文采集硬件工具

4.2 實驗結果分析

將USBCAN-Ⅱ C與Vector VN1630A同時接入某新能源純電動汽車的同一路CAN總線中,分別通過CAN Test2.70、ECAN Tools 5.99軟件錄制CANTest_*.txt、CANTest_*.csv、 ECANTools_*.txt、ECANTools_*.csv、ECANTools_*.can格式的報文作為原始報文,通過CANoe 11.0 SP3軟件錄制*.asc格式的報文作為參照報文,分別通過本文中開發的系統將上述5種格式的原始報文轉換為*.asc格式,并將轉換完成后的報文與參照報文分別導入CANoe 11.0 SP3軟件中進行數據分析,由于汽車CAN總線報文中包含大量的信息,本文選取整車絕緣電阻值作為分析對象,具體分析結果如圖9所示,其中每組圖像上部分為參照報文的分析圖像,下部分為本系統轉換得到的報文的分析圖像,兩者在時間軸上的偏差為報文錄制開始時間不同步導致。

圖9 測試數據分析圖像

通過對以上5組數據的對比分析可知,本系統能夠將上述5種格式的報文轉換為*.asc格式的報文供CANoe軟件進行分析,本系統對CAN Test和ECAN Tools這兩款軟件錄制的報文均具有較好的兼容性,且轉換過程不會導致信息丟失或改變,符合設計要求。

5 結語

本文利用Python語言實現了一種汽車CAN總線報文格式轉換系統,本系統具有性價比高、通用性強的特點,并針對小眾報文格式提供了靈活的二次開發接口,增強了系統的兼容性,同時其多線程工作模式保證了系統的工作效率。經實驗測試,本系統能夠高效、準確地實現報文格式的轉換功能,給汽車電子電器工程師的開發工作提供便利。

附錄1

目標格式報文生成模塊部分代碼如下:

猜你喜歡
報文總線界面
基于J1939 協議多包報文的時序研究及應用
以太網QoS技術研究及實踐
不同截面類型鋼管RPC界面粘結性能對比研究
避免饑餓的CAN 總線高優先級反轉算法
關于CAN總線的地鐵屏蔽門控制思路論述
基于報文類型的限速值動態調整
國企黨委前置研究的“四個界面”
界面成立自媒體聯盟深挖原生內容創造力
Q&A熱線
PCI9030及其PCI總線接口電路設計
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合