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

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase11

作者:车端域控测试工程师

更新日期:2025年02月18日

关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023

TC11-011测试用例

用例ID 测试场景 验证要点 参考条款 预期结果
TC11-011 复位服务参数越界检测 发送0x11 0x01 0xAA(非法参数) §7.1.3 返回NRC=0x31(参数越界)

以下是为TC11-011设计的增强型CAPL测试用例,包含参数边界检测与异常处理机制,包含执行流程图和工业级验证策略:

cpp 复制代码
/*----------------------------------------------------------
  Title:TC11-011 复位服务参数越界验证 
  作者:车端域控测试工程师 
  日期:2025-02-18 
------------------------------------------------------------*/
 
variables {
  // 诊断通信参数 
  const long DiagReqID = 0x732;       // 诊断请求标识符 
  const long DiagResID = 0x733;       // 诊断响应标识符 
  const byte ResetSID = 0x11;         // ECU复位服务 
  const byte ResetSubFunc = 0x01;     // 硬件复位子功能 
  const byte InvalidParam = 0xAA;     // 非法参数值 
  const byte ExpectedNRC = 0x31;      // 预期否定响应码 
  
  // 测试控制参数 
  msTimer responseTimer;
  byte actualNRC = 0x00;
}
 
testcase TC11_011_ParameterBoundaryTest() 
{
  TestModuleTitle("TC11-011 复位服务参数越界验证");
  
  // ███ 阶段1:构造非法请求 ███ 
  testStep("STEP1 发送含非法参数的复位请求");
  
  message DiagReqID [CAN] {
    dlc = 3;
    byte(0) = ResetSID;          // 复位服务ID 
    byte(1) = ResetSubFunc;      // 子功能号 
    byte(2) = InvalidParam;      // 非法参数 
  }
  output(this);
  
  // ███ 阶段2:响应捕获与分析 ███ 
  testStep("STEP2 验证否定响应");
  setTimer(responseTimer, 500);  // 设置500ms响应窗口 
  
  while(getTimer(responseTimer) < 500) 
  {
    if(TestWaitForMessage(DiagResID, 100)) 
    {
      // 否定响应格式验证 
      if(this.byte(0) == 0x7F &&        // 否定响应标识 
         this.byte(1) == ResetSID &&    // 服务ID回显 
         this.byte(2) == ExpectedNRC) 
      {
        actualNRC = this.byte(2);
        testStepPass("收到预期NRC=0x%02X", ExpectedNRC);
        break;
      }
      // 异常响应处理 
      else if(this.byte(0) == 0x7F) 
      {
        actualNRC = this.byte(2);
        testStepFail("收到错误NRC=0x%02X", actualNRC);
        break;
      }
    }
  }
  
  // ███ 阶段3:综合结果判定 ███ 
  testStep("STEP3 最终结果确认");
  if(actualNRC == ExpectedNRC) {
    testCasePass("参数越界检测机制正常");
  } else if(actualNRC == 0x00) {
    testCaseFail("ECU无响应");
  } else {
    testCaseFail("NRC异常(实际:0x%02X)", actualNRC);
  }
}
 
/*----------------------------------------------------------
  总线监控扩展模块(调试辅助)
----------------------------------------------------------*/
on message DiagResID 
{
  // 实时显示诊断响应 
  if(this.byte(0) == 0x7F) {
    testAddLog("收到NRC=0x%02X @%dms", 
              this.byte(2), timeNow() - testGetStartTime());
  }
}

流程图解(执行逻辑可视化)
Tester ECU 复位请求(0x11 0x01 0xAA) 参数有效性校验 NRC=0x31 验证响应码正确性 Tester ECU

关键参数说明表

参数名称 示例值 工程校准要点
非法参数值 0xAA 需覆盖OEM定义的参数范围
响应超时窗口 500ms 需大于ECU最大处理时间2倍
否定响应格式 7F 11 31 ISO 14229标准响应结构
参数校验机制 范围检查 需验证ECU参数表完整性

工业级增强功能

  1. 参数遍历测试

    cpp 复制代码
    void ExecuteParamRangeTest() {
      // 扩展测试:
      // 1. 遍历所有非法参数值(0x00-0xFF)
      // 2. 边界值测试(0x00,0x01,0xFE,0xFF)
      // 3. 随机参数注入 
    }
  2. ECU状态监控

    cpp 复制代码
    on sysvar ECU::ParameterCheck {
      testAddLog("参数校验状态码:0x%02X", @this::ParameterCheck);
    }
  3. 压力测试扩展

    cpp 复制代码
    void ExecuteStressTest() {
      // 可扩展:
      // 1. 连续发送100次非法请求 
      // 2. 混合合法/非法请求 
      // 3. 总线负载90%场景测试 
    }

测试执行说明

  1. 环境配置建议

    ini 复制代码
    [Diagnostic]
    P2Server_Max = 3000 
    P3Server_Timeout = 10000 
  2. 结果判定矩阵

    检查项 通过标准 验证方法
    响应格式 7F 11 31三字节结构 报文解析
    响应时间 ≤250ms 时间戳比对
    ECU行为 未触发任何复位操作 电源监控
    日志记录 记录非法参数访问事件 安全日志分析

调试技巧:

  1. Write窗口添加过滤条件快速定位关键报文:

    bash 复制代码
    id == 733h && (byte(0) == 7Fh || byte(0) == 51h)
  2. 使用Graphic窗口监控关键信号:

    ini 复制代码
    sysvar::ECU::ResetAttempts 
    sysvar::Diag::InvalidParamCount 
  3. 添加总线触发条件捕获异常:

    cpp 复制代码
    on message DiagResID {
      if(this.byte(0) == 0x7F && this.byte(2) != 0x31) {
        write("发现异常NRC: 0x%02X", this.byte(2));
        break;
      }
    }
相关推荐
阿尔帕兹1 小时前
测试用例及黑盒测试方法
测试用例
ghost1432 小时前
C#学习第27天:时间和日期的处理
开发语言·学习·c#
m0_634448893 小时前
从上下文学习和微调看语言模型的泛化:一项对照研究
学习·算法·语言模型
程序员杰哥4 小时前
接口自动化测试之pytest 运行方式及前置后置封装
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
hello kitty w5 小时前
Python学习(6) ----- Python2和Python3的区别
开发语言·python·学习
虾球xz5 小时前
CppCon 2014 学习: An Overview of C++11/14
开发语言·c++·学习
viperrrrrrrrrr75 小时前
大数据学习(128)-数据分析实例
大数据·学习·数据分析
一心赚狗粮的宇叔6 小时前
web全栈开发学习-01html基础
前端·javascript·学习·html·web
一点.点8 小时前
ISO 22737——解读自动驾驶相关标准法规(LSAD)
自动驾驶·汽车
重庆小透明9 小时前
【从零学习JVM|第二篇】字节码文件
java·jvm·学习