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) ? "默认会话" : "其他会话");
}
增强功能解析
- 双阶段验证流程
是 否 NRC匹配 其他响应 强制会话设置 设置成功? 执行写操作 终止测试 响应验证 测试通过 测试失败
-
关键技术升级
-
会话状态强制设置:
cppbyte DefaultSessionReq[2] = {0x10, 0x01}; // 显式设置默认会话
-
双重超时机制:
cppsetTimer(sessionTimer, 300); // 会话设置超时 setTimer(writeTimer, 250); // 写操作响应超时
-
实时状态跟踪:
cppon sysvar DiagSession::CurrentSession // 会话变量监控
-
异常处理增强
-
多级错误检测:
错误类型 检测方式 处理措施 会话设置失败 0x7F响应码 立即终止测试 意外会话模式 系统变量监控 记录状态日志 非法肯定响应 0x6E服务ID检测 标记安全漏洞 总线通信异常 连续超时检测 触发硬件故障警报
-
扩展验证建议
-
组合测试场景:
cpp// 可扩展添加以下测试步骤: // 1. 尝试进入其他会话后验证写权限 // 2. 连续多次发送写请求 // 3. 不同数据长度的写操作尝试
-
安全增强检测:
cppvoid 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
监控点:
cpptestAddCoverage("SESS-01", "Default session setup"); testAddCoverage("WRITE-05", "Service prohibition check");