豆宏賢,石 春,秦琳琳,吳 剛
(中國科學技術(shù)大學自動化系,合肥 230027)
基于Android平臺的電動汽車檢測儀
豆宏賢,石 春,秦琳琳,吳 剛
(中國科學技術(shù)大學自動化系,合肥 230027)
為便于電動汽車整車調(diào)試和故障診斷,研制了一套基于Android平臺的檢測儀,設計了系統(tǒng)整體架構(gòu),移植了Android操作系統(tǒng)和FlexCAN、WiFi驅(qū)動程序,編寫了FlexCAN中間件。應用程序調(diào)用硬件服務接口實現(xiàn)了CAN總線數(shù)據(jù)的采集、存儲和解析,用Protobuf實現(xiàn)數(shù)據(jù)序列化。終端通過無線網(wǎng)絡把序列化后的電動汽車實時運行數(shù)據(jù)發(fā)送到數(shù)據(jù)服務器,實現(xiàn)了數(shù)據(jù)的實時顯示。系統(tǒng)每隔300ms采集一次電動汽車數(shù)據(jù)。試驗結(jié)果表明,該套檢測儀具有很好的穩(wěn)定性與實時性,能滿足實際應用的要求。
電動汽車;檢測儀;Android;Protobuf
能源危機和環(huán)境污染問題使政府大力支持電動汽車的發(fā)展,但電動汽車的研發(fā)在全球范圍內(nèi)仍處于初級階段,降低研發(fā)成本、提高汽車性能、推動技術(shù)改進和創(chuàng)新都需要大量運行數(shù)據(jù)支持[1];電動汽車架構(gòu)中電子控制單元眾多,而這些控制單元多屬于不同廠家,由于產(chǎn)品設計理念和生產(chǎn)方法不夠成熟,電子控制單元的協(xié)調(diào)運作在整車應用中需要經(jīng)過多次調(diào)試和檢測;電池的過充、過放也會直接影響電動汽車的行駛安全[2]。
在電動汽車生產(chǎn)研制過程中需要進行多次系統(tǒng)調(diào)試和檢測,高效的數(shù)據(jù)分析和處理可提高生產(chǎn)效率,降低研發(fā)成本。電動汽車實時運行數(shù)據(jù)的采集、存儲和解析能幫助整車生產(chǎn)廠商了解各個電子控制單元的狀況,快速檢測出有故障的器件,為車輛的安全生產(chǎn)提供保障;在電動汽車運行過程中,用戶可實時了解車輛狀況,及時檢修帶有安全隱患的部件;檢修人員通過車輛數(shù)據(jù)的獲取能夠很快找到故障原因,高效完成故障修復工作;車輛實時運行數(shù)據(jù)庫的建成,為電動汽車各個部件性能的改善以及動力系統(tǒng)的優(yōu)化提供了實際指導[3]。
文中開發(fā)了基于Android的電動汽車檢測儀軟硬件架構(gòu),重點描述了檢測儀的軟件實現(xiàn)。系統(tǒng)通過CAN網(wǎng)絡采集整車控制器、電機控制器、電池管理系統(tǒng)發(fā)送的信息[4]。為解決數(shù)據(jù)量大導致的界面卡死,每隔300ms采集一次車輛CAN網(wǎng)絡數(shù)據(jù)。
檢測系統(tǒng)主要有Android信息娛樂終端、WiFi熱點和便攜式電腦等部分組成。信息娛樂終端通過CAN總線采集電動汽車實時運行數(shù)據(jù)并完成了數(shù)據(jù)的解析、顯示和存儲。WiFi熱點負責提供無線網(wǎng)絡,便攜式電腦作為數(shù)據(jù)服務器通過網(wǎng)絡接收信息終端發(fā)送的電動汽車實時運行數(shù)據(jù)。檢測系統(tǒng)結(jié)構(gòu)如圖1所示。
電動汽車運行過程中,電子控制單元如整車控制器、電機控制器和電池管理系統(tǒng)間通過CAN網(wǎng)絡進行數(shù)據(jù)交互[5]。Android信息終端從CAN網(wǎng)絡獲取車輛實時運行數(shù)據(jù),存儲于數(shù)據(jù)庫中,經(jīng)J1939協(xié)議解析后在液晶觸摸屏上顯示車輛狀態(tài),當用戶選擇發(fā)送到服務器時,信息終端對車輛數(shù)據(jù)用Protobuf (protocol buffers)協(xié)議序列化后通過WiFi網(wǎng)絡傳輸?shù)奖銛y式電腦。便攜式電腦存儲獲取數(shù)據(jù),并編寫上位機軟件利用Protobuf協(xié)議反序列化獲得電動汽車運行數(shù)據(jù)。利用電腦端豐富的資源,對反序列化后的數(shù)據(jù)進行解析和顯示[6]。通過分析顯示的數(shù)據(jù)信息,維修人員可以很快地找到電動汽車故障,快速消除故障[7]。
系統(tǒng)采用飛思卡爾公司推出的用于車載系統(tǒng)的i.MX6Q處理器,它有4顆運行速度達1.2GHz的ARM Cortex-A9內(nèi)核,集成3D圖形單元和1080P編碼/解碼引擎,在苛刻的汽車環(huán)境中工作穩(wěn)定可靠。
系統(tǒng)硬件包括CAN數(shù)據(jù)的采集、存儲和發(fā)送以及供電系統(tǒng)和調(diào)試接口等。i.MX6Q具有豐富的片上資源,支持常見的外圍設備。外圍設備包括音視頻采集、顯示電路、以太網(wǎng)電路、電源接口、UART、NAND Flash、SD卡、DDR3、USB2.0和I2C等,其外圍電路如圖2所示。
圖2 硬件結(jié)構(gòu)
系統(tǒng)采用的CAN收發(fā)器是TI公司的SN65HVD230芯片,完成CAN控制器邏輯電平到CAN總線差分電平的轉(zhuǎn)換。CPU通過集成的Flex-CAN控制器發(fā)送邏輯電平信號,經(jīng)收發(fā)器轉(zhuǎn)換為CAN總線傳輸?shù)牟罘中盘?。SN65HVD230芯片抗干擾能力強、可靠性和數(shù)據(jù)傳輸速率高,在車載環(huán)境中能很好地保證數(shù)據(jù)的準確性。
軟件設計需要移植FlexCAN,RT5370驅(qū)動,編寫FlexCAN中間件以及上層應用程序。
3.1 FlexCAN驅(qū)動
在Android內(nèi)核源碼中已支持FlexCAN設備,但檢測儀樣機與默認配置中的接口有差異,需在飛思卡爾提供的i.MX6Q處理器端口配置文件中,把i.MX6Q相應端口配置為CAN_TX和CAN_RX功能。然后重新配置內(nèi)核,將FlexCAN驅(qū)動加入內(nèi)核。
3.2 USB-WiFi驅(qū)動
檢測儀使用的USB-WiFi芯片RT5370,因在內(nèi)核中沒有對應的驅(qū)動文件,故須下載相應的驅(qū)動文件進行編譯。在驅(qū)動的源碼目錄中對Makefile文件進行修改,使其支持實際應用中的硬件平臺和交叉編譯環(huán)境,編譯出驅(qū)動模塊RT5370sta.ko。重新配置內(nèi)核,增加內(nèi)核對802.11協(xié)議棧的支持、USB接口對WiFi模塊的支持和用戶空間對mdev和fireware的支持。在USB-WiFi驅(qū)動移植過程中,須將驅(qū)動模塊和對應的RT5370STA.dat文件拷貝到Android系統(tǒng)相應目錄下,以便Android系統(tǒng)啟動時能成功打開WiFi模塊。
3.3 Android中間件
1916年葉良輔、1928年楊曾威、1936年熊秉信、1938年王竹泉、1963年李星學、1960年北京礦業(yè)學院、1961年北京地質(zhì)學院、1976年北京礦務局等許多地質(zhì)學家及地質(zhì)研究單位都曾來此作過研究工作,并最終確立了以本區(qū)地名命名的上古生界北京地區(qū)代表剖面,適合地質(zhì)剖面測定、巖性巖相分析及沉積環(huán)境分析等基礎性教學.
Android系統(tǒng)沒有提供FlexCAN中間件,上層應用軟件要使用FlexCAN的硬件服務,必須在軟件設計過程中,編寫對應的Android中間件,使上層應用軟件能正常調(diào)用硬件模塊。FlexCAN中間件主要有FlexCAN Stub模塊、FlexCAN本地服務模塊和Flex-CAN服務管理模塊。
3.3.1 FlexCAN Stub設計與實現(xiàn)
Android為保護硬件廠商的信息,避開Linux的通用性公開許可證GPL(general public license)的束縛,設計了硬件抽象層HAL(hardware abstraction layer)模塊,它是Linux內(nèi)核驅(qū)動程序的封裝,向上提供接口,屏蔽底層實現(xiàn)細節(jié)[8]。在硬件抽象層中,Stub是一種代理人(proxy)概念,它向硬件抽象層提供操作函數(shù),runtime則從硬件抽象層獲得特定模塊Stub的操作函數(shù),再回調(diào)這些操作函數(shù)。硬件抽象層與Stub是一種包含關(guān)系。
FlexCAN在內(nèi)核中使用Socket接口和Linux協(xié)議棧,因此在FlexCAN Stub設計時使用系統(tǒng)調(diào)用socket()、bind()完成套接字的創(chuàng)建和綁定。系統(tǒng)調(diào)用sendto()利用套接字發(fā)送CAN數(shù)據(jù),recvfrom()負責接收數(shù)據(jù)。
FlexCAN Stub是硬件抽象層中眾多模塊之一,它是FlexCAN控制的代理,當FlexCAN控制的本地服務需要調(diào)用FlexCAN Stub時,會利用hw_get_module()函數(shù)向HAL申請FlexCAN Stub模塊,hw_get_ module()函數(shù)根據(jù)Stub對應的ID號找到對應的FlexCAN Stub,獲得對應的Stub操作函數(shù)[9]。圖3為FlexCAN Stub實現(xiàn)過程。
圖3 FlexCAN Stub實現(xiàn)過程
3.3.2 硬件控制服務的JNI實現(xiàn)
Java本地接口JNI(Java native interface)模塊處在硬件抽象層與Framework層之間,Android應用程序框架層用Java語言編寫,而本地庫是C/C++實現(xiàn),為使Android框架層能調(diào)用本地庫,應用框架層需要使用native方法,而這些native方法需要在Java本地接口層實現(xiàn)。
FlexCAN控制服務的JNI實現(xiàn)見圖4,F(xiàn)lexCAN控制服務作為系統(tǒng)服務被添加到系統(tǒng)服務列表中。Android系統(tǒng)啟動,F(xiàn)lexCAN控制服務隨之被啟動。System Server是Android系統(tǒng)啟動后運行的第一個Java進程,它通過System.load.library()方法來轉(zhuǎn)載庫文件libandroid_server,進而調(diào)用庫文件里的JNI_ Onload()函數(shù),把FlexCAN的方法表注冊到虛擬機,Java本地接口層函數(shù)flexcan_native_init()會調(diào)用硬件抽象層函數(shù)hw_get_module()找到FlexCAN Stub并獲得Stub操作函數(shù)。flexcan_native_send()函數(shù)調(diào)用FlexCAN Stub模塊的回調(diào)函數(shù)flexcan_send()向FlexCAN設備發(fā)送CAN幀。flexcan_native_receive()函數(shù)調(diào)用回調(diào)函數(shù)flexcan_receive()從Flex-CAN設備獲取CAN數(shù)據(jù)。
FlexCAN控制服務隨著系統(tǒng)啟動而啟動,并利用服務管理器的addService()函數(shù)把自己注冊到服務管理器中。
3.4 Android應用程序
Android應用程序完成數(shù)據(jù)的采集、存儲、解析、顯示和WiFi傳輸。應用程序從服務管理器獲取FlexCAN控制服務并完成CAN網(wǎng)絡數(shù)據(jù)采集,利用sqlite3數(shù)據(jù)庫存儲CAN幀[10]。
應用程序定義HandlerListener接口,讓Activity類以及FlexCANHandler類實現(xiàn)該接口。在Flex-CANHandler類中把獲取的電動汽車運行數(shù)據(jù)向?qū)崿F(xiàn)了HandlerListener接口的Activity類分發(fā)。在Activity類中利用J1939協(xié)議對獲取的電動汽車運行數(shù)據(jù)進行解析和顯示[11]。
圖4 FlexCAN控制服務的Java本地接口層實現(xiàn)
應用程序與PC端采用Socket通信,利用Protobuf協(xié)議對CAN幀數(shù)據(jù)進行序列化[12]。Protobuf協(xié)議是Google開源的一種數(shù)據(jù)交換格式,它獨立于語言和平臺,能進行多種語言的實現(xiàn),是一種性能好、效率高的數(shù)據(jù)交互協(xié)議。對于每一種語言實現(xiàn)都帶有編譯器和相應的庫文件[13]。Protobuf使用二進制序列化,可讀性比Json和XML差,缺少自描述,但用在電動汽車上一定程度保障了車輛信息安全[14]。為使PC端能正確解析CAN幀數(shù)據(jù),在傳輸數(shù)據(jù)之前定義一個字節(jié)數(shù)據(jù)長度,使PC端能根據(jù)字節(jié)長度獲知序列化后的CAN幀數(shù)據(jù)。
Android應用程序的設計流程如圖5所示。
圖5 Android應用程序設計流程
3.5 數(shù)據(jù)服務器端程序
數(shù)據(jù)服務器與Android應用程序采用Socket通信。服務器端創(chuàng)建一個監(jiān)聽特定端口的TcpListener對象server。服務端開啟監(jiān)聽服務后,調(diào)用server的AcceptTcpClient()方法,該方法的執(zhí)行使服務端處于等待狀態(tài),程序阻塞直到接收一個來自客戶端的請求并返回Socket對象TcpClient[15]。服務端使用TcpClient與客戶端通信。
服務端接收到客戶端數(shù)據(jù)后,先獲取幀的長度,再使用Protobuf協(xié)議解析,即可獲得原始數(shù)據(jù)。服務端編寫上位機程序?qū)崿F(xiàn)原始數(shù)據(jù)的存儲、解析和顯示。上位機程序的實現(xiàn)為整車調(diào)試工程師以及售后維護工程師提供了查看電動汽車故障信息的平臺。
在項目實施中,為保證程序的正確性和系統(tǒng)的穩(wěn)定性,在北京恒天純電動物流車上進行了測試。把Android影音娛樂平臺接入電動物流車的CAN網(wǎng)絡,采集其實時運行數(shù)據(jù),得到部分測試結(jié)果,如圖6所示。
圖6 電動物流車運行狀態(tài)信息
在PC端編寫上位機軟件接收檢測終端發(fā)送的電動汽車運行數(shù)據(jù),用Protobuf協(xié)議解析數(shù)據(jù),對解析后的數(shù)據(jù)進行分析處理,得到電動汽車某個時刻的狀態(tài),如圖7所示。
圖7 電動物流車靜止時的狀態(tài)信息
針對電動汽車整車調(diào)試和故障診斷,設計并實現(xiàn)了基于Android的電動汽車檢測儀,介紹了檢測儀各個硬件模塊配置,完成了系統(tǒng)軟件移植、編寫,以及應用軟件的開發(fā)。應用端利用FlexCAN從CAN網(wǎng)絡讀取整車控制器、電機和電池等車輛信息,完成了存儲、解析與顯示。最后通過WiFi網(wǎng)絡把車輛數(shù)據(jù)傳輸?shù)絇C端進行處理和分析。結(jié)果表明,該套方案能為電動汽車進一步發(fā)展提供數(shù)據(jù)基礎,同時能為維修人員提供檢修參考,具有實際的應用意義。
[1] 吳晶晶.純電動汽車車載信息的采集與遠程監(jiān)測系統(tǒng)的研發(fā)[D].南昌:南昌大學,2011.
[2] 楊帆.電動汽車數(shù)據(jù)采集系統(tǒng)的設計與實現(xiàn)[D].北京:北京郵電大學,2013.
[3] 黃周義,石春,付賢強,等.純電動客車遠程監(jiān)控系統(tǒng)設計與實現(xiàn)[J].電子測量技術(shù),2013,36(7):23-26.
[4] 吳任飛,李仁發(fā),李龍,等.面向FlexRay-CAN異構(gòu)網(wǎng)絡的幀封裝研究[J].小型微型計算機系統(tǒng),2015,36(4):749-753.
[5] 付賢強,石春,黃周義,等.純電動客車遠程視頻監(jiān)控終端設計與實現(xiàn)[J].電子測量技術(shù),2013,36(8):71-75.
[6] KIM Minyoung,KIM Mi-Jin,JANG Jong-Wook,et al.Design of smart driving information check system using smart phone and wireless personal area network[C].Ubiquitous and Future Networks (ICUFN),4-6July,2012:[7].389-393.
[7] JHOU Jheng-Syu,CHEN Shi-Huang,TSAY Wu-Der,et al.The implementation of OBD-Ⅱvehicle dignosis system integrated with cloud computation technology[C].Robot,Vision and Signal Processing(RVSP),10-12Dec,2013:9-12.
[8] 羅升陽.Android系統(tǒng)源代碼情景分析[M].北京:電子工業(yè)出版社,2012.
[9] 李寧.Android深度探索(卷1)[M].北京:人民郵電出版社,2013.
[10] WEI Jason.Android數(shù)據(jù)庫程序設計[M].王雪昌,吳驊,林展宏,譯.北京:清華大學出版社,2014.
[11] SAE J1939—73.Application layer-diagnostics[S].1998.
[12] 寇陽,呂建新.基于Protocol Buffers的配置下發(fā)接口適配與應用[J].電子測試,2014(1):108-109.
[13] 聶曉旭,于鳳芹,欽道理.基于Protobuf的數(shù)據(jù)傳輸協(xié)議[J].計算機系統(tǒng)應用,2015(8):112-116.
[14] GLIGORIC N,DEJANOVIC I,KRCO S.Performance evaluation of compact binary XML representation for constrained devices [C].Distributed Comuting in Sensor Systems and Workshops (DCOSS),27-29June,2011:1-5.
[15] 李神送,溫嘉銘,劉學鋒.Android手機上傳感器信息的實時獲取與可視化[J].電子測量技術(shù),2015(6):104-107.
Detector for Electric Vehicle Based on Android Platform
Dou Hongxian,Shi Chun,Qin Linlin&Wu Gang
Department of Automation,University of Science and Technology of China,Hefei230027
To facilitate the debugging and fault diagnosis of electric vehicle,a detector based on Android platform is developed,the overall framework of the system is designed,the Android operating system and the driver programs FlexCAN and WiFi are transplanted,and the middleware FlexCAN is developed.Then the application calls the service interface to fulfill the acquisition,storage and parsing of CAN bus data,and Protobuf is used to conduct data serialization.Finally,the terminal sends the serialized real operation data of electric vehicle to data server via wireless network,realizing real-time data display.The system collects vehicle data every 300 milliseconds.Test results show that the detector developed has good stability and real-time performance,meeting the requirements of practical application.
EV;detector;Android;Protobuf
原稿收到日期為2016年1月15日,修改稿收到日期為2016年2月25日。
吳剛,教授,博士生導師,E-mail:wug@ustc.edu.cn。
10.19562/j.chinasae.qcgc.2017.02.016