基于K線(xiàn)/CAN總線(xiàn)的KWP2000協(xié)議分析及協(xié)議棧的開(kāi)發(fā)測試
K線(xiàn)網(wǎng)絡(luò )結構單一,網(wǎng)絡(luò )管理功能很弱;而利用CAN總線(xiàn)可構建復雜的網(wǎng)絡(luò )結構,可跨越網(wǎng)段進(jìn)行遠程診斷。
K線(xiàn)網(wǎng)絡(luò )采用破壞性的仲裁機制,當診斷設備采用功能尋址與多個(gè)ECU進(jìn)行通訊時(shí),為避免總線(xiàn)沖突,ECU開(kāi)發(fā)者必須采取措施保證多個(gè)ECU順序訪(fǎng)問(wèn)總線(xiàn);而CAN網(wǎng)絡(luò )采用非破壞性的仲裁機制,并且仲裁過(guò)程由數據鏈路層完成,當診斷設備采用功能尋址與多個(gè)ECU進(jìn)行通訊時(shí),ECU開(kāi)發(fā)者不必考慮總線(xiàn)訪(fǎng)問(wèn)沖突問(wèn)題。
K線(xiàn)服務(wù)報文最大字節長(cháng)度僅為255,無(wú)法滿(mǎn)足更長(cháng)報文的傳輸要求,并且在長(cháng)報文的傳輸過(guò)程中用戶(hù)必須自己采取措施進(jìn)行連接管理,可靠性和兼容性較差;而CAN總線(xiàn)診斷服務(wù)報文最大字節長(cháng)度可達4096(12位),對于長(cháng)報文的傳輸,網(wǎng)絡(luò )層協(xié)議還具備標準化和規范化的同步控制、順序控制、流控制和錯誤恢復等功能,具備很高的可靠性、兼容性。
5 KWP2000協(xié)議棧的開(kāi)發(fā)及測試
從前面的協(xié)議分析可以看出,無(wú)論是基于K線(xiàn)還是CAN總線(xiàn)的KWP2000協(xié)議,都是邏輯非常復雜的系統,并且具有嚴格的定時(shí)和錯誤處理規范。如果采用純手工的方式來(lái)進(jìn)行KWP2000協(xié)議棧的開(kāi)發(fā),不僅要耗費大量的時(shí)間和人力,其通用性、完備性、可靠性和可維護性都很難保證。而MATLAB/Simulink/StateFlow不僅具備方便快捷的上層實(shí)時(shí)仿真環(huán)境,還集成了高效的嵌入式代碼自動(dòng)生成工具,為協(xié)議棧的開(kāi)發(fā)和維護提供了強大的支持平臺。此外,由德國Vector公司的CANoe軟件和相關(guān)硬件板卡組成的應用開(kāi)發(fā)平臺,可用于汽車(chē)網(wǎng)絡(luò )(CAN,Lin等)的上層協(xié)議開(kāi)發(fā)和系統測試,該平臺同時(shí)支持基于K線(xiàn)和CAN總線(xiàn)的KWP2000診斷協(xié)議,可作為ECU和診斷設備的測試標準。
圖6是協(xié)議源碼開(kāi)發(fā)過(guò)程示意圖。首先在MATLAB/Simulink/StateFlow中遵照協(xié)議標準進(jìn)行KWP2000協(xié)議棧開(kāi)發(fā),在仿真調試環(huán)境下實(shí)現通訊邏輯、定時(shí)控制和錯誤處理,待系統完善后利用StateFlow嵌入式代碼生成工具自動(dòng)生成協(xié)議棧C代碼,并與目標系統的底層驅動(dòng)進(jìn)行集成,然后植入目標系統形成應用程序,最后再利用CANoe作為標準進(jìn)行系統集成測試。

圖6 KWP2000協(xié)議棧開(kāi)發(fā)及測試流程
在MATLAB/Simulink/StateFlow中進(jìn)行協(xié)議棧仿真開(kāi)發(fā)是協(xié)議棧開(kāi)發(fā)過(guò)程中的關(guān)鍵環(huán)節,在這一過(guò)程中必須嚴格遵照協(xié)議標準來(lái)實(shí)現通訊邏輯,往往需要經(jīng)過(guò)多次“設計-仿真-修改”循環(huán)才能使系統最終趨于完善。MATLAB的圖形界面提供了方便快捷的仿真輸入/輸出接口,可大幅度加快開(kāi)發(fā)進(jìn)度。
協(xié)議棧開(kāi)發(fā)完成后可利用CANoe作為標準進(jìn)行系統集成測試,CANoe的KWP2000協(xié)議測試環(huán)境如圖7所示。

圖7 CANoe的KWP2000測試環(huán)境示意圖
CANoe中的KWP2000實(shí)際指的是基于CAN總線(xiàn)的KWP2000,即15765協(xié)議。由于CANoe默認的硬件板卡是CAN卡,因此在建立仿真程序時(shí),只需將ECU的網(wǎng)絡(luò )模塊設置為kwp2000.dll即可進(jìn)行CAN總線(xiàn)的KWP2000服務(wù)測試。kwp2000.dll中包含15765應用層協(xié)議中規定的服務(wù)請求、服務(wù)指示、服務(wù)響應和服務(wù)確認接口函數,用戶(hù)調用這些函數即可完成Tester端和ECU端的KWP2000診斷服務(wù)。此外,該模塊中的功能函數還可對ECU的源地址、目標地址、尋址模式等參數進(jìn)行動(dòng)態(tài)設置。需要注意的是,kwp2000.dll目前只提供了部分KWP2000服務(wù)的接口函數,如果用戶(hù)需要進(jìn)行其它的KWP2000服務(wù)測試,必須根據KWP2000應用層協(xié)議構造服務(wù)報文數據,然后調用該模塊中的KWP_DataReq()和KWP_GetRxData()函數進(jìn)行報文的發(fā)送和接收。
進(jìn)行基于K線(xiàn)的KWP2000服務(wù)測試時(shí),需要將KLineCPL.dll模塊加入CANoe仿真環(huán)境,并使用一個(gè)代理節點(diǎn)來(lái)實(shí)現CAN網(wǎng)絡(luò )和K線(xiàn)之間的報文轉發(fā)。此時(shí)CANoe使用計算機的串口,并通過(guò)一個(gè)串口/K線(xiàn)轉換器與實(shí)際的ECU相連,如圖8所示。

圖8 CANoe中基于K線(xiàn)的KWP2000測試連接示意圖
6 結束語(yǔ)
KWP2000是一套非常完善的車(chē)載故障診斷協(xié)議標準,協(xié)議的分層結構使得KWP2000診斷服務(wù)并不依賴(lài)于某種特定的網(wǎng)絡(luò )介質(zhì),其應用層可以移植到任何一種物理層和數據鏈路層協(xié)議之上?;贑AN總線(xiàn)的KWP2000順應了目前車(chē)載網(wǎng)絡(luò )發(fā)展的大趨勢,將逐步取代K線(xiàn)診斷協(xié)議,成為下一代車(chē)載診斷協(xié)議的主流之一。
MATLAB/Simulink/Stateflow為協(xié)議棧開(kāi)發(fā)提供了方便直觀(guān)的圖形用戶(hù)接口和功能強大的仿真調試環(huán)境及代碼生成工具,為嵌入式開(kāi)發(fā)開(kāi)辟了一條高效快捷之路。Vector公司的CANoe和相關(guān)硬件板卡是一個(gè)功能強大的應用開(kāi)發(fā)平臺,可針對基于K線(xiàn)和CAN總線(xiàn)的KWP2000進(jìn)行ECU和診斷設備的上層協(xié)議開(kāi)發(fā)、測試及仿真。
評論