Canmetry
打开工作台

把 DBC 导出成 Excel 或 CSV

拖入一个 DBC,就得到可以筛选、评审和交付的工作簿:信号一张表,报文一张表,值表一张表。数据不上传,中文注释也不会乱码。

把 DBC 文件拖到这里

或

支持最大 150 MiB 的 .dbc 文件,只在你的电脑上读取,不会上传。

DBC 文件一般怎么打开

DBC 是一种纯文本文件,是为 Vector 的 CANdb++ 设计的。没有这个工具,或者文本太密不好读的时候,转成表格是最快的办法。

  1. CANdb++ Editor

    Vector 的编辑器是打开 DBC 的标准工具,只能在 Windows 上运行,通常随 Vector 的软件一起安装。所以供应商、测试台架或者一台 Mac 笔记本,往往没法直接打开这个文件。

  2. 其他编辑器和库

    Kvaser Database Editor、SavvyCAN 和 Python 的 cantools 也能读 DBC。但每一个都要再装一个软件或写脚本,也都不能直接给你一张可以筛选、可以分享的清单。

  3. 文本编辑器

    任何编辑器都能打开 DBC,但一个信号的信息散在文件各处:SG_ 定义行、注释(CM_)、值表(VAL_)和属性(BA_)分别在不同的位置。看清一个信号,要搜索四次。

  4. 表格

    导出会把这些合并成每个信号一行:起始位、系数、单位、接收节点、注释和值表并排放着,可以直接筛选、分享,或者贴进测试用例。

工作簿里有什么

最多五张表,列固定,所以可以直接筛选、做数据透视,或读进 pandas。

ABCDEF
1报文ID(十六进制)发送节点信号起始位系数
2EngineData0x1A0ECUEngine_Speed160.25
3EngineData0x1A0ECUCoolant_Temp81
4EngineData0x1A0ECUThrottle_Pos320.4
5BrakeStatus0x2C4ESPBrake_Pressure00.1
6BrakeStatus0x2C4ESPPedal_Active121
  • 信号

    每个信号一行,带上它所属的报文。多数人要的就是这张表。

  • 报文

    每条报文一行:ID、帧格式、DLC、发送节点、周期,以及它带多少个信号。

  • 值表

    每个取值一行,一个有八种状态的信号会变成八行,方便搜索。全局值表也会列出。

  • 节点

    每个 ECU,以及它发送的报文数和接收的信号数。

  • 属性

    有取值的网络、节点、报文和信号属性,比如 GenMsgCycleTime 或项目自定义的字段。

平铺列表还是通信矩阵

信号表有两种排版,按接下来拿文件做什么来选。

平铺列表

每一行都重复报文名、ID 和发送节点。可以按 ID 筛选、按发送节点透视、读进 pandas,或者逐行对比两次导出。

通信矩阵

每条报文只出现一次,信号列在它下面,报文之间有分隔线。看起来像供应商发来的通信矩阵,适合评审和交付。

人们为什么要导出 DBC

多数需求来自没有 CANdb++ 的人,或者想把信号清单放到可以随手批注的地方的人。

  • 交付一份通信矩阵

    台架、供应商和客户常常只需要接口清单。工作簿哪里都能打开,也不需要任何工具授权。

  • 和测试团队评审信号

    按发送或接收节点筛选,加一列评审状态,标出下一次路试要验证的信号。

  • 针对信号写测试用例

    每个信号一行,带取值范围、单位和值表,写测试用例时可以直接引用边界值和期望值。

  • 对比两个版本的 DBC

    把两个版本都导成平铺列表再对比。新增、删除和换算变了的信号都会表现为变化的行,比直接看文本差异好读。

在 Excel 里容易踩的坑

DBC 里有几个习惯放进表格会显得奇怪,这里说明各自是怎么处理的。

  • 扩展帧 ID

    DBC 存 29 位 ID 时会把第 31 位置 1,所以原始数字看起来像 2147483648 加上 ID。表里给出真实的总线 ID(十六进制和十进制),旁边是帧格式。

  • 十六进制与十进制 ID

    ID 以 0x1A0 这样的文本写入,Excel 不会把它当成数字或日期。旁边另有一列十进制,方便查找。

  • Vector__XXX 节点

    DBC 在没有定义真实节点时用 Vector__XXX 占位。表里把这样的发送或接收节点留空,不列占位符。

  • 周期

    周期取自 GenMsgCycleTime 属性。DBC 没有定义时,这一格保持为空,不去猜。

  • 中文注释

    没有 BOM 的 UTF-8 CSV 会被 Excel 读成乱码。这里的 CSV 带 BOM,xlsx 存的是 Unicode 文本,所以中文注释和值描述都不会丢。GBK 编码的 DBC 会先解码再导出。

  • 多路复用信号

    「复用」一列会标出复用器信号和每个信号对应的开关值,能看出哪些信号共用同一段位。

DBC 转 Excel 常见问题

怎么把 DBC 文件转成 Excel?

拖入 .dbc 文件,选好要导出的表和排版,点「下载 Excel」。每张表都有冻结的表头和筛选。如果要交给别的工具,可以把某张表下载成 CSV。

我的 DBC 会被上传吗?

不会。文件在浏览器里读取和转换,工作簿也在你的电脑上生成,不会发送到任何服务器。

能把 Excel 再转回 DBC 吗?

不能。这个页面只负责导出,在工作簿里做的修改无法写回。请把 DBC 当作唯一来源,用 CANdb++ 或文本编辑器来改。

xlsx 和 CSV 有什么区别?

xlsx 包含你勾选的所有表,有样式表头和筛选。CSV 只有一张表,就是预览里当前显示的那张,适合脚本和数据库。

会包含值表吗?

会,有两种方式。信号表可以带一列值描述,比如 0=Off; 1=On;值表这张表则把每个取值单独列成一行。

中文注释和值描述会保留吗?

会。GBK 和 GB18030 的 DBC 会被识别并解码,两种输出都是 Unicode。CSV 开头带 BOM,Excel 能正确打开。

为什么中文页面导出的表头是中文?

表头跟随页面语言。如果脚本或查表需要英文列名,请使用英文页面。

能转换多大的 DBC?

最大 150 MiB,远超任何真实的 DBC。Excel 约一百万行的上限也不是问题:再大的 DBC 也就几千个信号。

没有 CANdb++,怎么打开 DBC 文件?

DBC 是纯文本,用文本编辑器就能打开,但不好读:每个信号的注释、值表和属性都存放在文件的别处。在这里导出成 Excel 或 CSV,每个信号一行就能看全;也可以用 DBC 查看器直接在屏幕上浏览。