ISO 14229-1:2023 UDS診斷【ECU復位0x11服務】_TestCase04
作者:車端域控測試工程師
更新日期:2025年02月17日
關鍵詞:UDS診斷協議、ECU復位服務、0x11服務、ISO 14229-1:2023
TC11-004測試用例
用例ID | 測試場景 | 驗證要點 | 參考條款 | 預期結果 |
---|---|---|---|---|
TC11-004 | 無效子功能碼檢測 | 發送0x11 0xFF(保留值) | §7.1.2 | 返回NRC=0x12(子功能不支持) |
/*----------------------------------------------------------------*/
/* 測試用例ID : TC11-004 */
/* 測試項名稱 : 無效子功能碼檢測 */
/* 測試依據 : §7.1.2 */
/* 驗證目標 : 返回NRC=0x12(子功能不支持) */
/* 作者 : 車端域控測試工程師 */
/* 創建日期 : 2025-02-17 */
/* 版本歷史 : V1.0 - 初始版本 */
/*----------------------------------------------------------------*/variables
{// 診斷協議參數 const long DiagReqID = 0x732; // 診斷請求ID const long DiagResID = 0x733; // 診斷響應ID const byte InvalidSubFuncReq[2] = {0x11, 0xFF}; // 無效子功能請求 const byte ExpectedNRC = 0x12; // 預期否定響應碼 // 狀態監控 msTimer responseTimer;int serviceValidationPassed = 0;
}testcase TC11_004_InvalidSubfunctionCheck()
{TestModuleTitle("TC11-004 無效子功能碼檢測");// 階段1:發送無效子功能請求 testStep("發送0x11服務+0xFF子功能");message DiagReqID [CAN] {dlc = 2;byte(0) = InvalidSubFuncReq[0]; // 服務ID byte(1) = InvalidSubFuncReq[1]; // 子功能碼 }output(this);// 階段2:響應驗證 testWaitForTimeout(500); // 總測試窗口500ms setTimer(responseTimer, 200); // 設置響應超時 while(1) {if(TestWaitForMessage(DiagResID, 50)) {// 否定響應基礎驗證 if(this.byte(0) == 0x7F && this.byte(1) == InvalidSubFuncReq[0]) {// NRC專項驗證 if(this.byte(2) == ExpectedNRC) {testStepPass("收到預期NRC=0x%02X", ExpectedNRC);serviceValidationPassed = 1;break;}else {testStepFail("收到錯誤NRC=0x%02X", this.byte(2));}}// 意外肯定響應處理 else if(this.byte(0) == 0x51) {testStepFail("檢測到非法服務支持");}}// 超時處理 if(getTimer(responseTimer) >= 200) {testStepFail("響應超時未收到");break;}}// 最終判定 if(serviceValidationPassed) {testCasePass("無效子功能碼驗證成功");}
}/*--------------------------------------------------------------增強型響應跟蹤模塊
--------------------------------------------------------------*/
on message DiagResID
{// 實時記錄所有診斷響應 if(this.byte(0) == 0x7F) {testAddLog("收到否定響應 - SID:0x%02X NRC:0x%02X", this.byte(1), this.byte(2));}
}on timer responseTimer
{testAddCondition("響應等待時間:%dms", getTimer(responseTimer));
}
測試架構深度解析
- 三階段驗證流程
-
關鍵技術實現
-
精準服務識別:
if(this.byte(0) == 0x7F && this.byte(1) == InvalidSubFuncReq[0])
-
動態超時控制:
setTimer(responseTimer, 200); // 200ms嚴格響應窗口 while(getTimer(responseTimer) < 200) { ... }
-
多重防護機制:
// 同時檢測: // 1. 響應報文結構 // 2. 服務ID匹配 // 3. 特定NRC碼
-
異常處理矩陣
| 異常類型 | 檢測方式 | 處理措施 |
|----------------|---------------------------|----------------------------|
| 無效NRC碼 | 字節偏移量驗證 | 記錄具體錯誤碼 |
| 非法服務支持 | 0x51肯定響應檢測 | 標記協議違規 |
| 總線靜默 | 200ms超時機制 | 終止測試流程 |
| 數據長度異常 | DLC值校驗 | 觸發格式錯誤警報 | -
擴展驗證建議
-
參數化測試擴展:
struct SubfunctionTestSet {byte serviceID = 0x11;byte invalidSubfunc = 0xFF;byte expectedNRC = 0x12;dword timeout = 200; };
-
邊界值測試擴展:
void ExecuteBoundaryTests() {// 可測試:// 0x00 - 保留值邊界 // 0x7F - 最大標準值 // 0x80 - 擴展子功能邊界 }
-
服務矩陣驗證:
void CheckServiceMatrix(byte serviceID) {// 驗證服務支持矩陣的完整性 }
工程實踐指南
-
環境配置要求
| 配置項 | 規格要求 |
|----------------|-------------------------------|
| 測試工具 | CANoe 15.0+(帶Diagnostics) |
| 硬件接口 | VN1630/VN8970 |
| ECU供電 | 可編程電源(9-16V) |
| 協議版本 | UDS 1.4.0 | -
關鍵指標分析
| 驗證維度 | 合格標準 | 測量方法 |
|----------------|---------------------------|------------------------|
| 響應時間 | ≤150ms | 示波器觸發測量 |
| NRC一致性 | 100%返回0x12 | 自動化腳本驗證 |
| 錯誤檢測率 | 非法請求拒絕率100% | 壓力測試統計 |
| 協議合規性 | 符合ISO14229-1要求 | 協議分析儀檢測 | -
執行注意事項
- 測試前確保ECU處于默認會話模式
- 禁用其他可能修改診斷狀態的測試用例
- 建議在ECU冷啟動后立即執行
- 避免與刷寫操作測試并行執行
- 關聯測試建議
- 配合TC07-015(有效子功能邊界值測試)
- 結合TC09-018(非法服務ID檢測)
- 關聯TC12-007(診斷服務支持矩陣驗證)
調試技巧:
- 在
Write Window
設置過濾器:id==733h && byte(0)==7Fh
- 使用
Graphics
窗口繪制NRC分布圖- 啟用
Diagnostic Event Viewer
跟蹤服務交互- 添加
Test Coverage
監控點:testAddCoverage("SVC-0x11", "Subfunction validation"); testAddCoverage("NRC-0x12", "Subfunction not supported");