苏州网站快速排名优化,中国国家标准建设信息网站,wordpress pdf阅读,仿站在线ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase04
作者#xff1a;车端域控测试工程师 更新日期#xff1a;2025年02月15日 关键词#xff1a;UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023
TC10-004测试用例
用例ID测试场景验证要点参考条款预期…ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase04
作者车端域控测试工程师 更新日期2025年02月15日 关键词UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023
TC10-004测试用例
用例ID测试场景验证要点参考条款预期结果TC10-004非法子功能码检测发送0x10 0x04无效子功能§7.3.2返回NRC0x12子功能不支持
/*-------------------------------------------------------------------测试用例 TC10-004非法子功能码检测 标准依据ISO 14229-1 §7.3.2 验证目标发送无效子功能码时返回NRC0x12 预期响应7F 10 12subFunctionNotSupported
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq {dlc8}; // 诊断请求报文 message 0x7E8 DiagRes; // 诊断响应报文 msTimer responseTimer; // 响应计时器 byte currentSession; // 当前会话状态
}testcase TC10_004_InvalidSubfunction()
{// 预置条件设置 sysSetVariable(Diag::Session, 0x01); // 强制默认会话 currentSession 0x01;DiagReq.dlc 2; // 初始化DLC // 测试步骤执行 // 步骤1发送非法子功能请求 DiagReq.byte(0) 0x10; // 诊断会话控制服务 DiagReq.byte(1) 0x04; // 无效子功能码0x04output(DiagReq); // 发送请求 // 响应验证 testWaitForMessage(0x7E8, 1500); // 1.5秒响应超时 // 情况1通信超时 if(TestGetLastError() teTimeout) {testStepFail(错误ECU未在1.5秒内响应);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) 0x12) { // NRC校验 testStepPass(收到预期NRC 0x12);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 %02X %02X, DiagRes.byte(0), DiagRes.byte(1), DiagRes.byte(2));}// 后置清理 // 发送有效请求恢复会话 DiagReq.byte(1) 0x01; // 有效子功能码 output(DiagReq);testWaitForMessage(0x7E8, 1000); // 等待会话确认
}/*------------------------- 执行日志示例 -------------------------
[2025-02-15 11:16:32] TC10-004 测试启动
[2025-02-15 11:16:32] 当前会话状态0x01
[2025-02-15 11:16:32] 发送请求: 10 04 7E0
[2025-02-15 11:16:32] 收到响应: 7F 10 12 7E8
[2025-02-15 11:16:32] 测试通过子功能校验生效
[2025-02-15 11:16:33] 恢复默认会话成功
----------------------------------------------------------------*/代码执行流程图 #mermaid-svg-94EOelXr18CEbz83 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-94EOelXr18CEbz83 .error-icon{fill:#552222;}#mermaid-svg-94EOelXr18CEbz83 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-94EOelXr18CEbz83 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-94EOelXr18CEbz83 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-94EOelXr18CEbz83 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-94EOelXr18CEbz83 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-94EOelXr18CEbz83 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-94EOelXr18CEbz83 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-94EOelXr18CEbz83 .marker.cross{stroke:#333333;}#mermaid-svg-94EOelXr18CEbz83 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-94EOelXr18CEbz83 defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-94EOelXr18CEbz83 g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-94EOelXr18CEbz83 g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-94EOelXr18CEbz83 g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-94EOelXr18CEbz83 g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-94EOelXr18CEbz83 g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-94EOelXr18CEbz83 .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-94EOelXr18CEbz83 .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-94EOelXr18CEbz83 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-94EOelXr18CEbz83 .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-94EOelXr18CEbz83 .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-94EOelXr18CEbz83 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-94EOelXr18CEbz83 .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-94EOelXr18CEbz83 .edgeLabel .label text{fill:#333;}#mermaid-svg-94EOelXr18CEbz83 .label div .edgeLabel{color:#333;}#mermaid-svg-94EOelXr18CEbz83 .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-94EOelXr18CEbz83 .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-94EOelXr18CEbz83 .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-94EOelXr18CEbz83 .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-94EOelXr18CEbz83 .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-94EOelXr18CEbz83 .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-94EOelXr18CEbz83 .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-94EOelXr18CEbz83 #statediagram-barbEnd{fill:#333333;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-94EOelXr18CEbz83 .cluster-label,#mermaid-svg-94EOelXr18CEbz83 .nodeLabel{color:#131300;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-94EOelXr18CEbz83 .note-edge{stroke-dasharray:5;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-note text{fill:black;}#mermaid-svg-94EOelXr18CEbz83 .statediagram-note .nodeLabel{color:black;}#mermaid-svg-94EOelXr18CEbz83 .statediagram .edgeLabel{color:red;}#mermaid-svg-94EOelXr18CEbz83 #dependencyStart,#mermaid-svg-94EOelXr18CEbz83 #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-94EOelXr18CEbz83 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 0x10 0x04 初始化 状态检查 发送非法请求 响应监控 |超时| 通信故障 |7F响应| NRC校验 |0x12| 测试通过 |其他| 校验失败 |50响应| 协议漏洞 恢复会话 关键实现说明
三级响应验证体系
if(DiagRes.byte(0) 0x7F DiagRes.byte(1) 0x10 DiagRes.byte(2) 0x12) {// 完整匹配否定响应
}动态DLC适配机制
DiagReq.dlc (this.msgChannel CAN_CHANNEL_HSCAN) ? 3 : 2; // 根据总线类型调整 会话状态追踪器
on sysvar Diag::Session {currentSession this;write(会话状态变更记录0x%02X %dms, currentSession, timeNow());
}测试场景矩阵
测试用例请求报文预期响应通过标准有效子功能(0x01)10 0150 01不在此用例范围无效子功能(0x04)10 047F 10 12当前用例验证目标边界值测试(0x00)10 007F 10 12需额外测试用例覆盖超范围值测试(0xFF)10 FF7F 10 12需额外测试用例覆盖 增强型诊断功能
自动重试机制
// 添加重试逻辑最多3次
for(int i1; i3; i) {output(DiagReq);if(testWaitForMessage(0x7E8, 1000)) break;write(第%d次重试..., i);
}总线干扰测试
// 注入干扰报文
message 0x555 Disturbance {0xAA, 0xBB, 0xCC, 0xDD};
output(Disturbance); // 发送干扰帧 时序精确测量
// 精确记录响应时间
dword requestTime timeNow();
testWaitForMessage(0x7E8, 1500);
dword responseTime timeNow() - requestTime;
write(响应延迟%dms, responseTime);操作注意事项
测试前确认ECU诊断数据库已加载最新版本使用CANoe的Trace窗口过滤7E0和7E8报文建议执行以下扩展测试 连续发送10次非法请求测试稳定性在不同总线负载条件下(20%, 50%, 80%)重复测试组合测试先发送有效请求再发送无效请求
将代码集成到CANoe Test Module时需注意
在PreTest中执行环境检查if(sysGetVariable(Diag::Session) ! 0x01) {testReportWarning(预检查失败ECU未处于默认会话);
}建议配合使用testReportPicture记录关键测试步骤完整测试需要包含至少10次边界值测试循环