許強
摘 要: 車用診斷儀通常由汽車廠商自主定義,致使診斷儀軟硬件自成體系,通用性不強。為提高診斷平臺的開放性、硬件的低依賴性及便攜性,設計通用型的車用診斷儀很有必要。文章提出一種車用診斷設計方案,借助藍牙模塊轉發(fā)消息,實現(xiàn)車載ECU與Android移動設備間的通信,Android平臺數據庫用XML構建,診斷軟件依據ISO15765及UDS實現(xiàn)應用層及網絡層功能。在汽車模擬臺的測試表明,該車用診斷儀實現(xiàn)了故障讀取及刪除等功能,為汽車分析診斷提供了便攜及可拓展的解決方案。
關鍵詞: Android平臺; 汽車診斷; ISO15765
中圖分類號:TP399 文獻標志碼:A 文章編號:1006-8228(2017)05-06-04
Design of vehicle diagnostic tool based on Android platform
Xu Qiang
(School of Electronics Engineering and Computer Science, Peking University, Beijing 100871, China)
Abstract: The vehicle diagnostic tool is usually defined by the automobile manufacturer, which makes the software and hardware of diagnostic tool a special system of its own, and no versatility. In order to improve the openness of the diagnostic tool and the independence and portability of its hardware, it is necessary to design a general purpose vehicle diagnostic tool. This paper presents a design scheme of vehicle diagnosis, which transmits messages with Bluetooth module to realize the communication of onboard ECU and Android mobile devices. The database on Android platform is built by XML; the diagnostic software realizes the application layer and network layer functions in accordance with the ISO15765 and UDS. The test results on vehicle test bench show that this vehicle diagnostic tool can read and delete DTC (Diagnostic Trouble Code), and makes vehicle diagnostic easy and portable, it is a scalable solution.
Key words: Android platform; vehicle diagnosis; ISO15765
0 引言
車載診斷儀是一種汽車診斷設備,可識別車載ECU(電子控制單元)存儲的故障,通過車用診斷儀可以將存儲于車內ECU的故障代碼及相關信息讀取出來,以方便車輛管理和維修使用。車載診斷系統(tǒng)包括診斷儀和多個車載ECU。診斷儀ECU執(zhí)行診斷過程,其實是依據車上設備發(fā)生的信號決定車輛是否處于異常狀態(tài)。一旦任何的異常狀態(tài)被檢測到,診斷儀將在其EEPROM存儲當前診斷結果,EEPROM中存儲允許標志在打開狀態(tài)則指示某個車載ECU處于異常狀態(tài)[1]。
車載診斷系統(tǒng)最初是為了控制日趨嚴峻的汽車污染問題而設計構建,目前基于CAN總線的ISO15765汽車網絡診斷協(xié)議已經在多數汽車廠商普遍采用。但當前國內主流汽車診斷工具基于單片機或FPGA上開發(fā)而成,導致汽車診斷設備拓展性及便攜性不足,僅適用于專業(yè)汽車技術人員使用。如果能將車載診斷系統(tǒng)構建于一個用戶體驗良好的移動操作系統(tǒng),那么汽車診斷的門檻將降低,不管是車主還是汽車從業(yè)人員都將因此受益。本文通過對汽車診斷協(xié)議ISO15765的分析與研究,結合UDS統(tǒng)一診斷服務以及自主設計的藍牙轉CAN適配器,并最終在Android平臺上開發(fā)出汽車故障診斷儀。由于診斷儀采用Android平臺,用戶可以靈活的定義診斷服務應用層的數據庫,方便地應用到所有支持標準診斷協(xié)議ISO15765的車輛上。用戶可以使用安裝本軟件的Android設備快速查詢車輛故障,進行相應的保養(yǎng)維修。
1 車載診斷協(xié)議的研究
ISO15765診斷協(xié)議是針對基于CAN總線的汽車故障診斷系統(tǒng)的一般診斷要求制定的。CAN總線是一種帶CSMA/CD載波監(jiān)聽多點接入/碰撞檢測功能的總線,多個CAN節(jié)點分別可以發(fā)送不同優(yōu)先級的消息,檢測到碰撞時,消息優(yōu)先級低的節(jié)點自動選擇放棄發(fā)送,在總線下次空閑時即可重啟發(fā)送。ISO16765可以滿足E-OBD的系統(tǒng)要求[2],與ISO14230應用層的服務和參數完全兼容[3]。以開放系統(tǒng)互聯(lián)(Open System Interconnection,OSI)7層參考模型為基礎,ISO15765將通訊系統(tǒng)分為4層,分別為物理層、數據鏈路層、網絡層和應用層。ISO15765通信模型如圖1所示,診斷儀根據應用層中定義的診斷服務發(fā)送請求報文。消息向下傳到網絡層后,將根據協(xié)議定義中的幀分解、幀組合、位填充和時序控制等步驟執(zhí)行消息流傳輸控制。傳輸數據的長短將決定采用單幀傳輸或多幀傳輸,數據鏈路層修改打包上一層數據,組成能在CAN總線上傳輸的數據幀。
2 基于Android平臺的車用診斷系統(tǒng)框架設計
車用診斷系統(tǒng)的功能包括:與車輛通訊,讀取控制單元ECU中存儲的故障碼[4],或者刷寫控制單元軟件,更改控制單元配置信息,初始化及標定硬件等。而比較簡易的是讀取控制單元ECU中存儲的故障碼,而本文將關注這一基本功能的軟件實現(xiàn)。目前汽車產品電子設備方面成本日益上升,是因為用戶對汽車舒適性、安全性方面的需求劇增,因此車用控制單元ECU數量同樣增長,豪華型轎車如奔馳控制單元ECU的數量依據車型一般為40-60個。車用診斷系統(tǒng)檢測到部件故障時,將確認故障零件的來源。以一般高檔轎車為例涉及的控制單元有:電子鑰匙控制單元(EZS)、車身控制器(BCM)、中央傳動控制單元(CPC)、電子助力轉向系統(tǒng)(EPS)、車載娛樂主機(HU)等,在確定問題部件后,可以通過查詢數據庫的方式,查找故障代碼具體描述,觸發(fā)機制,維修建議等。而本文目的在于開發(fā)基于Android移動設備的汽車故障診斷軟件,使汽車用戶或從業(yè)者便捷的檢測車輛故障。
2.1 診斷儀系統(tǒng)整體方案
車用診斷儀由CAN轉藍牙通信接口板以及Android設備應用軟件兩部分。系統(tǒng)框架圖如圖2所示。
診斷儀系統(tǒng)包括Android移動設備、CAN轉藍牙接口板、汽車內部網絡三部分,故障發(fā)生時汽車內部控制單元ECU將自行存儲故障碼,當從Android移動端診斷請求命令發(fā)出后,開始一輪數據的交互。首先通過UI操作Android移動設備依據數據庫提取對應診斷服務的指令,通過藍牙發(fā)送指令,指令經過接口板進行消息轉發(fā)形成CAN數據格式,與汽車內部網絡上被測ECU進行通信,被測ECU提供故障碼讀取服務,將故障碼上傳經接口板轉發(fā),最終由應用層協(xié)議及數據庫查詢解析結果,顯示于UI界面對應的故障形式。
2.2 系統(tǒng)設計
2.2.1 CAN轉藍牙通信接口板設計
CAN轉藍牙接口板可提供診斷的便攜性,在設計中接口板MCU使用STM32F407ZET,采用TJA1050作為CAN收發(fā)器,藍牙串口模塊采用HC-06,串口波特率為115200bps,CAN接口的波特率為500kbps,系統(tǒng)主頻為168MHz。CAN轉藍牙通信接口板硬件結構如圖3所示。
CAN轉藍牙通信接口板工作流程為,首先初始化配置藍牙模塊和CAN模塊,對于消息的接收由藍牙接收中斷和CAN接收中斷處理器來做。接收到CAN或藍牙的消息后,剝離消息的頭部、尾部及控制字段只保留消息數據段,并存入對應的緩存區(qū),緩存區(qū)大小為128KB。Main主循環(huán)中持續(xù)檢查緩存是否溢出,并在發(fā)送緩存空閑時裝載發(fā)送數據。定時中斷處理器負責查看數據轉發(fā)中存在的錯幀、丟幀或緩存溢出等情況向Android移動端報錯,處理數據重傳及緩存的重置。CAN轉藍牙接口板軟件流程圖如圖4所示。
2.2.2 Android移動設備應用軟件設計
為了設計一種通用化的車用診斷儀,采用XML構建數據庫。用XML文件配置數據庫優(yōu)勢為在一個地方對數據庫進行配置,不用牽扯到具體的代碼,可維護性更高[5]。XML數據庫方便開發(fā)各種動態(tài)應用,表示的信息獨立于平臺,數據庫中需要存儲車廠提供的車載ECU診斷數據集,診斷數據集通常涵蓋故障代碼、故障描述、觸發(fā)條件、維修指導等。
XML文件放在只讀的assets文件夾內,Android中讀取系統(tǒng)文件或者資源的時候,都可以通過getResources方法獲取到Resources對象,然后通過其獲取到相應的資源。由于XML所在文件夾是只讀的保證了數據庫的安全。
基于CAN總線UDS協(xié)議,診斷儀將具備的功能有讀取故障碼、清除故障碼、顯示故障碼描述,在梅賽德斯奔馳工程標準中UDS服務和診斷協(xié)議規(guī)定,讀取故障服務ID為0x19車用診斷儀可以通過此診斷服務,及各個控制模塊ECU的診斷ID(如發(fā)動機控制模塊ID為0x7E0)獲取控制模塊的DTC(Diagnostic Trouble Code)。相同的清除DTC服務ID為0x14[6]。診斷服務的實現(xiàn)過程為:診斷儀向車上被診斷ECU發(fā)送請求報文,ECU返回響應報文。診斷儀從返回報文中解析DTC后與XML數據庫中故障信息進行查詢匹配,并將匹配內容顯示于UI界面。
本文中用于實驗調試的Android移動設備為一款華為mate9手機,Android手機已成為人們日常通訊使用的工具,基本全部配有藍牙功能。車用診斷儀軟件將具備如下功能:①藍牙連接配對;②解析數據包提取故障碼,通過故障碼查詢數據庫的故障提示;③診斷儀應用UI界面設計。藍牙通信功能采用Android API 17 Platform中Bluetooth函數實現(xiàn),Android設備為主設備,CAN轉藍牙接口板為從設備。從設備廣播UUID及相應服務,主設備接收,到從設備的廣播進行藍牙配對連接,藍牙報文的傳輸通過主設備對從設備。解析數據包提取故障碼是因為接口板只對CAN消息數據部分轉發(fā)而不解析,這部分將依據UDS協(xié)議完成解析。通過故障碼查詢數據庫的故障提示,是將故障碼與廠商數據庫中相應的故障提示匹配用于顯示。算法流程如圖5所示。
3 系統(tǒng)分析與測試
本文采用CAN轉藍牙接口板及Android平臺的移動端實現(xiàn)汽車便攜化診斷功能。其中CAN轉藍牙接口板自行設計制版,藍牙模塊傳輸延遲3ms左右,信號有效傳輸距離10米,滿足便攜式診斷需求。Android移動端將消息處理器劃分為發(fā)現(xiàn)設備、開始查找設備、結束查找設備、連接失敗、主動連接成功、收到連接成功、收到消息、發(fā)送消息等8個狀態(tài)用于藍牙功能的狀態(tài)切換及實現(xiàn)。Connectthread用于主動連接遠程藍牙設備,Connectedthread用于已建立連接后啟動的線程,需要傳入兩個參數,socket用來獲取輸入流,讀取遠程藍牙發(fā)送的消息,handler用于在收到數據時發(fā)送消息。ClearDTCthread用于傳出清除錯誤指令,ReadallDTCthread用于傳出讀取DTC指令,傳入接收到的消息,并匹配解析故障碼顯示于UI界面。測試平臺如圖6所示。
系統(tǒng)測試平臺包括安裝診斷儀APP的Android移動終端、CAN轉藍牙接口板以及梅賽德斯奔馳C級車電器系統(tǒng)模擬臺。測試步驟如下:選用華為mate9作為測試設備,將CAN轉藍牙接口板與模擬臺診斷接口板連接,為模擬臺系統(tǒng)上電。使用Android設備配對接口板。成功配對后讀取全部載入模塊故障碼,清除故障碼等操作。讀取故障碼界面如圖7所示。
4 結束語
本文通過對汽車診斷協(xié)議ISO15765和UDS統(tǒng)一診斷服務的研究,充分利用XML平臺無關性的特點,構建了汽車故障XML數據庫,使其能方便的拓展到其他操作系統(tǒng)。自主設計了CAN轉藍牙接口板實現(xiàn)了數據消息的轉發(fā)。通過更改源碼實現(xiàn)了Android平臺車用診斷儀。此軟件可適用于Android 7.0。通過搭建診斷測試平臺,對V205模擬臺ECU進行故障碼讀取及故障刪除。測試結果表明,車用診斷儀可以診斷并刪除當前錯誤,系統(tǒng)運行正常。本文設計的診斷儀可實現(xiàn)一種便攜式的車用診斷工具。
參考文獻(References):
[1] Electronic control system and method for vehicle diagnosis [P]. US. 701/32.3. 8412405 04/02/2013.
[2] 羅鋒.汽車網絡與總線標準[J].汽車工程,2003.4(1).
[3] 李東江等.汽車車載網絡系統(tǒng)(CAN-BUS) 原理與檢修[M].機械工業(yè)出版社,2005.
[4] 蔡浩.汽車故障診斷系統(tǒng)的設計和開發(fā)[D].上海交通大學碩士學位論文,2009.
[5] 馮建華等.純XML數據庫研究綜述[J].計算機應用研究,2006.23(6):1-7
[6] Ralf Pfaff.MBN-10747 Road vehicle Unified DiagnosticService(UDS)-Diagnostics Protocol(based on ISO 14229-1)[S].Plant 059,2008.6.