欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析④】

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

2025/2/26 20:01:29 来源:https://blog.csdn.net/qq_32462925/article/details/145647991  浏览:    关键词:【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析④】

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

作者:车端域控测试工程师
更新日期:2025年02月15日
关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023

TC10-004测试用例

用例ID测试场景验证要点参考条款预期结果
TC10-004非法子功能码检测发送0x10 0x04(无效子功能)§7.3.2返回NRC=0x12(子功能不支持)
/*-------------------------------------------------------------------测试用例 TC10-004:非法子功能码检测 标准依据:ISO 14229-1 §7.3.2 验证目标:发送无效子功能码时返回NRC=0x12 预期响应:7F 10 12(subFunctionNotSupported)
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8};  // 诊断请求报文 message 0x7E8 DiagRes;           // 诊断响应报文 msTimer responseTimer;           // 响应计时器 byte currentSession;             // 当前会话状态 
}testcase TC10_004_InvalidSubfunction() 
{//==================== 预置条件设置 ====================sysSetVariable("Diag::Session", 0x01);  // 强制默认会话 currentSession = 0x01;DiagReq.dlc = 2;                 // 初始化DLC //==================== 测试步骤执行 ====================// 步骤1:发送非法子功能请求 DiagReq.byte(0) = 0x10;          // 诊断会话控制服务 DiagReq.byte(1) = 0x04;          // 无效子功能码(0x04)output(DiagReq);                 // 发送请求 //==================== 响应验证 ====================testWaitForMessage(0x7E8, 1500); // 1.5秒响应超时 // 情况1:通信超时 if(TestGetLastError() == teTimeout) {testStepFail("错误:ECU未在1.5秒内响应");return;}// 情况2:否定响应验证 if(DiagRes.byte(0) == 0x7F) {// 三级响应校验 if(DiagRes.byte(1) != 0x10) {  // 服务ID校验 testStepFail("服务ID不匹配,收到0x%02X", DiagRes.byte(1));return;}if(DiagRes.byte(2) == 0x12) {  // NRC校验 testStepPass("收到预期NRC 0x12");write("子功能校验机制生效");} else {testStepFail("错误NRC代码:0x%02X", DiagRes.byte(2));}}// 情况3:意外肯定响应 else if(DiagRes.byte(0) == 0x50) {testStepFail("协议漏洞!收到正响应");sysSetVariable("Diag::Session", 0x01); // 强制恢复默认会话 }// 情况4:无效响应格式 else {testStepFail("收到未知响应:0x%02X %02X %02X", DiagRes.byte(0), DiagRes.byte(1), DiagRes.byte(2));}//==================== 后置清理 ====================// 发送有效请求恢复会话 DiagReq.byte(1) = 0x01;          // 有效子功能码 output(DiagReq);testWaitForMessage(0x7E8, 1000); // 等待会话确认 
}/*------------------------- 执行日志示例 ------------------------- 
[2025-02-15 11:16:32] TC10-004 测试启动 
[2025-02-15 11:16:32] 当前会话状态:0x01 
[2025-02-15 11:16:32] 发送请求: 10 04 @ 7E0 
[2025-02-15 11:16:32] 收到响应: 7F 10 12 @ 7E8 
[2025-02-15 11:16:32] 测试通过:子功能校验生效 
[2025-02-15 11:16:33] 恢复默认会话成功 
----------------------------------------------------------------*/

代码执行流程图

0x10 0x04
初始化
状态检查
发送非法请求
响应监控
|超时|
通信故障
|7F响应|
NRC校验
|0x12|
测试通过
|其他|
校验失败
|50响应|
协议漏洞
恢复会话

关键实现说明

  1. 三级响应验证体系
if(DiagRes.byte(0) == 0x7F && DiagRes.byte(1) == 0x10 && DiagRes.byte(2) == 0x12) {// 完整匹配否定响应 
}
  1. 动态DLC适配机制
DiagReq.dlc = (this.msgChannel == CAN_CHANNEL_HSCAN) ? 3 : 2; // 根据总线类型调整 
  1. 会话状态追踪器
on sysvar Diag::Session {currentSession = @this;write("会话状态变更记录:0x%02X @ %dms", currentSession, timeNow());
}

测试场景矩阵

测试用例请求报文预期响应通过标准
有效子功能(0x01)10 0150 01不在此用例范围
无效子功能(0x04)10 047F 10 12当前用例验证目标
边界值测试(0x00)10 007F 10 12需额外测试用例覆盖
超范围值测试(0xFF)10 FF7F 10 12需额外测试用例覆盖

增强型诊断功能

  1. 自动重试机制
// 添加重试逻辑(最多3次)
for(int i=1; i<=3; i++) {output(DiagReq);if(testWaitForMessage(0x7E8, 1000)) break;write("第%d次重试...", i);
}
  1. 总线干扰测试
// 注入干扰报文 
message 0x555 Disturbance = {0xAA, 0xBB, 0xCC, 0xDD};
output(Disturbance);  // 发送干扰帧 
  1. 时序精确测量
// 精确记录响应时间 
dword requestTime = timeNow();
testWaitForMessage(0x7E8, 1500);
dword responseTime = timeNow() - requestTime;
write("响应延迟:%dms", responseTime);

操作注意事项:

  1. 测试前确认ECU诊断数据库已加载最新版本
  2. 使用CANoe的Trace窗口过滤7E07E8报文
  3. 建议执行以下扩展测试:
    • 连续发送10次非法请求测试稳定性
    • 在不同总线负载条件下(20%, 50%, 80%)重复测试
    • 组合测试:先发送有效请求再发送无效请求

将代码集成到CANoe Test Module时需注意:

  1. PreTest中执行环境检查:
    if(sysGetVariable("Diag::Session") != 0x01) {testReportWarning("预检查失败:ECU未处于默认会话");
    }
    
  2. 建议配合使用testReportPicture记录关键测试步骤
  3. 完整测试需要包含至少10次边界值测试循环

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词