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(服务未支持) |
/*----------------------------------------------------------------*/
/* 测试用例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) ? "默认会话" : "其他会话");
}
增强功能解析
- 双阶段验证流程
-
关键技术升级
-
会话状态强制设置:
byte DefaultSessionReq[2] = {0x10, 0x01}; // 显式设置默认会话
-
双重超时机制:
setTimer(sessionTimer, 300); // 会话设置超时 setTimer(writeTimer, 250); // 写操作响应超时
-
实时状态跟踪:
on sysvar DiagSession::CurrentSession // 会话变量监控
-
异常处理增强
- 多级错误检测:
错误类型 检测方式 处理措施 会话设置失败 0x7F响应码 立即终止测试 意外会话模式 系统变量监控 记录状态日志 非法肯定响应 0x6E服务ID检测 标记安全漏洞 总线通信异常 连续超时检测 触发硬件故障警报
-
扩展验证建议
-
组合测试场景:
// 可扩展添加以下测试步骤: // 1. 尝试进入其他会话后验证写权限 // 2. 连续多次发送写请求 // 3. 不同数据长度的写操作尝试
-
安全增强检测:
void CheckSecurityAccess() {// 验证安全访问状态对写操作的影响 }
工程实践指南
-
环境配置要求
| 配置项 | 推荐规格 |
|----------------|-------------------------------|
| 总线负载率 | <60% |
| ECU供电电压 | 13.5V±0.2V |
| 测试工具 | CANoe 15.0+诊断功能包 |
| 硬件接口 | 带继电器控制的电源模块 | -
关键验证指标
| 验证维度 | 合格标准 | 测量方法 |
|----------------|-------------------------------|------------------------|
| 会话切换时间 | ≤200ms | 示波器抓取报文间隔 |
| NRC一致性 | 100%返回0x7E | 自动化脚本验证 |
| 错误响应率 | 非法请求拒绝率100% | 压力测试统计 |
| 状态跟踪精度 | 系统变量刷新周期≤50ms | 监控日志分析 | -
关联测试建议
- 配合TC07-011(会话模式切换稳定性测试)
- 结合TC12-004(服务可用性矩阵验证)
- 关联TC09-015(非法服务请求处理测试)
调试建议:
- 在
Write Window
设置触发条件:id==733h && byte(0)==7Fh
- 使用
Graphics
窗口同步显示以下信号:
DiagSession::CurrentSession
sysvar::ErrorCode
message::DiagResID.byte(2)
- 启用
Diagnostic Sequence Viewer
分析服务调用序列- 添加
Test Coverage
监控点:testAddCoverage("SESS-01", "Default session setup"); testAddCoverage("WRITE-05", "Service prohibition check");