劉淞銘,馬洪彥,王貴山,佟新禹,張成慶,王家雁
(東風(fēng)汽車股份有限公司商品研發(fā)院,湖北 武漢 430000)
近年來,汽車電子系統(tǒng)的功能越來越強(qiáng)大,其電子控制單元(Electronic control unit,ECU)越來越多,各ECU之間的信息交換主要依賴于車載網(wǎng)絡(luò)技術(shù),而控制器局域網(wǎng)絡(luò)(Controller area network,CAN)總線作為車載網(wǎng)絡(luò)系統(tǒng)的重要組成部分,在汽車電子系統(tǒng)的網(wǎng)絡(luò)通信與控制中得到廣泛應(yīng)用[1-2]。
在汽車行業(yè)中,CAN總線報(bào)文的分析貫穿于汽車電子系統(tǒng)開發(fā)的全過程,從前期的系統(tǒng)開發(fā),到中期的系統(tǒng)標(biāo)定,再到后期的系統(tǒng)維護(hù),都依賴于CAN總線報(bào)文的分析,CAN總線報(bào)文是汽車開發(fā)、調(diào)試、維護(hù)過程中分析解決問題的“第一手?jǐn)?shù)據(jù)”。然而,目前市面上的CAN總線報(bào)文采集與錄制工具種類繁多,不同工具錄制的報(bào)文格式往往不同,具體體現(xiàn)在報(bào)文文件類型不同或報(bào)文信息排列方式不同,因此,報(bào)文文件往往只能通過錄制報(bào)文時(shí)所采用的上位機(jī)工具或其同一公司的分析工具進(jìn)行解析。在實(shí)際開發(fā)過程中,開發(fā)人員經(jīng)常要解析不同公司錄制的報(bào)文,如主機(jī)廠解析供應(yīng)商錄制的報(bào)文,如果沒有相應(yīng)的報(bào)文解析工具,報(bào)文分析過程將會(huì)異常繁瑣甚至無法進(jìn)行。
現(xiàn)目前,應(yīng)用比較廣泛的CAN總線報(bào)文格式轉(zhuǎn)換工具為德國(guó)PEAK-System公司提供的PEAK-Converter軟件,此軟件實(shí)現(xiàn)了部分報(bào)文格式的轉(zhuǎn)換,但此軟件只支持目前國(guó)際上應(yīng)用比較廣泛的報(bào)文格式,對(duì)于國(guó)內(nèi)開發(fā)的CAN卡錄制的報(bào)文格式以及一些小眾的報(bào)文格式則無法提供很好的支持。一些國(guó)內(nèi)的CAN卡廠家也開發(fā)了面向自家產(chǎn)品的報(bào)文格式轉(zhuǎn)換工具,但其一般只支持自家產(chǎn)品錄制報(bào)文的格式轉(zhuǎn)換,且大多并未得到廣泛的應(yīng)用。綜上所述,現(xiàn)目前國(guó)內(nèi)亟須開發(fā)一種低成本、通用性強(qiáng)、二次開發(fā)方便的CAN總線報(bào)文格式轉(zhuǎn)換系統(tǒng)。
本文旨在開發(fā)一種CAN總線報(bào)文格式轉(zhuǎn)換系統(tǒng),實(shí)現(xiàn)CAN總線報(bào)文文件格式轉(zhuǎn)換的功能,進(jìn)而解決汽車電子系統(tǒng)開發(fā)過程中因CAN總線報(bào)文文件格式的多樣性給報(bào)文分析帶來的諸多困難,提高開發(fā)效率。
本系統(tǒng)面向的報(bào)文錄制軟件為目前現(xiàn)場(chǎng)應(yīng)用比較廣泛的CAN Test和ECAN Tools軟件,具體包括5種格式的報(bào)文:由CAN Test錄制的*.txt格式報(bào)文、*.csv格式報(bào)文以及由ECAN Tools錄制的*.txt格式報(bào)文、*.csv格式報(bào)文、*.can格式報(bào)文。
本系統(tǒng)面向的報(bào)文分析軟件為德國(guó)Vector公司開發(fā)的CAN open environment(CANoe)軟件,即將上述5種格式的報(bào)文轉(zhuǎn)換為CANoe軟件能夠直接解析的*.asc格式報(bào)文。
本系統(tǒng)基于Python語(yǔ)言實(shí)現(xiàn)CAN總線報(bào)文格式轉(zhuǎn)換功能,從整體架構(gòu)上分為3個(gè)層次:工具層、應(yīng)用層和人機(jī)交互層,如圖1所示。
圖1 系統(tǒng)整體架構(gòu)圖
工具層是一系列通用方法的集合,按原始報(bào)文錄制工具分類,定義了報(bào)文處理過程中的通用方法,供應(yīng)用層中的報(bào)文類繼承。應(yīng)用層是報(bào)文屬性與非通用方法的集合,按報(bào)文格式分類,分別定義了不同格式報(bào)文具有的不同屬性及處理不同格式報(bào)文過程中用到的個(gè)性方法,并繼承了工具層中定義的通用方法,負(fù)責(zé)實(shí)際的報(bào)文格式轉(zhuǎn)換過程。目標(biāo)格式報(bào)文類定義了目標(biāo)報(bào)文的屬性,并提供了生成及儲(chǔ)存目標(biāo)格式報(bào)文的方法。同時(shí),目標(biāo)格式報(bào)文類提供了與原始報(bào)文類之間的通用化接口,只需在二次開發(fā)接口中添加相應(yīng)的屬性和方法,便可實(shí)現(xiàn)系統(tǒng)的功能拓展。人機(jī)交互層提供了用戶的操作界面以及系統(tǒng)狀態(tài)的指示界面,是用戶與系統(tǒng)之間溝通的橋梁。
本系統(tǒng)主要由3個(gè)功能模塊組成,分別為:人機(jī)交互、數(shù)據(jù)處理、目標(biāo)格式報(bào)文生成。系統(tǒng)整體流程如圖2所示。人機(jī)交互主要包括原始報(bào)文路徑的選擇、目標(biāo)報(bào)文路徑的選擇、原始報(bào)文錄制工具的選擇、原始報(bào)文錄制格式的選擇、系統(tǒng)工作狀態(tài)的提示等,并實(shí)現(xiàn)將原始報(bào)文中包含的信息和數(shù)據(jù)傳遞給系統(tǒng)應(yīng)用層的功能。數(shù)據(jù)處理包括數(shù)據(jù)的提取、Time轉(zhuǎn)換、Channel轉(zhuǎn)換、ID轉(zhuǎn)換、Dir轉(zhuǎn)換、Message轉(zhuǎn)換等,實(shí)現(xiàn)將原始報(bào)文中的信息和數(shù)據(jù)按一定的規(guī)則存儲(chǔ)在原始報(bào)文對(duì)象的屬性中,并通過通用化接口將這些屬性傳遞給目標(biāo)格式報(bào)文對(duì)象。目標(biāo)格式報(bào)文生成包括數(shù)據(jù)重組、數(shù)據(jù)寫入、目標(biāo)格式報(bào)文文件生成等,實(shí)現(xiàn)將接收到的報(bào)文對(duì)象屬性按一定的規(guī)則重組為CANoe能夠直接解析的格式,并生成新的報(bào)文文件。
圖2 系統(tǒng)整體流程圖
Python是一種面向?qū)ο蟮摹⒔换ナ降?、解釋型的?jì)算機(jī)編程語(yǔ)言,具有實(shí)用性強(qiáng)、功能全面、性能高的特點(diǎn),擁有豐富的標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)[3]。本系統(tǒng)基于Python3平臺(tái),通過面向?qū)ο箝_發(fā)方式進(jìn)行軟件開發(fā)。
本系統(tǒng)的人機(jī)交互功能基于Qt的Python庫(kù)——PySide2實(shí)現(xiàn),PySide2提供了Python與Qt之間的接口,通過調(diào)用PySide2中的API,便可以快速完成GUI應(yīng)用程序的創(chuàng)建。
系統(tǒng)主界面包括:原始報(bào)文路徑和目標(biāo)報(bào)文路徑的選擇和顯示、原始報(bào)文錄制工具和格式的選擇、開始轉(zhuǎn)換按鈕。對(duì)于原始報(bào)文路徑和目標(biāo)報(bào)文路徑的選擇和顯示,通過QPushButton類和QLineEdit類創(chuàng)建對(duì)象push_button_om(原始報(bào)文選擇按鈕)、line_edit_om(原始報(bào)文路徑顯示框)、push_button_tm(目標(biāo)報(bào)文選擇按鈕)、line_edit_tm(目標(biāo)報(bào)文路徑顯示框),通過QFileDialog類中的getOpenFileName方法和getSaveFileName方法實(shí)現(xiàn)文件的選擇和文件路徑的獲取,并將返回的文件路徑分別傳遞到UI界面的報(bào)文路徑顯示框和系統(tǒng)的應(yīng)用層中。對(duì)于原始報(bào)文錄制工具和格式的選擇通過QComboBox類創(chuàng)建對(duì)象combo_box_tool(工具選擇框)和combo_box_format(格式選擇框),并通過currentText方法獲取用戶當(dāng)前選項(xiàng)并傳遞到系統(tǒng)的應(yīng)用層中。系統(tǒng)主界面效果如圖3a所示。
狀態(tài)提示界面包括轉(zhuǎn)換進(jìn)度條界面和轉(zhuǎn)換完成提示界面。其中轉(zhuǎn)換進(jìn)度條界面通過QProgressBar類創(chuàng)建進(jìn)度條對(duì)象并調(diào)用相關(guān)方法來實(shí)現(xiàn),轉(zhuǎn)換進(jìn)度條界面和轉(zhuǎn)換完成提示界面如圖3b、圖3c所示。
圖3 人機(jī)交互界面效果展示
使用時(shí),用戶分別在主窗口選擇“原始報(bào)文路徑”、“目標(biāo)報(bào)文路徑”、“錄制工具”及“報(bào)文格式”后,點(diǎn)擊“轉(zhuǎn)換”按鈕,系統(tǒng)將開始報(bào)文格式轉(zhuǎn)換并彈出轉(zhuǎn)換進(jìn)度條界面,提示用戶轉(zhuǎn)換進(jìn)度,轉(zhuǎn)換完成后,系統(tǒng)將彈出轉(zhuǎn)換完成提示界面,提示用戶轉(zhuǎn)換完成。
3.2.1 原始報(bào)文格式分析要實(shí)現(xiàn)信息提取的功能,首先要了解原始報(bào)文的記錄規(guī)則。本文以ECAN Tools軟件錄制的*.can格式報(bào)文為例進(jìn)行分析,圖4是一段ECANTools_*.can格式的報(bào)文范例。
圖4 ECANTools_*.can報(bào)文范例
ECAN Tools軟件的用戶手冊(cè)中對(duì)*.can格式的報(bào)文進(jìn)行了介紹,每條報(bào)文中包含的數(shù)據(jù)可以分為5組。第1組表示幀時(shí)間間隔,記錄格式為:s.ms.μs;第2組表示此條報(bào)文為標(biāo)準(zhǔn)幀還是擴(kuò)展幀,標(biāo)準(zhǔn)幀為0,擴(kuò)展幀為1;第3組表示此條報(bào)文為數(shù)據(jù)幀還是遠(yuǎn)程幀,數(shù)據(jù)幀為0,遠(yuǎn)程幀為1;第4組和第5組分別用于記錄幀ID和幀數(shù)據(jù),具體如圖5所示。
圖5 ECANTools_*.can報(bào)文格式
3.2.2 模塊功能
數(shù)據(jù)處理功能是本系統(tǒng)的核心功能。此模塊的代碼主要包括通用方法類和原始報(bào)文類,通用方法類為原始報(bào)文類提供一系列方法,原始報(bào)文類則執(zhí)行具體任務(wù)。數(shù)據(jù)處理功能的實(shí)現(xiàn)主要分為兩個(gè)部分:第1部分,系統(tǒng)分別將原始報(bào)文以參數(shù)的形式逐條傳遞給原始報(bào)文類,原始報(bào)文類分別為每條原始報(bào)文創(chuàng)建一個(gè)通用化報(bào)文對(duì)象,通用化報(bào)文對(duì)象調(diào)用原始報(bào)文類中的方法將原始報(bào)文中的信息提取出來并轉(zhuǎn)換為通用化的格式(符合目標(biāo)格式報(bào)文類通用化接口規(guī)定的格式)存儲(chǔ)在對(duì)象的屬性中;第2部分,系統(tǒng)分別將通用化報(bào)文對(duì)象以參數(shù)形式逐條傳入目標(biāo)格式報(bào)文類,提供給目標(biāo)格式報(bào)文生成模塊使用。數(shù)據(jù)處理模塊的工作流程如圖6所示。
圖6 數(shù)據(jù)處理流程圖
3.3.1 目標(biāo)報(bào)文格式分析
CANoe軟件的說明文檔《CAN_LOG_TRIGGER_ASC_Format》中規(guī)定了*.asc格式報(bào)文的記錄方式。文件的開頭需要聲明報(bào)文記錄的開始時(shí)間、信息記錄方式和時(shí)間戳格式,文檔中規(guī)定信息記錄方式可以為十六進(jìn)制(“base hex”)或十進(jìn)制(“base dec”),時(shí)間戳可以為絕對(duì)時(shí)間戳(“timestamps absolute”)或相對(duì)時(shí)間戳(“timestamps relative”)。本文選用十六進(jìn)制和絕對(duì)時(shí)間戳的記錄方式。
文檔中規(guī)定的報(bào)文記錄的內(nèi)容包括:時(shí)間、通道序號(hào)、報(bào)文ID、報(bào)文傳輸方向、信息長(zhǎng)度、信息、特殊消息標(biāo)志,具體如圖7所示。
圖7 *.asc報(bào)文格式
報(bào)文文件以“End TriggerBlock”結(jié)束,因此,完成數(shù)據(jù)錄入后,需要在文件結(jié)尾輸入“End TriggerBlock”,表示記錄結(jié)束。
3.3.2 模塊功能
此模塊的功能主要包括數(shù)據(jù)重組、數(shù)據(jù)寫入、文件生成。系統(tǒng)將數(shù)據(jù)處理模塊創(chuàng)建的通用化報(bào)文對(duì)象以參數(shù)形式傳遞給目標(biāo)格式報(bào)文類,目標(biāo)格式報(bào)文類創(chuàng)建目標(biāo)報(bào)文對(duì)象接收通用化報(bào)文對(duì)象中包含的數(shù)據(jù),并按照規(guī)定的格式進(jìn)行組合,組合完成后,系統(tǒng)將重組后的數(shù)據(jù)寫入文件中。本模塊的部分實(shí)現(xiàn)代碼請(qǐng)?jiān)斠姼戒?。
上述功能如果均在系統(tǒng)主線程中執(zhí)行,會(huì)導(dǎo)致本系統(tǒng)無法同時(shí)進(jìn)行多個(gè)報(bào)文格式轉(zhuǎn)換任務(wù),此外,在報(bào)文格式轉(zhuǎn)換任務(wù)進(jìn)行的過程中,系統(tǒng)的主界面也將無法操作。為了進(jìn)一步優(yōu)化系統(tǒng)性能,實(shí)現(xiàn)多任務(wù)同時(shí)處理的功能,本系統(tǒng)采用多線程工作模式。
本功能通過Python3的標(biāo)準(zhǔn)庫(kù)threading實(shí)現(xiàn)。本系統(tǒng)的人機(jī)交互模塊在系統(tǒng)主線程中執(zhí)行,系統(tǒng)中的數(shù)據(jù)處理模塊和目標(biāo)格式報(bào)文生成模塊則封裝到子線程調(diào)用函數(shù)中,當(dāng)用戶發(fā)起“轉(zhuǎn)換”指令后,系統(tǒng)將為此任務(wù)創(chuàng)建一個(gè)子線程,并在子線程中執(zhí)行數(shù)據(jù)處理和目標(biāo)格式報(bào)文生成的工作。系統(tǒng)會(huì)為每項(xiàng)“轉(zhuǎn)換”任務(wù)分別創(chuàng)建一個(gè)子線程,并在任務(wù)結(jié)束后關(guān)閉對(duì)應(yīng)的子線程。
本文中報(bào)文采集的硬件工具為:德國(guó)Vector公司的VN1630A和國(guó)產(chǎn)的CAN總線分析儀USBCAN-ⅡC,報(bào)文錄制的軟件工具為:CANoe 11.0 SP3、CAN Test 2.70、ECAN Tools 5.99,報(bào)文分析軟件工具為:CANoe 11.0 SP3。IDE環(huán)境為PyCharm。報(bào)文采集硬件工具如圖8所示,其中圖8a為VN1630A,圖8b為USBCAN-ⅡC。
圖8 報(bào)文采集硬件工具
將USBCAN-Ⅱ C與Vector VN1630A同時(shí)接入某新能源純電動(dòng)汽車的同一路CAN總線中,分別通過CAN Test2.70、ECAN Tools 5.99軟件錄制CANTest_*.txt、CANTest_*.csv、 ECANTools_*.txt、ECANTools_*.csv、ECANTools_*.can格式的報(bào)文作為原始報(bào)文,通過CANoe 11.0 SP3軟件錄制*.asc格式的報(bào)文作為參照?qǐng)?bào)文,分別通過本文中開發(fā)的系統(tǒng)將上述5種格式的原始報(bào)文轉(zhuǎn)換為*.asc格式,并將轉(zhuǎn)換完成后的報(bào)文與參照?qǐng)?bào)文分別導(dǎo)入CANoe 11.0 SP3軟件中進(jìn)行數(shù)據(jù)分析,由于汽車CAN總線報(bào)文中包含大量的信息,本文選取整車絕緣電阻值作為分析對(duì)象,具體分析結(jié)果如圖9所示,其中每組圖像上部分為參照?qǐng)?bào)文的分析圖像,下部分為本系統(tǒng)轉(zhuǎn)換得到的報(bào)文的分析圖像,兩者在時(shí)間軸上的偏差為報(bào)文錄制開始時(shí)間不同步導(dǎo)致。
圖9 測(cè)試數(shù)據(jù)分析圖像
通過對(duì)以上5組數(shù)據(jù)的對(duì)比分析可知,本系統(tǒng)能夠?qū)⑸鲜?種格式的報(bào)文轉(zhuǎn)換為*.asc格式的報(bào)文供CANoe軟件進(jìn)行分析,本系統(tǒng)對(duì)CAN Test和ECAN Tools這兩款軟件錄制的報(bào)文均具有較好的兼容性,且轉(zhuǎn)換過程不會(huì)導(dǎo)致信息丟失或改變,符合設(shè)計(jì)要求。
本文利用Python語(yǔ)言實(shí)現(xiàn)了一種汽車CAN總線報(bào)文格式轉(zhuǎn)換系統(tǒng),本系統(tǒng)具有性價(jià)比高、通用性強(qiáng)的特點(diǎn),并針對(duì)小眾報(bào)文格式提供了靈活的二次開發(fā)接口,增強(qiáng)了系統(tǒng)的兼容性,同時(shí)其多線程工作模式保證了系統(tǒng)的工作效率。經(jīng)實(shí)驗(yàn)測(cè)試,本系統(tǒng)能夠高效、準(zhǔn)確地實(shí)現(xiàn)報(bào)文格式的轉(zhuǎn)換功能,給汽車電子電器工程師的開發(fā)工作提供便利。
附錄1
目標(biāo)格式報(bào)文生成模塊部分代碼如下: