胡正凱
摘 要:隨著我國小型汽車數(shù)量的持續(xù)增長,隨之而來的是頻發(fā)的交通事故,而這其中很大一部分是由于汽車發(fā)生故障而無法正常行駛造成。本設(shè)計基于C/S架構(gòu)使用藍牙ELM327作為與OBD通信的協(xié)議翻譯器,通過Andorid手機藍牙與ELM 327獲取ECU的故障碼信息顯示給車主,起到早期預(yù)警的作用,提醒車主潛在的車輛維修需要,減少了汽車由于故障發(fā)生交通事故的危險。
關(guān)鍵詞:ELM327;Android;Java;OBD-II;ECU模擬器
中圖分類號:TP206 文獻標識碼:A 文章編號:1006-8937(2016)30-0073-02
1 概 述
2015年我國私家車已達1.24億輛,巨大的汽車數(shù)量也帶來了越來越多的交通事故。如果車主能夠自行檢查汽車狀態(tài),消除汽車故障,這將會顯著地降低交通事故發(fā)生的可能性。然而隨著現(xiàn)代電子控制技術(shù)在汽車工業(yè)的發(fā)展和應(yīng)用,自動化程度越來越高,但隨之而來的汽車結(jié)構(gòu)變得越來越復雜,能熟練掌握和維修汽車領(lǐng)域技術(shù)的專家和維修人員也越來越少,從而使得汽車維修行業(yè)經(jīng)常無法快速、經(jīng)濟地解決汽車故障,這就需要用戶能夠自行地排查車輛狀態(tài),及時地去專業(yè)維修店清除故障,改善車況。
汽車廠商大量的采用電子控制單元ECU(Electronic Control Unit)來作為控制器,我們可以使用汽車故障診斷系統(tǒng)OBD-II來獲取車輛的故障診斷信息。OBD接口模塊的主要功能是使整個硬件系統(tǒng)通過CAN總線與汽車的OBD接口相連接,使之成為汽車電控系統(tǒng)的一個CAN節(jié)點,并通過網(wǎng)關(guān)和汽車的其它CAN節(jié)點進行通訊,進而可以采集到汽車運行時的各種數(shù)據(jù),同時還能作為車載電源與電源模塊的連接通道,整個汽車終端也是通過該接口模塊與汽車實現(xiàn)硬件上的連接[1]。
如今OBD技術(shù)受到了廣泛的關(guān)注,我國出臺了一系列政策來推廣OBD技術(shù),現(xiàn)如今90﹪的汽車都具備OBD-II接口,以O(shè)BD技術(shù)為基礎(chǔ)的車聯(lián)網(wǎng)系統(tǒng)[2]更是各大科技公司當下的研究熱點。
根據(jù)谷歌發(fā)布的報告顯示,自2014年5月以來Android操作系統(tǒng)的用戶增加了4億,用戶總數(shù)已達14億,平均5部手機中大約4部安裝了安卓系統(tǒng)。
而且Android又是開源操作系統(tǒng),其靈活性、開放性比其他專有軟件產(chǎn)品具有更大的自由和個性化,同時價格更低廉。Android應(yīng)用使用Java語言開發(fā),Java語言的開發(fā)者又是最多的,這使的Android應(yīng)用的開發(fā)短期大大的縮短、可維護性增強。
OBD技術(shù)和Android操作系統(tǒng)的廣泛應(yīng)用,使我們結(jié)合兩者開發(fā)的應(yīng)用、系統(tǒng)能夠被大多數(shù)用戶所使用、操作。
2 系統(tǒng)整體設(shè)計
2.1 系統(tǒng)原理
該診斷系統(tǒng)主要分成上位機和下位機兩部分,系統(tǒng)框圖,如圖1所示。上位機是客戶端,基于Android系統(tǒng);下位機即CAN轉(zhuǎn)藍牙控制器模塊(即藍牙ELM 327),通過OBD接口(CAN 總線)和汽車ECU(電子控制單元)通信,讀取來自ECU的報文信息[3],并轉(zhuǎn)換成藍牙串行數(shù)據(jù)格式,發(fā)送給上位機。
2.2 硬件選擇
根據(jù)我國的法律政策規(guī)定,除極個別車型外,所有的汽車必須提供一個可以用于測試設(shè)備獲取診斷信息的接口。這個接口上的數(shù)據(jù)傳輸協(xié)議并不能直接與其他設(shè)備兼容,這時就需要一個器件能夠把車輛CAN協(xié)議轉(zhuǎn)換成串口通信協(xié)議。
埃爾姆公司生產(chǎn)的ELM327芯片加入了CAN、ISO 9141-2、SAE J1850等七種通信協(xié)議,可以自動檢測車輛通信協(xié)議并設(shè)置成與車輛一致的協(xié)議。藍牙實現(xiàn)了點對點傳輸,傳輸保密性好,是目前最受歡迎的無線通信技術(shù),許多車載產(chǎn)品都使用藍牙進行通信。
Android在android.bluetooth包封裝了對藍牙通信的功能豐富的類,例如BluetoothAdapter、BluetoothDevice、BluetoothServer
Socket、BluetoothSocket等。
我們不需要外加其他設(shè)備,利用Android手機自帶的藍牙API接口,通過APP客戶端,就能實現(xiàn)手機與ELM327的通信。
2.3 軟件設(shè)計
2.3.1 命令形式
我們需要在手機端發(fā)送指令給ELM 327,然后ELM 327解析命令,把命令傳送給ECU。ELM 327能夠解析兩種命令形式:AT命令和OBD命令。AT命令又叫內(nèi)部命令以“AT”開頭,因為這是ELM 327內(nèi)部使用的命令,即不會與ECU進行通信,用于對ELM 327進行設(shè)置操作。
凡是沒有以“AT”兩個字開頭的所有命令都會被認為是汽車OBD命令,OBD命令的格式是固定的,第一個字節(jié)是請求的數(shù)據(jù)類型,第二個字節(jié)是請求的實際信息,必須使用十六進制數(shù)進行表示,見表1。
例如獲取發(fā)動機冷卻液溫度,模式是01,PID是05,因此我們的請求指令應(yīng)該是0105。
2.3.2 代碼解析
我們使用Eclipse結(jié)合ADT(Android Developer Tools)進行Android開發(fā),通過BluetoothServerSocket的accept()方法獲取BluetoothSocket對象。
當Android的content中的設(shè)備連接正常后,通過BluetoothSocket采用串行數(shù)據(jù)通信實現(xiàn)與CAN轉(zhuǎn)藍牙控制器模塊的交互[4]。與ELM327的連接代碼需要執(zhí)行在線程里面,使用InputStream讀取ELM 327發(fā)送過來的數(shù)據(jù)。
由于ELM 327發(fā)送的數(shù)據(jù)流中,夾雜著回車符,所以我們應(yīng)該去掉回車符,把真正有意義的數(shù)據(jù)組合在一起,當ELM 327發(fā)送了“>”時,就說明這條回應(yīng)信息結(jié)束,退出循環(huán)。
由于InputStream的read方法是阻塞式方法,所以當我們讀取到回應(yīng)信息的末尾,退出while循環(huán)的時候就會一直在read方法這里等待ELM 327發(fā)送的新消息。
3 實驗驗證
我們使用ECU模擬器進行程序調(diào)試以及故障碼的獲取。在車輛越來越趨于網(wǎng)絡(luò)化的趨勢下,ECU模擬器是汽車產(chǎn)品開發(fā)、調(diào)試、生產(chǎn)必備的工具,能為為開發(fā)人員節(jié)省大量的時間。
當前車輛上的總線設(shè)備越來越多,有的高端車上甚至多到有上百個ECU,而車輛ECU之間通過總線交換數(shù)據(jù)信息,目前有關(guān)車聯(lián)網(wǎng)系統(tǒng)的開發(fā)越來越多,而車聯(lián)網(wǎng)設(shè)備獲取車輛信息的接口全部采用的是OBD通用接口,對于產(chǎn)品的調(diào)試,都要進行實車的對接測試,但是有時候又找不到各種協(xié)議的車輛,或者是每次測試都要啟動車輛,去車輛狹小的空間進行操作,很是不方便,ECU模擬器可以解決這些問題。
ECU模擬器可以模擬車輛OBD接口的大部分協(xié)議,由于車輛系統(tǒng)是各個品牌國家獨立,所以協(xié)議從最早期有很多不同種類的協(xié)議,互相不兼容,主要是幾大類,基于K線的,基于CAN線的,還有一種是J1850(主要是早期的美國部分車輛使用),目前市面上大部分的是基于K線和CAN線的,大約占有90%多的車輛保有量。通過Android手機發(fā)送PID為03的請求指令,故障碼信息,如圖2所示。
得到所有的故障碼數(shù)據(jù),需要故障碼庫進行比對,得到具體的故障碼含義。
4 結(jié) 語
本設(shè)計通過藍牙ELM 327獲取OBD-II故障碼,顯示在Android應(yīng)用上,使車主能夠及時了解汽車的各項數(shù)據(jù)和故障,減少因汽車故障發(fā)生的交通事故。
所有的驗證都是基于KWP 2000 5BPS初始化協(xié)議進行的,以后的工作就是完整各個協(xié)議的數(shù)據(jù)獲取,并且把數(shù)據(jù)發(fā)給服務(wù)器進行數(shù)據(jù)的集中儲存,便于用戶及車企在瀏覽器也可以查看數(shù)據(jù)并進行大數(shù)據(jù)分析。
參考文獻:
[1] 謝富強,唐耀庚,曹云建.基于單片機的汽車遠程監(jiān)測車載終端硬件設(shè) 計[J].微機與應(yīng)用,2014,6:22-25.
[2] 李松,王齡.發(fā)達國家IVHS研究與發(fā)展[J].國外公路,1998(4):19-22.
[3] 羅峰,孫澤昌.汽車CAN總線系統(tǒng)原理、設(shè)計與應(yīng)用[M].北京:電子工業(yè) 出版社,2010.
[4] 李寧.Android/Ophone開發(fā)完全講義[M].北京:中國水利水電出版社,
2010.