news 2026/4/23 2:20:24

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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服务写数据时遇到的玄学问题,那才叫刺激...

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 2:03:53

BXMya 216VC62A/P1000 HESG324442R112 模拟输入模块

216VC62A/P1000 HESG324442R112是瑞典ABB公司旗下的工业级模拟输入模块&#xff0c;隶属于REG216数字控制系统扩展模块系列&#xff0c;是工业自动化控制系统、PLC/DCS系统及ABB REG216数字控制系统的核心信号采集与备件组件&#xff0c;适配ABB REG216主控制器、PLC系统、DCS系…

作者头像 李华
网站建设 2026/4/22 17:45:36

照着用就行:千笔AI,研究生论文写作救星

你是否曾为论文选题发愁&#xff0c;反复修改却仍不满意&#xff1f;面对海量文献无从下手&#xff0c;格式调整总出错&#xff0c;查重率又高得让人心慌&#xff1f;论文写作的每一步都像在闯关&#xff0c;稍有不慎就可能前功尽弃。如果你也在经历这些学术写作的困扰&#xf…

作者头像 李华
网站建设 2026/4/22 12:52:02

大数据基于协同过滤算法的校园食堂订餐系统 爬虫 可视化

目录协同过滤算法在校园食堂订餐系统中的应用数据爬虫设计与实现可视化分析模块系统架构设计项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作协同过滤算法在校园食堂订餐系统中的应用 协同过滤算法通过分析…

作者头像 李华
网站建设 2026/4/21 4:15:54

GW-40C/50C钢筋弯曲试验机

GW-40C/50C钢筋弯曲试验机一、概述&#xff1a;1. 钢筋弯曲试验机是对钢筋进行冷弯试验和平面反面弯曲试验的专用设备。其主要技术参数符合下标准&#xff1a;GB1499.1-2024《钢筋混凝土用钢1部分:热轧光圆钢筋》GB1499.2-2024《钢筋混凝土用钢第2部分:热轧带肋钢筋》YB/T 5126…

作者头像 李华
网站建设 2026/4/17 13:20:12

清华机试题目大概思路2C2176cjbPidK4FBABgmeBe7B3A

麻将猜猜猜&#xff1a;大模拟军训队列 - 加强版&#xff1a;加强版是斜率优化&#xff0c;但是加强加强版不会魔法学校&#xff1a;莫队线段树&#xff0c;但是时间复杂度是\(O(n\sqrt{n}\log n)\)&#xff0c;最大的测试点的时间是2.75ms偏差&#xff1a;两个数组做差分&…

作者头像 李华
网站建设 2026/4/17 20:51:52

ESD二极管以太网端口应用选型

ESD二极管以太网端口应用选型指南在以太网设备的设计中&#xff0c;静电放电&#xff08;ESD&#xff09;防护是确保产品长期稳定可靠运行的关键环节。以太网端口作为设备与外部网络连接的重要接口&#xff0c;极易在插拔、操作或特定环境中遭受静电冲击&#xff0c;导致PHY芯片…

作者头像 李华