李繼武, 王付凱, 郭玉靜
(南京城市職業學院, 智能工程學院, 江蘇, 南京 211200)
新能源汽車組合開關使用CAN總線命令控制汽車的前大燈、前后霧燈、轉向信號燈和雨刮開關等設備。一旦組合開關、燈光或雨刮出現故障,對其進行故障診斷分析時要經常使用汽車主機廠生產的專用診斷儀進行設備動作測試。但是這種專用的汽車故障診斷儀比較昂貴,許多職業院校新能源汽車專業缺乏這種專用設備,影響了許多新能源汽車故障診斷分析教學工作[1-2]。
本文基于國內某款純電動汽車設計了一款軟件,利用CAN總線接口卡經網關控制器接入CAN總線舒適網。通過發送CAN總線命令實現了燈光和雨刮等設備的動作測試功能,操作簡單,使用方便,可部分替代汽車專用故障診斷儀完成相應設備的動作測試工作。
實驗用車的組合開關有左右之分,左組合開關控制燈光設備,右組合開關控制雨刮洗滌設備。查詢實驗用車組合開關電路圖可知,組合開關控制器的1號引腳(CAN-H信號)、2號引腳(CAN-L信號)分別同網關控制器G19的7、8兩個引腳相連,組合開關CAN總線命令由G19-7和G19-8兩個引腳發送至網關控制器,因此本實驗確定從網關控制器G19-7和G19-8兩個引腳收發CAN信號。
新能源汽車的燈光和雨刮通過網關控制器接入車載CAN網絡,組合開關通過網關控制器來控制燈光和雨刮設備。本實驗設計思路是:筆記本電腦通過WiFi與CAN-WiFi轉換器相連,而CAN-WiFi轉換器同網關控制器相連,這樣筆記本電腦發送的CAN控制命令,經過CAN-WiFi轉換器和網關控制器,就可以控制燈光和雨刮完成動作測試。實驗硬件網絡結構如圖1所示。

圖1 實驗硬件網絡結構
實驗用車為2019年生產的某型純電動汽車一輛,車況良好,燈光和雨刮等備測設備功能正常;筆記本電腦配置:CPU為酷睿i5-7200U,8 GB內存,256 GB固態硬盤,支持無線網卡,操作系統為Windows 10;CAN-WiFi轉換器為某公司生產的GCAN-211型工業級CAN-WiFi轉換器,它集成了2路CAN接口、1路以太網接口和1路WiFi接口,數據接收速率為8 000幀/秒,可以方便實現車載CAN總線網絡和WiFi網絡的互聯互通。
組合開關動作測試系統包含2個模塊:燈光控制模塊和雨刮控制模塊,每個控制模塊又包含若干個功能[3],如圖2所示。

(a) 燈光控制模塊組成
燈光控制模塊中,“自動”功能表示根據光照強度傳感器所感受到的光照強度情況而自動點亮或熄滅;“位置燈”功能表示點亮前位置燈、后位置燈、后牌照燈及室內小燈;“近光燈”功能表示開啟近光燈;“遠光燈”功能表示開啟遠光燈;“左轉向燈”功能表示開啟左轉向燈,儀表左轉向指示燈同時開始閃爍;“右轉向燈”功能表示開啟右轉向燈,儀表右轉向指示燈同時開始閃爍;“后霧燈”功能表示開啟后霧燈。雨刮控制模塊中,“點刮模式”功能需要持續上抬控制桿保持刮水動作,松開即停止;“間歇模式”功能表示雨刮間歇刮水,通過時間調節旋鈕可控制間歇時間為1 s、3 s、5 s和7 s;“低速模式”功能表示雨刮低速連續刮水;“高速模式”功能表示雨刮高速連續刮水;“洗滌器”功能表示洗滌器噴水,同時雨刮開始工作。
整個軟件架構包含2個模塊:燈光控制模塊和雨刮控制模塊。燈光控制模塊主要包含兩個功能:一是實時顯示當前燈光亮滅狀態,其設計流程如圖3(a)所示;二是控制各燈光亮滅動作,其設計流程如圖3(b)所示。雨刮控制模塊主要控制雨刮和洗滌器動作,其設計流程同圖3(b)相同,不贅述。

(a) 實時顯示燈光狀態流程
3.1.1 配置CAN-WiFi轉換器參數
CAN-WiFi轉換器在使用前需要進行參數配置。
(1) 準備工作
首先,下載CANet-Wifi-Config軟件;其次,因為轉換器在出廠時IP地址已固定設置為192.168.1.10,所以需要修改主機IP地址以確保和轉換器IP地址處于同一網段;最后,準備一根約1米長的RJ45接口的網線,將CAN-WiFi轉換器和主機連接起來。
(2) 配置CAN參數
CAN-WiFi轉換器接收車載CAN網絡總線通信波特率設置為125 kbps,以TCPServer模式工作,TCP端口設置為4001,其他CAN總線參數保持出廠設置不變。
(3) 配置WiFi參數
CAN-WiFi轉換器設置為AP工作模式,即無線路由器模式,為其他終端提供熱點連接服務,其IP地址設置為“192.168.1.11”,子網掩碼設置為“255.255.255.0”,連接密碼設置為“12345678”,端口號設置為“4001”,其他參數保持出廠設置不變。
3.1.2 啟動CAN-WiFi轉換器熱點
CAN-WiFi轉換器參數配置結束后,啟動CAN-WiFi熱點步驟如下。
(1) 啟動實驗車輛,進入OK狀態,為CAN-WiFi轉換器提供12 V直流電源,將轉換器的CANH和CANL 兩個端子分別接入網關控制器的7、8號引腳。
(2) 單擊Windows任務欄右側系統托盤區的“網絡連接情況”圖標,打開WLAN窗口,在備選的WiFi熱點列表中,將出現名字為“CAN-WiFi”的熱點連接,單擊該連接,填入正確密碼后即可連接到該 WiFi 熱點。
連接CAN-WiFi轉換器熱點,首先創建一個TcpClient對象,然后調用該對象的Connect方法即可[4-5]。核心代碼是:
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(ip, port);
如果不出現異常,TcpClient對象可用于后續的CAN-WiFi熱點網絡通信。
從CAN-WiFi熱點讀取數據,需要用到網絡數據流NetworkStream對象,它可以從TcpClient對象獲得[6],核心代碼是:
NetworkStream networkStream = tcpClient.GetStream();
通過NetworkStream對象異步無阻塞讀取網絡流數據,需要使用一對方法BeginRead和EndRead。其中,BeginRead方法用于發起網絡流數據讀取任務,EndRead方法用于結束數據讀取任務。調用BeginRead方法時,需要指明數據的存儲位置和處理方法。核心代碼是:
networkStream.BeginRead(mBuffer, 0, READ_BUFFER_SIZE, DoRead, null);
上述代碼中,mBuffer是一個字節數組,用于存儲讀取的數據;0表示mBuffer存儲數據的起始位置; READ_BUFFER_SIZE是自定義的一個常量,本實驗為1000,表示要從CAN網絡讀取的字節數;DoRead是一個AsyncCallback委托方法,CAN網絡數據讀取結束后由該方法進行數據處理;null表示該參數為空。
DoRead方法是一個重要的自定義方法,讀取的數據在該方法中得到處理。具體來說,要做三件事。
(1) 結束網絡流數據讀取任務
結束網絡流數據讀取任務,需要調用EndRead方法,核心代碼是:
lock (tcpClient.GetStream()){
bytesRead = tcpClient.GetStream().EndRead(ar);
}
上述代碼中,lock關鍵字可以確保代碼塊運行時不會被其他線程中斷;bytesRead是一個int變量,表示從網絡流實際讀取的字節數;ar表示一個異步調用的IAsyncResult對象,本實驗未使用。
(2) 從讀取的網絡數據中提取CAN總線燈光控制數據
對于CAN-WiFi轉換器來說,每一個以太網數據幀由13個字節組成,其中第1個字節值固定為0x08,表示以太網幀中封裝了8個字節的CAN數據幀;第2~5個字節存儲CAN數據幀ID,這個ID表明了這個數據幀的優先級[7-10];第6~13個字節存儲CAN數據幀內容。以本實驗燈光控制為例,因為組合開關CAN總線控制ID為0x133,所以每一個以太網幀的前5個字節應為08 00 00 01 33,以這5個字節為開頭標志,在mBuffer中尋找其后續的8個字節,這8個字節就是組合開關控制字節,其中頭一個字節就是燈光控制字節。核心代碼如下:
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就是要提取的燈光控制字節數據。
(3) 從燈光控制字節提取各種燈光狀態
獲得燈光控制字節后,提取每一位的狀態(1或0),可指導不同燈的狀態(亮或滅),核心代碼如下:
lightByte_7 = (byte)(lightByte & 0x80); //后霧燈
lightByte_6 = (byte)(lightByte & 0x80); //前霧燈
lightByte_5 = (byte)(lightByte & 0x20); //右轉向燈
lightByte_4 = (byte)(lightByte & 0x10); //左轉向燈
lightByte_3 = (byte)(lightByte & 0x08); //遠光燈
lightByte_2 = (byte)(lightByte & 0x04); //近光燈
lightByte_1 = (byte)(lightByte & 0x02); //小燈
從CAN-WiFi轉換器接收的以太網數據幀ethernetFrame字節數組中,第6個字節是燈光控制字節,控制協議如表1所示。

表1 左組合開關(燈光)控制協議
要點亮某個燈,只需要將ethernetFrame字節數組中第6個字節的對應位設置為1,然后將ethernetFrame字節數組寫入網絡數據流,即可通過CAN-WiFi轉換器傳入汽車CAN網絡,點亮某燈光。以點亮近光燈為例,核心代碼如下:
ethernetFrame[5]=ethernetFrame[5] | 0x04; //近光燈位置1
tcpClient.GetStream().Write(ethernetFrame, 0, 13);
上述Write方法參數中,0表示從ethernetFrame數組第0位開始寫入,13表示要寫入的字節數。如果要熄滅近光燈,將0x04調整為0x00即可。
從CAN-WiFi轉換器接收的以太網數據幀ethernetFrame字節數組中,第7個字節是雨刮/洗滌器控制字節,控制協議如表2所示[11]。

表2 右組合開關(雨刮/洗滌器)控制協議
要控制雨刮/洗滌器完成某個動作,只需要將ethernetFrame字節數組中第7個字節設置為對應十六進制數,然后將該ethernetFrame字節數組寫入網絡數據流,即可通過CAN-WiFi轉換器傳入汽車CAN網絡,雨刮/洗滌器將開始執行相應動作。以洗滌器噴水為例,核心代碼如下:
ethernetFrame[7]=0x21;
tcpClient.GetStream().Write(ethernetFrame, 0, 13);
上述代碼運行后,洗滌器將執行噴水動作。
將CAN-WiFi轉換器1通道CANH和CANL引腳與車輛網關控制器(G19)7、8引腳連接,將CAN-WiFi轉換器電源和地線引腳與車輛網關控制器(G19)16、11引腳連接。啟動實驗車輛,上OK電。
啟動組合開關實驗程序,單擊“文件->連接CAN-WiFi”菜單項,連接至CAN-WiFi熱點。通過單擊“自動”“位置燈”“近光燈”“遠光燈”“左轉向燈”“右轉向燈”和“后霧燈”等按鈕,可以點亮相應燈光,短暫保持后自動熄滅。以單擊“遠光燈”按鈕為例,程序運行界面如圖4所示。

圖4 燈光實驗程序運行界面
啟動組合開關實驗程序,單擊“文件->連接CAN-WiFi”菜單項,連接至CAN-WiFi熱點。切換至“雨刮”選項卡,單擊“點刮模式”“間歇7 s”“間歇5 s”“間歇3 s”“間歇1 s”“低速模式”和“高速模式”按鈕,雨刮將按指定模式工作;單擊“洗滌器”按鈕,洗滌器將噴水。程序運行界面如圖5所示。

圖5 雨刮/洗滌器程序運行界面
(1) 本系統硬件網絡搭建方便,設備成本低廉,網絡信號傳輸速度快;由于CAN網絡接口卡集成了電氣隔離模塊,隔離模塊絕緣電壓為直流1 500 V,增強了系統在惡劣環境中的安全可靠性,即使出現瞬間過流或過壓也不會造成設備損壞;軟件架構設計合理,關鍵技術先進,功能完善實用。
(2) 系統實測表明,燈光、雨刮/洗滌器設備動作測試靈敏可靠,響應及時,軟件界面簡潔實用,操作簡單方便,故障診斷分析時用于動作測試可以取得良好效果。
(3) 系統的硬件/軟件設計思路完全可以用于拓展開發新能源汽車其他設備動作測試功能或故障診斷分析功能,另外通過將CAN信號轉換成4G(或5G)信號,也可以將設備動作測試軟件從PC端遷移到手機端,具體思路是:首先,通過CAN-4G(或CAN-5G)轉換器將CAN網絡信號轉換成4G(或5G)信號,然后發送給一臺遠程云服務器;其次,遠程云服務器將接收到的4G(或5G)信號以Web服務形式向外界提供CAN網絡訪問接口;最后開發一款手機程序訪問Web服務即可實現汽車有關設備動作測試功能,這也是本文的后續研究方向。