当前位置: 首页 > news >正文

canoe capl写的uds基础代码脚本测试用例 1、10服务和22服务测试用例,拿去参考...

canoe capl写的uds基础代码脚本测试用例 1、10服务和22服务测试用例,拿去参考,自己搭的发送和接收函数,拿去做做基本的uds测试没问题。 2、节点dtc丢失与恢复测试,19服务读取dtc,验证dtc存在。

最近在折腾UDS诊断测试脚本,顺手整理了点基础测试用例。拿canoe的CAPL撸代码其实挺有意思的,虽然一开始被字节序折腾得够呛。分享两个常用服务的测试套路,直接上硬货。

canoe capl写的uds基础代码脚本测试用例 1、10服务和22服务测试用例,拿去参考,自己搭的发送和接收函数,拿去做做基本的uds测试没问题。 2、节点dtc丢失与恢复测试,19服务读取dtc,验证dtc存在。

先说10服务和22服务这对黄金搭档。会话控制配数据读取,简直就是诊断界的泡面搭档。我习惯把收发函数单独封装,比如这样:

// 发送请求报文 void SendRequest(byte serviceId, byte subFunc, byte dataIdentifer[]) { byte msg[8]; msg[0] = 0x03; // 假设是单帧 msg[1] = serviceId; msg[2] = subFunc; if(serviceId == 0x22) { msg[3] = dataIdentifer[0]; msg[4] = dataIdentifer[1]; } // 发送到总线... } // 接收响应处理 on message 0x732 // 假设响应ID { if(this.byte(0) == 0x03) { // 正响应 if(this.byte(1) == 0x50) { // 10服务响应 write("会话模式切换成功"); } else if(this.byte(1) == 0x62) { // 22响应 parseData(this.byte(3), this.byte(4)); // 解析数据 } } else { // 负响应 handleNRC(this.byte(2)); // 处理错误码 } }

测试10服务的时候重点玩转子服务参数。比如先切默认会话再切编程模式:

testCase("10服务_默认会话") { SendRequest(0x10, 0x01, null); // 等响应 if(getRespCode() != 0x50) { testFail("没切到默认会话"); } } testCase("10服务_编程会话") { SendRequest(0x10, 0x02, null); // 这里可能需要安全访问 if(getRespCode() == 0x7F) { retryWithSecurity(); } }

22服务测试要特别注意数据对齐。比如读取车速0xF40A:

testCase("22服务_读取车速") { byte did[2] = {0xF4, 0x0A}; SendRequest(0x22, 0x00, did); // 假设车速是uint16类型 word speed = (respData[0] << 8) | respData[1]; if(speed > 300) { testWarning("车速数据异常"); } }

再说说DTC测试这个磨人的小妖精。19服务最骚的操作是带状态掩码查询。比如突然拔掉某个节点电源模拟DTC丢失:

// 正常状态读取DTC testCase("19服务_DTC存在") { SendRequest(0x19, 0x0A, null); // 读取所有DTC if(findDTC(0xP1234) == 0) { testFail("该有的DTC没找到"); } } // 断电后检测 testCase("节点DTC丢失") { powerOff(Node_ECU1); delay(1000); SendRequest(0x19, 0x0A, null); if(findDTC(0xP1234) == 1) { testFail("断电后DTC还在?"); } } // 恢复供电后检测 testCase("DTC恢复测试") { powerOn(Node_ECU1); doCyclicDTCUpdate(); // 模拟运行几个循环 SendRequest(0x19, 0x0A, null); if(findDTC(0xP1234) == 0) { testFail("DTC没自动恢复"); } }

这里有个坑要注意:19服务响应的DTC列表是打包成三字节一组,得用位运算拆解:

int findDTC(long searchDTC) { for(int i=0; i<respDataLen; i+=3) { long dtc = (respData[i] << 16) | (respData[i+1] << 8) | respData[i+2]; if((dtc & 0x00FFFF) == searchDTC) { return 1; } } return 0; }

实际测试中发现有些ECU喜欢在DTC状态字节里玩花样,比如0x08表示待处理故障。这时候得把状态掩码玩明白:

byte statusMask = 0x08; // 只关注待处理故障 SendRequest(0x19, 0x0A, &statusMask);

这些测试脚本虽然基础,但足够应付80%的日常验证。特别是新搭环境的时候,拿这几个用例当探针,能快速摸清ECU的响应套路。下次再聊聊用0x2E服务写数据时遇到的玄学问题,那才叫刺激...

http://www.jsqmd.com/news/365861/

相关文章:

  • 2026年全国杀菌剂厂家权威榜单 智能精准防控 适配多作物场景 涵盖大田果蔬茶园 - 深度智识库
  • 什么是渗透测试?
  • 照着用就行:千笔AI,研究生论文写作救星
  • 甄选十大留学中介,南京本土资深团队定制申学突围方案 - 博客湾
  • 实验用猴材料全攻略:组织 / 全血 / 血清 / 血浆厂家推荐 - 品牌推荐大师
  • 2026 福州英语雅思培训教育机构推荐、雅思培训课程中心权威口碑榜单 - 老周说教育
  • 上海留学中介外籍导师团队:名校海归顾问配置哪家更全? - 博客湾
  • 2026 福州英语雅思培训教育机构推荐;雅思培训课程中心权威口碑榜单 - 老周说教育
  • 避坑指南!2026北京月嫂服务公司推荐排行 数字化管理+安全保障 - 极欧测评
  • 2026层流布气罩选型指南:四大核心场景适配品牌评估及采购决策框架 - 博客万
  • Vue3 计算属性详解及用法
  • 纯正的复合益生菌oem 2026年益生菌贴牌厂家怎么选?精选5大核心维度权威测评 - 博客万
  • 2026 珠海英语雅思培训教育机构推荐|雅思培训课程中心权威口碑榜单 - 老周说教育
  • 美国留学中介面试辅导:模拟演练哪家还原度更高? - 博客湾
  • 2026年高低温试验箱行业推荐报告:半导体/军工级需求下的优选品牌 - 博客万
  • 腾讯企业微信官方授权服务商和美字节简介
  • 上海留学中介国际学校服务:IB/A-Level体系申请谁家更懂? - 博客湾
  • 世界硒都藏好物! 鄂达生物云山金子山黄精,解锁千年养生新方式 - 博客万
  • 2026 石家庄英语雅思培训教育机构推荐:雅思培训课程中心权威口碑榜单 - 老周说教育
  • 2026 福州英语雅思培训教育机构推荐,雅思培训课程中心权威口碑榜单 - 老周说教育
  • 北京留学机构排名TOP10,量身打造方案提升录取率 - 博客湾
  • 2026 惠州英语雅思培训教育机构推荐,雅思培训课程中心权威口碑榜单 - 老周说教育
  • 住人集装箱、彩钢棚采购指南:2026四川十大移动房厂商实力榜 - 深度智识库
  • 2026 石家庄英语雅思培训教育机构推荐|雅思培训课程中心权威口碑榜单 - 老周说教育
  • 推荐效果好的招聘软件平台?亲测这6款真高效 - 博客万
  • 2025-2026年装配式内装怎么选?三大领军品牌实力推荐助你轻松搞定装修 - 匠言榜单
  • TencentOS Server 常见问题
  • 北京留学机构大揭秘:优选机构评测与选择宝典 - 博客湾
  • P5854 【模板】笛卡尔树
  • 上海留学中介TOP10:长三角高端留学谁家更强? - 博客湾