基于K線(xiàn)/CAN總線(xiàn)的KWP2000協(xié)議分析及其協(xié)議棧的開(kāi)

圖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é)議之上?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/CAN總線(xiàn)">CAN總線(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ā)、測試及仿真。
評論