鄧召文,周 圍
(湖北汽車(chē)工業(yè)學(xué)院 汽車(chē)工程學(xué)院 汽車(chē)動(dòng)力傳動(dòng)與電子控制湖北省重點(diǎn)實(shí)驗(yàn)室,十堰 442002)
CAN(Controller Area Network)即控制器局域網(wǎng),是幾種流行現(xiàn)場(chǎng)總線中應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。由于CAN總線采用時(shí)間觸發(fā)協(xié)議,在消息傳輸中采用非破壞性的仲裁機(jī)制,保證了數(shù)據(jù)的完整和系統(tǒng)安全,CAN總線網(wǎng)絡(luò)已被汽車(chē)廠普遍接受,成為車(chē)載網(wǎng)絡(luò)系統(tǒng)的中流砥柱[1]?;贑AN總線對(duì)汽車(chē)運(yùn)行數(shù)據(jù)進(jìn)行采集可以分析汽車(chē)的運(yùn)行狀況,及時(shí)發(fā)現(xiàn)故障,為檢測(cè)和故障診斷提供依據(jù),通過(guò)對(duì)采集數(shù)據(jù)的分析,發(fā)現(xiàn)設(shè)計(jì)參數(shù)的不足,提出改進(jìn)設(shè)計(jì)思路,形成分析-改進(jìn)-分析的閉環(huán)設(shè)計(jì)過(guò)程。
華南理工大學(xué)開(kāi)發(fā)設(shè)計(jì)了一套專(zhuān)用的高效、經(jīng)濟(jì)、較為準(zhǔn)確的離線式數(shù)據(jù)采集系統(tǒng)[2]。利用專(zhuān)用數(shù)據(jù)采集芯片對(duì)模擬量進(jìn)行模數(shù)轉(zhuǎn)換,由單片機(jī)將數(shù)據(jù)以FAT32格式寫(xiě)入內(nèi)存卡中,在汽車(chē)運(yùn)行完成后,取下內(nèi)存卡導(dǎo)出數(shù)據(jù)到PC機(jī),用數(shù)學(xué)軟件對(duì)數(shù)據(jù)進(jìn)行顯示和分析。武漢理工大學(xué)設(shè)計(jì)了一種基于飛思卡爾9s12單片機(jī)的數(shù)據(jù)采集系統(tǒng)[3]。使用了自定義的傳感器對(duì)數(shù)據(jù)進(jìn)行采集,由單片機(jī)進(jìn)行轉(zhuǎn)換后通過(guò)SCI發(fā)送給PC機(jī)的LabView上位機(jī)進(jìn)行顯示,系統(tǒng)優(yōu)點(diǎn)是可以增加傳感器數(shù)量和類(lèi)型。青島理工大學(xué)也采用了單片機(jī)采集方案[4]。采用了自定義傳感器進(jìn)行數(shù)據(jù)采集,利用NRF2401無(wú)線模塊通過(guò)SPI接口與主控芯片連接進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)由上位機(jī)進(jìn)行接收和保存。同濟(jì)大學(xué)設(shè)計(jì)了一種基于LabView和CAN總線的數(shù)據(jù)采集監(jiān)測(cè)系統(tǒng),用于汽車(chē)試驗(yàn)時(shí)實(shí)時(shí)監(jiān)測(cè)車(chē)輛的運(yùn)行狀態(tài)[5]。
本論文利用USBCAN接口卡,實(shí)現(xiàn)CAN總線與USB總線間的數(shù)據(jù)交換。利用LabView調(diào)用Dll文件實(shí)現(xiàn)對(duì)USBCAN卡的配置,包括同步時(shí)間、總線速率、濾波方式、CAN卡通道、驗(yàn)收碼、屏蔽碼等參數(shù),實(shí)現(xiàn)接收和發(fā)送功能;在USBCAN卡收到數(shù)據(jù)后根據(jù)通信協(xié)議解析出對(duì)應(yīng)的數(shù)據(jù),實(shí)時(shí)顯示并解析車(chē)輛電控系統(tǒng)的狀態(tài)信息和故障信息;在接收和解析完數(shù)據(jù)后,根據(jù)用戶(hù)需求實(shí)現(xiàn)對(duì)汽車(chē)實(shí)時(shí)狀態(tài)數(shù)據(jù)的顯示、保存與回放等功能。
該通信協(xié)議包含的信息主要包括以下五部分:1)幀頭:一共四字節(jié)長(zhǎng)度,包含固定的三個(gè)標(biāo)志字節(jié)為0x82、0x81、0x80以及一字節(jié)的本組數(shù)據(jù)長(zhǎng)度(默認(rèn)為84個(gè)參數(shù));該部分主要用于表示新一組數(shù)據(jù)的開(kāi)始,與前一組數(shù)據(jù)形成分界,防止數(shù)據(jù)出現(xiàn)混亂;2)數(shù)據(jù)段:數(shù)據(jù)共60個(gè),每個(gè)數(shù)據(jù)按高位在前、低位在后分成兩字節(jié);包含了發(fā)動(dòng)機(jī)以及底盤(pán)的部分?jǐn)?shù)據(jù);該部分?jǐn)?shù)據(jù)是研究和保存的重點(diǎn),根據(jù)這些數(shù)據(jù)可以判斷發(fā)動(dòng)機(jī)及底盤(pán)參數(shù)的設(shè)置是否合理,可能潛在的故障及原因;3)錯(cuò)誤診斷信息:共16個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)由兩字節(jié)組成,低位字節(jié)的每一位表示一種錯(cuò)誤。當(dāng)某位為1時(shí)表示錯(cuò)誤發(fā)生,為0時(shí)表示沒(méi)有錯(cuò)誤;所以每個(gè)數(shù)據(jù)可以表示出8種錯(cuò)誤。該部分?jǐn)?shù)據(jù)可以作為故障判斷的表現(xiàn)判斷,也是最直觀的故障指示;4)狀態(tài)信息:共8個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)分高低兩個(gè)字節(jié);低字節(jié)的每一位表示一種狀態(tài)。類(lèi)似于錯(cuò)誤信息,每個(gè)數(shù)據(jù)包可以表示8種系統(tǒng)狀態(tài);5)CRC32校驗(yàn)段:該部分按照標(biāo)準(zhǔn)CRC32校驗(yàn)算出每組數(shù)據(jù)前四部分的CRC32值,分為4字節(jié)高位在前低位在后;該部分?jǐn)?shù)據(jù)主要作為改組數(shù)據(jù)是否有效的依據(jù)。
對(duì)CAN總線的數(shù)據(jù)采集,上位機(jī)使用LabView進(jìn)行編寫(xiě),通信接口方案需要根據(jù)CAN數(shù)據(jù)由何種總線輸入PC機(jī)確定。直接利用USBCAN卡將CAN總線數(shù)據(jù)傳輸至USB總線,LabView利用CAN卡所附帶的驅(qū)動(dòng)程序和動(dòng)態(tài)鏈接庫(kù)來(lái)實(shí)現(xiàn)對(duì)CAN卡的設(shè)置以及數(shù)據(jù)獲取。所需要的軟硬件有:周立功USBCAN-I、USBCAN配套的驅(qū)動(dòng)程序以及動(dòng)態(tài)鏈接庫(kù)。
LabView在互聯(lián)接口函數(shù)子模板中提供了庫(kù)與可執(zhí)行程序,其中,調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)可以調(diào)用廠家提供的dll文件。只要知道動(dòng)態(tài)連接庫(kù)里被導(dǎo)出的函數(shù)名稱(chēng)及其參數(shù),就可以通過(guò)調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)調(diào)用,調(diào)用dll文件函數(shù)的操作步驟為如圖1所示。
圖1 調(diào)用DLL文件函數(shù)步驟
圖2 Dll調(diào)用程序框圖
設(shè)置完成后連接參數(shù)程序框圖如圖2所示,左側(cè)為輸入端,右側(cè)接口為輸出端,右側(cè)最上方返回的是一個(gè)狀態(tài)標(biāo)志,它表示函數(shù)操作的結(jié)果。要想使用CAN卡必須先打開(kāi)設(shè)備驅(qū)動(dòng),初始化設(shè)備后才能進(jìn)行其他操作。
設(shè)計(jì)代碼前,首先必須根據(jù)課題要求,進(jìn)行需求分析。LabView由于采用的是G語(yǔ)言,根據(jù)經(jīng)驗(yàn),所有的數(shù)據(jù)處理應(yīng)該圍繞用戶(hù)需求來(lái)進(jìn)行。而用戶(hù)需求最直觀的表現(xiàn)在用戶(hù)界面[6~8]。根據(jù)課題要求,本次設(shè)計(jì)主要以獲取CAN總線數(shù)據(jù)為主。第一個(gè)用戶(hù)界面CAN助手界面如圖3所示,該界面主要設(shè)計(jì)為CAN參數(shù)的設(shè)置、CAN卡配置與操作、數(shù)據(jù)發(fā)送等功能。第二個(gè)用戶(hù)界面波形數(shù)據(jù)顯示界面如圖4所示,提供了數(shù)據(jù)顯示、曲線(可見(jiàn)性、顏色、校式等)設(shè)置、清除圖像操作、數(shù)據(jù)保存、歷史數(shù)據(jù)打開(kāi)等功能。第三個(gè)用戶(hù)界面儀表界面如圖5所示,提供傳統(tǒng)儀表界面,與車(chē)輛儀表類(lèi)似的顯示內(nèi)容。第四個(gè)用戶(hù)界面錯(cuò)誤與系統(tǒng)狀態(tài)顯示界面如圖6所示,提供原始的英文錯(cuò)誤和狀態(tài)顯示,這些提示和狀態(tài)信息對(duì)于后期車(chē)輛診斷有很大幫助,有必要進(jìn)行解析和顯示。
圖3 CAN助手界面
圖4 數(shù)據(jù)波形界面
圖5 儀表顯示界面
根據(jù)課題要求分析,該軟件主要以數(shù)據(jù)采集為主,所以數(shù)據(jù)必須完整且具有一定的實(shí)時(shí)性,對(duì)用戶(hù)操作響應(yīng)必須及時(shí)。為了滿(mǎn)足要求,在整體結(jié)構(gòu)上采取并行循環(huán)的生產(chǎn)者與消費(fèi)者循環(huán)[9~11];其中生產(chǎn)者有兩個(gè),第一個(gè)生產(chǎn)者(CAN數(shù)據(jù)的接收)獨(dú)占一個(gè)循環(huán),保證數(shù)據(jù)盡可能實(shí)時(shí)接收;第二個(gè)則是為響應(yīng)前面板操作動(dòng)作的狀態(tài)生產(chǎn)者。由于數(shù)據(jù)顯示為波形和在助手模式下表格顯示對(duì)數(shù)據(jù)處理較慢。所以,設(shè)計(jì)了兩個(gè)時(shí)間占用接近的消費(fèi)者循環(huán)。其中,一個(gè)消費(fèi)者循環(huán)處理助手模式下表格顯示數(shù)據(jù)以及部分CAN操作產(chǎn)生的動(dòng)作響應(yīng);另外一個(gè)消費(fèi)者循環(huán)主要處理耗時(shí)的數(shù)據(jù)保存和波形顯示處理。各循環(huán)關(guān)系如圖6所示。
圖6 立體框架設(shè)計(jì)圖
2.3.1 波形圖數(shù)據(jù)顯示方案
根據(jù)課題要求,本次數(shù)據(jù)顯示數(shù)據(jù)量可以達(dá)到60條曲線,且實(shí)時(shí)顯示;根據(jù)波形圖表和波形圖區(qū)別,必須選用波形圖;波形圖由于沒(méi)有數(shù)據(jù)緩沖區(qū),要顯示數(shù)據(jù)必須自建一個(gè)FIFO的數(shù)據(jù)緩沖區(qū);最簡(jiǎn)單的辦法是利用二維數(shù)組配合刪除數(shù)組元素來(lái)構(gòu)建這個(gè)緩沖區(qū)。最后輸出這個(gè)數(shù)組即可,F(xiàn)IFO緩沖區(qū)如圖7所示。
圖7 FIFO緩沖區(qū)
2.3.2 數(shù)據(jù)解析方案
數(shù)據(jù)的解析是比較關(guān)鍵的一個(gè)部分,數(shù)據(jù)解析要求不能重復(fù)解析,數(shù)據(jù)在正確的情況下保證完整。由于汽車(chē)的儀表數(shù)據(jù)流公用一個(gè)數(shù)據(jù)幀地址,沒(méi)有可靠的幀標(biāo)識(shí),所以只能根據(jù)幀頭信息來(lái)確定每組數(shù)據(jù)的開(kāi)始,也相當(dāng)于組同步信號(hào)。每組數(shù)據(jù)從幀頭開(kāi)始累加幀數(shù),根據(jù)幀數(shù)和字節(jié)順序確定數(shù)據(jù)位置和數(shù)據(jù)類(lèi)型,然后對(duì)數(shù)據(jù)復(fù)原。
除幀頭包含的兩個(gè)數(shù)據(jù)外,其他數(shù)據(jù)的計(jì)算公式為:
其中:
Dk為第k個(gè)需解析的數(shù)據(jù);
Zij為第i幀的第j字節(jié)。
數(shù)據(jù)提取解析步驟和解析代碼分別如圖8、圖9所示。
圖8 數(shù)據(jù)提取解析流程圖
圖9 數(shù)據(jù)解析代碼
2.3.3 文件保存方案
文件的保存基本要求是數(shù)據(jù)的完整性,只有數(shù)據(jù)完整,才能保證數(shù)據(jù)在下次打開(kāi)時(shí)不出現(xiàn)失真;數(shù)據(jù)保存必須盡可能快,數(shù)據(jù)的保存不能對(duì)數(shù)據(jù)的傳輸、解析、顯示造成用戶(hù)可感知的影響;另外,由于汽車(chē)的CAN速率為1Mbps,每秒鐘發(fā)送50組數(shù)據(jù),每組數(shù)據(jù)22幀,每幀8字節(jié)。折算平均速率為8.8kb/s,由于數(shù)據(jù)量不是太大,故可以邊接收邊保存;但是考慮到數(shù)據(jù)保存耗費(fèi)的時(shí)間較長(zhǎng),不能按幀保存。所以,考慮每接收完一組正確的數(shù)據(jù)后保存一次。根據(jù)LabView對(duì)數(shù)據(jù)保存的速度來(lái)看,保存為二進(jìn)制文件是最快的。為盡量保證程序的流暢性,選擇保存為二進(jìn)制文件。如圖10所示為數(shù)據(jù)保存代碼。
圖10 數(shù)據(jù)保存代碼
2.3.4 錯(cuò)誤與狀態(tài)信息解析
提取狀態(tài)信息和錯(cuò)誤信息可將兩個(gè)組分開(kāi)提取,由于LabView可以自己并行處理數(shù)據(jù),分開(kāi)提取可以節(jié)約2/3的時(shí)間。所以在程序設(shè)計(jì)時(shí)將兩者分開(kāi)處理。
錯(cuò)誤與狀態(tài)信息數(shù)據(jù)與其他參數(shù)數(shù)據(jù)不同,參數(shù)數(shù)據(jù)是連續(xù)不可突變且僅代表唯一含義的參量。而狀態(tài)和錯(cuò)誤信息的數(shù)據(jù)是分立的數(shù)據(jù),不同的值包含了一種或多種狀態(tài)或錯(cuò)誤。根據(jù)通信協(xié)議中可知:狀態(tài)錯(cuò)誤數(shù)據(jù)的每一位(化為二進(jìn)制)代表了一個(gè)錯(cuò)誤狀態(tài)的有無(wú),當(dāng)某位為1說(shuō)明對(duì)應(yīng)的錯(cuò)誤或狀態(tài)存在,為0則不存在。
由于狀態(tài)錯(cuò)誤信息數(shù)據(jù)的這種特性,所以需要檢查數(shù)據(jù)的每一位是否為1。然后查表得對(duì)應(yīng)位進(jìn)行文字的提取。檢查數(shù)據(jù)位可以使用循環(huán)移位法,但LabView中不支持取數(shù)據(jù)特定位的操作。為實(shí)現(xiàn)取位,設(shè)計(jì)了除2取余法判斷最低位是否為1,商作為下一次取位的被除數(shù)。進(jìn)行7個(gè)循環(huán)即可取出每一位的值(雖然是雙字?jǐn)?shù)據(jù),但僅用了低字節(jié)最大255)。最后將信息輸出。
信息表和程序代碼如圖11所示。
圖11 狀態(tài)信息表及錯(cuò)誤處理代碼
軟件在初步調(diào)試完成之后需進(jìn)行穩(wěn)定性和可靠性驗(yàn)證。穩(wěn)定性驗(yàn)證需要大量時(shí)間滿(mǎn)載運(yùn)行,以檢驗(yàn)是否能長(zhǎng)時(shí)間正常工作,采用模擬實(shí)驗(yàn)檢驗(yàn)??煽啃詸z驗(yàn)需要驗(yàn)證數(shù)據(jù)的準(zhǔn)確性,需要與儀表進(jìn)行對(duì)比,采用現(xiàn)場(chǎng)試驗(yàn)。
為了提高試驗(yàn)效率,方便離車(chē)調(diào)試,減少實(shí)車(chē)調(diào)試次數(shù)。編寫(xiě)代碼寫(xiě)入STM32開(kāi)發(fā)板內(nèi),實(shí)現(xiàn)下位機(jī)部分模擬試驗(yàn)汽車(chē)CAN通訊向USBCAN發(fā)送有規(guī)律的數(shù)據(jù),進(jìn)行穩(wěn)定性耐久測(cè)試。其硬件連接示意圖如圖12所示。
圖12 模擬試驗(yàn)的硬件連接示意圖
圖13 模擬測(cè)試結(jié)果
進(jìn)行了約30分鐘的模擬測(cè)試后,大約采集了15MB的數(shù)據(jù),密集的波形圖在局部放大后數(shù)據(jù)依然完整。測(cè)試結(jié)果如圖13所示。由模擬測(cè)試結(jié)果可知,數(shù)據(jù)完整,波形圖流暢(正弦曲線,主要檢驗(yàn)完整性,如果數(shù)據(jù)有丟幀波形會(huì)有畸變),滿(mǎn)載荷運(yùn)行測(cè)試符合基本要求。
確認(rèn)程序在模擬試驗(yàn)時(shí)依然可以較為流暢的運(yùn)行后,再進(jìn)行現(xiàn)場(chǎng)數(shù)據(jù)采集試驗(yàn),并與實(shí)車(chē)儀表對(duì)比,以驗(yàn)證程序的可靠性和準(zhǔn)確性。按照硬件連接規(guī)范連接好實(shí)物后開(kāi)始采集數(shù)據(jù)。觀察儀表盤(pán)上發(fā)動(dòng)機(jī)轉(zhuǎn)速,記錄怠速工況下的轉(zhuǎn)速在1600r/min附近,其波動(dòng)范圍約200~350,另外還對(duì)比了進(jìn)氣溫度、節(jié)氣門(mén)開(kāi)度和進(jìn)氣歧管壓力等這類(lèi)變化較慢的參數(shù)?,F(xiàn)場(chǎng)試驗(yàn)連接及觀察軟件現(xiàn)場(chǎng)測(cè)試結(jié)果如圖14所示。從現(xiàn)場(chǎng)測(cè)試圖可以看出,轉(zhuǎn)速在1600r/min附近,波動(dòng)范圍在200~350與儀表觀測(cè)結(jié)果吻合。節(jié)氣門(mén)開(kāi)度保持穩(wěn)定的怠速開(kāi)度(約12%),進(jìn)氣溫度約23℃,進(jìn)氣歧管壓力約90kPa小于大氣壓力(正常)。根據(jù)以上內(nèi)容的對(duì)比,可以判定數(shù)據(jù)是準(zhǔn)確的。
圖14 現(xiàn)場(chǎng)試驗(yàn)連接及現(xiàn)場(chǎng)測(cè)試結(jié)果
1)利用CAN接口卡,完成了CAN總線網(wǎng)絡(luò)的連接和汽車(chē)運(yùn)行數(shù)據(jù)狀態(tài)的實(shí)時(shí)讀取。
2)完成了LabView軟件對(duì)CAN總線通訊和數(shù)據(jù)采集系統(tǒng)的開(kāi)發(fā),實(shí)現(xiàn)實(shí)時(shí)提取并解析車(chē)輛電控系統(tǒng)的狀態(tài)信息和故障信息。
3)實(shí)現(xiàn)了汽車(chē)狀態(tài)信息的提取、報(bào)警和存儲(chǔ),完成車(chē)輛運(yùn)行狀態(tài)的實(shí)時(shí)監(jiān)控功能。
4)經(jīng)驗(yàn)證系統(tǒng)穩(wěn)定可靠、操作簡(jiǎn)單、界面直觀,具有一定的應(yīng)用價(jià)值。