【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑩】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase10

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

更新日期:2025年02月17日

关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023

TC10-010测试用例

用例ID 测试场景 验证要点 参考条款 预期结果
TC10-010 默认会话禁止写操作 在默认会话下尝试执行0x2E写服务 §7.6.2 返回NRC=0x7E(服务未支持)
cpp 复制代码
/*----------------------------------------------------------------*/
/* 测试用例ID      : TC10-010                                     */
/* 测试项名称      : 默认会话写操作禁止验证             */
/* 测试依据        : §7.6.2                                       */
/* 验证目标        : 1.成功进入默认会话                          */
/*                   2.返回NRC=0x7E(服务未支持)                 */
/* 作者            : 车端域控测试工程师                          */
/* 创建日期        : 2025-02-17                                   */
/*----------------------------------------------------------------*/
 
variables 
{
  // 诊断协议参数 
  const long DiagReqID = 0x732;    // 请求报文ID 
  const long DiagResID = 0x733;    // 响应报文ID 
  const byte DefaultSessionReq[2] = {0x10, 0x01};  // 默认会话请求 
  const byte WriteReq[3] = {0x2E, 0xF1, 0x90};     // 写数据请求 
  const byte ExpectedNRC = 0x7E;                   // 预期否定响应码 
  
  // 状态跟踪 
  msTimer sessionTimer;
  msTimer writeTimer;
  int isDefaultSession = 0;
}
 
testcase TC10_010_WriteProhibitionCheck()
{
  TestModuleTitle("TC10-010 默认会话写操作验证(增强版)");
  
  // 阶段1:强制进入默认会话 
  testStep("设置默认会话模式");
  message DiagReqID [CAN] {
    dlc = 2;
    byte(0) = DefaultSessionReq[0];
    byte(1) = DefaultSessionReq[1];
  }
  output(this);
  
  // 等待会话切换响应(带超时保护)
  setTimer(sessionTimer, 300);
  while(1) {
    if(TestWaitForMessage(DiagResID, 50)) {
      if(this.byte(0) == 0x50 && this.byte(1) == 0x01) {
        testStepPass("成功进入默认会话");
        isDefaultSession = 1;
        break;
      }
      else if(this.byte(0) == 0x7F) {
        testStepFail("会话设置失败 NRC=0x%02X", this.byte(2));
        return;
      }
    }
    
    if(getTimer(sessionTimer) >= 300) {
      testStepFail("会话设置超时");
      return;
    }
  }
 
  // 阶段2:执行写操作验证 
  if(isDefaultSession) {
    testStep("发送0x2E写服务请求");
    message DiagReqID [CAN] {
      dlc = 3;
      byte(0) = WriteReq[0];
      byte(1) = WriteReq[1];
      byte(2) = WriteReq[2];
    }
    output(this);
    
    // 响应验证(双重校验机制)
    setTimer(writeTimer, 250);
    while(1) {
      if(TestWaitForMessage(DiagResID, 50)) {
        // 否定响应验证 
        if(this.byte(0) == 0x7F && 
           this.byte(1) == WriteReq[0] && 
           this.byte(2) == ExpectedNRC) 
        {
          testStepPass("收到预期NRC=0x%02X", ExpectedNRC);
          testCasePass("验证成功");
          return;
        }
        // 意外肯定响应 
        else if(this.byte(0) == 0x6E) {
          testStepFail("检测到非法写操作成功");
          return;
        }
      }
      
      if(getTimer(writeTimer) >= 250) {
        testStepFail("写服务响应超时");
        return;
      }
    }
  }
}
 
/*--------------------------------------------------------------
  会话状态跟踪函数(示例)
--------------------------------------------------------------*/
on sysvar DiagSession::CurrentSession 
{
  // 实时跟踪会话状态变化 
  isDefaultSession = (@this::CurrentSession == 0x01) ? 1 : 0;
  testAddCondition("当前会话状态:%s", 
                  (isDefaultSession) ? "默认会话" : "其他会话");
}

增强功能解析

  1. 双阶段验证流程

是 否 NRC匹配 其他响应 强制会话设置 设置成功? 执行写操作 终止测试 响应验证 测试通过 测试失败

  1. 关键技术升级

  2. 会话状态强制设置:

    cpp 复制代码
    byte DefaultSessionReq[2] = {0x10, 0x01};  // 显式设置默认会话 
  3. 双重超时机制:

    cpp 复制代码
    setTimer(sessionTimer, 300);  // 会话设置超时 
    setTimer(writeTimer, 250);    // 写操作响应超时 
  4. 实时状态跟踪:

    cpp 复制代码
    on sysvar DiagSession::CurrentSession  // 会话变量监控 
  5. 异常处理增强

  • 多级错误检测:

    错误类型 检测方式 处理措施
    会话设置失败 0x7F响应码 立即终止测试
    意外会话模式 系统变量监控 记录状态日志
    非法肯定响应 0x6E服务ID检测 标记安全漏洞
    总线通信异常 连续超时检测 触发硬件故障警报
  1. 扩展验证建议

  2. 组合测试场景:

    cpp 复制代码
    // 可扩展添加以下测试步骤:
    // 1. 尝试进入其他会话后验证写权限 
    // 2. 连续多次发送写请求 
    // 3. 不同数据长度的写操作尝试 
  3. 安全增强检测:

    cpp 复制代码
    void CheckSecurityAccess()
    {
      // 验证安全访问状态对写操作的影响 
    }

工程实践指南

  1. 环境配置要求

    | 配置项 | 推荐规格 |

    |----------------|-------------------------------|

    | 总线负载率 | <60% |

    | ECU供电电压 | 13.5V±0.2V |

    | 测试工具 | CANoe 15.0+诊断功能包 |

    | 硬件接口 | 带继电器控制的电源模块 |

  2. 关键验证指标

    | 验证维度 | 合格标准 | 测量方法 |

    |----------------|-------------------------------|------------------------|

    | 会话切换时间 | ≤200ms | 示波器抓取报文间隔 |

    | NRC一致性 | 100%返回0x7E | 自动化脚本验证 |

    | 错误响应率 | 非法请求拒绝率100% | 压力测试统计 |

    | 状态跟踪精度 | 系统变量刷新周期≤50ms | 监控日志分析 |

  3. 关联测试建议

  • 配合TC07-011(会话模式切换稳定性测试)
  • 结合TC12-004(服务可用性矩阵验证)
  • 关联TC09-015(非法服务请求处理测试)

调试建议:

  1. Write Window设置触发条件:id==733h && byte(0)==7Fh

  2. 使用Graphics窗口同步显示以下信号:

    • DiagSession::CurrentSession
    • sysvar::ErrorCode
    • message::DiagResID.byte(2)
  3. 启用Diagnostic Sequence Viewer分析服务调用序列

  4. 添加Test Coverage监控点:

    cpp 复制代码
    testAddCoverage("SESS-01", "Default session setup");
    testAddCoverage("WRITE-05", "Service prohibition check");
相关推荐
BUG研究员_18 分钟前
JVM深入理解
java·jvm·学习
饮长安千年月3 小时前
Linksys WRT54G路由器溢出漏洞分析–运行环境修复
网络·物联网·学习·安全·机器学习
红花与香菇2____3 小时前
【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(上)
笔记·嵌入式硬件·学习·pcb设计·cadence·pcb工艺
一天八小时5 小时前
Docker学习进阶
学习·docker·容器
前端没钱5 小时前
前端需要学习 Docker 吗?
前端·学习·docker
郭顺发_5 小时前
NPM环境搭建指南
经验分享
拥有一颗学徒的心5 小时前
鸿蒙第三方库MMKV源码学习笔记
笔记·学习·性能优化·harmonyos
车端域控测试工程师6 小时前
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑰】
经验分享·学习·汽车·测试用例·capl
车端域控测试工程师6 小时前
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑪】
经验分享·学习·汽车·测试用例·capl
车载诊断技术6 小时前
电子电气架构 --- 电子电器新技术及发展趋势
网络·架构·汽车·电子电器框架·车载充电器(obc)·电子电器新技术及发展趋势