CAN 通信冒烟测试
主要针对CAN的message ID/DLC和周期时间进行测试CAN需求文档例如CAN1的两帧数据Message IDMessage NameMessage TypeMessage LengthMessage Send TypeCycle Time(ms)0x109DoorAndLockStsCANFD_Standard8Cyclic100x300LockSettingStCANFD_Standard8Cyclic100两帧数据DoorAndLockSts 的Message ID 是0x109DLC是8周期发送发送周期是10LockSettingSt 的Message ID 是0x300DLC是8周期发送发送周期是100需要针对以上内容进行测试测试脚本/*!Encoding:936*/ includes { } variables { int res; // 文本事件等待返回结果 // Body_FD_CAN // ---- 帧 DoorAndLockSts (0x109) ---- int collect_DoorAndLockSts; dword timelist_DoorAndLockSts[8]; int idx_DoorAndLockSts; dword id_DoorAndLockSts; int dlc_DoorAndLockSts; // ---- 帧 LockSettingSt (0x300) ---- int collect_LockSettingSt; dword timelist_LockSettingSt[8]; int idx_LockSettingSt; dword id_LockSettingSt; } // ---------- 甯?DoorAndLockSts (0x109) : 鏈熸湜 DLC8, 鍛ㄦ湡10ms, 鍙戦€佹柟CVC_CP1 ---------- on message DoorAndLockSts { if (collect_DoorAndLockSts) { if (idx_DoorAndLockSts 4) { timelist_DoorAndLockSts[idx_DoorAndLockSts] timeNow(); idx_DoorAndLockSts; } else { TestSupplyTextEvent(DoorAndLockSts collect finished.); } id_DoorAndLockSts this.id; dlc_DoorAndLockSts this.dlc; } } export testcase Test_BODY_FD_Cycle_DoorAndLockSts_Period() { dword interval; collect_DoorAndLockSts 1; idx_DoorAndLockSts 0; res TestWaitForTextEvent(DoorAndLockSts collect finished., (10*6)); if (res ! 1) { testStepFail(msgCallBack, DoorAndLockSts(0x109) do not recv 4 within (10*6)ms, real recv %d times, idx_DoorAndLockSts); } if (id_DoorAndLockSts 0x109) { testStepPass(frameID Check, ID of DoorAndLockSts except 0x109, real 0x%x, id_DoorAndLockSts); } else { testStepFail(frameID Check, ID of DoorAndLockSts except 0x109, real 0x%x, id_DoorAndLockSts); } id_DoorAndLockSts -1; if (dlc_DoorAndLockSts 8) { testStepPass(frameDLC Check, DLC of DoorAndLockSts except 8, real %d, dlc_DoorAndLockSts); } else { testStepFail(frameDLC Check, DLC of DoorAndLockSts except 8, real %d, dlc_DoorAndLockSts); } dlc_DoorAndLockSts -1; for(; idx_DoorAndLockSts 1; idx_DoorAndLockSts--) { interval timelist_DoorAndLockSts[idx_DoorAndLockSts-1] - timelist_DoorAndLockSts[idx_DoorAndLockSts-2]; if(interval (10*90) interval (10*110)) { testStepPass(interval Check, DoorAndLockSts(0x109) interval No.%d [except: 10/-10%% || real: %d ms], 5-idx_DoorAndLockSts, interval/100); } else { testStepFail(interval Check, DoorAndLockSts(0x109) interval No.%d [except: 10/-10%% || real: %d ms], 5-idx_DoorAndLockSts, interval/100); } } idx_DoorAndLockSts 0; collect_DoorAndLockSts 0; } // ---------- 甯?LockSettingSt (0x300) : 鏈熸湜 DLC8, 鍛ㄦ湡100ms, 鍙戦€佹柟CVC_CP1 ---------- on message LockSettingSt { if (collect_LockSettingSt) { if (idx_LockSettingSt 4) { timelist_LockSettingSt[idx_LockSettingSt] timeNow(); idx_LockSettingSt; } else { TestSupplyTextEvent(LockSettingSt collect finished.); } id_LockSettingSt this.id; dlc_LockSettingSt this.dlc; } } export testcase Test_BODY_FD_Cycle_LockSettingSt_Period() { dword interval; collect_LockSettingSt 1; idx_LockSettingSt 0; // 绛夊緟閲囬泦瀹屾垚浜嬩欢, 瓒呮椂鍙栧懆鏈?6 浣滀负浣欓噺 res TestWaitForTextEvent(LockSettingSt collect finished., (100*6)); if (res ! 1) { testStepFail(msgCallBack, LockSettingSt(0x300) do not recv 4 within (100*6)ms, real recv %d times, idx_LockSettingSt); } // ID 鏍獙 if (id_LockSettingSt 0x300) { testStepPass(frameID Check, ID of LockSettingSt except 0x300, real 0x%x, id_LockSettingSt); } else { testStepFail(frameID Check, ID of LockSettingSt except 0x300, real 0x%x, id_LockSettingSt); } id_LockSettingSt -1; // DLC 鏍獙 if (dlc_LockSettingSt 8) { testStepPass(frameDLC Check, DLC of LockSettingSt except 8, real %d, dlc_LockSettingSt); } else { testStepFail(frameDLC Check, DLC of LockSettingSt except 8, real %d, dlc_LockSettingSt); } dlc_LockSettingSt -1; // 鍛ㄦ湡鏍獙: 瀹瑰樊 100ms /-10% - [100*90, 100*110] (timeNow 鍗曚綅) for(; idx_LockSettingSt 1; idx_LockSettingSt--) { interval timelist_LockSettingSt[idx_LockSettingSt-1] - timelist_LockSettingSt[idx_LockSettingSt-2]; if(interval (100*90) interval (100*110)) { testStepPass(interval Check, LockSettingSt(0x300) interval No.%d [except: 100/-10%% || real: %d ms], 5-idx_LockSettingSt, interval/100); } else { testStepFail(interval Check, LockSettingSt(0x300) interval No.%d [except: 100/-10%% || real: %d ms], 5-idx_LockSettingSt, interval/100); } } idx_LockSettingSt 0; collect_LockSettingSt 0; // 澶嶄綅閲囬泦寮€鍏? 閬垮厤褰卞搷鍚庣画鐢ㄤ緥 }更新版本/*!Encoding:936*/ // Optimized CAN smoke-test: data-driven refactor. // All per-frame state expected values live in one struct/map. // Each on message delegates to CollectFrame(); each testcase calls CheckPeriod(). includes { } variables { int res; // TestWaitForTextEvent return value struct FrameCfg { int collect; // collection switch dword timelist[8]; // timestamps int idx; // collected count dword id; // actual frame id int dlc; // actual dlc dword expId; // expected frame id int expDlc; // expected dlc int period; // expected period (ms): used for timeout tolerance }; struct FrameCfg gFrames[char]; // keyed by frame name } // ---------- one-line collectors (message name resolves its own network/channel) ---------- on message DoorAndLockSts { CollectFrame(DoorAndLockSts, this.id, this.dlc); } on message LockSettingSt { CollectFrame(LockSettingSt, this.id, this.dlc); } } // ---------- testcases: 3 lines each ---------- export testcase Test_BODY_FD_Cycle_DoorAndLockSts_Period() { gFrames[DoorAndLockSts].collect 1; gFrames[DoorAndLockSts].idx 0; CheckPeriod(DoorAndLockSts); } export testcase Test_BODY_FD_Cycle_LockSettingSt_Period() { gFrames[LockSettingSt].collect 1; gFrames[LockSettingSt].idx 0; CheckPeriod(LockSettingSt); }

相关新闻

ChatGPT Plus订阅与Codex CLI启动报错排查指南:从安装到配置全流程

ChatGPT Plus订阅与Codex CLI启动报错排查指南:从安装到配置全流程

最近不少人在折腾 ChatGPT 的订阅和 Codex,尤其是桌面版弹“ChatGPT failed to start. Unable to locate the Codex CLI binary”这种错误。这个报错乍一看像软件坏了,实际上多半是 Codex CLI 没有装好,或者 ChatGPT 桌面应用找不到 CLI 路径…

2026/8/30 19:13:32 阅读更多 →
近场声全息(NAH)工程实践:从麦克风阵列到声源定位的完整技术栈

近场声全息(NAH)工程实践:从麦克风阵列到声源定位的完整技术栈

简介:本资源是一套面向声学工程研究者与高校相关专业学生的近场声全息MATLAB实现方案,聚焦于声成像中的全息重建核心问题,适用于噪声源定位、结构振动分析及无损检测等实际场景。压缩包共10个文件,含6个MATLAB脚本(.m&…

2026/8/30 19:13:32 阅读更多 →
1600mA车规PoC电感如何选?从偏置网络到实测避坑全解析

1600mA车规PoC电感如何选?从偏置网络到实测避坑全解析

最近在给下一代车载环视摄像头做PoC供电链路选型,正好赶上TDK发布面向汽车应用的新型Power-Over-Coax(PoC)电感,额定电流一路推到了1600 mA。这个数值放在三五年前的车规级PoC电感里几乎不敢想。今天想结合我自己在设计PoC偏置网络…

2026/8/30 19:13:32 阅读更多 →

最新新闻

Windows平台CMake 3.24.4部署与实战:从环境配置到跨平台构建

Windows平台CMake 3.24.4部署与实战:从环境配置到跨平台构建

简介:本资源为 CMake 3.24.4 官方 Windows x64 版本安装包,面向使用 Visual Studio、MinGW 或 Ninja 构建 C/C 项目的开发者、高校计算机专业学生及嵌入式软件工程师,解决跨平台项目配置、构建脚本编写与自动化编译流程搭建等核心问题。压缩包…

2026/8/30 19:51:47 阅读更多 →
星环科技秋招笔试C卷全解析:SQL窗口函数、算法题与大数据场景设计

星环科技秋招笔试C卷全解析:SQL窗口函数、算法题与大数据场景设计

博主去年秋招参与了星环科技的笔试流程,拿到的是C卷。考完之后最大的感受是: 这套题和互联网大厂的那套刷题逻辑,完全是两码事。 星环做的是大数据基础软件,从分布式存储到计算引擎再到数据仓库平台都有自研产品,所以…

2026/8/30 19:51:47 阅读更多 →
x32dbg动态调试实战:从汇编反推还原C语言源码结构

x32dbg动态调试实战:从汇编反推还原C语言源码结构

很多刚接触 x32dbg/x64dbg 的读者,第一反应是“我能看懂每一条汇编指令,但看不懂整个函数在干什么”。尤其是面对从 C 语言编译出来的二进制程序时,CPU 只会执行寄存器、栈和内存操作,但你心里清楚,这些指令背后原本是…

2026/8/30 19:51:47 阅读更多 →
基于QT5与WinPcap仿Wireshark网络抓包工具开发实战

基于QT5与WinPcap仿Wireshark网络抓包工具开发实战

简介:这是一套面向网络协议学习者、网络安全初学者及C/QT开发者的仿Wireshark网络抓包工具源码工程,解决网络数据包捕获、解析与可视化分析的实践需求,适用于课程实验、协议逆向分析、教学演示及底层网络编程能力训练。压缩包共392个文件&…

2026/8/30 19:51:47 阅读更多 →
维普AIGC报告只在实验结果分析部分飘红:助研君分段修改教程

维普AIGC报告只在实验结果分析部分飘红:助研君分段修改教程

维普AIGC报告只在实验结果分析部分飘红:助研君分段修改教程 许多理工科与医学专业的研究生在收到维普 AIGC 检测报告时,都会遇到一个非常典型且棘手的问题:维普AIGC报告只在实验结果分析部分飘红怎么办?论文前面的文献综述、方法…

2026/8/30 19:50:47 阅读更多 →
知网二代标红文献综述中的概念定义怎么改:助研君按字符处理实测

知网二代标红文献综述中的概念定义怎么改:助研君按字符处理实测

知网二代标红文献综述中的概念定义怎么改:助研君按字符处理实测 在工科与经管类硕士学位论文的绪论撰写中,文献综述往往是 AIGC 检测的重灾区:知网二代标红文献综述中的概念定义怎么改?许多同学发现,自己明明是一字一…

2026/8/30 19:50:47 阅读更多 →

日新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/8/30 0:00:01 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/8/30 0:00:01 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/8/30 0:00:01 阅读更多 →

周新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/8/30 0:00:01 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/8/30 0:00:01 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/8/30 0:00:01 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/29 4:34:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/30 18:07:21 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/29 2:05:18 阅读更多 →