李繼武, 王付凱, 郭玉靜
(南京城市職業(yè)學(xué)院, 智能工程學(xué)院, 江蘇, 南京 211200)
新能源汽車組合開關(guān)使用CAN總線命令控制汽車的前大燈、前后霧燈、轉(zhuǎn)向信號燈和雨刮開關(guān)等設(shè)備。一旦組合開關(guān)、燈光或雨刮出現(xiàn)故障,對其進(jìn)行故障診斷分析時要經(jīng)常使用汽車主機(jī)廠生產(chǎn)的專用診斷儀進(jìn)行設(shè)備動作測試。但是這種專用的汽車故障診斷儀比較昂貴,許多職業(yè)院校新能源汽車專業(yè)缺乏這種專用設(shè)備,影響了許多新能源汽車故障診斷分析教學(xué)工作[1-2]。
本文基于國內(nèi)某款純電動汽車設(shè)計了一款軟件,利用CAN總線接口卡經(jīng)網(wǎng)關(guān)控制器接入CAN總線舒適網(wǎng)。通過發(fā)送CAN總線命令實現(xiàn)了燈光和雨刮等設(shè)備的動作測試功能,操作簡單,使用方便,可部分替代汽車專用故障診斷儀完成相應(yīng)設(shè)備的動作測試工作。
實驗用車的組合開關(guān)有左右之分,左組合開關(guān)控制燈光設(shè)備,右組合開關(guān)控制雨刮洗滌設(shè)備。查詢實驗用車組合開關(guān)電路圖可知,組合開關(guān)控制器的1號引腳(CAN-H信號)、2號引腳(CAN-L信號)分別同網(wǎng)關(guān)控制器G19的7、8兩個引腳相連,組合開關(guān)CAN總線命令由G19-7和G19-8兩個引腳發(fā)送至網(wǎng)關(guān)控制器,因此本實驗確定從網(wǎng)關(guān)控制器G19-7和G19-8兩個引腳收發(fā)CAN信號。
新能源汽車的燈光和雨刮通過網(wǎng)關(guān)控制器接入車載CAN網(wǎng)絡(luò),組合開關(guān)通過網(wǎng)關(guān)控制器來控制燈光和雨刮設(shè)備。本實驗設(shè)計思路是:筆記本電腦通過WiFi與CAN-WiFi轉(zhuǎn)換器相連,而CAN-WiFi轉(zhuǎn)換器同網(wǎng)關(guān)控制器相連,這樣筆記本電腦發(fā)送的CAN控制命令,經(jīng)過CAN-WiFi轉(zhuǎn)換器和網(wǎng)關(guān)控制器,就可以控制燈光和雨刮完成動作測試。實驗硬件網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 實驗硬件網(wǎng)絡(luò)結(jié)構(gòu)
實驗用車為2019年生產(chǎn)的某型純電動汽車一輛,車況良好,燈光和雨刮等備測設(shè)備功能正常;筆記本電腦配置:CPU為酷睿i5-7200U,8 GB內(nèi)存,256 GB固態(tài)硬盤,支持無線網(wǎng)卡,操作系統(tǒng)為Windows 10;CAN-WiFi轉(zhuǎn)換器為某公司生產(chǎn)的GCAN-211型工業(yè)級CAN-WiFi轉(zhuǎn)換器,它集成了2路CAN接口、1路以太網(wǎng)接口和1路WiFi接口,數(shù)據(jù)接收速率為8 000幀/秒,可以方便實現(xiàn)車載CAN總線網(wǎng)絡(luò)和WiFi網(wǎng)絡(luò)的互聯(lián)互通。
組合開關(guān)動作測試系統(tǒng)包含2個模塊:燈光控制模塊和雨刮控制模塊,每個控制模塊又包含若干個功能[3],如圖2所示。
(a) 燈光控制模塊組成
燈光控制模塊中,“自動”功能表示根據(jù)光照強度傳感器所感受到的光照強度情況而自動點亮或熄滅;“位置燈”功能表示點亮前位置燈、后位置燈、后牌照燈及室內(nèi)小燈;“近光燈”功能表示開啟近光燈;“遠(yuǎn)光燈”功能表示開啟遠(yuǎn)光燈;“左轉(zhuǎn)向燈”功能表示開啟左轉(zhuǎn)向燈,儀表左轉(zhuǎn)向指示燈同時開始閃爍;“右轉(zhuǎn)向燈”功能表示開啟右轉(zhuǎn)向燈,儀表右轉(zhuǎn)向指示燈同時開始閃爍;“后霧燈”功能表示開啟后霧燈。雨刮控制模塊中,“點刮模式”功能需要持續(xù)上抬控制桿保持刮水動作,松開即停止;“間歇模式”功能表示雨刮間歇刮水,通過時間調(diào)節(jié)旋鈕可控制間歇時間為1 s、3 s、5 s和7 s;“低速模式”功能表示雨刮低速連續(xù)刮水;“高速模式”功能表示雨刮高速連續(xù)刮水;“洗滌器”功能表示洗滌器噴水,同時雨刮開始工作。
整個軟件架構(gòu)包含2個模塊:燈光控制模塊和雨刮控制模塊。燈光控制模塊主要包含兩個功能:一是實時顯示當(dāng)前燈光亮滅狀態(tài),其設(shè)計流程如圖3(a)所示;二是控制各燈光亮滅動作,其設(shè)計流程如圖3(b)所示。雨刮控制模塊主要控制雨刮和洗滌器動作,其設(shè)計流程同圖3(b)相同,不贅述。
(a) 實時顯示燈光狀態(tài)流程
3.1.1 配置CAN-WiFi轉(zhuǎn)換器參數(shù)
CAN-WiFi轉(zhuǎn)換器在使用前需要進(jìn)行參數(shù)配置。
(1) 準(zhǔn)備工作
首先,下載CANet-Wifi-Config軟件;其次,因為轉(zhuǎn)換器在出廠時IP地址已固定設(shè)置為192.168.1.10,所以需要修改主機(jī)IP地址以確保和轉(zhuǎn)換器IP地址處于同一網(wǎng)段;最后,準(zhǔn)備一根約1米長的RJ45接口的網(wǎng)線,將CAN-WiFi轉(zhuǎn)換器和主機(jī)連接起來。
(2) 配置CAN參數(shù)
CAN-WiFi轉(zhuǎn)換器接收車載CAN網(wǎng)絡(luò)總線通信波特率設(shè)置為125 kbps,以TCPServer模式工作,TCP端口設(shè)置為4001,其他CAN總線參數(shù)保持出廠設(shè)置不變。
(3) 配置WiFi參數(shù)
CAN-WiFi轉(zhuǎn)換器設(shè)置為AP工作模式,即無線路由器模式,為其他終端提供熱點連接服務(wù),其IP地址設(shè)置為“192.168.1.11”,子網(wǎng)掩碼設(shè)置為“255.255.255.0”,連接密碼設(shè)置為“12345678”,端口號設(shè)置為“4001”,其他參數(shù)保持出廠設(shè)置不變。
3.1.2 啟動CAN-WiFi轉(zhuǎn)換器熱點
CAN-WiFi轉(zhuǎn)換器參數(shù)配置結(jié)束后,啟動CAN-WiFi熱點步驟如下。
(1) 啟動實驗車輛,進(jìn)入OK狀態(tài),為CAN-WiFi轉(zhuǎn)換器提供12 V直流電源,將轉(zhuǎn)換器的CANH和CANL 兩個端子分別接入網(wǎng)關(guān)控制器的7、8號引腳。
(2) 單擊Windows任務(wù)欄右側(cè)系統(tǒng)托盤區(qū)的“網(wǎng)絡(luò)連接情況”圖標(biāo),打開WLAN窗口,在備選的WiFi熱點列表中,將出現(xiàn)名字為“CAN-WiFi”的熱點連接,單擊該連接,填入正確密碼后即可連接到該 WiFi 熱點。
連接CAN-WiFi轉(zhuǎn)換器熱點,首先創(chuàng)建一個TcpClient對象,然后調(diào)用該對象的Connect方法即可[4-5]。核心代碼是:
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(ip, port);
如果不出現(xiàn)異常,TcpClient對象可用于后續(xù)的CAN-WiFi熱點網(wǎng)絡(luò)通信。
從CAN-WiFi熱點讀取數(shù)據(jù),需要用到網(wǎng)絡(luò)數(shù)據(jù)流NetworkStream對象,它可以從TcpClient對象獲得[6],核心代碼是:
NetworkStream networkStream = tcpClient.GetStream();
通過NetworkStream對象異步無阻塞讀取網(wǎng)絡(luò)流數(shù)據(jù),需要使用一對方法BeginRead和EndRead。其中,BeginRead方法用于發(fā)起網(wǎng)絡(luò)流數(shù)據(jù)讀取任務(wù),EndRead方法用于結(jié)束數(shù)據(jù)讀取任務(wù)。調(diào)用BeginRead方法時,需要指明數(shù)據(jù)的存儲位置和處理方法。核心代碼是:
networkStream.BeginRead(mBuffer, 0, READ_BUFFER_SIZE, DoRead, null);
上述代碼中,mBuffer是一個字節(jié)數(shù)組,用于存儲讀取的數(shù)據(jù);0表示mBuffer存儲數(shù)據(jù)的起始位置; READ_BUFFER_SIZE是自定義的一個常量,本實驗為1000,表示要從CAN網(wǎng)絡(luò)讀取的字節(jié)數(shù);DoRead是一個AsyncCallback委托方法,CAN網(wǎng)絡(luò)數(shù)據(jù)讀取結(jié)束后由該方法進(jìn)行數(shù)據(jù)處理;null表示該參數(shù)為空。
DoRead方法是一個重要的自定義方法,讀取的數(shù)據(jù)在該方法中得到處理。具體來說,要做三件事。
(1) 結(jié)束網(wǎng)絡(luò)流數(shù)據(jù)讀取任務(wù)
結(jié)束網(wǎng)絡(luò)流數(shù)據(jù)讀取任務(wù),需要調(diào)用EndRead方法,核心代碼是:
lock (tcpClient.GetStream()){
bytesRead = tcpClient.GetStream().EndRead(ar);
}
上述代碼中,lock關(guān)鍵字可以確保代碼塊運行時不會被其他線程中斷;bytesRead是一個int變量,表示從網(wǎng)絡(luò)流實際讀取的字節(jié)數(shù);ar表示一個異步調(diào)用的IAsyncResult對象,本實驗未使用。
(2) 從讀取的網(wǎng)絡(luò)數(shù)據(jù)中提取CAN總線燈光控制數(shù)據(jù)
對于CAN-WiFi轉(zhuǎn)換器來說,每一個以太網(wǎng)數(shù)據(jù)幀由13個字節(jié)組成,其中第1個字節(jié)值固定為0x08,表示以太網(wǎng)幀中封裝了8個字節(jié)的CAN數(shù)據(jù)幀;第2~5個字節(jié)存儲CAN數(shù)據(jù)幀ID,這個ID表明了這個數(shù)據(jù)幀的優(yōu)先級[7-10];第6~13個字節(jié)存儲CAN數(shù)據(jù)幀內(nèi)容。以本實驗燈光控制為例,因為組合開關(guān)CAN總線控制ID為0x133,所以每一個以太網(wǎng)幀的前5個字節(jié)應(yīng)為08 00 00 01 33,以這5個字節(jié)為開頭標(biāo)志,在mBuffer中尋找其后續(xù)的8個字節(jié),這8個字節(jié)就是組合開關(guān)控制字節(jié),其中頭一個字節(jié)就是燈光控制字節(jié)。核心代碼如下:
for (inti= 0;i< bytesRead;i++){
if (mBuffer[i] == 0x08 && mBuffer[i+ 1] == 0x00 && mBuffer[i+ 2] == 0x00 &&
mBuffer[i+ 3] == 0x01 && mBuffer[i+ 4] == 0x33){
lightByte = mBuffer[i+ 5];
break;
}
}
上述代碼中,lightByte就是要提取的燈光控制字節(jié)數(shù)據(jù)。
(3) 從燈光控制字節(jié)提取各種燈光狀態(tài)
獲得燈光控制字節(jié)后,提取每一位的狀態(tài)(1或0),可指導(dǎo)不同燈的狀態(tài)(亮或滅),核心代碼如下:
lightByte_7 = (byte)(lightByte & 0x80); //后霧燈
lightByte_6 = (byte)(lightByte & 0x80); //前霧燈
lightByte_5 = (byte)(lightByte & 0x20); //右轉(zhuǎn)向燈
lightByte_4 = (byte)(lightByte & 0x10); //左轉(zhuǎn)向燈
lightByte_3 = (byte)(lightByte & 0x08); //遠(yuǎn)光燈
lightByte_2 = (byte)(lightByte & 0x04); //近光燈
lightByte_1 = (byte)(lightByte & 0x02); //小燈
從CAN-WiFi轉(zhuǎn)換器接收的以太網(wǎng)數(shù)據(jù)幀ethernetFrame字節(jié)數(shù)組中,第6個字節(jié)是燈光控制字節(jié),控制協(xié)議如表1所示。
表1 左組合開關(guān)(燈光)控制協(xié)議
要點亮某個燈,只需要將ethernetFrame字節(jié)數(shù)組中第6個字節(jié)的對應(yīng)位設(shè)置為1,然后將ethernetFrame字節(jié)數(shù)組寫入網(wǎng)絡(luò)數(shù)據(jù)流,即可通過CAN-WiFi轉(zhuǎn)換器傳入汽車CAN網(wǎng)絡(luò),點亮某燈光。以點亮近光燈為例,核心代碼如下:
ethernetFrame[5]=ethernetFrame[5] | 0x04; //近光燈位置1
tcpClient.GetStream().Write(ethernetFrame, 0, 13);
上述Write方法參數(shù)中,0表示從ethernetFrame數(shù)組第0位開始寫入,13表示要寫入的字節(jié)數(shù)。如果要熄滅近光燈,將0x04調(diào)整為0x00即可。
從CAN-WiFi轉(zhuǎn)換器接收的以太網(wǎng)數(shù)據(jù)幀ethernetFrame字節(jié)數(shù)組中,第7個字節(jié)是雨刮/洗滌器控制字節(jié),控制協(xié)議如表2所示[11]。
表2 右組合開關(guān)(雨刮/洗滌器)控制協(xié)議
要控制雨刮/洗滌器完成某個動作,只需要將ethernetFrame字節(jié)數(shù)組中第7個字節(jié)設(shè)置為對應(yīng)十六進(jìn)制數(shù),然后將該ethernetFrame字節(jié)數(shù)組寫入網(wǎng)絡(luò)數(shù)據(jù)流,即可通過CAN-WiFi轉(zhuǎn)換器傳入汽車CAN網(wǎng)絡(luò),雨刮/洗滌器將開始執(zhí)行相應(yīng)動作。以洗滌器噴水為例,核心代碼如下:
ethernetFrame[7]=0x21;
tcpClient.GetStream().Write(ethernetFrame, 0, 13);
上述代碼運行后,洗滌器將執(zhí)行噴水動作。
將CAN-WiFi轉(zhuǎn)換器1通道CANH和CANL引腳與車輛網(wǎng)關(guān)控制器(G19)7、8引腳連接,將CAN-WiFi轉(zhuǎn)換器電源和地線引腳與車輛網(wǎng)關(guān)控制器(G19)16、11引腳連接。啟動實驗車輛,上OK電。
啟動組合開關(guān)實驗程序,單擊“文件->連接CAN-WiFi”菜單項,連接至CAN-WiFi熱點。通過單擊“自動”“位置燈”“近光燈”“遠(yuǎn)光燈”“左轉(zhuǎn)向燈”“右轉(zhuǎn)向燈”和“后霧燈”等按鈕,可以點亮相應(yīng)燈光,短暫保持后自動熄滅。以單擊“遠(yuǎn)光燈”按鈕為例,程序運行界面如圖4所示。
圖4 燈光實驗程序運行界面
啟動組合開關(guān)實驗程序,單擊“文件->連接CAN-WiFi”菜單項,連接至CAN-WiFi熱點。切換至“雨刮”選項卡,單擊“點刮模式”“間歇7 s”“間歇5 s”“間歇3 s”“間歇1 s”“低速模式”和“高速模式”按鈕,雨刮將按指定模式工作;單擊“洗滌器”按鈕,洗滌器將噴水。程序運行界面如圖5所示。
圖5 雨刮/洗滌器程序運行界面
(1) 本系統(tǒng)硬件網(wǎng)絡(luò)搭建方便,設(shè)備成本低廉,網(wǎng)絡(luò)信號傳輸速度快;由于CAN網(wǎng)絡(luò)接口卡集成了電氣隔離模塊,隔離模塊絕緣電壓為直流1 500 V,增強了系統(tǒng)在惡劣環(huán)境中的安全可靠性,即使出現(xiàn)瞬間過流或過壓也不會造成設(shè)備損壞;軟件架構(gòu)設(shè)計合理,關(guān)鍵技術(shù)先進(jìn),功能完善實用。
(2) 系統(tǒng)實測表明,燈光、雨刮/洗滌器設(shè)備動作測試靈敏可靠,響應(yīng)及時,軟件界面簡潔實用,操作簡單方便,故障診斷分析時用于動作測試可以取得良好效果。
(3) 系統(tǒng)的硬件/軟件設(shè)計思路完全可以用于拓展開發(fā)新能源汽車其他設(shè)備動作測試功能或故障診斷分析功能,另外通過將CAN信號轉(zhuǎn)換成4G(或5G)信號,也可以將設(shè)備動作測試軟件從PC端遷移到手機(jī)端,具體思路是:首先,通過CAN-4G(或CAN-5G)轉(zhuǎn)換器將CAN網(wǎng)絡(luò)信號轉(zhuǎn)換成4G(或5G)信號,然后發(fā)送給一臺遠(yuǎn)程云服務(wù)器;其次,遠(yuǎn)程云服務(wù)器將接收到的4G(或5G)信號以Web服務(wù)形式向外界提供CAN網(wǎng)絡(luò)訪問接口;最后開發(fā)一款手機(jī)程序訪問Web服務(wù)即可實現(xiàn)汽車有關(guān)設(shè)備動作測試功能,這也是本文的后續(xù)研究方向。