趙米鵲,蘇燁,祁增祿
(陜西重型汽車有限公司,陜西 西安 710200)
基于CANLib的商用車數(shù)據(jù)監(jiān)控軟件設(shè)計(jì)
趙米鵲,蘇燁,祁增祿
(陜西重型汽車有限公司,陜西 西安 710200)
文章基于瑞典Kvaser公司的USB-CAN適配卡Kvaser Leaf Light HS,使用開發(fā)工具包CANLib設(shè)計(jì)了一款CAN總線數(shù)據(jù)監(jiān)控軟件,用于采集和分析使用CAN總線技術(shù)的商用車的底盤運(yùn)行數(shù)據(jù)。
商用車;CANLib;數(shù)據(jù)監(jiān)控;CAN總線
CLC NO.:U462.1 Document Code: A Article ID: 1671-7988 (2017)15-104-03
隨著電子和計(jì)算機(jī)技術(shù)的不斷發(fā)展,以及用戶對汽車安全性、智能性、操控性和舒適性要求的不斷提高,越來越多的電子控制單元在汽車行業(yè)得到應(yīng)用。由于可以保證不同單元之間良好的信息傳輸,并且能有效減少整車的線束布置,CAN總線技術(shù)業(yè)已得到廣泛應(yīng)用。本文針對使用CAN總線技術(shù)的某重卡底盤,詳細(xì)闡述了使用CANLib開發(fā)數(shù)據(jù)監(jiān)控軟件的方法和原理,能夠方便的實(shí)現(xiàn)對重卡底盤數(shù)據(jù)的采集與分析。
CAN是控制器局域網(wǎng)(Controller Area Network)的縮寫,是一種高性能、高可靠性、易開發(fā)、強(qiáng)靈活性和低成本的通信總線。由Bosch公司于1986年首次提出,常用于汽車的監(jiān)測和控制。
CAN總線基于ISO-OSI七層網(wǎng)絡(luò)框架,但標(biāo)準(zhǔn)協(xié)議中僅定義了物理層和數(shù)據(jù)鏈路層的規(guī)范,因此在項(xiàng)目中應(yīng)用CAN總線還需定義上層協(xié)議,即通信數(shù)據(jù)格式和控制單元之間交換數(shù)據(jù)時(shí)遵守的規(guī)則[1]。目前,在商用車領(lǐng)域主要應(yīng)用美國汽車工程學(xué)會(huì)(SAE)提出的J1939協(xié)議,為整車CAN總線提供了應(yīng)用定義、故障診斷和網(wǎng)絡(luò)管理等標(biāo)準(zhǔn)體系結(jié)構(gòu)。
目前,使用CAN總線技術(shù)的商用車,其網(wǎng)絡(luò)架構(gòu)按復(fù)雜程度可以分為單網(wǎng)絡(luò)架構(gòu)和多網(wǎng)絡(luò)架構(gòu)[2]。單網(wǎng)絡(luò)架構(gòu)指使用CAN總線連接底盤總成中的各種控制單元,用于收集車輛運(yùn)行的各種信息,通過儀表顯示并由用戶進(jìn)行反饋操作。多網(wǎng)絡(luò)架構(gòu)則是將整車電控單元?jiǎng)澐譃閯?dòng)力、車身、儀表和控制等多個(gè)CAN網(wǎng)段,不同的網(wǎng)段采用不同的通信速率,網(wǎng)段之間的信息交互通過網(wǎng)關(guān)協(xié)調(diào),最終可以有效提升整車的信息化和智能化水平。
本文開發(fā)的數(shù)據(jù)監(jiān)控軟件,主要用于觀測動(dòng)力CAN中油門、制動(dòng)和轉(zhuǎn)向等電控單元發(fā)出的信號和數(shù)據(jù)。整個(gè)網(wǎng)段基于CAN2.0B,使用SAE J1939協(xié)議,通信速率500kb/s。
2.1 CAN通信適配卡選型
將PC機(jī)作為監(jiān)控節(jié)點(diǎn)連接到CAN總線中,需要CAN總線適配卡[3]。本文采用瑞典Kvaser公司生產(chǎn)的USB-CAN適配卡Kvaser Leaf Light HS。該適配卡是CAN總線全速USB接口,硬件成本較低,同時(shí)支持CAN標(biāo)準(zhǔn)幀和擴(kuò)展幀格式,可提供無損耗的報(bào)文接收,還可進(jìn)行精確度為100μs的時(shí)間戳傳輸[4]。由于動(dòng)力CAN中最快報(bào)文周期為10ms,因此該適配卡非常適合用作總線數(shù)據(jù)監(jiān)控的硬件工具。
2.2 CANLib簡介
CANLib是基于Kvaser適配卡的開發(fā)工具包,含有基于CAN接口軟件開發(fā)所需的全部資源,支持的操作系統(tǒng)包括Windows和Linux,支持的開發(fā)語言包括C/C++、C#、Delphi 和Python等。另外,CANLib還支持虛擬的CAN總線通道,可以在沒有硬件支持的情況下,實(shí)現(xiàn)對軟件功能的測試。
2.3工程配置
本文使用C#語言開發(fā)數(shù)據(jù)監(jiān)控軟件,首先需要對Visual Studio建立的工程進(jìn)行配置,才能正確使用CANLib。具體步驟如下:
1)創(chuàng)建新工程,開發(fā)語言選擇C#,應(yīng)用框架選擇.NET Framework4.0。
2)在軟件開發(fā)之前,必須安裝Visual C++可再發(fā)行組件包。這是因?yàn)镃ANLib庫文件為C++語言編寫,必須由該組件包支持才能在.NET平臺運(yùn)行。
3)設(shè)置工程屬性,指定程序的目標(biāo)平臺,這里選擇“x86”表示32位應(yīng)用程序。這是由于CANLib的庫文件與平臺相關(guān),若不指定平臺將導(dǎo)致代碼無法編譯。
4)為工程添加引用的庫文件。若CANLib使用默認(rèn)安裝路徑,則根據(jù)應(yīng)用框架和目標(biāo)平臺的不同,有不同的引用路徑,如表1所示。
表1 CANLib庫的引用路徑
在正確配置工程之后,即可調(diào)用其中的API函數(shù)進(jìn)行程序設(shè)計(jì)。根據(jù)實(shí)現(xiàn)功能的不同,CANLib將API函數(shù)封裝在不同的dll文件中,如表2所示。
表2 dll文件的作用
2.4 軟件設(shè)計(jì)
2.4.1 主控流程
整個(gè)軟件按功能可分為總線監(jiān)控和數(shù)據(jù)處理兩大模塊。在對CANLib和硬件通道初始化完成之后,即可根據(jù)用戶需求監(jiān)控油門開度、制動(dòng)深度和轉(zhuǎn)向角度等參數(shù),并可繪制實(shí)時(shí)曲線或?qū)?shù)據(jù)保存為Excel表格??刂屏鞒倘鐖D1所示。
圖1 監(jiān)控軟件的控制流程
2.4.2 配置并打開CAN總線
代碼中主要使用CANLib類中定義的相關(guān)方法完成對總線的配置和操作。其中配置并打開CAN總線的具體流程如下:
1)調(diào)用函數(shù)static void canInitializeLibrary(void)初始化CANLib和設(shè)備驅(qū)動(dòng)。
2)調(diào)用函數(shù)static int canOpenChannel(int channel, int flag)打開相應(yīng)CAN通道。設(shè)備通道號(從0開始)為第一個(gè)參數(shù),打開方式標(biāo)記為第二個(gè) 。若返回總線句柄handle,表示打開通道正常,否則將返回故障碼。
3)canSetBusParams函數(shù)用于配置CAN總線參數(shù)。當(dāng)總線速率為500kb/s時(shí),函數(shù)的調(diào)用方式為canSetBusParams ( handle, Canlib.canBITRATE_500K, 0, 0, 0, 0, 0 )。若返回預(yù)定義的總線狀態(tài)canOK時(shí),表示配置參數(shù)完成,否則將返回故障碼。
4)canBusOn函數(shù)用于打開CAN總線,輸入?yún)?shù)為總線句柄handle,返回值為canOK或故障碼。
2.4.3 監(jiān)控并處理數(shù)據(jù)
正確配置并打開CAN總線之后,適配卡將自動(dòng)開始讀取總線報(bào)文,并將內(nèi)容存儲在緩沖區(qū)中。軟件通過與設(shè)備驅(qū)動(dòng)進(jìn)行通信,可獲取對應(yīng)的報(bào)文及其數(shù)據(jù),從而實(shí)現(xiàn)對底盤運(yùn)行數(shù)據(jù)的監(jiān)控。
通過函數(shù)canRead讀取報(bào)文數(shù)據(jù),調(diào)用方式為canRead (handle, &id, data, &dlc, &flags, ×tamp)。其中handle為總線句柄,id、dlc為讀取報(bào)文的ID和數(shù)據(jù)域長度指針,data為接收數(shù)據(jù)創(chuàng)建的數(shù)組名,flags、timestamp為指定幀格式和時(shí)間戳的指針。這樣即可將報(bào)文中的數(shù)據(jù)存儲至data數(shù)組中。
根據(jù)獲取的數(shù)據(jù),使用第三方繪圖控件ZedGraph實(shí)現(xiàn)該功能,流程如圖2所示。
圖2 實(shí)時(shí)曲線繪制流程
保存數(shù)據(jù)使用第三方組件NPOI實(shí)現(xiàn)。該組件提供了工作簿類HSSFWorkbook、工作表類ISheet、單元行類IRow和單元格類ICell,相關(guān)的方法可以簡單實(shí)現(xiàn)對Excel表格的讀寫,并且可以在沒有安裝Office的PC上運(yùn)行。流程如圖3所示。
圖3 數(shù)據(jù)保存流程
2.4.4 退出并關(guān)閉CAN總線
在關(guān)閉程序之前,必須先關(guān)閉CAN總線并釋放總線句柄,具體流程如下:
1)canBusOff函數(shù)用于關(guān)閉CAN總線,輸入?yún)?shù)為總線句柄handle,返回值為canOK或故障碼。
2)canClose函數(shù)用于釋放總線句柄,輸入?yún)?shù)和返回值同canBusOff。
2.5 應(yīng)用效果
在對某重卡裝配的電控液壓轉(zhuǎn)向器做轉(zhuǎn)向助力測試時(shí),將轉(zhuǎn)向盤打至左右極限,從轉(zhuǎn)向器返回的報(bào)文數(shù)據(jù)中讀取轉(zhuǎn)角和轉(zhuǎn)矩值,繪制曲線如圖4所示。
觀察曲線可以判斷,轉(zhuǎn)向器左側(cè)極限為891°,右側(cè)極限為952°,并且在左轉(zhuǎn)至550°時(shí)扭矩達(dá)到最大值。
根據(jù)結(jié)果可知,當(dāng)轉(zhuǎn)角較小時(shí),該轉(zhuǎn)向器的助力特性較好。而當(dāng)轉(zhuǎn)角較大時(shí),助力力矩稍有欠缺,因此應(yīng)檢查此時(shí)的機(jī)械連接。
圖4 轉(zhuǎn)角-轉(zhuǎn)矩曲線
本文研究了基于Kvaser USB-CAN適配卡,使用CANLib開發(fā)工具包,設(shè)計(jì)總線數(shù)據(jù)監(jiān)控軟件的方法。與普遍使用的CANoe系列工具相比,本方法硬件成本較低,可使用CANLib開發(fā)自定義功能的上位機(jī)軟件,使用簡單便捷。在某商用車底盤測試中的應(yīng)用證明,本方法開發(fā)的軟件功能穩(wěn)定、實(shí)時(shí)高效,因此具有較高的推廣價(jià)值。
[1] 俞燚,崔振亞.某重卡CAN總線控制系統(tǒng)的設(shè)計(jì)[J].汽車實(shí)用技術(shù).2014.3.
[2] 李安,楊立慧.CAN總線應(yīng)用說明[J].客車長廊.2015.02.
[3] 陶永進(jìn).CAN總線測控系統(tǒng)的上位機(jī)節(jié)點(diǎn)設(shè)計(jì)[J].微計(jì)算機(jī)信息.2009.25(4-1).
[4] Kvaser AB.Kvaser Leaf User Guide[M].2015:17-19.
The design of data monitoring software for commercial vehicle based on CANLib
Zhao Mique, Su Ye, Qi Zenglu
( Shaan xi Heavy-Duty Automobile Co, Ltd, Shaanxi Xi'an 710200)
In this paper, based on the USB-CAN hardware Kvaser Leaf Light HS, the product of Swedish company Kvaser, use the CANLib SDK to design a data monitoring software for CAN bus. It can be used to collect and analyse the data of chassis for commercial vehicle.
Commercial Vehicle; CANLib; Data Monitor; CAN Bus
U462.1
A
1671-7988 (2017)15-104-03
趙米鵲,就職于陜西重型汽車有限公司。
10.16638/j.cnki.1671-7988.2017.15.038