CANoe主要用于汽車總線的開發(fā)并廣泛被汽車電子工程師們使用。它具有強大的開發(fā)、分析、仿真、診斷、測試等功能。一提到CANoe大家往往都會想到CAPL,在使用CANoe的過程中相信每位工程師都或多或少的要和“CAPL”打交道。學(xué)好CAPL的用法可以讓我們更加高效、便捷地使用CANoe。本文就CANoe中關(guān)于診斷的CAPL函數(shù)進行介紹。
診 斷
診斷,其實就是服務(wù)端和客戶端進行一問一答的方式。這里的一問一答指的是發(fā)送和接收的方式,Tester端發(fā)送一條特定ID的報文(請求),ECU接收到以后會相應(yīng)的回復(fù)一條特定ID的報文(響應(yīng))。診斷是一個非常重要的功能,可以讀取ECU的很多信息,比如:版本號,故障信息,狀態(tài)信息等。CANoe是具有診斷功能的,如果需要大批量的進行診斷測試就需要使用CAPL來輔助。
如下圖所示,CANoe可以直接加載CDD文件,加載完CDD文件后可以通過CANoe工程的診斷界面打開診斷臺,進行手動的發(fā)送診斷報文。
在CANoe中加載CDD文件
如下圖所示,在Diagnostic Console中我們可以直接發(fā)送擴展會話服務(wù)(0x1003),ECU端收到擴展會話服務(wù)請求后會給出肯定響應(yīng)或否定響應(yīng)。
用 Diagnostic Console發(fā)送診斷請求
但是隨著測試任務(wù)的增加,我們要進行多種方式的診斷測試。如下圖所示,加載完CDD文件后,隨之打開CAPL Browser,就可以在CAPL編輯器的Symbols欄中找到我們CDD文件對應(yīng)的診斷服務(wù)。
CAPL Browser 中CDD文件的調(diào)用
對于使用CAPL實現(xiàn)診斷功能我們通常有兩種方式:
通過發(fā)送CAN報文的形式去實現(xiàn)
針對第一種方式,我們只需要在CAPL中定義一條特定ID的報文,再定義它的DLC以及每個字節(jié)的內(nèi)容再發(fā)出去就可以了,如下圖所示:
CAPL 代碼實現(xiàn)
Trace 中報文的顯示
通過調(diào)用加載到CANoe工程中CDD文件定義好的診斷功能去實現(xiàn)
針對第二種方式,因為CDD文件中已經(jīng)定義了ECU支持的診斷服務(wù)、通信參數(shù)等參數(shù),所以我們只需要把我們在CDD中定義好的診斷服務(wù)發(fā)送出去即可,如下圖所示:
CAPL 代碼實現(xiàn)
診斷常用CAPL函數(shù)
下面就讓我們來學(xué)習(xí)一下診斷中常用的一些CAPL函數(shù)。
診斷處理事件
on diagRequest NewRequest:進行ECU仿真時,收到診斷請求時調(diào)用。
on diagResponse NewResponse:Tester端收到診斷響應(yīng)時調(diào)用。
on diagRequestSent NewRequestsent:收到Tester端發(fā)送的診斷請求時調(diào)用。
常用的診斷函數(shù)列表及功能描述
通信/設(shè)定功能函數(shù)
diagGetCurrentEcu 用于獲取當(dāng)前ECU名稱;
diagGetLastCommunicationError 用于返回上一次診斷請求的錯誤碼
diagSendRequest 用于發(fā)送診斷請求給目標(biāo) ECU
diagSetTimeout 用于設(shè)定診斷請求的超時時長& diagSetTimeoutHandler 用于創(chuàng)建一個回調(diào)函數(shù),在診斷請求超時時被調(diào)用:
安全訪問函數(shù)
diagSetCurrentSession 設(shè)置當(dāng)前ECU的會話狀態(tài):
diagStartGenerateKeyFromSeed 用于根據(jù)種子和密鑰算法DLL生成一個密鑰&_Diag_GenerateKeyResult 用于返回使用計算密鑰的結(jié)果:
對象訪問函數(shù)
diagGetLastResponse 用于保存上一次收到的診斷請求響應(yīng):
診斷測試函數(shù)
函數(shù) | 功能描述 |
diagCheckObjectMatch | 用于檢測診斷響應(yīng)的 ID 是否與診斷請求相符 |
diagCheckValidNegResCode | 用于檢測返回的否定響應(yīng)是否在診斷描述文件 (CDD文件)中已經(jīng)定義 |
diagCheckValidPrimitive | 用于檢測指定的診斷對象是否符合規(guī)范 (CDD 文件) 中的定義 |
diagCheckValidRespPrimitive | 用于檢測收到的診斷請求響應(yīng)是否符合規(guī)范(CDD 文件)中的定義 |
testCollectDiagEculnformation | 用于向指定的診斷目標(biāo)發(fā)送診斷請求并將響應(yīng)寫入報告文件 |
testReportWriteDi-agResponse | 用于將接收到的診斷響應(yīng)寫入報告 |
用于等待上一次的診斷請求成功發(fā)送到 ECU | |
testWaitForDiagRe-sponse | 用于等待接收到請求的診斷響應(yīng) |
testWaitForDiagRe-sponseStart | 用于等待接收到請求的診斷響應(yīng)開始,即收到響應(yīng)的首幀報文 |
testWaitForUnlock-Ecu | 用于嘗試解鎖 ECU |
拓展小學(xué)堂
Vector對于診斷方面是有許多專業(yè)性的工具,下圖為診斷工具鏈的V模型,從開發(fā)到測試、從供應(yīng)商到主機廠都會涉及到的診斷工具。下面就由我來為大家進行簡單的介紹:
CANdelastudio:
CANdelaStudio用于定義ECU的診斷功能,并且生成診斷數(shù)據(jù)庫(CDD文件)來優(yōu)化整個診斷開發(fā)過程。CANdelaStudio支持文檔模板(CDDT文件),可以滿足不同廠商對同一個標(biāo)準(zhǔn)工具的各種特殊要求。在內(nèi)容上一個文檔模板對應(yīng)于一種診斷規(guī)范,它包含了對ECU所有允許的基本服務(wù)和在每個ECU中都必需實現(xiàn)的強制功能的一個正式描述。
ODXStudio:
基于ODX的診斷流程并以O(shè)DX格式查看、編輯、處理或管理診斷數(shù)據(jù)的所有用戶而設(shè)計。它支持單個ECU的診斷開發(fā),直至整個車輛平臺的水平。它同樣適合在汽車OEM和供應(yīng)商工作的用戶。ODXStudio處理的是ODX 2.0.1和2.2.0版本的數(shù)據(jù)。
CANoe.Diva:
作為一個生成診斷測試用例的工具,可以支持把CDD文件和ODX文件導(dǎo)入到Diva工程當(dāng)中,然后去通過一些相應(yīng)的配置,點一個按鈕自動生成診斷相關(guān)的一些測試用例,再把生成的測試用例導(dǎo)入到CANoe中進行診斷的自動化測試,測試完成后會自動生成相應(yīng)的測試報告。
vFlash:
刷寫工具,vFlash可以作為一個獨立的工具來實現(xiàn)程序刷寫。精簡的用戶操作界面,利用模板來實現(xiàn)對于不同F(xiàn)lash刷寫規(guī)范的支持,可通過CAN/LIN/以太網(wǎng)進行刷寫。在提高刷寫速度的同時,可以刷寫更大的數(shù)據(jù),還能結(jié)合VN8810實現(xiàn)遠程一鍵刷寫。
Indigo:
作為參數(shù)化工程診斷儀,支持工程診斷的應(yīng)用場景。同時,Indigo支持客戶定制化,例如集成vFlash工程支持刷寫應(yīng)用場景、通過選擇車輛配置參數(shù)組支持車型配置、例程控制界面、可執(zhí)行工程但不可編輯工程配置的Indigo Run、中文界面并且還可以拓展支持遠程診斷等功能。
總 結(jié)
CANoe作為一個強大的總線開發(fā)工具有很多的功能,本文就CANoe中的診斷功能相關(guān)的CAPL函數(shù)做了講解并簡單的講解了VECTOR旗下的診斷工具,希望本文章可以為大家?guī)砣碌氖褂皿w驗,如有問題歡迎私信我們北匯信息。
北匯信息作為Vector的合作伙伴,已為多家OEM/Tier1定制部件級功能測試系統(tǒng)(包括車身域控制器,及傳統(tǒng)分布式控制器功能測試開發(fā)),提供系統(tǒng)級及實車級測試驗證服務(wù),期待交流分享和合作的機會。
-
汽車電子
+關(guān)注
關(guān)注
3027文章
7979瀏覽量
167246 -
CAN
+關(guān)注
關(guān)注
57文章
2756瀏覽量
463899 -
診斷
+關(guān)注
關(guān)注
1文章
58瀏覽量
12297 -
汽車
+關(guān)注
關(guān)注
13文章
3541瀏覽量
37415
發(fā)布評論請先 登錄
相關(guān)推薦
評論