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