豆宏賢,石 春,秦琳琳,吳 剛
(中國科學技術大學自動化系,合肥 230027)
基于Android平臺的電動汽車檢測儀
豆宏賢,石 春,秦琳琳,吳 剛
(中國科學技術大學自動化系,合肥 230027)
為便于電動汽車整車調試和故障診斷,研制了一套基于Android平臺的檢測儀,設計了系統整體架構,移植了Android操作系統和FlexCAN、WiFi驅動程序,編寫了FlexCAN中間件。應用程序調用硬件服務接口實現了CAN總線數據的采集、存儲和解析,用Protobuf實現數據序列化。終端通過無線網絡把序列化后的電動汽車實時運行數據發送到數據服務器,實現了數據的實時顯示。系統每隔300ms采集一次電動汽車數據。試驗結果表明,該套檢測儀具有很好的穩定性與實時性,能滿足實際應用的要求。
電動汽車;檢測儀;Android;Protobuf
能源危機和環境污染問題使政府大力支持電動汽車的發展,但電動汽車的研發在全球范圍內仍處于初級階段,降低研發成本、提高汽車性能、推動技術改進和創新都需要大量運行數據支持[1];電動汽車架構中電子控制單元眾多,而這些控制單元多屬于不同廠家,由于產品設計理念和生產方法不夠成熟,電子控制單元的協調運作在整車應用中需要經過多次調試和檢測;電池的過充、過放也會直接影響電動汽車的行駛安全[2]。
在電動汽車生產研制過程中需要進行多次系統調試和檢測,高效的數據分析和處理可提高生產效率,降低研發成本。電動汽車實時運行數據的采集、存儲和解析能幫助整車生產廠商了解各個電子控制單元的狀況,快速檢測出有故障的器件,為車輛的安全生產提供保障;在電動汽車運行過程中,用戶可實時了解車輛狀況,及時檢修帶有安全隱患的部件;檢修人員通過車輛數據的獲取能夠很快找到故障原因,高效完成故障修復工作;車輛實時運行數據庫的建成,為電動汽車各個部件性能的改善以及動力系統的優化提供了實際指導[3]。
文中開發了基于Android的電動汽車檢測儀軟硬件架構,重點描述了檢測儀的軟件實現。系統通過CAN網絡采集整車控制器、電機控制器、電池管理系統發送的信息[4]。為解決數據量大導致的界面卡死,每隔300ms采集一次車輛CAN網絡數據。
檢測系統主要有Android信息娛樂終端、WiFi熱點和便攜式電腦等部分組成。信息娛樂終端通過CAN總線采集電動汽車實時運行數據并完成了數據的解析、顯示和存儲。WiFi熱點負責提供無線網絡,便攜式電腦作為數據服務器通過網絡接收信息終端發送的電動汽車實時運行數據。檢測系統結構如圖1所示。
電動汽車運行過程中,電子控制單元如整車控制器、電機控制器和電池管理系統間通過CAN網絡進行數據交互[5]。Android信息終端從CAN網絡獲取車輛實時運行數據,存儲于數據庫中,經J1939協議解析后在液晶觸摸屏上顯示車輛狀態,當用戶選擇發送到服務器時,信息終端對車輛數據用Protobuf (protocol buffers)協議序列化后通過WiFi網絡傳輸到便攜式電腦。便攜式電腦存儲獲取數據,并編寫上位機軟件利用Protobuf協議反序列化獲得電動汽車運行數據。利用電腦端豐富的資源,對反序列化后的數據進行解析和顯示[6]。通過分析顯示的數據信息,維修人員可以很快地找到電動汽車故障,快速消除故障[7]。
系統采用飛思卡爾公司推出的用于車載系統的i.MX6Q處理器,它有4顆運行速度達1.2GHz的ARM Cortex-A9內核,集成3D圖形單元和1080P編碼/解碼引擎,在苛刻的汽車環境中工作穩定可靠。
系統硬件包括CAN數據的采集、存儲和發送以及供電系統和調試接口等。i.MX6Q具有豐富的片上資源,支持常見的外圍設備。外圍設備包括音視頻采集、顯示電路、以太網電路、電源接口、UART、NAND Flash、SD卡、DDR3、USB2.0和I2C等,其外圍電路如圖2所示。

圖2 硬件結構
系統采用的CAN收發器是TI公司的SN65HVD230芯片,完成CAN控制器邏輯電平到CAN總線差分電平的轉換。CPU通過集成的Flex-CAN控制器發送邏輯電平信號,經收發器轉換為CAN總線傳輸的差分信號。SN65HVD230芯片抗干擾能力強、可靠性和數據傳輸速率高,在車載環境中能很好地保證數據的準確性。
軟件設計需要移植FlexCAN,RT5370驅動,編寫FlexCAN中間件以及上層應用程序。
3.1 FlexCAN驅動
在Android內核源碼中已支持FlexCAN設備,但檢測儀樣機與默認配置中的接口有差異,需在飛思卡爾提供的i.MX6Q處理器端口配置文件中,把i.MX6Q相應端口配置為CAN_TX和CAN_RX功能。然后重新配置內核,將FlexCAN驅動加入內核。
3.2 USB-WiFi驅動
檢測儀使用的USB-WiFi芯片RT5370,因在內核中沒有對應的驅動文件,故須下載相應的驅動文件進行編譯。在驅動的源碼目錄中對Makefile文件進行修改,使其支持實際應用中的硬件平臺和交叉編譯環境,編譯出驅動模塊RT5370sta.ko。重新配置內核,增加內核對802.11協議棧的支持、USB接口對WiFi模塊的支持和用戶空間對mdev和fireware的支持。在USB-WiFi驅動移植過程中,須將驅動模塊和對應的RT5370STA.dat文件拷貝到Android系統相應目錄下,以便Android系統啟動時能成功打開WiFi模塊。
3.3 Android中間件
1916年葉良輔、1928年楊曾威、1936年熊秉信、1938年王竹泉、1963年李星學、1960年北京礦業學院、1961年北京地質學院、1976年北京礦務局等許多地質學家及地質研究單位都曾來此作過研究工作,并最終確立了以本區地名命名的上古生界北京地區代表剖面,適合地質剖面測定、巖性巖相分析及沉積環境分析等基礎性教學.
Android系統沒有提供FlexCAN中間件,上層應用軟件要使用FlexCAN的硬件服務,必須在軟件設計過程中,編寫對應的Android中間件,使上層應用軟件能正常調用硬件模塊。FlexCAN中間件主要有FlexCAN Stub模塊、FlexCAN本地服務模塊和Flex-CAN服務管理模塊。
3.3.1 FlexCAN Stub設計與實現
Android為保護硬件廠商的信息,避開Linux的通用性公開許可證GPL(general public license)的束縛,設計了硬件抽象層HAL(hardware abstraction layer)模塊,它是Linux內核驅動程序的封裝,向上提供接口,屏蔽底層實現細節[8]。在硬件抽象層中,Stub是一種代理人(proxy)概念,它向硬件抽象層提供操作函數,runtime則從硬件抽象層獲得特定模塊Stub的操作函數,再回調這些操作函數。硬件抽象層與Stub是一種包含關系。
FlexCAN在內核中使用Socket接口和Linux協議棧,因此在FlexCAN Stub設計時使用系統調用socket()、bind()完成套接字的創建和綁定。系統調用sendto()利用套接字發送CAN數據,recvfrom()負責接收數據。
FlexCAN Stub是硬件抽象層中眾多模塊之一,它是FlexCAN控制的代理,當FlexCAN控制的本地服務需要調用FlexCAN Stub時,會利用hw_get_module()函數向HAL申請FlexCAN Stub模塊,hw_get_ module()函數根據Stub對應的ID號找到對應的FlexCAN Stub,獲得對應的Stub操作函數[9]。圖3為FlexCAN Stub實現過程。

圖3 FlexCAN Stub實現過程
3.3.2 硬件控制服務的JNI實現
Java本地接口JNI(Java native interface)模塊處在硬件抽象層與Framework層之間,Android應用程序框架層用Java語言編寫,而本地庫是C/C++實現,為使Android框架層能調用本地庫,應用框架層需要使用native方法,而這些native方法需要在Java本地接口層實現。
FlexCAN控制服務的JNI實現見圖4,FlexCAN控制服務作為系統服務被添加到系統服務列表中。Android系統啟動,FlexCAN控制服務隨之被啟動。System Server是Android系統啟動后運行的第一個Java進程,它通過System.load.library()方法來轉載庫文件libandroid_server,進而調用庫文件里的JNI_ Onload()函數,把FlexCAN的方法表注冊到虛擬機,Java本地接口層函數flexcan_native_init()會調用硬件抽象層函數hw_get_module()找到FlexCAN Stub并獲得Stub操作函數。flexcan_native_send()函數調用FlexCAN Stub模塊的回調函數flexcan_send()向FlexCAN設備發送CAN幀。flexcan_native_receive()函數調用回調函數flexcan_receive()從Flex-CAN設備獲取CAN數據。
FlexCAN控制服務隨著系統啟動而啟動,并利用服務管理器的addService()函數把自己注冊到服務管理器中。
3.4 Android應用程序
Android應用程序完成數據的采集、存儲、解析、顯示和WiFi傳輸。應用程序從服務管理器獲取FlexCAN控制服務并完成CAN網絡數據采集,利用sqlite3數據庫存儲CAN幀[10]。
應用程序定義HandlerListener接口,讓Activity類以及FlexCANHandler類實現該接口。在Flex-CANHandler類中把獲取的電動汽車運行數據向實現了HandlerListener接口的Activity類分發。在Activity類中利用J1939協議對獲取的電動汽車運行數據進行解析和顯示[11]。

圖4 FlexCAN控制服務的Java本地接口層實現
應用程序與PC端采用Socket通信,利用Protobuf協議對CAN幀數據進行序列化[12]。Protobuf協議是Google開源的一種數據交換格式,它獨立于語言和平臺,能進行多種語言的實現,是一種性能好、效率高的數據交互協議。對于每一種語言實現都帶有編譯器和相應的庫文件[13]。Protobuf使用二進制序列化,可讀性比Json和XML差,缺少自描述,但用在電動汽車上一定程度保障了車輛信息安全[14]。為使PC端能正確解析CAN幀數據,在傳輸數據之前定義一個字節數據長度,使PC端能根據字節長度獲知序列化后的CAN幀數據。
Android應用程序的設計流程如圖5所示。

圖5 Android應用程序設計流程
3.5 數據服務器端程序
數據服務器與Android應用程序采用Socket通信。服務器端創建一個監聽特定端口的TcpListener對象server。服務端開啟監聽服務后,調用server的AcceptTcpClient()方法,該方法的執行使服務端處于等待狀態,程序阻塞直到接收一個來自客戶端的請求并返回Socket對象TcpClient[15]。服務端使用TcpClient與客戶端通信。
服務端接收到客戶端數據后,先獲取幀的長度,再使用Protobuf協議解析,即可獲得原始數據。服務端編寫上位機程序實現原始數據的存儲、解析和顯示。上位機程序的實現為整車調試工程師以及售后維護工程師提供了查看電動汽車故障信息的平臺。
在項目實施中,為保證程序的正確性和系統的穩定性,在北京恒天純電動物流車上進行了測試。把Android影音娛樂平臺接入電動物流車的CAN網絡,采集其實時運行數據,得到部分測試結果,如圖6所示。

圖6 電動物流車運行狀態信息
在PC端編寫上位機軟件接收檢測終端發送的電動汽車運行數據,用Protobuf協議解析數據,對解析后的數據進行分析處理,得到電動汽車某個時刻的狀態,如圖7所示。

圖7 電動物流車靜止時的狀態信息
針對電動汽車整車調試和故障診斷,設計并實現了基于Android的電動汽車檢測儀,介紹了檢測儀各個硬件模塊配置,完成了系統軟件移植、編寫,以及應用軟件的開發。應用端利用FlexCAN從CAN網絡讀取整車控制器、電機和電池等車輛信息,完成了存儲、解析與顯示。最后通過WiFi網絡把車輛數據傳輸到PC端進行處理和分析。結果表明,該套方案能為電動汽車進一步發展提供數據基礎,同時能為維修人員提供檢修參考,具有實際的應用意義。
[1] 吳晶晶.純電動汽車車載信息的采集與遠程監測系統的研發[D].南昌:南昌大學,2011.
[2] 楊帆.電動汽車數據采集系統的設計與實現[D].北京:北京郵電大學,2013.
[3] 黃周義,石春,付賢強,等.純電動客車遠程監控系統設計與實現[J].電子測量技術,2013,36(7):23-26.
[4] 吳任飛,李仁發,李龍,等.面向FlexRay-CAN異構網絡的幀封裝研究[J].小型微型計算機系統,2015,36(4):749-753.
[5] 付賢強,石春,黃周義,等.純電動客車遠程視頻監控終端設計與實現[J].電子測量技術,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系統源代碼情景分析[M].北京:電子工業出版社,2012.
[9] 李寧.Android深度探索(卷1)[M].北京:人民郵電出版社,2013.
[10] WEI Jason.Android數據庫程序設計[M].王雪昌,吳驊,林展宏,譯.北京:清華大學出版社,2014.
[11] SAE J1939—73.Application layer-diagnostics[S].1998.
[12] 寇陽,呂建新.基于Protocol Buffers的配置下發接口適配與應用[J].電子測試,2014(1):108-109.
[13] 聶曉旭,于鳳芹,欽道理.基于Protobuf的數據傳輸協議[J].計算機系統應用,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].電子測量技術,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