基于K線/CAN總線的KWP2000協(xié)議分析及協(xié)議棧的開發(fā)測(cè)試
K線網(wǎng)絡(luò)結(jié)構(gòu)單一,網(wǎng)絡(luò)管理功能很弱;而利用CAN總線可構(gòu)建復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),可跨越網(wǎng)段進(jìn)行遠(yuǎn)程診斷。
K線網(wǎng)絡(luò)采用破壞性的仲裁機(jī)制,當(dāng)診斷設(shè)備采用功能尋址與多個(gè)ECU進(jìn)行通訊時(shí),為避免總線沖突,ECU開發(fā)者必須采取措施保證多個(gè)ECU順序訪問總線;而CAN網(wǎng)絡(luò)采用非破壞性的仲裁機(jī)制,并且仲裁過程由數(shù)據(jù)鏈路層完成,當(dāng)診斷設(shè)備采用功能尋址與多個(gè)ECU進(jìn)行通訊時(shí),ECU開發(fā)者不必考慮總線訪問沖突問題。
K線服務(wù)報(bào)文最大字節(jié)長(zhǎng)度僅為255,無法滿足更長(zhǎng)報(bào)文的傳輸要求,并且在長(zhǎng)報(bào)文的傳輸過程中用戶必須自己采取措施進(jìn)行連接管理,可靠性和兼容性較差;而CAN總線診斷服務(wù)報(bào)文最大字節(jié)長(zhǎng)度可達(dá)4096(12位),對(duì)于長(zhǎng)報(bào)文的傳輸,網(wǎng)絡(luò)層協(xié)議還具備標(biāo)準(zhǔn)化和規(guī)范化的同步控制、順序控制、流控制和錯(cuò)誤恢復(fù)等功能,具備很高的可靠性、兼容性。
5 KWP2000協(xié)議棧的開發(fā)及測(cè)試
從前面的協(xié)議分析可以看出,無論是基于K線還是CAN總線的KWP2000協(xié)議,都是邏輯非常復(fù)雜的系統(tǒng),并且具有嚴(yán)格的定時(shí)和錯(cuò)誤處理規(guī)范。如果采用純手工的方式來進(jìn)行KWP2000協(xié)議棧的開發(fā),不僅要耗費(fèi)大量的時(shí)間和人力,其通用性、完備性、可靠性和可維護(hù)性都很難保證。而MATLAB/Simulink/StateFlow不僅具備方便快捷的上層實(shí)時(shí)仿真環(huán)境,還集成了高效的嵌入式代碼自動(dòng)生成工具,為協(xié)議棧的開發(fā)和維護(hù)提供了強(qiáng)大的支持平臺(tái)。此外,由德國(guó)Vector公司的CANoe軟件和相關(guān)硬件板卡組成的應(yīng)用開發(fā)平臺(tái),可用于汽車網(wǎng)絡(luò)(CAN,Lin等)的上層協(xié)議開發(fā)和系統(tǒng)測(cè)試,該平臺(tái)同時(shí)支持基于K線和CAN總線的KWP2000診斷協(xié)議,可作為ECU和診斷設(shè)備的測(cè)試標(biāo)準(zhǔn)。
圖6是協(xié)議源碼開發(fā)過程示意圖。首先在MATLAB/Simulink/StateFlow中遵照協(xié)議標(biāo)準(zhǔn)進(jìn)行KWP2000協(xié)議棧開發(fā),在仿真調(diào)試環(huán)境下實(shí)現(xiàn)通訊邏輯、定時(shí)控制和錯(cuò)誤處理,待系統(tǒng)完善后利用StateFlow嵌入式代碼生成工具自動(dòng)生成協(xié)議棧C代碼,并與目標(biāo)系統(tǒng)的底層驅(qū)動(dòng)進(jìn)行集成,然后植入目標(biāo)系統(tǒng)形成應(yīng)用程序,最后再利用CANoe作為標(biāo)準(zhǔn)進(jìn)行系統(tǒng)集成測(cè)試。
圖6 KWP2000協(xié)議棧開發(fā)及測(cè)試流程
在MATLAB/Simulink/StateFlow中進(jìn)行協(xié)議棧仿真開發(fā)是協(xié)議棧開發(fā)過程中的關(guān)鍵環(huán)節(jié),在這一過程中必須嚴(yán)格遵照協(xié)議標(biāo)準(zhǔn)來實(shí)現(xiàn)通訊邏輯,往往需要經(jīng)過多次“設(shè)計(jì)-仿真-修改”循環(huán)才能使系統(tǒng)最終趨于完善。MATLAB的圖形界面提供了方便快捷的仿真輸入/輸出接口,可大幅度加快開發(fā)進(jìn)度。
協(xié)議棧開發(fā)完成后可利用CANoe作為標(biāo)準(zhǔn)進(jìn)行系統(tǒng)集成測(cè)試,CANoe的KWP2000協(xié)議測(cè)試環(huán)境如圖7所示。
圖7 CANoe的KWP2000測(cè)試環(huán)境示意圖
CANoe中的KWP2000實(shí)際指的是基于CAN總線的KWP2000,即15765協(xié)議。由于CANoe默認(rèn)的硬件板卡是CAN卡,因此在建立仿真程序時(shí),只需將ECU的網(wǎng)絡(luò)模塊設(shè)置為kwp2000.dll即可進(jìn)行CAN總線的KWP2000服務(wù)測(cè)試。kwp2000.dll中包含15765應(yīng)用層協(xié)議中規(guī)定的服務(wù)請(qǐng)求、服務(wù)指示、服務(wù)響應(yīng)和服務(wù)確認(rèn)接口函數(shù),用戶調(diào)用這些函數(shù)即可完成Tester端和ECU端的KWP2000診斷服務(wù)。此外,該模塊中的功能函數(shù)還可對(duì)ECU的源地址、目標(biāo)地址、尋址模式等參數(shù)進(jìn)行動(dòng)態(tài)設(shè)置。需要注意的是,kwp2000.dll目前只提供了部分KWP2000服務(wù)的接口函數(shù),如果用戶需要進(jìn)行其它的KWP2000服務(wù)測(cè)試,必須根據(jù)KWP2000應(yīng)用層協(xié)議構(gòu)造服務(wù)報(bào)文數(shù)據(jù),然后調(diào)用該模塊中的KWP_DataReq()和KWP_GetRxData()函數(shù)進(jìn)行報(bào)文的發(fā)送和接收。
進(jìn)行基于K線的KWP2000服務(wù)測(cè)試時(shí),需要將KLineCPL.dll模塊加入CANoe仿真環(huán)境,并使用一個(gè)代理節(jié)點(diǎn)來實(shí)現(xiàn)CAN網(wǎng)絡(luò)和K線之間的報(bào)文轉(zhuǎn)發(fā)。此時(shí)CANoe使用計(jì)算機(jī)的串口,并通過一個(gè)串口/K線轉(zhuǎn)換器與實(shí)際的ECU相連,如圖8所示。
圖8 CANoe中基于K線的KWP2000測(cè)試連接示意圖
6 結(jié)束語(yǔ)
KWP2000是一套非常完善的車載故障診斷協(xié)議標(biāo)準(zhǔn),協(xié)議的分層結(jié)構(gòu)使得KWP2000診斷服務(wù)并不依賴于某種特定的網(wǎng)絡(luò)介質(zhì),其應(yīng)用層可以移植到任何一種物理層和數(shù)據(jù)鏈路層協(xié)議之上。基于CAN總線的KWP2000順應(yīng)了目前車載網(wǎng)絡(luò)發(fā)展的大趨勢(shì),將逐步取代K線診斷協(xié)議,成為下一代車載診斷協(xié)議的主流之一。
MATLAB/Simulink/Stateflow為協(xié)議棧開發(fā)提供了方便直觀的圖形用戶接口和功能強(qiáng)大的仿真調(diào)試環(huán)境及代碼生成工具,為嵌入式開發(fā)開辟了一條高效快捷之路。Vector公司的CANoe和相關(guān)硬件板卡是一個(gè)功能強(qiáng)大的應(yīng)用開發(fā)平臺(tái),可針對(duì)基于K線和CAN總線的KWP2000進(jìn)行ECU和診斷設(shè)備的上層協(xié)議開發(fā)、測(cè)試及仿真。
評(píng)論