Skip to content
This repository was archived by the owner on Dec 8, 2025. It is now read-only.

sfxfs/dbc_decoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DBC Decoder

一个用于解析和转换 CAN 数据库文件(DBC)的 Python 工具。可以将 DBC 文件解码并导出为 JSON、文本或 CSV 格式,方便查看和分析 CAN 总线消息定义。

功能特性

  • 解析标准 DBC 文件格式
  • 支持多种导出格式:JSON、TXT、CSV
  • 详细的信号信息提取(起始位、长度、字节序、缩放因子等)
  • 保留枚举值和注释信息
  • 命令行工具和 Python API 两种使用方式
  • 可打印 DBC 文件摘要统计信息

安装

依赖要求

  • Python 3.7+
  • cantools

安装依赖

pip install -r requirements.txt

或直接安装:

pip install cantools

使用方法

方式一:命令行工具

基本用法

python dbc_decoder.py your_file.dbc

这将在当前目录生成三个文件:

  • your_file_decoded.json
  • your_file_decoded.txt
  • your_file_decoded.csv

使用 Shell 脚本(推荐)

chmod +x dbc_decoder.sh
./dbc_decoder.sh your_file.dbc

命令行选项

python dbc_decoder.py <dbc_file> [选项]

位置参数:
  dbc_file              DBC 文件路径

可选参数:
  -h, --help            显示帮助信息
  -o, --out-dir DIR     输出目录(默认:当前目录)
  -f, --formats FORMAT  导出格式,可选 json/text/csv(默认:全部)
  --indent N            JSON 缩进空格数(默认:2)
  -v, --verbose         打印 DBC 摘要信息

使用示例

# 仅导出 JSON 格式
python dbc_decoder.py sample.dbc -f json

# 导出到指定目录
python dbc_decoder.py sample.dbc -o ./output

# 导出 JSON 和 CSV,并显示摘要
python dbc_decoder.py sample.dbc -f json csv -v

# 自定义 JSON 缩进
python dbc_decoder.py sample.dbc -f json --indent 4

方式二:Python API

from dbc_decoder import DBCDecoder

# 创建解码器实例
decoder = DBCDecoder("your_file.dbc")

# 打印摘要信息
decoder.print_summary()

# 导出为 JSON 文件
decoder.save_as_json("output.json", indent=2)

# 导出为可读文本文件
decoder.save_as_text("output.txt")

# 导出为 CSV 文件
decoder.save_as_csv("output.csv")

# 获取解码后的字典数据
data = decoder.decode_to_dict()
print(data)

详细示例请参考 example_api.py

输出格式说明

JSON 格式

包含完整的结构化数据,适合程序解析:

{
  "version": "1.0",
  "dbc_file": "sample.dbc",
  "messages_count": 10,
  "messages": [
    {
      "name": "EngineData",
      "id": "0x100",
      "id_decimal": 256,
      "length": 8,
      "sender": "ECU",
      "cycle_time": 10,
      "comment": "发动机数据",
      "signals": [
        {
          "name": "EngineSpeed",
          "start_bit": 0,
          "length": 16,
          "byte_order": "little_endian",
          "is_signed": false,
          "scale": 1.0,
          "offset": 0.0,
          "minimum": 0.0,
          "maximum": 8000.0,
          "unit": "rpm",
          "choices": null,
          "comment": "发动机转速",
          "receivers": ["Dashboard"]
        }
      ]
    }
  ]
}

文本格式

易于阅读的格式化文本,适合人工查看:

DBC 文件解析结果
文件路径: sample.dbc
================================================================================

[1] 消息名称: EngineData
    消息 ID: 0x100 (256)
    数据长度: 8 字节
    发送节点: ECU
    周期时间: 10 ms
    注释: 发动机数据

    信号列表 (2 个信号):
    ----------------------------------------------------------------------------
    [1] 信号名称: EngineSpeed
        起始位: 0, 长度: 16 bits
        字节序: little_endian
        有符号: 否
        缩放因子: 1.0, 偏移量: 0.0
        范围: [0.0, 8000.0]
        单位: rpm
        注释: 发动机转速
        接收节点: Dashboard

CSV 格式

表格格式,适合在 Excel 或数据分析工具中使用,包含所有消息和信号的详细信息。

消息名称 消息ID(HEX) 消息ID(DEC) 消息长度(字节) 发送节点 周期(ms) 信号名称 起始位 长度(bits) ...
EngineData 0x100 256 8 ECU 10 EngineSpeed 0 16 ...

项目结构

dbc_decoder/
├── dbc_decoder.py      # 核心解码器实现
├── dbc_decoder.sh      # Shell 脚本包装器
├── example_api.py      # Python API 使用示例
├── requirements.txt    # 项目依赖
└── README.md          # 项目文档

技术细节

支持的信号属性

  • 信号名称和起始位置
  • 数据长度和字节序(大端/小端)
  • 有符号/无符号
  • 缩放因子和偏移量
  • 取值范围(最小值/最大值)
  • 单位
  • 枚举值映射(choices)
  • 注释和接收节点

自定义 JSON 编码器

项目实现了 DBCJSONEncoder 类来处理 cantools 库的特殊对象(如 Decimal 类型、NamedSignalValue 等),确保所有数据都能正确序列化为 JSON。

常见问题

Q: 支持哪些 DBC 文件版本?

A: 本工具基于 cantools 库,支持标准的 DBC 文件格式。具体支持的版本请参考 cantools 文档

Q: 如何处理大型 DBC 文件?

A: 工具可以处理任意大小的 DBC 文件,但生成的输出文件大小会相应增加。建议根据需要选择合适的导出格式。

Q: CSV 文件中文乱码怎么办?

A: CSV 文件使用 UTF-8 with BOM 编码,应该在 Excel 中正常显示中文。如果仍有问题,可以尝试用记事本打开后另存为 ANSI 编码。

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

相关资源

About

脚本工具用于解析 CAN DBC 文件并生成易于阅读的中文文档

Resources

License

Stars

Watchers

Forks