【ISO 14229-1:2023 UDS診斷(會話控制0x10服務)測試用例CAPL代碼全解析③】

ISO 14229-1:2023 UDS診斷【會話控制0x10服務】_TestCase03

作者:車端域控測試工程師
更新日期:2025年02月15日
關鍵詞:UDS診斷、0x10服務、診斷會話控制、ECU測試、ISO 14229-1:2023

TC10-003測試用例

用例ID測試場景驗證要點參考條款預期結果
TC10-003編程會話安全校驗未通過安全訪問時禁止進入編程會話§7.4.2返回NRC=0x33(安全訪問拒絕)
/*-------------------------------------------------------------------測試用例 TC10-003:編程會話安全校驗 標準依據:ISO 14229-1 §7.4.2 驗證目標:未通過安全訪問時禁止進入編程會話 預期響應:NRC=0x33(securityAccessDenied)
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8};  // 診斷請求報文 message 0x7E8 DiagRes;           // 診斷響應報文 msTimer securityTimer;           // 安全狀態監測計時器 byte currentSession;             // 當前會話狀態跟蹤 byte securityLevel;              // 安全訪問級別 
}testcase TC10_003_ProgrammingSessionSecurity() 
{//==================== 預置條件設置 ====================// 強制重置診斷會話和安全狀態 sysSetVariable("Diag::Session", 0x01);  // 默認會話 sysSetVariable("Security::Unlocked", 0); // 安全鎖狀態 currentSession = 0x01;securityLevel = 0x00;// 驗證初始狀態 if(sysGetVariable("Diag::Session") != 0x01) {testStepAbort("初始化失敗:ECU未處于默認會話");}//==================== 測試步驟執行 ====================// 步驟1:直接嘗試進入編程會話 DiagReq.byte(0) = 0x10;          // 診斷會話控制服務 DiagReq.byte(1) = 0x02;          // 編程會話 DiagReq.dlc = 2;output(DiagReq);                 // 發送請求 //==================== 響應驗證 ====================// 設置雙重驗證機制 testWaitForMessage(0x7E8, 1500); // 等待響應1.5秒 // 情況1:未收到任何響應 if(TestGetLastError() == teTimeout) {testStepFail("錯誤:ECU未響應請求");return;}// 情況2:收到否定響應 if(DiagRes.byte(0) == 0x7F) {// 三級驗證邏輯 if(DiagRes.byte(1) != 0x10) {  // 驗證服務ID testStepFail("服務ID不匹配,收到0x%02X", DiagRes.byte(1));return;}if(DiagRes.byte(2) == 0x33) {  // 驗證NRC代碼 testStepPass("收到預期NRC 0x33");write("安全校驗機制生效");} else {testStepFail("錯誤NRC代碼:0x%02X", DiagRes.byte(2));}}// 情況3:意外收到肯定響應 else if(DiagRes.byte(0) == 0x50) {testStepFail("安全校驗失效!收到正響應");sysSetVariable("Diag::Session", 0x01); // 強制恢復默認會話 }// 情況4:無效響應 else {testStepFail("收到無效響應:0x%02X", DiagRes.byte(0));}//==================== 后置清理 ====================// 發送默認會話恢復請求 DiagReq.byte(1) = 0x01;          // 子功能:默認會話 output(DiagReq);testWaitForMessage(0x7E8, 1000); // 等待會話恢復確認 
}/*------------------------- 執行日志示例 ------------------------- 
[2025-02-15 10:35:12] TC10-003 測試啟動 
[2025-02-15 10:35:12] 當前會話狀態:0x01 
[2025-02-15 10:35:12] 發送請求: 10 02 @ 7E0 
[2025-02-15 10:35:12] 收到響應: 7F 10 33 @ 7E8 
[2025-02-15 10:35:12] 測試通過:安全訪問拒絕機制生效 
[2025-02-15 10:35:13] 恢復默認會話成功 
----------------------------------------------------------------*/

代碼執行流程圖

默認會話&安全鎖定
初始化
狀態檢查
發送請求
響應監控
|超時|
失敗處理
|收到7F|
NRC驗證
|0x33|
測試通過
|其他|
|收到50|
嚴重錯誤
恢復默認會話

關鍵實現說明

  1. 三重狀態驗證機制
// 狀態同步檢查 
if(sysGetVariable("Diag::Session") != 0x01 || sysGetVariable("Security::Unlocked") != 0) {testStepAbort("預置條件不滿足");
}
  1. 動態DLC管理
DiagReq.dlc = 2 + (this.msgChannel == CAN_CHANNEL_HSCAN ? 1 : 0); // 自動適應總線類型 
  1. 安全狀態實時監控
on sysvar Security::Unlocked {securityLevel = @this;write("安全狀態變更:%s", securityLevel ? "解鎖" : "鎖定");
}

測試用例驗證矩陣

測試場景預期響應通過標準
未解鎖直接請求編程會話7F 10 33收到精確NRC代碼
安全解鎖后請求編程會話50 02不在此用例測試范圍
異常報文長度7F 10 13需其他用例覆蓋
物理層通信中斷超時無響應檢測通信故障

增強型錯誤處理方案

  1. 安全校驗旁路檢測
// 連續三次嘗試檢測安全機制 
for(int i=0; i<3; i++) {output(DiagReq);if(DiagRes.byte(0) == 0x50) {testReportPicture("安全漏洞", "緊急:安全機制失效!");break;}
}
  1. 總線負載壓力測試
// 在50%總線負載下測試 
setBusLoad(CAN1, 50.0);
testWaitForTimeout(5000);  // 持續5秒壓力測試 
  1. 溫度邊界測試
// 需配合環境箱使用 
if(sysGetVariable("Env::Temperature") < -40) {testStepWarning("低溫環境測試:%.1f°C", sysGetVariable("Env::Temperature"));
}

操作指南:

  1. 使用CANoe的Diagnostic Console驗證當前安全狀態
  2. 通過Trace窗口過濾7E07E8報文
  3. 建議配合CAPL的testReportAddComment添加測試備注
  4. 完整測試需包含以下步驟:
    • 冷啟動測試
    • 電壓暫降測試(9-16V)
    • 快速上下電循環測試

測試代碼可直接集成到CANoe Test Module中,運行時需注意:

  1. 禁用其他可能修改會話狀態的測試用例
  2. 確保ECU診斷數據庫版本為最新
  3. 建議在測試前執行ECU完整復位操作

遇到NRC 0x33以外的響應時,建議使用以下工具診斷:

  • CANoe的Service Viewer
  • Wireshark抓包分析
  • ECU標定工具檢查安全配置

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70196.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70196.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TDengine 客戶端連接工具 taos-Cli

簡介工具獲取運行命令行參數 基礎參數高級參數 數據導出/導入 數據導出數據導入 執行 SQL 腳本使用小技巧 TAB 鍵自動補全設置字符列顯示寬度其它 錯誤代碼表 簡介 TDengine 命令行工具&#xff08;以下簡稱 TDengine CLI&#xff09;是用戶操作 TDengine 實例并與之交互最簡…

Git高級用法

GIT高級用法及實戰案例解析 前言 作為現代開發者的必備工具&#xff0c;Git的基礎操作&#xff08;add/commit/push&#xff09;早已深入人心。但當面對復雜場景時&#xff0c;掌握Git的高級用法將極大提升開發效率。本文將深入解析Git的高級功能&#xff0c;并配合真實場景案…

9個用于測試自動化的最佳AI測試工具(2024)

選擇一款優質的基于生成式AI人工智能的測試工具能夠確保測試過程的準確性和效率&#xff0c;從而加速整個軟件測試周期。相反&#xff0c;設計不佳的測試工具可能無法發現錯誤&#xff0c;并可能存在安全問題。它們可能產生誤報或漏報&#xff0c;誤導開發與測試團隊&#xff0…

vue-model如何自定義指令,及批量注冊自定義指令

一、在Vue.js中&#xff0c;v-model是一個用于在表單輸入和應用狀態之間創建雙向綁定的指令。要編寫自定義的v-model指令&#xff0c;你需要使用Vue的自定義指令API。以下是編寫自定義v-model指令的步驟&#xff1a; 定義一個自定義指令對象。在指令對象的bind鉤子函數中&…

簡單認識一下-Redis

一、什么是Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的、基于內存的數據結構存儲系統&#xff0c;它既可以用作數據庫、緩存&#xff0c;也可以作為消息中間件使用。以下為你詳細介紹 Redis&#xff1a; 基本特點 高性能&#xff1a;Redis 將數…

LabVIEW的吞雨測控系統

本案例介紹了一種基于LabVIEW開發的吞雨測控系統&#xff0c;該系統通過建模仿真分析不同控制器模式下的階躍信號響應&#xff0c;從而選擇了最適合的控制器。為了有效解決在控制流量過程中出現的振蕩收斂和流量信號大擾動問題&#xff0c;系統采用了改進的積分分離PID算法&…

C++中的順序容器(一)

文章目錄 順序容器概述所有容器類型都支持的操作迭代器容器定義與初始化將一個容器初始化為另一個容器的拷貝標準庫array具有固定大小 賦值和swap關系運算符 順序容器的特有操作向順序容器添加元素訪問元素刪除元素特殊的forward_list操作改變容器的大小容器操作可能是迭代器失…

Javaweb中,使用Servlet編寫簡單的接口

案例&#xff1a;網頁提交用戶名和密碼信息&#xff0c;后端校驗密碼長度需在6-12位之間 后端部分 WebServlet("/valid") public class SimpleServlet extends HttpServlet{public void service(HttpServletRequest req, HttpServletResponse resp) throws IOExcepti…

C語言實現的常見排序算法

排序是計算機科學中非常重要的基礎算法之一。無論是在數據分析、數據庫查詢還是圖形界面中&#xff0c;我們都可能會遇到排序問題。本文將介紹幾種常見的排序算法&#xff0c;并提供其C語言實現代碼。排序算法的效率和應用場景有很大關系&#xff0c;不同的算法有不同的時間復雜…

對于簡單的HTML、CSS、JavaScript前端,我們可以通過幾種方式連接后端

1. 使用Fetch API發送HTTP請求&#xff08;最簡單的方式&#xff09;&#xff1a; //home.html // 示例&#xff1a;提交表單數據到后端 const submitForm async (formData) > {try {const response await fetch(http://your-backend-url/api/submit, {method: POST,head…

[論文閱讀] SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

文章目錄 一、前言二、主要貢獻三、Introduction四、Methodology4.1 Motivation &#xff1a;4.2Framework Overview.** 一、前言 通信作者是香港理工大學 & OPPO研究所的張磊教授&#xff0c;也是圖像超分ISR的一個大牛了。 論文如下 SeeSR: Towards Semantics-Aware Rea…

案例-04.部門管理-刪除

一.功能演示 二.需求說明 三.接口文檔 四.思路 既然是通過id刪除對應的部門&#xff0c;那么必然要獲取到前端請求的要刪除部門的id。id作為請求路徑傳遞過來&#xff0c;那么要從請求路徑中獲取&#xff0c;id是一個路徑參數。因此使用注解PathVariable獲取路徑參數。 請求方…

Blazor-父子組件傳遞任意參數

在我們從父組件傳參數給子組件時&#xff0c;可以通過子組件定義的[Parameter]特性的公開屬性進行傳值&#xff0c;但是當我們需要傳遞多個值的時候&#xff0c;就需要通過[Parameter]特性定義多個屬性&#xff0c;有沒有更簡便的方式&#xff1f; 我們可以使用定義 IDictionar…

DeepSeek 的創新融合:多行業應用實踐探索

引言 在數字化轉型的浪潮中&#xff0c;技術的融合與創新成為推動各行業發展的關鍵力量。藍耘平臺作為行業內備受矚目的創新平臺&#xff0c;以其強大的資源整合能力和靈活的架構&#xff0c;為企業提供了高效的服務支持。而 DeepSeek 憑借先進的人工智能技術&#xff0c;在自然…

STM32創建靜態庫lib

創建靜態庫lib 1. 新建工程1.1 創建工程文件夾1.2 編寫用戶相關代碼1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 標準庫配置&#xff1a;stm32f4xx_conf.h1.2.4 HAL庫的配置&#xff1a;stm32f4xx_hal_conf.h1.2.5 LL庫配置&#xff1a;stm32f4xx_ll_conf.h 1.3 移植通用文…

elabradio入門第二講——BPSK數字調制與解調(插值、升余弦濾波、速率匹配、符號同步)

數字信號可以通過數字基帶傳輸系統進行傳輸&#xff0c;而基帶傳輸系統僅僅適用于低頻信道下的數字信號傳輸。然而&#xff0c;在實際的通信系統中信道通常具有帶通特性&#xff0c;因而需要將基帶信號搬移到適合信道傳輸的高頻載波上&#xff0c;使得信號與信道相匹配&#xf…

汽車 OTA 升級:提升下載與升級速度,優化用戶體驗

摘要&#xff1a; 隨著汽車智能化的飛速發展&#xff0c;OTA&#xff08;Over - the - Air&#xff09;升級已成為汽車行業的重要技術&#xff0c;它能為車輛持續帶來功能更新與性能優化。然而&#xff0c;下載及升級速度較慢的問題常常影響用戶體驗。本文深入探討在汽車 OTA …

【Spring+MyBatis】留言墻的實現

目錄 1. 添加依賴 2. 配置數據庫 2.1 創建數據庫與數據表 2.2 創建與數據庫對應的實體類 3. 后端代碼 3.1 目錄結構 3.2 MessageController類 3.3 MessageService類 3.4 MessageMapper接口 4. 前端代碼 5. 單元測試 5.1 后端接口測試 5.2 使用前端頁面測試 在Spri…

SQLite Select 語句詳解

SQLite Select 語句詳解 SQLite 是一個輕量級的數據庫管理系統&#xff0c;以其簡潔的設計和高效的性能被廣泛應用于各種場景。在 SQLite 中&#xff0c;SELECT 語句是用于查詢數據庫中的數據的命令。本文將詳細介紹 SQLite 的 SELECT 語句&#xff0c;包括其基本語法、常用功…

深度學習05 ResNet殘差網絡

目錄 傳統卷積神經網絡存在的問題 如何解決 批量歸一化BatchNormalization, BN 殘差連接方式 ?殘差結構 ResNet網絡 ResNet 網絡是在 2015年 由微軟實驗室中的何凱明等幾位大神提出&#xff0c;斬獲當年ImageNet競賽中分類任務第一名&#xff0c;目標檢測第一名。獲得CO…