劉瑤秋, 季金強(qiáng), 趙苗苗, 劉 靜
(揚(yáng)州亞星客車(chē)股份有限公司, 江蘇 揚(yáng)州 225116)
CAN總線數(shù)據(jù)測(cè)試是車(chē)企整車(chē)下線調(diào)試中的重要環(huán)節(jié),為了確保CAN通訊正常,以及整車(chē)各ECU(Electronic Control Unit)控制邏輯符合要求,需要對(duì)通信報(bào)文進(jìn)行采集和測(cè)試。測(cè)試內(nèi)容主要為檢測(cè)信號(hào)狀態(tài)的正確性和報(bào)文發(fā)送時(shí)序邏輯的正確性[1]。
目前汽車(chē)通信及相關(guān)行業(yè)內(nèi),主流的CAN總線報(bào)文分析工具功能成熟、專(zhuān)業(yè)性強(qiáng),但價(jià)格昂貴且操作復(fù)雜,不便于整車(chē)下線的批量檢測(cè)使用。部分定制化整車(chē)下線測(cè)試工具可以實(shí)現(xiàn)一鍵檢測(cè)功能,但系統(tǒng)龐大,且只能面向靜止車(chē)輛進(jìn)行檢測(cè)。同時(shí),定制化的系統(tǒng)不利于后期維護(hù)和功能修改,且伴隨二次收費(fèi)的可能。
對(duì)此,本文設(shè)計(jì)一種便攜的CAN總線數(shù)據(jù)測(cè)試系統(tǒng),可覆蓋動(dòng)態(tài)、靜態(tài)各種工況。通過(guò)自主設(shè)計(jì)的數(shù)據(jù)采集設(shè)備和Android端測(cè)試軟件,低價(jià)取代昂貴的商業(yè)測(cè)試產(chǎn)品,通過(guò)自動(dòng)測(cè)試序列的理念,在PC客戶(hù)端軟件自由編制測(cè)試文本,導(dǎo)入Android客戶(hù)端實(shí)現(xiàn)自動(dòng)測(cè)試,從而為測(cè)試工程師快速定位并解決問(wèn)題提供有利條件[2]。
綜合考慮整車(chē)CAN總線數(shù)據(jù)測(cè)試系統(tǒng)的功能性和實(shí)用性要求,構(gòu)建其整體架構(gòu),方案如圖1所示。
圖1 系統(tǒng)整體架構(gòu)方案
其中,數(shù)據(jù)采集設(shè)備通過(guò)車(chē)輛的OBD接口實(shí)時(shí)采集CAN通訊報(bào)文,并將CAN數(shù)據(jù)轉(zhuǎn)換為串口數(shù)據(jù),并通過(guò)無(wú)線通信模塊發(fā)送給Android客戶(hù)端;Android客戶(hù)端負(fù)責(zé)接收和處理外部數(shù)據(jù),從而實(shí)現(xiàn)報(bào)文數(shù)據(jù)的無(wú)線接收、在線解析、自動(dòng)序列測(cè)試、UI頁(yè)面展示、記錄導(dǎo)出的功能[3-4]。
數(shù)據(jù)采集設(shè)備包括STM32F407系列微處理器、CAN通信單元、串口通信單元等外圍電路,主要實(shí)現(xiàn)整車(chē)CAN數(shù)據(jù)的采集、轉(zhuǎn)換和傳輸。
在初始化階段,通過(guò)輪循的方式配置CAN總線波特率,從而實(shí)現(xiàn)自動(dòng)配置。CAN數(shù)據(jù)接收部分采用DMA(Direct Memory Access)中斷的傳輸方式,當(dāng)微處理器檢測(cè)到CAN數(shù)據(jù)時(shí)觸發(fā)DMA中斷,在中斷內(nèi)讀取CAN數(shù)據(jù),并按照制定好的通訊協(xié)議完成數(shù)據(jù)編碼。串口通信單元和至無(wú)線傳輸模塊之間通過(guò)AT指令規(guī)則進(jìn)行數(shù)據(jù)傳輸,系統(tǒng)在程序中設(shè)計(jì)并封裝了指令解析子函數(shù),用于數(shù)據(jù)傳輸調(diào)用。
數(shù)據(jù)采集設(shè)備的無(wú)線傳輸通過(guò)無(wú)線通信模塊完成,無(wú)線通信模塊的主芯片為ESP8266。本系統(tǒng)利用該模塊的串口無(wú)線模式,將模塊設(shè)置為WIFI熱點(diǎn),允許其他設(shè)備連接到本模塊,使數(shù)據(jù)采集設(shè)備與客戶(hù)端處于相同局域網(wǎng),實(shí)現(xiàn)數(shù)據(jù)的無(wú)線互傳[5]。
序列生成軟件是本系統(tǒng)基于JAVA語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)的獨(dú)立PC端軟件,用于編制和生成測(cè)試序列文本。軟件框架如圖2所示。
圖2 序列生成客戶(hù)端軟件設(shè)計(jì)
測(cè)試序列文本是將需要執(zhí)行的測(cè)試以設(shè)計(jì)好的格式保存的文本,包括一系列對(duì)報(bào)文信號(hào)運(yùn)算和判斷要求的組合集。序列的編制是基于DBC數(shù)據(jù)庫(kù)文件,從DBC中選擇需要測(cè)試的報(bào)文及信號(hào),并依次為各測(cè)試項(xiàng)選擇運(yùn)算條件以及增加判定邏輯等。為了保證測(cè)試文本的編輯錯(cuò)誤,分別檢查各測(cè)試項(xiàng)的完整性和測(cè)試項(xiàng)之間的邏輯正確性。對(duì)于有誤的語(yǔ)句提示修改,直到修改正確才可以生成序列文本。
該軟件設(shè)計(jì)了包含5個(gè)功能鍵的工具欄,功能鍵分別是導(dǎo)入DBC、添加測(cè)試項(xiàng)、刪除測(cè)試項(xiàng)、語(yǔ)法檢測(cè)和導(dǎo)出序列。導(dǎo)入DBC用于導(dǎo)入用戶(hù)目前所測(cè)試車(chē)輛的DBC文件;添加、刪除測(cè)試項(xiàng)用于編輯和修改測(cè)試序列項(xiàng);語(yǔ)法檢測(cè)為用戶(hù)提示當(dāng)前的測(cè)試語(yǔ)法錯(cuò)誤;導(dǎo)出序列用于將用戶(hù)設(shè)定的測(cè)試內(nèi)容編碼成序列文本。同時(shí),考慮到序列編輯的靈活性,每個(gè)測(cè)試項(xiàng)依次由測(cè)試指令、測(cè)試對(duì)象、運(yùn)算符、運(yùn)算數(shù)、測(cè)試延時(shí)、備注信息各元素組成,序列生成軟件將用戶(hù)組合好的測(cè)試序列以特定格式導(dǎo)出為文本,Android客戶(hù)端根據(jù)相應(yīng)的格式規(guī)則讀取序列文本,從而快速解析測(cè)試內(nèi)容,實(shí)現(xiàn)自動(dòng)測(cè)試。
Android客戶(hù)端軟件由輸入模塊、功能模塊和輸出模塊組成,其框架如圖3所示。
圖3 APP客戶(hù)端軟件框架
輸入模塊負(fù)責(zé)提供接口接收外部數(shù)據(jù),例如接收網(wǎng)絡(luò)通信數(shù)據(jù)和導(dǎo)入的文件數(shù)據(jù);功能模塊是客戶(hù)端的核心模塊,軟件的無(wú)線通信、報(bào)文解析、自動(dòng)測(cè)試功能在此模塊內(nèi)實(shí)現(xiàn);輸出模塊包括人機(jī)交互界面的處理,即將報(bào)文內(nèi)容及測(cè)試結(jié)果輸出并展示給用戶(hù),以及對(duì)數(shù)據(jù)進(jìn)行記錄和導(dǎo)出。
考慮到Android客戶(hù)端功能的流暢性,將網(wǎng)絡(luò)通信、自動(dòng)測(cè)試等具有延時(shí)性的工作放在子線程中完成,如圖4所示。
圖4 Android客戶(hù)端工作原理
客戶(hù)端開(kāi)啟并完成初始化后,創(chuàng)建子線程發(fā)起服務(wù)端的連接請(qǐng)求,建立TCP長(zhǎng)連接,從而可以持續(xù)穩(wěn)定地接收數(shù)據(jù)采集設(shè)備無(wú)線發(fā)送的報(bào)文信息。為了確保數(shù)據(jù)不丟失,客戶(hù)端會(huì)將接收到的數(shù)據(jù)先寫(xiě)入數(shù)據(jù)緩存流,再?gòu)木彺媪髦幸来尾鸾鈭?bào)文并校驗(yàn),將校驗(yàn)通過(guò)的報(bào)文發(fā)送至主線程。報(bào)文的解析和界面更新工作在主線程中完成。
客戶(hù)端對(duì)報(bào)文的解析基于DBC文件,將DBC底層文件中的報(bào)文ID、信號(hào)變量等信息按照程序設(shè)計(jì)好的規(guī)則存儲(chǔ)在容器中,從而在解析過(guò)程中進(jìn)行檢索、解析數(shù)據(jù)。解析過(guò)程中,客戶(hù)端查找容器中是否存在當(dāng)前報(bào)文ID。如果存在便開(kāi)始讀取解析,不存在則直接返回。解析得到各信號(hào)變量值后,查找各信號(hào)值是否有對(duì)應(yīng)的含義解釋?zhuān)袆t輸出含義,沒(méi)有則直接輸出信號(hào)值。
自動(dòng)序列測(cè)試基于實(shí)時(shí)報(bào)文解析數(shù)據(jù)和測(cè)試序列集完成,客戶(hù)端讀取測(cè)試序列指令,并前往輸出數(shù)據(jù)集中查詢(xún)相應(yīng)的信號(hào)狀態(tài),從而判斷測(cè)試是否通過(guò)[6-7]。
圖3中的“自動(dòng)序列測(cè)試”中的序列測(cè)試算法是實(shí)現(xiàn)系統(tǒng)自動(dòng)測(cè)試功能的核心。在安卓客戶(hù)端實(shí)現(xiàn)。
由于測(cè)試語(yǔ)句中判斷或循環(huán)邏輯是由多條語(yǔ)句及判斷分支組成的,為了便于測(cè)試過(guò)程中定位測(cè)試項(xiàng),設(shè)計(jì)了序列測(cè)試算法,流程如下:首先客戶(hù)端讀取導(dǎo)入的測(cè)試序列文本,將測(cè)試序列文本轉(zhuǎn)化為便于程序讀取的測(cè)試序列集。測(cè)試序列集處理完后,根據(jù)不同的指令類(lèi)型進(jìn)入不同的測(cè)試邏輯。在各測(cè)試項(xiàng)后添加標(biāo)記數(shù),即每個(gè)測(cè)試項(xiàng)距離邏輯結(jié)束的倒計(jì)數(shù),這樣便于在測(cè)試過(guò)程中,測(cè)試邏輯已滿足條件時(shí),可以準(zhǔn)確地定位到邏輯外的語(yǔ)句,不需要進(jìn)行邏輯內(nèi)剩下的測(cè)試語(yǔ)句。當(dāng)達(dá)到結(jié)束邏輯的條件后,根據(jù)標(biāo)記數(shù)跳出當(dāng)前邏輯,再進(jìn)入下一輪的測(cè)試,直到測(cè)試結(jié)束[8-9]。
本文設(shè)計(jì)的系統(tǒng)功能試驗(yàn)方案如圖5所示。系統(tǒng)通過(guò)整車(chē)OBD接口采集CAN報(bào)文,從而驗(yàn)證無(wú)線通信和報(bào)文的解析功能。同時(shí),使用CANoe工具采集實(shí)時(shí)CAN數(shù)據(jù)信號(hào),查看本系統(tǒng)的自動(dòng)測(cè)試結(jié)果是否符合原數(shù)據(jù)變化狀態(tài),驗(yàn)證系統(tǒng)測(cè)試結(jié)果的準(zhǔn)確性[10]。
圖5 系統(tǒng)試驗(yàn)方案
系統(tǒng)在實(shí)車(chē)試驗(yàn)之前,首先進(jìn)行試驗(yàn)室模擬試驗(yàn),CAN報(bào)文發(fā)送軟件模擬實(shí)車(chē)發(fā)送報(bào)文,與系統(tǒng)建立通信并測(cè)試功能,初步驗(yàn)證系統(tǒng)設(shè)計(jì)方案的可行性。
在試驗(yàn)室模擬試驗(yàn)通過(guò)的基礎(chǔ)上,完成試驗(yàn)車(chē)測(cè)試,驗(yàn)證系統(tǒng)設(shè)計(jì)方案的可行性。系統(tǒng)實(shí)車(chē)試驗(yàn)如圖6所示。
圖6 系統(tǒng)實(shí)車(chē)試驗(yàn)
系統(tǒng)開(kāi)啟工作后,報(bào)文采集設(shè)備獲取整車(chē)實(shí)時(shí)CAN通信報(bào)文并發(fā)送給客戶(hù)端,客戶(hù)端進(jìn)行報(bào)文校驗(yàn)和解碼,讀取報(bào)文對(duì)應(yīng)的時(shí)間、信道、ID以及報(bào)文信息并顯示在客戶(hù)端界面,部分結(jié)果如圖7所示。
圖7 客戶(hù)端采集報(bào)文
客戶(hù)端導(dǎo)入試驗(yàn)車(chē)所用的DBC,實(shí)現(xiàn)報(bào)文的在線解析,部分結(jié)果如圖8所示。解析結(jié)果與車(chē)輛當(dāng)前狀態(tài)一致,表明系統(tǒng)的報(bào)文解析功能可靠。
圖8 客戶(hù)端DBC解析結(jié)果
本文以系統(tǒng)的上電邏輯為例驗(yàn)證測(cè)試功能,測(cè)試流程見(jiàn)表1。
使用序列生成軟件按照測(cè)試流程依次填寫(xiě)需要測(cè)試的內(nèi)容項(xiàng)。完成填寫(xiě)后,軟件檢測(cè)序列的語(yǔ)法和邏輯,導(dǎo)出測(cè)試序列文本。
表1 自動(dòng)測(cè)試內(nèi)容
客戶(hù)端導(dǎo)入編寫(xiě)好的測(cè)試序列開(kāi)始自動(dòng)測(cè)試,檢測(cè)到車(chē)輛上電的各邏輯步驟均通過(guò),部分結(jié)果如圖9所示。
圖9 客戶(hù)端測(cè)試結(jié)果
同時(shí),使用CANoe 報(bào)文監(jiān)測(cè)工具采集實(shí)時(shí)報(bào)文,并查看報(bào)文信號(hào)的變化曲線,如圖10所示。將系統(tǒng)的測(cè)試結(jié)果與實(shí)際信號(hào)曲線進(jìn)行對(duì)比,表明系統(tǒng)測(cè)試結(jié)果無(wú)誤,并且兩者的時(shí)間戳一致,驗(yàn)證了自動(dòng)測(cè)試功能具有較高的時(shí)效性和準(zhǔn)確性。
圖10 報(bào)文信號(hào)變化曲線(CANoe監(jiān)測(cè))
本文針對(duì)目前行業(yè)內(nèi)CAN報(bào)文采集設(shè)備成本較高、報(bào)文分析操作復(fù)雜、后期維護(hù)困難等現(xiàn)象,提出了一種低成本替代解決方案。通過(guò)設(shè)計(jì)一種Android端CAN總線數(shù)據(jù)實(shí)時(shí)解析、自動(dòng)測(cè)試的系統(tǒng),同時(shí)考慮到用戶(hù)測(cè)試需求的不斷變化,將測(cè)試需求文本化,便于用戶(hù)根據(jù)實(shí)際需求自由編制測(cè)試序列,實(shí)現(xiàn)總線數(shù)據(jù)自動(dòng)測(cè)試。系統(tǒng)具有便攜、低成本、便于維護(hù)等優(yōu)點(diǎn),并且能夠快速定位通訊故障,滿足整車(chē)下線的實(shí)際測(cè)試需求。