摘 要: 基于Cortex-A8嵌入式開發(fā)平臺和SAE J1939協議,通過解析CAN總線報文、后臺數據處理和前端應用程序開發(fā),設計出了一套車載信息服務系統(tǒng)。經過測試表明,該系統(tǒng)能穩(wěn)定顯示車輛實時運行狀況,并能分析和保存故障信息,方便車主的維護和保養(yǎng);其易操控性和良好的人機交互體驗使本系統(tǒng)具有一定的實用價值。
關鍵詞: Cortex-A8;SAE J1939協議;車載信息;人機交互
車載信息系統(tǒng)是現代汽車電子重要組成之一。目前市場上的乘用車車載信息系統(tǒng)智能化程度比較高,技術已趨向成熟,但是商用車卻相對滯后。這也意味著商用車車載信息服務系統(tǒng)市場亟待開發(fā),主要有以下幾個方面的原因:一是行業(yè)的內在需求。商用車作為運營車輛,如客運、旅游公交、物流公司對車輛的安全、運營、成本管理等的內在需求愈發(fā)強烈。二是技術的日漸成熟。車載總線技術的推廣普及為車輛信息采集提供了基礎;大規(guī)模集成電路的迅速發(fā)展為車聯網硬件開發(fā)提供了基礎;通信技術中的3G技術已經成熟,4G網絡在快速建設,很快將完成城市和公路范圍覆蓋。三是國家相關政策陸續(xù)出臺。商用車,尤其是客車作為運營車輛,事關人身安全、財產安全以及社會穩(wěn)定,國家對其管理要求也是格外重視,自2003年起便推出了道路運輸車輛衛(wèi)星定位動態(tài)監(jiān)管系統(tǒng)標準、強制安裝記錄儀標準、JT-T415-2006道路運輸電子政務平臺標準及汽車行駛記錄儀新國家標準,這為商用車的車載信息服務系統(tǒng)的快速普及提供了強大的政策推動。商用車車載信息服務系統(tǒng)及相關技術發(fā)展?jié)摿薮蟆?br/>
為此,本文借助Cortex-A8嵌入式開發(fā)平臺,基于SAE J1939協議,針對商用車設計了一套功能完善、整體性強且性價比高的車載信息系統(tǒng)。
1 系統(tǒng)總體設計方案
本系統(tǒng)主要功能為:實時監(jiān)控車輛運行參數,給駕駛人員提供豐富的車輛實時運行狀況信息;建立車載數據庫,存儲采集到的車輛實時運行動態(tài)信息和故障信息,以備查詢使用;實現車輛故障自診斷功能,方便相關人員對車輛進行故障檢測。系統(tǒng)結構原理圖如圖1所示。
圖1中,CAN控制器模塊采集車內各CAN節(jié)點的報文信息,其通過SPI接口與主處理器進行通信;GPS模塊提供車輛的實時定位信息;通過GPRS模塊可將車輛的實時運行狀態(tài)與移動通信設備進行信息交換;存儲模塊主要儲存車輛的故障信息,方便車輛的維護和保養(yǎng);人機交互模塊主要用來顯示針對本系統(tǒng)開發(fā)的應用軟件,給用戶以人性化體驗。
2 系統(tǒng)主要硬件結構
主控芯片采用基于ARMv7架構的Cortex-A8處理器,其主頻達1 GHz,是三星推出的一款適用于智能手機和平板電腦的應用處理芯片。本系統(tǒng)采用的開發(fā)平臺具有豐富的板載資源:板載RS232串口、RS485串口、外擴I2C、SPI、PWM等接口,板載CAN總線接口、GPS模塊、工業(yè)級GSM/GPRS模塊等,大大方便了本系統(tǒng)的開發(fā)。
其中,CAN總線模塊主要由CAN獨立控制器、CAN收發(fā)器和時鐘電路組成??刂破鬟x用MCP2510,并以晶振電路作為時鐘源;收發(fā)器選用CTM1050T(內部集成光電隔離電路)。電源部分:MCP2510采用3.3 V電源供電,CTM1050T采用5 V供電,與CAN總線電源電壓一致。由于CTM1050T內部集成了光電隔離電路,因此GND和CANG兩個接地引腳,分別接系統(tǒng)地線和CAN總線地線。數據線接線部分:MCP2510通過標準SPI串行接口與Cortex-A8通信,通過收發(fā)器CTM1050T與車內CAN總線網絡連接。信號線接線部分:MCP2510有8個中斷源,有中斷發(fā)生時,通過INT引腳向主處理器發(fā)送中斷請求,然后主處理器通過查詢中斷標志寄存器(CANINTF)確定中斷源。另外,接收緩沖器滿引腳(RX0BF和RX1BF)也可用來顯示有效報文是否分別成功載入RXB0或RXB1。本設計使用中斷引腳INT與Cortex-A8的外部中斷引腳EINT19相連,用于發(fā)送中斷信息,RX0BF和RX1BF外接LED,用于指示數據傳輸狀態(tài)。CAN總線模塊電路原理圖如圖2所示。
3 系統(tǒng)的軟件設計
本文所設計的車載信息服務系統(tǒng)是基于操作系統(tǒng)的嵌入式產品。傳統(tǒng)的基于操作系統(tǒng)的嵌入式產品可以分為應用層、文件系統(tǒng)及驅動層和底層3個部分。借助于功能強大的Cortex-A8嵌入式開發(fā)平臺,本文主要工作集中在應用層上面,其軟件設計流程圖如圖3所示。系統(tǒng)地看,CAN設備經過驅動以后,從車載CAN總線網絡上接收報文,讀取設備文件函數后,數據流向后臺數據處理程序,經過后臺數據處理,最后交由前端Qt頁面顯示。
本系統(tǒng)所做工作的核心部分即為后臺數據處理程序設計和前端人機交互程序設計。后臺數據處理程序接收CAN報文后,基于SAE J1939協議進行解析處理;人機交互是將處理后的數據顯示在用戶圖形界面上。
3.1 SAE J1939協議
SAE J1939協議是美國汽車工程師協會(SAE)在CAN2.0B協議基礎上制定的針對客車和貨運車網絡通信應用層協議,目前在汽車電子網絡中得到廣泛應用。SAE J1939協議以CAN2.0B協議為基礎,所不同的是在很多方面做了更具體的規(guī)定。例如,在物理層,選用屏蔽雙絞線作為傳輸介質,傳輸速率規(guī)定為250 kb/s;在數據鏈路層使用CAN擴展幀,并對CAN標識符重新定義,摒棄了CAN協議中對報文標識的方法,重新采用對節(jié)點地址編號。SAE J1939協議總體按照ISO/OSI模型制定相關標準,在CAN2.0B協議的基礎上又增加了應用層定義、網絡層定義、網絡管理和故障診斷定義,傳輸層、會話層和表示層暫未定義。SAE J1939協議各層使用的是格式統(tǒng)一的協議數據單元PDU(Protocol Data Unit),每個協議數據單元的功能由所攜帶的參數組編號PGN(Parameter Group Number)標識。SAE J1939作為一種控制局域網協議,網絡中大部分數據都是以參數的形式在應用層完成傳遞的。
下面以動機瞬時油耗為例說明報文解析的具體過程:如接收到的PDU的幀ID為0x18FEF200,其數據區(qū)前兩個字節(jié)值為138(0x008A),則該報文部分域值如圖4所示。
由圖4可知,優(yōu)先級P為6,目標地址PS為0xF2,源地址SA為0x0。此時地址為0xF2的節(jié)點會接收該報文并交由上層應用程序處理,而其他節(jié)點則不進行處理,直接丟棄。根據R(保留位)、DP(數據頁)、PF(PDU格式)、PS(特定PDU)的值的計算可得本報文的參數組編號PGN為0x00-
FEF2。SAE J1939對該參數組編號定義如表1所示。
由表1可知,此報文數據區(qū)攜帶了4個參數,前兩個字節(jié)內定義的參數是燃油使用率,可疑參數編號SPN為183。具體燃油使用率的值可以按照SAE J1939協議對SPN183的定義計算出來,協議對SPN183的定義如表2所示。
由表2,根據計算公式:參數實際值=分辨率×總線傳輸數值+偏移量,代入數據便可以得到參數的實際物理值:瞬時油耗=0.05 L/h×138+0=6.9 L/h。
3.2 CAN總線底層配置
CAN總線驅動程序的報文發(fā)送、接收任務都是圍繞控制器MCP2510展開的,因此驅動程序主要是對控制器MCP2510內部寄存器進行操作。在Linux為所有設備都提供的統(tǒng)一函數接口file_operations中,其中can_ioctl()函數可以設置CAN總線通信波特率、通信幀ID、CAN總線接收濾波器以及MCP2510工作模式等參數。因此CAN總線驅動程序主要內容就是對CAN總線控制器MCP2510的操作和file_operations結構的設計。
3.2.1 CAN總線控制器MCP2510的設置
首先對MCP2510進行初始化,具體步驟為:(1)軟件復位,進入配置模式;(2)設置CAN總線波特率;(3)關閉中斷,設置ID過濾器;(4)切換MCP2510至工作狀態(tài);(5)清空接收和發(fā)送緩沖區(qū);(6)開啟接收緩沖區(qū),開中斷。
由于MCP2510與Cortex-A8的SPI0直接相連,因此接下來需要編寫驅動SPI0控制器的接口函數,具體包括SPI_init()、SPI_putch()、SPI_getch()、SPI_mcp_select()、SPI_mcp_unselect()函數等。它們的作用分別是初始化SPI控制器;通過SPI發(fā)送一個字節(jié);通過SPI接收一個字節(jié);后兩個函數是MCP2510的片選的選擇和取消。
MCP2510為微控制器提供讀指令、寫指令、請求發(fā)送指令、狀態(tài)讀指令、復位指令和位修改指令6種指令操作。編寫的相應的SPI接口函數為:SPI_mcp_RD()讀操作;SPI_mcp_WR()寫操作;SPI_mcp_rts()請求發(fā)送操作;SPI_mcp_RD_status()狀態(tài)讀操作;SPI_mcp_reset()復位操作;SPI_mcp_write_bits()位修改操作。
3.2.2 CAN驅動程序的實現
CAN設備屬于字符設備,根據Linux設備驅動程序的通用模式, CAN驅動程序軟件結構如圖5所示。
由圖5可知,CAN總線驅動程序設計具體步驟如下:
(1)通過can_init()函數實現初始化,具體包括:初始化硬件、注冊字符設備驅動、注冊中斷和創(chuàng)建設備文件系統(tǒng)節(jié)點。硬件的初始化主要通過調用函數SPI_init()和mcp_init()實現。注冊字符設備驅動是通過register_
chrdev()函數實現的。向內核注冊中斷使用了函數request_irq()。創(chuàng)建設備文件系統(tǒng)節(jié)點則是通過函數devfs_register()實現的,它將為CAN總線設備創(chuàng)建文件節(jié)點/dev/can。
(2)CAN驅動程序的編寫選擇適用的文件操作接口file_operations結構,具體如下所示:
Static struct file_operations can_fops={
owner:THIS_MODULE;
open:can_open;
release:can_release;
ioctl:can_ioctl;
write:can_write;
read:can_read;
};
在該結構中,應用程序可以通過can_ioctl()函數改變CAN總線通信中諸如CAN總線通信波特率、通信幀ID、CAN總線接收濾波器以及MCP2510工作模式等參數的設置。
(3)通過函數can_exit()用來卸載和取消設備。在模塊被卸載時,可以通過調用unregister_chrdev()和free_irq()函數注銷字符型設備驅動和已經申請的中斷。
3.3 應用程序設計
應用軟件是車載信息系統(tǒng)的重要組成部分。本系統(tǒng)使用Qt/Enbedded 應用程序架構開發(fā)應用程序。根據車載信息系統(tǒng)的功能需求,系統(tǒng)應用程序的設計分為人機交互界面、CAN總線數據處理、GPS、GPRS信息處理和數據存儲等部分。由于需要執(zhí)行多個任務,若在單一線程里實現,可能會導致阻塞、降低系統(tǒng)整體性能。因此,本系統(tǒng)采取多線程技術,可以提高處理器效率,還能避免程序阻塞、交互界面卡頓等現象。本文著重介紹車輛實時狀態(tài)監(jiān)控程序設計部分。
車輛狀態(tài)監(jiān)控主要包括實時監(jiān)控車輛各項實時運行參數和故障信息。結合前面的報文解析過程,其流程圖如圖6所示。
根據SAE J1939協議的規(guī)定,車輛各項參數會以規(guī)定周期在網絡上廣播,如果有故障發(fā)生,就會廣播相應的故障碼。本程序只需監(jiān)測網絡,提取攜帶這些有用信息的報文進行相應的解析即可。該部分功能在車輛狀態(tài)監(jiān)控子線程中實現,該線程啟動后循環(huán)讀取來自MCP2510從總線上接收的報文。如果報文中攜帶的是車輛狀態(tài)參數,則根據相應的PGN查表確定該報文數據域的參數和它們的SPN,再根據SPN查表獲得這些參數在數據域中的位置、數據分辨率、數據長度和偏移量等信息,最后通過計算獲得該參數具體的物理值;如果是故障報文,則需要根據報文中的診斷故障代碼(DTC)來確定故障參數和故障類型。獲得以上這些信息后把它們存入到相應的全局變量以供其他線程使用,同時刷新LCD顯示值。
本文設計的車載信息系統(tǒng)實時監(jiān)控畫面如圖7所示。在實際測試中,本系統(tǒng)能穩(wěn)定地顯示車輛的實時運行數據,方便車主對車輛進行維護和保養(yǎng),滿足用戶的基本需求;人性化的操控界面和快捷靈敏的反應速度使本系統(tǒng)具有一定的應用價值。
參考文獻
[1] 尹占威.商用車車載信息服務市場升溫[N].中國電子報,2011,15(11):2.
[2] 陳一新,李武屹,莫家貴.基于SAE J1939協議的車輛信息采集與診斷模塊[J].電子技術,2010(7):65-67.
[3] 張繼輝,許勇.基于SAE J1939的車輛監(jiān)測與故障診斷車載系統(tǒng)[J].計算機系統(tǒng)應用,2013,22(3):73-75.
[4] 趙俊旭,唐厚君,鐘溢原.基于Cortex-A8的倉庫管理移動終端設計[J].微型電腦應用,2011,27(10):35-37.
[5] 田帥,柳曉鳴.車載信息系統(tǒng)的研究[D].大連:大連海事大學,2007.
[6] SAE J1939-71:vehicle application layer[S].Society of Automotive Engineers,2008.
[7] SAE J1939-21:data link layer[S].Society of Automotive Engineers,2006.
[8] SAE J1939-73:vehicle application layer-Diagnostics[S].Society of Automotive Engineers,2006.