【ISO14229-1:2023UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】
- 电脑硬件
- 2025-08-31 21:57:01

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)); }测试架构深度解析
三阶段验证流程 #mermaid-svg-cTn3wyGOgYYA8oNo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cTn3wyGOgYYA8oNo .error-icon{fill:#552222;}#mermaid-svg-cTn3wyGOgYYA8oNo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cTn3wyGOgYYA8oNo .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-cTn3wyGOgYYA8oNo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cTn3wyGOgYYA8oNo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cTn3wyGOgYYA8oNo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cTn3wyGOgYYA8oNo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cTn3wyGOgYYA8oNo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cTn3wyGOgYYA8oNo .marker.cross{stroke:#333333;}#mermaid-svg-cTn3wyGOgYYA8oNo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cTn3wyGOgYYA8oNo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-cTn3wyGOgYYA8oNo .cluster-label text{fill:#333;}#mermaid-svg-cTn3wyGOgYYA8oNo .cluster-label span{color:#333;}#mermaid-svg-cTn3wyGOgYYA8oNo .label text,#mermaid-svg-cTn3wyGOgYYA8oNo span{fill:#333;color:#333;}#mermaid-svg-cTn3wyGOgYYA8oNo .node rect,#mermaid-svg-cTn3wyGOgYYA8oNo .node circle,#mermaid-svg-cTn3wyGOgYYA8oNo .node ellipse,#mermaid-svg-cTn3wyGOgYYA8oNo .node polygon,#mermaid-svg-cTn3wyGOgYYA8oNo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-cTn3wyGOgYYA8oNo .node .label{text-align:center;}#mermaid-svg-cTn3wyGOgYYA8oNo .node.clickable{cursor:pointer;}#mermaid-svg-cTn3wyGOgYYA8oNo .arrowheadPath{fill:#333333;}#mermaid-svg-cTn3wyGOgYYA8oNo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-cTn3wyGOgYYA8oNo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-cTn3wyGOgYYA8oNo .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-cTn3wyGOgYYA8oNo .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-cTn3wyGOgYYA8oNo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-cTn3wyGOgYYA8oNo .cluster text{fill:#333;}#mermaid-svg-cTn3wyGOgYYA8oNo .cluster span{color:#333;}#mermaid-svg-cTn3wyGOgYYA8oNo 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-cTn3wyGOgYYA8oNo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否定响应 肯定响应 匹配 不匹配 异常请求触发 响应类型判断 NRC码验证 异常标记 测试通过 失败分析 超时监控 终止流程关键技术实现
精准服务识别:
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");【ISO14229-1:2023UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【ISO14229-1:2023UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】”