主页 > 游戏开发  > 

【ISO14229-1:2023UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑩】

【ISO14229-1:2023UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑩】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase10

作者:车端域控测试工程师 更新日期:2025年02月17日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023

TC10-010测试用例 用例ID测试场景验证要点参考条款预期结果TC10-010默认会话禁止写操作在默认会话下尝试执行0x2E写服务§7.6.2返回NRC=0x7E(服务未支持) /*----------------------------------------------------------------*/ /* 测试用例ID : TC10-010 */ /* 测试项名称 : 默认会话写操作禁止验证 */ /* 测试依据 : §7.6.2 */ /* 验证目标 : 1.成功进入默认会话 */ /* 2.返回NRC=0x7E(服务未支持) */ /* 作者 : 车端域控测试工程师 */ /* 创建日期 : 2025-02-17 */ /*----------------------------------------------------------------*/ variables { // 诊断协议参数 const long DiagReqID = 0x732; // 请求报文ID const long DiagResID = 0x733; // 响应报文ID const byte DefaultSessionReq[2] = {0x10, 0x01}; // 默认会话请求 const byte WriteReq[3] = {0x2E, 0xF1, 0x90}; // 写数据请求 const byte ExpectedNRC = 0x7E; // 预期否定响应码 // 状态跟踪 msTimer sessionTimer; msTimer writeTimer; int isDefaultSession = 0; } testcase TC10_010_WriteProhibitionCheck() { TestModuleTitle("TC10-010 默认会话写操作验证(增强版)"); // 阶段1:强制进入默认会话 testStep("设置默认会话模式"); message DiagReqID [CAN] { dlc = 2; byte(0) = DefaultSessionReq[0]; byte(1) = DefaultSessionReq[1]; } output(this); // 等待会话切换响应(带超时保护) setTimer(sessionTimer, 300); while(1) { if(TestWaitForMessage(DiagResID, 50)) { if(this.byte(0) == 0x50 && this.byte(1) == 0x01) { testStepPass("成功进入默认会话"); isDefaultSession = 1; break; } else if(this.byte(0) == 0x7F) { testStepFail("会话设置失败 NRC=0x%02X", this.byte(2)); return; } } if(getTimer(sessionTimer) >= 300) { testStepFail("会话设置超时"); return; } } // 阶段2:执行写操作验证 if(isDefaultSession) { testStep("发送0x2E写服务请求"); message DiagReqID [CAN] { dlc = 3; byte(0) = WriteReq[0]; byte(1) = WriteReq[1]; byte(2) = WriteReq[2]; } output(this); // 响应验证(双重校验机制) setTimer(writeTimer, 250); while(1) { if(TestWaitForMessage(DiagResID, 50)) { // 否定响应验证 if(this.byte(0) == 0x7F && this.byte(1) == WriteReq[0] && this.byte(2) == ExpectedNRC) { testStepPass("收到预期NRC=0x%02X", ExpectedNRC); testCasePass("验证成功"); return; } // 意外肯定响应 else if(this.byte(0) == 0x6E) { testStepFail("检测到非法写操作成功"); return; } } if(getTimer(writeTimer) >= 250) { testStepFail("写服务响应超时"); return; } } } } /*-------------------------------------------------------------- 会话状态跟踪函数(示例) --------------------------------------------------------------*/ on sysvar DiagSession::CurrentSession { // 实时跟踪会话状态变化 isDefaultSession = (@this::CurrentSession == 0x01) ? 1 : 0; testAddCondition("当前会话状态:%s", (isDefaultSession) ? "默认会话" : "其他会话"); }

增强功能解析

双阶段验证流程 #mermaid-svg-llg9JJs0J0S6d8bk {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-llg9JJs0J0S6d8bk .error-icon{fill:#552222;}#mermaid-svg-llg9JJs0J0S6d8bk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-llg9JJs0J0S6d8bk .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-llg9JJs0J0S6d8bk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-llg9JJs0J0S6d8bk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-llg9JJs0J0S6d8bk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-llg9JJs0J0S6d8bk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-llg9JJs0J0S6d8bk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-llg9JJs0J0S6d8bk .marker.cross{stroke:#333333;}#mermaid-svg-llg9JJs0J0S6d8bk svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-llg9JJs0J0S6d8bk .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-llg9JJs0J0S6d8bk .cluster-label text{fill:#333;}#mermaid-svg-llg9JJs0J0S6d8bk .cluster-label span{color:#333;}#mermaid-svg-llg9JJs0J0S6d8bk .label text,#mermaid-svg-llg9JJs0J0S6d8bk span{fill:#333;color:#333;}#mermaid-svg-llg9JJs0J0S6d8bk .node rect,#mermaid-svg-llg9JJs0J0S6d8bk .node circle,#mermaid-svg-llg9JJs0J0S6d8bk .node ellipse,#mermaid-svg-llg9JJs0J0S6d8bk .node polygon,#mermaid-svg-llg9JJs0J0S6d8bk .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-llg9JJs0J0S6d8bk .node .label{text-align:center;}#mermaid-svg-llg9JJs0J0S6d8bk .node.clickable{cursor:pointer;}#mermaid-svg-llg9JJs0J0S6d8bk .arrowheadPath{fill:#333333;}#mermaid-svg-llg9JJs0J0S6d8bk .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-llg9JJs0J0S6d8bk .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-llg9JJs0J0S6d8bk .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-llg9JJs0J0S6d8bk .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-llg9JJs0J0S6d8bk .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-llg9JJs0J0S6d8bk .cluster text{fill:#333;}#mermaid-svg-llg9JJs0J0S6d8bk .cluster span{color:#333;}#mermaid-svg-llg9JJs0J0S6d8bk div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-llg9JJs0J0S6d8bk :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是 否 NRC匹配 其他响应 强制会话设置 设置成功? 执行写操作 终止测试 响应验证 测试通过 测试失败

关键技术升级

会话状态强制设置:

byte DefaultSessionReq[2] = {0x10, 0x01}; // 显式设置默认会话

双重超时机制:

setTimer(sessionTimer, 300); // 会话设置超时 setTimer(writeTimer, 250); // 写操作响应超时

实时状态跟踪:

on sysvar DiagSession::CurrentSession // 会话变量监控

异常处理增强

多级错误检测: 错误类型检测方式处理措施会话设置失败0x7F响应码立即终止测试意外会话模式系统变量监控记录状态日志非法肯定响应0x6E服务ID检测标记安全漏洞总线通信异常连续超时检测触发硬件故障警报

扩展验证建议

组合测试场景:

// 可扩展添加以下测试步骤: // 1. 尝试进入其他会话后验证写权限 // 2. 连续多次发送写请求 // 3. 不同数据长度的写操作尝试

安全增强检测:

void CheckSecurityAccess() { // 验证安全访问状态对写操作的影响 }

工程实践指南

环境配置要求 | 配置项 | 推荐规格 | |----------------|-------------------------------| | 总线负载率 | <60% | | ECU供电电压 | 13.5V±0.2V | | 测试工具 | CANoe 15.0+诊断功能包 | | 硬件接口 | 带继电器控制的电源模块 |

关键验证指标 | 验证维度 | 合格标准 | 测量方法 | |----------------|-------------------------------|------------------------| | 会话切换时间 | ≤200ms | 示波器抓取报文间隔 | | NRC一致性 | 100%返回0x7E | 自动化脚本验证 | | 错误响应率 | 非法请求拒绝率100% | 压力测试统计 | | 状态跟踪精度 | 系统变量刷新周期≤50ms | 监控日志分析 |

关联测试建议

配合TC07-011(会话模式切换稳定性测试)结合TC12-004(服务可用性矩阵验证)关联TC09-015(非法服务请求处理测试)

调试建议:

在Write Window设置触发条件:id==733h && byte(0)==7Fh使用Graphics窗口同步显示以下信号: DiagSession::CurrentSessionsysvar::ErrorCodemessage::DiagResID.byte(2) 启用Diagnostic Sequence Viewer分析服务调用序列添加Test Coverage监控点:testAddCoverage("SESS-01", "Default session setup"); testAddCoverage("WRITE-05", "Service prohibition check");
标签:

【ISO14229-1:2023UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑩】由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【ISO14229-1:2023UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑩】