制作网站如何选择主机,网址大全下载安装,中国纪检监察报投稿,做app软件大概多少钱ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase05
作者#xff1a;车端域控测试工程师 更新日期#xff1a;2025年02月15日 关键词#xff1a;UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023
TC10-005测试用例
用例ID测试场景验证要点参考条款预期…ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase05
作者车端域控测试工程师 更新日期2025年02月15日 关键词UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023
TC10-005测试用例
用例ID测试场景验证要点参考条款预期结果TC10-005默认会话切换至扩展会话发送0x10 0x03请求扩展会话§7.4.1收到0x50 0x03响应
/*-------------------------------------------------------------------测试用例 TC10-005默认会话切换至扩展会话 标准依据ISO 14229-1 §7.4.1 验证目标成功切换至扩展会话模式 预期响应0x50 0x03肯定响应
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq {dlc8}; // 诊断请求报文 message 0x7E8 DiagRes; // 诊断响应报文 msTimer sessionTimer; // 会话计时器 byte currentSession; // 当前会话状态
}testcase TC10_005_DefaultToExtendedSession()
{// 预置条件设置 sysSetVariable(Diag::Session, 0x01); // 强制默认会话 currentSession 0x01;// 验证初始状态 if(sysGetVariable(Diag::Session) ! 0x01) {testStepAbort(初始化失败ECU未处于默认会话);return;}// 测试步骤执行 // 步骤1发送扩展会话请求 DiagReq.byte(0) 0x10; // 诊断会话控制服务 DiagReq.byte(1) 0x03; // 子功能扩展会话 DiagReq.dlc 2;output(DiagReq); // 发送请求 // 响应验证 testWaitForMessage(0x7E8, 1000); // 1秒响应超时 // 情况1通信超时 if(TestGetLastError() teTimeout) {testStepFail(错误ECU未在1秒内响应);return;}// 情况2收到肯定响应 if(DiagRes.byte(0) 0x50 DiagRes.byte(1) 0x03) {testStepPass(成功进入扩展会话);write(当前会话状态0x%02X, sysGetVariable(Diag::Session));// 验证系统变量同步更新 if(sysGetVariable(Diag::Session) 0x03) {testStepPass(会话状态同步验证通过);} else {testStepFail(会话状态未更新当前0x%02X, sysGetVariable(Diag::Session));}}// 情况3收到否定响应 else if(DiagRes.byte(0) 0x7F) {testStepFail(收到否定响应 NRC0x%02X, DiagRes.byte(2));}// 情况4无效响应 else {testStepFail(收到未知响应0x%02X %02X, DiagRes.byte(0), DiagRes.byte(1));}// 后置清理 // 恢复默认会话 DiagReq.byte(1) 0x01; // 默认会话子功能 output(DiagReq);testWaitForMessage(0x7E8, 500); // 等待会话恢复确认
}/*------------------------- 执行日志示例 -------------------------
[2025-02-15 14:35:12] TC10-005 测试启动
[2025-02-15 14:35:12] 当前会话状态0x01
[2025-02-15 14:35:12] 发送请求: 10 03 7E0
[2025-02-15 14:35:12] 收到响应: 50 03 7E8
[2025-02-15 14:35:12] 系统会话状态已更新0x03
[2025-02-15 14:35:12] 测试通过成功进入扩展会话
[2025-02-15 14:35:13] 恢复默认会话成功
----------------------------------------------------------------*/代码执行流程图 #mermaid-svg-suTEvzDpbA32yep3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-suTEvzDpbA32yep3 .error-icon{fill:#552222;}#mermaid-svg-suTEvzDpbA32yep3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-suTEvzDpbA32yep3 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-suTEvzDpbA32yep3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-suTEvzDpbA32yep3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-suTEvzDpbA32yep3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-suTEvzDpbA32yep3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-suTEvzDpbA32yep3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-suTEvzDpbA32yep3 .marker.cross{stroke:#333333;}#mermaid-svg-suTEvzDpbA32yep3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-suTEvzDpbA32yep3 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-suTEvzDpbA32yep3 text.actortspan{fill:black;stroke:none;}#mermaid-svg-suTEvzDpbA32yep3 .actor-line{stroke:grey;}#mermaid-svg-suTEvzDpbA32yep3 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-suTEvzDpbA32yep3 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-suTEvzDpbA32yep3 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-suTEvzDpbA32yep3 .sequenceNumber{fill:white;}#mermaid-svg-suTEvzDpbA32yep3 #sequencenumber{fill:#333;}#mermaid-svg-suTEvzDpbA32yep3 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-suTEvzDpbA32yep3 .messageText{fill:#333;stroke:#333;}#mermaid-svg-suTEvzDpbA32yep3 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-suTEvzDpbA32yep3 .labelText,#mermaid-svg-suTEvzDpbA32yep3 .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-suTEvzDpbA32yep3 .loopText,#mermaid-svg-suTEvzDpbA32yep3 .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-suTEvzDpbA32yep3 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-suTEvzDpbA32yep3 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-suTEvzDpbA32yep3 .noteText,#mermaid-svg-suTEvzDpbA32yep3 .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-suTEvzDpbA32yep3 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-suTEvzDpbA32yep3 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-suTEvzDpbA32yep3 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-suTEvzDpbA32yep3 .actorPopupMenu{position:absolute;}#mermaid-svg-suTEvzDpbA32yep3 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-suTEvzDpbA32yep3 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-suTEvzDpbA32yep3 .actor-man circle,#mermaid-svg-suTEvzDpbA32yep3 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-suTEvzDpbA32yep3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 测试系统 ECU 强制设置默认会话(0x01) 确认会话状态 发送10 03请求 响应50 03 验证会话状态更新 发送恢复默认会话请求 确认响应 测试系统 ECU 关键实现说明
双重状态验证机制
// 报文响应验证
if(DiagRes.byte(0) 0x50 DiagRes.byte(1) 0x03) // 系统变量验证
if(sysGetVariable(Diag::Session) 0x03)动态总线适配
// 自动检测总线类型设置DLC
DiagReq.dlc (this.msgChannel CAN_CHANNEL_HSCAN) ? 3 : 2;实时会话监控
on sysvar Diag::Session {currentSession this;write(实时会话状态0x%02X, currentSession);
}增强型错误处理
连续状态监测
// 添加会话状态变化监控
on sysvar Diag::Session changed {testReportPicture(会话状态变更, 时间%t 状态0x%02X, timeNow(), this);
}电压波动测试
// 模拟电压波动场景
sysSetVariable(PowerVoltage, 13.5);
testWaitForTimeout(1000);
sysSetVariable(PowerVoltage, 10.5);异常报文注入
// 在测试过程中注入错误报文
message 0x123干扰报文 {0xAA, 0xBB, 0xCC};
output(干扰报文);操作指南
使用CANoe的Graphics窗口监控Diag::Session变量在Diagnostic Console中手动验证会话状态建议测试步骤 冷启动立即测试热复位后测试连续执行10次切换操作测试稳定性 使用testReportMerge合并多轮测试结果
将本代码集成到CANoe Test Module时需注意
确认ECU诊断数据库已加载0x10服务定义在Test Setup中设置Diag::Session变量的读写权限建议配合使用IL层日志记录详细通信过程
遇到测试失败时可参考以下排查步骤
检查ECU的诊断地址配置验证ECU软件版本是否支持扩展会话使用Bus Statistics分析总线负载情况检查测试序列中是否存在会话冲突操作