当前位置: 首页 > news >正文

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】

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));
}

测试架构深度解析

  1. 三阶段验证流程
否定响应
肯定响应
匹配
不匹配
异常请求触发
响应类型判断
NRC码验证
异常标记
测试通过
失败分析
超时监控
终止流程
  1. 关键技术实现

  2. 精准服务识别:

    if(this.byte(0) == 0x7F && this.byte(1) == InvalidSubFuncReq[0])
    
  3. 动态超时控制:

    setTimer(responseTimer, 200);  // 200ms严格响应窗口 
    while(getTimer(responseTimer) < 200) { ... }
    
  4. 多重防护机制:

    // 同时检测:
    // 1. 响应报文结构 
    // 2. 服务ID匹配 
    // 3. 特定NRC码 
    
  5. 异常处理矩阵
    | 异常类型 | 检测方式 | 处理措施 |
    |----------------|---------------------------|----------------------------|
    | 无效NRC码 | 字节偏移量验证 | 记录具体错误码 |
    | 非法服务支持 | 0x51肯定响应检测 | 标记协议违规 |
    | 总线静默 | 200ms超时机制 | 终止测试流程 |
    | 数据长度异常 | DLC值校验 | 触发格式错误警报 |

  6. 扩展验证建议

  7. 参数化测试扩展:

    struct SubfunctionTestSet {byte serviceID = 0x11;byte invalidSubfunc = 0xFF;byte expectedNRC = 0x12;dword timeout = 200;
    };
    
  8. 边界值测试扩展:

    void ExecuteBoundaryTests() {// 可测试:// 0x00 - 保留值边界 // 0x7F - 最大标准值 // 0x80 - 扩展子功能边界 
    }
    
  9. 服务矩阵验证:

    void CheckServiceMatrix(byte serviceID) {// 验证服务支持矩阵的完整性 
    }
    

工程实践指南

  1. 环境配置要求
    | 配置项 | 规格要求 |
    |----------------|-------------------------------|
    | 测试工具 | CANoe 15.0+(带Diagnostics) |
    | 硬件接口 | VN1630/VN8970 |
    | ECU供电 | 可编程电源(9-16V) |
    | 协议版本 | UDS 1.4.0 |

  2. 关键指标分析
    | 验证维度 | 合格标准 | 测量方法 |
    |----------------|---------------------------|------------------------|
    | 响应时间 | ≤150ms | 示波器触发测量 |
    | NRC一致性 | 100%返回0x12 | 自动化脚本验证 |
    | 错误检测率 | 非法请求拒绝率100% | 压力测试统计 |
    | 协议合规性 | 符合ISO14229-1要求 | 协议分析仪检测 |

  3. 执行注意事项

  • 测试前确保ECU处于默认会话模式
  • 禁用其他可能修改诊断状态的测试用例
  • 建议在ECU冷启动后立即执行
  • 避免与刷写操作测试并行执行
  1. 关联测试建议
  • 配合TC07-015(有效子功能边界值测试)
  • 结合TC09-018(非法服务ID检测)
  • 关联TC12-007(诊断服务支持矩阵验证)

调试技巧:

  1. Write Window设置过滤器:id==733h && byte(0)==7Fh
  2. 使用Graphics窗口绘制NRC分布图
  3. 启用Diagnostic Event Viewer跟踪服务交互
  4. 添加Test Coverage监控点:
    testAddCoverage("SVC-0x11", "Subfunction validation");
    testAddCoverage("NRC-0x12", "Subfunction not supported");
    

http://www.mrgr.cn/news/91392.html

相关文章:

  • 【复现DeepSeek-R1之Open R1实战】系列4:跑通GRPO!
  • Web后端 - Maven管理工具
  • 自制简单的图片查看器(python)
  • 基于JAVA开发APISIX插件实战(1)-开发、部署、调试
  • 【私人笔记】Web前端
  • 音视频入门基础:RTP专题(9)——FFmpeg接收RTP流的原理和内部实现
  • 轮播图html
  • 级联选择器多选动态加载
  • 无缝对接[系列2]:在VSCode中继续接入本地DeepSeek的完整指南---实现代码协助编写~
  • 【机器学习】线性回归 多元线性回归
  • DeepSeek R1 与 OpenAI O1:机器学习模型的巅峰对决
  • MYSQL数据库集群高可用和数据监控平台
  • 机器学习基本篇
  • 【个人总结】1. 开发基础 工作三年的嵌入式常见知识点梳理及开发技术要点(欢迎指正、补充)
  • Sprinig源码解析
  • IMX6ULL的公板的以太网控制器(MAC)与物理层(PHY)芯片(KSZ8081RNB)连接的原理图分析(包含各引脚说明以及工作原理)
  • 计算机网络(涵盖OSI,TCP/IP,交换机,路由器,局域网)
  • Python 基础-循环
  • set的使用(c++)
  • 【对比】Pandas 和 Polars 的区别