news 2026/4/17 9:37:45

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/17 9:36:34

2026年转行网络安全:薪资详解+工作安排+前景分析(新手必看)

2026年转行网络安全&#xff1a;薪资详解工作安排前景分析&#xff08;新手必看&#xff09; 2026年&#xff0c;数字化转型进入深水区&#xff0c;网络威胁呈现复杂化、智能化特征&#xff0c;APT攻击、数据泄露等安全事件频发&#xff0c;叠加《网络安全法》《数据安全法》的…

作者头像 李华
网站建设 2026/4/16 13:13:30

TencentOS Server 产品简介

TencentOS Server 是腾讯云针对云的场景研发的 Linux 操作系统&#xff0c;提供特定的功能及性能优化&#xff0c;为云服务器实例中的应用程序提供更高的性能及更加安全可靠的运行环境。TencentOS Server 基于 Linux 内核自主研发设计&#xff0c;积累了腾讯在操作系统领域超过…

作者头像 李华
网站建设 2026/4/16 11:43:14

导师又让重写?8个降AI率网站深度测评与推荐

在如今的学术写作中&#xff0c;AI 工具已经成为许多学生完成论文的重要助手。然而&#xff0c;随着高校对 AIGC&#xff08;人工智能生成内容&#xff09;检测技术的不断升级&#xff0c;单纯依赖 AI 写作可能带来高查重率和明显的 AI 痕迹问题&#xff0c;导致论文被判定为“…

作者头像 李华
网站建设 2026/4/16 18:05:49

【安全】Web渗透测试(全流程)_渗透测试学习流程图

1 信息收集 1.1 域名、IP、端口 域名信息查询&#xff1a;信息可用于后续渗透 IP信息查询&#xff1a;确认域名对应IP&#xff0c;确认IP是否真实&#xff0c;确认通信是否正常 端口信息查询&#xff1a;NMap扫描&#xff0c;确认开放端口 发现&#xff1a;一共开放两个端口&…

作者头像 李华
网站建设 2026/4/16 19:42:28

基于大数据爬虫的可视化考研推荐系统

目录大数据爬虫的可视化考研推荐系统摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作大数据爬虫的可视化考研推荐系统摘要 该系统通过大数据爬虫技术采集考研相关数据&#xff08;如院校信息、专业排名…

作者头像 李华