用 SavvyCAN 示例数据集复现 CAN 分析流程:三份 DBC 与 12 种格式

作者:

在

结论:SavvyCAN 自带的 examples/ 目录是最小成本的复现环境:三份示例 DBC 分别是 10 报文 22 信号的动力总线样本、501 报文 548 信号的大规模档案、6 报文 31 信号的部件级总线,量级相差约 80 倍,正好覆盖「小规模逐条核对—大规模过滤检索—部件级拓扑」三类分析动作。采集硬件并非必需,工具能直接读写 12 种日志格式(其中 3 种只读),因此用示例数据就能把整条流程走通。需要注意的是:三份示例都没有独立的年款适配与信号验证记录,且其中一份大规模档案在归档里还有 502 报文 761 信号的后续修订版,两者应按不同来源快照分别留存。

三份示例 DBC:量级差 80 倍,用途完全不同

把三份示例放在一张表里看,最直观的不是报文数,而是它们的性质差异:LeafPowertrainBus.dbc 是标注为 Leaf 的动力总线样本,规模小到可以逐条人工核对;ThinkCity.dbc 是 501 条报文的城市车档案,价值在于压测过滤与检索;bms.dbc 只有 6 条报文却命名了 EVTVBMS、GEVCU 与逆变器三类部件,是典型的部件级总线示意。

示例文件 报文数 信号数 文件性质 证据边界
LeafPowertrainBus.dbc 10 22 标注 Leaf 的动力总线示例 代数、年款、硬件与信号验证均未记录
ThinkCity.dbc 501 548 标注 Think City 的大规模档案 并非每条报文都确立了车型年款适用性
bms.dbc 6 31 部件级示例,含 EVTVBMS、GEVCU、逆变器 通用部件示意,不是某款整车的原厂 DBC
归档中的 ThinkCity_modified6.dbc 502 761 同名的后续大幅扩充修订版 与上一行是两个来源快照,不可互相覆盖

第四行值得单独说明:501/548 与 502/761 只差 1 条报文,信号数却差了 213 条。这说明后者的修订主要集中在信号定义而非报文条目扩充。归档时的正确做法是把两者当作独立快照各自留存,而不是用新版本替换旧版本。

用示例数据复现分析流程:每个文件演示什么

三份示例对应三种不同的分析动作。小规模样本适合验证「DBC 定义与原始字节是否自洽」,大规模档案适合验证「过滤、分组与检索是否好用」,部件级示例适合验证「多设备报文关系能否被正确建模」。把它们按这个顺序跑一遍,就能在不接硬件的前提下判断工具链是否完整。

分析动作 推荐示例 可验证的能力 演示不了什么
逐条核对信号定义 LeafPowertrainBus.dbc 报文清单浏览、信号曲线绘制、缩放与偏移是否自洽 代数与年款适配判定
大规模检索与过滤 ThinkCity.dbc 按 ID 区间过滤、按报文名搜索、大文件加载与刷新性能 逐条物理值的实测验证
部件级拓扑建模 bms.dbc 多设备(BMS、整车控制器、逆变器)报文归属与发送关系 整车级网络拓扑与网关行为
格式往返一致性 任意一份 + 日志导出 导入后再导出,比较 ID 与数据字节是否逐帧一致 时间戳在不同格式间的保真度差异
来源快照比对 ThinkCity.dbc 与修订版 同名报文在两版之间信号数变化的对比 哪一版更接近原车的判定

为什么「导入再导出」是最先该跑的一条

这条流程不需要理解任何信号含义,只需要比对 ID 与 8 个数据字节是否逐帧一致。它能一次性暴露三类问题:格式解析器的边界处理、扩展帧与标准帧的区分、以及多帧时序是否被保留。在这条通过之前,后续任何信号级分析都建立在不可靠的输入上。

十二种读写格式:九种可写,三种只读

工具的定位是「加载、保存与采集 CAN 帧」,用于可视化、逆向、调试与抓包。它明确说明采集设备并非必需,因此格式支持清单直接决定了它的离线分析能力边界。清单里前九种可读写,后三种只能读。

序号 格式 读写能力
1 BusMaster 日志文件 读 + 写
2 Microchip 日志文件 读 + 写
3 CRTD 格式(OVMS 日志格式) 读 + 写
4 GVRET 原生格式 读 + 写
5 通用 CSV(ID 加 D0 到 D7) 读 + 写
6 Vector Trace 文件 读 + 写
7 IXXAT Minilog 文件 读 + 写
8 CAN-DO 日志 读 + 写
9 Vehicle Spy 日志文件 读 + 写
10 CANDump / Kayak 只读
11 PCAN Viewer 只读
12 Wireshark socketcan PCAP 文件 只读

采集侧则走另一条路:除推荐的 CANDue 板(需运行 GVRET 固件)之外,可以使用任意 Qt SerialBus 驱动,包括 socketcan、Vector、PeakCAN 与 TinyCAN。也就是说,离线分析用文件,实车采集走 SerialBus,两条路径互不影响。

可复现环境:依赖全部在源码树内

这份工程不依赖源码树或 Qt 安装器之外的任何东西,绘图库 QCustomPlot 已直接集成进源码,无需单独下载。编译门槛集中在 Qt 版本上:因为依赖 QtSerialBus 及其他新特性,需要 5.14.0 或更高版本。

环境项 要求 说明
Qt 版本 5.14.0 或更高 低于此版本缺少 QtSerialBus,无法编译
屏幕分辨率 至少 1024×768 支持多显示器,4K 显示器可用
macOS 二进制 至少 macOS 10.15 针对当前二进制构建的要求
Qt6 支持 QT6WIP 分支,2026-03-11 用 Qt 6.9 测试通过 质量约为 beta,多数功能可用
绘图依赖 QCustomPlot 已集成 无需外部下载
Ubuntu 模块缺失 安装 libqt5serialbus5-dev、libqt5serialport5-dev、qtdeclarative5-dev、qttools5-dev 解决「Unknown module(s) in QT」类报错
调试构建 qmake CONFIG+=debug 后 make 获取更多运行期信息

标准编译路径是克隆仓库后依次执行 qmake 与 make,再直接运行可执行文件;Linux 上可用 ./install.sh 生成桌面快捷方式。若编译失败,官方给的第一步重试动作是重新 qmake、make clean、make;仍未解决则检查安装 Qt 时是否勾选了 SerialBUS 支持。

常见问题

没有采集硬件,能用 SavvyCAN 做分析吗?

可以。工具明确说明采集设备不是使用前提,它能直接加载并保存 12 种格式,其中 9 种可读可写,CANDump/Kayak、PCAN Viewer 与 Wireshark socketcan PCAP 三种为只读。用 examples/ 下的三份 DBC 配合日志文件即可跑完整条离线流程。

三份示例里哪份适合作为第一条分析流程?

建议从 bms.dbc 或 LeafPowertrainBus.dbc 这类小文件起步。LeafPowertrainBus.dbc 有 10 条报文 22 条信号,可以逐条核对缩放与偏移是否自洽;bms.dbc 有 6 条报文 31 条信号,适合看多设备报文归属。501 报文 548 信号的 ThinkCity.dbc 更适合压测检索与过滤性能。

ThinkCity.dbc 与归档里的另一份 ThinkCity 该怎么取舍?

不取舍,两份都要留。归档记录显示后者是同名的后续大幅扩充修订版,规模为 502 报文 761 信号,比前者多 1 条报文、多 213 条信号。两者属于不同的来源快照,正确做法是按各自 provenance 分别留存,而不是用新版覆盖旧版。

bms.dbc 能当整车 DBC 用吗?

不能。它是部件级示例,6 条报文 31 条信号里命名的是 EVTVBMS、GEVCU 与逆变器等部件,用于展示部件之间的报文关系。它既不是某款命名整车的原厂 DBC,也不包含整车级拓扑与网关行为。

Qt6 分支现在可以投入日常使用吗?

需按 beta 质量评估。仓库里的 QT6WIP 分支可配合 Qt6 编译,2026-03-11 用 Qt 6.9 测试通过,官方表述是「多数功能应该可用」,并请求反馈问题。若用于正式分析流程,仍建议以 Qt 5.14.0 或更高的稳定构建为主。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/collin80-savvycan-examples/SOURCE.md(三份示例 DBC 的报文数、信号数、SHA-256 与修订版快照关系)
  • 项目 01 —— public-can-dbc-datasets/additional/collin80-savvycan-examples/README.md(12 种读写格式、Qt 版本与分辨率要求、编译与排错步骤)

免责声明

本文所述示例 DBC 均为公开仓库中的演示文件,其代数、年款、硬件适配与信号验证均未在说明文件中确立,不代表车辆制造商的官方数据。文中数字均来自上述公开仓库的说明文件,未经独立实车验证。涉及安全相关用途时请仅作参考,并以实际测量与官方资料为准。

更新记录

  • 2026-10-14 初稿

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注