【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;
      }
    }
相关推荐
lalapanda8 分钟前
Unity学习part4
学习
啄缘之间2 小时前
4.6 学习UVM中的“report_phase“,将其应用到具体案例分为几步?
学习·verilog·uvm·sv
slomay2 小时前
项目汇报PPT转视频制作 | 有字幕和配音版
经验分享·github
易基因科技3 小时前
易基因: ChIP-seq+DRIP-seq揭示AMPK通过调控H3K4me3沉积和R-loop形成以维持基因组稳定性和生殖细胞完整性|NAR
经验分享·数据挖掘·生物学·生物信息学
Fansv5873 小时前
深度学习-2.机械学习基础
人工智能·经验分享·python·深度学习·算法·机器学习
爱学习的小王!4 小时前
nvm安装、管理node多版本以及配置环境变量【保姆级教程】
经验分享·笔记·node.js·vue
测试杂货铺4 小时前
接口测试及常用接口测试工具(Postman/Jmeter)
自动化测试·软件测试·测试工具·jmeter·测试用例·接口测试·postman
viperrrrrrrrrr74 小时前
大数据学习(49) - Flink按键分区状态(Keyed State)
大数据·学习·flink
red_redemption5 小时前
自由学习记录(36)
学习