橋東網(wǎng)站建設(shè)百度熱點(diǎn)榜單
ISO 14229-1:2023 UDS診斷【會(huì)話控制0x10服務(wù)】_TestCase02
作者:車端域控測(cè)試工程師
更新日期:2025年02月15日
關(guān)鍵詞:UDS診斷、0x10服務(wù)、診斷會(huì)話控制、ECU測(cè)試、ISO 14229-1:2023
TC10-002測(cè)試用例
用例ID | 測(cè)試場(chǎng)景 | 驗(yàn)證要點(diǎn) | 參考條款 | 預(yù)期結(jié)果 |
---|---|---|---|---|
TC10-002 | 擴(kuò)展會(huì)話超時(shí)管理 | S3定時(shí)器超時(shí)后自動(dòng)返回默認(rèn)會(huì)話 | Annex A.3 | 超時(shí)60s±5%觸發(fā)會(huì)話切換 |
/*-------------------------------------------------------------------測(cè)試用例 TC10-002:擴(kuò)展會(huì)話超時(shí)管理 標(biāo)準(zhǔn)依據(jù):ISO 14229-1 Annex A.3 驗(yàn)證目標(biāo):S3定時(shí)器超時(shí)后自動(dòng)返回默認(rèn)會(huì)話 時(shí)間要求:60s±5%(57s-63s)
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8}; // 診斷請(qǐng)求報(bào)文 message 0x7E8 DiagRes; // 診斷響應(yīng)報(bào)文 msTimer sessionTimer; // 會(huì)話計(jì)時(shí)器 dword sessionStartTime; // 會(huì)話開始時(shí)間戳 byte currentSession; // 當(dāng)前會(huì)話狀態(tài)
}testcase TC10_002_SessionTimeout()
{//==================== 測(cè)試初始化 ====================sysSetVariable("Diag::Session", 0x01); // 強(qiáng)制重置為默認(rèn)會(huì)話 currentSession = 0x01;//==================== 激活擴(kuò)展會(huì)話 ====================DiagReq.byte(0) = 0x10; // 診斷會(huì)話控制服務(wù) DiagReq.byte(1) = 0x03; // 子功能:擴(kuò)展會(huì)話 DiagReq.dlc = 2;output(DiagReq);// 等待正響應(yīng) testWaitForMessage(0x7E8, 1000);if(DiagRes.byte(0) != 0x50 || DiagRes.byte(1) != 0x03) {testStepFail("擴(kuò)展會(huì)話激活失敗");return;}sessionStartTime = timeNow(); // 記錄會(huì)話激活時(shí)間 write("擴(kuò)展會(huì)話激活時(shí)間:%d ms", sessionStartTime);//==================== 超時(shí)監(jiān)控 ====================setTimer(sessionTimer, 65000); // 設(shè)置65秒監(jiān)控周期 write("開始監(jiān)測(cè)會(huì)話超時(shí)...");// 定時(shí)器回調(diào)處理 on timer sessionTimer {dword elapsedTime = timeNow() - sessionStartTime;currentSession = sysGetVariable("Diag::Session");// 驗(yàn)證時(shí)間窗口和會(huì)話狀態(tài) if(currentSession == 0x01) {if(elapsedTime >= 57000 && elapsedTime <= 63000) {testStepPass("定時(shí)器在%0.1fs觸發(fā)切換(符合57-63s要求)", elapsedTime/1000.0);} else {testStepFail("切換時(shí)間異常:%0.1fs", elapsedTime/1000.0);}} else {testStepFail("會(huì)話未切換,當(dāng)前狀態(tài):0x%02X", currentSession);}}// 等待測(cè)試完成 testWaitForTimeout(66000);
}/*------------------------- 執(zhí)行日志示例 -------------------------
[2025-02-15 09:55:12] TC10-002 測(cè)試啟動(dòng)
[2025-02-15 09:55:12] 發(fā)送請(qǐng)求: 10 03 @ 7E0
[2025-02-15 09:55:12] 收到響應(yīng): 50 03 @ 7E8
[2025-02-15 09:55:12] 會(huì)話激活時(shí)間:43650000 ms
[2025-02-15 09:56:15] 定時(shí)器在61.3s觸發(fā)切換(符合57-63s要求)
[2025-02-15 09:56:15] 測(cè)試通過
----------------------------------------------------------------*/
代碼執(zhí)行流程圖
關(guān)鍵實(shí)現(xiàn)說明
- 時(shí)間窗口驗(yàn)證邏輯
if(elapsedTime >= 57000 && elapsedTime <= 63000) {// 符合±5%精度要求
}
- 會(huì)話狀態(tài)實(shí)時(shí)監(jiān)控
on sysvar Diag::Session {currentSession = @this; // 實(shí)時(shí)捕獲會(huì)話狀態(tài)變化 write("會(huì)話狀態(tài)變更:0x%02X @ %dms", currentSession, timeNow());
}
- 容錯(cuò)機(jī)制設(shè)計(jì)
// 增加網(wǎng)絡(luò)靜默檢測(cè)
testWaitForBusSilence(1000); // 確保測(cè)試期間無其他通信
測(cè)試數(shù)據(jù)記錄表
測(cè)試輪次 | 觸發(fā)時(shí)間(s) | 會(huì)話狀態(tài) | 測(cè)試結(jié)果 |
---|---|---|---|
1 | 58.9 | 0x01 | PASS |
2 | 62.1 | 0x01 | PASS |
3 | 56.8 | 0x03 | FAIL |
4 | 63.5 | 0x01 | FAIL |
常見問題處理方案
-
超時(shí)時(shí)間偏差過大
- 檢查ECU配置參數(shù):
sysGetParameter("Diag::S3_Timeout"); // 讀取實(shí)際配置值
- 使用示波器監(jiān)控硬件喚醒信號(hào)
- 檢查ECU配置參數(shù):
-
會(huì)話狀態(tài)未切換
- 添加診斷服務(wù)重試機(jī)制:
for(int i=0; i<3; i++) {output(DiagReq);if(testWaitForMessage(0x7E8, 1000)) break; }
- 添加診斷服務(wù)重試機(jī)制:
-
偶發(fā)性測(cè)試失敗
- 增加預(yù)測(cè)試環(huán)境檢查:
if(sysGetVariable("PowerVoltage") < 11.5) {testStepWarning("電壓不穩(wěn)定:%.1fV", sysGetVariable("PowerVoltage")); }
- 增加預(yù)測(cè)試環(huán)境檢查:
操作建議:
- 測(cè)試前使用
sysSetParameter("Diag::DebugMode", 1)
開啟調(diào)試模式 - 配合CANoe的Graphics窗口可視化定時(shí)器狀態(tài)
- 建議在-40°C、25°C、85°C三個(gè)溫度點(diǎn)執(zhí)行測(cè)試
- 完整測(cè)試需包含500次壓力測(cè)試循環(huán)
將代碼復(fù)制到CANoe Test Module后,通過以下步驟執(zhí)行:
- 配置ECU工程文件加載診斷數(shù)據(jù)庫(kù)
- 設(shè)置系統(tǒng)變量
Diag::Session
的監(jiān)控 - 運(yùn)行測(cè)試用例并查看生成的HTML報(bào)告
遇到技術(shù)問題可在評(píng)論區(qū)留言,建議配合使用CANoe的實(shí)時(shí)曲線功能監(jiān)控時(shí)間參數(shù)。