DBC与Excel互转工具(EasyDBC)
EasyDBC 是一款用于DBC文件与Excel文件双向转换的工具,旨在简化CAN/LIN总线开发中数据库文件的编辑与管理流程。工具内置Excel模板校验功能,确保数据格式合规性,同时提供直观的GUI界面,降低操作门槛。
核心功能:DBC → Excel 转换、Excel → DBC 转换、DBC→C代码、DBC模板文件生成、Excel数据校验、CAN报文格式转换
适用场景:汽车电子CAN总线开发、嵌入式系统通信数据库编辑、CANoe/CANalyzer/CANdb++工具数据交互
开发语言:Python 3.x
当前版本:V1.0.0
使用前需安装以下Python依赖库,建议通过pip命令批量安装:
pip install -r requirements.txt
依赖列表
| 依赖库 | 版本要求 | 用途说明 |
|---|---|---|
cantools | ≥37.0.0 | DBC文件解析与生成 |
openpyxl | ≥3.1.2 | Excel文件读写与格式设置 |
PyQt5 | ≥5.15.9 | 图形用户界面(GUI)开发 |
直接运行主程序文件,启动GUI界面:
python EasyDBC.py
在GUI界面点击「生成模板」按钮
工具将自动在当前工作目录生成两个模板文件:
点击「选择文件」,选择待转换的 .dbc 文件
点击「选择路径」,指定转换后Excel文件的保存目录
点击「转换」,工具自动生成 xxx_converted.xlsx 文件
Excel模板请以工具生成的 template.xlsx模板为准,禁止修改表头格式,否则会导致转换失败。
工具会对Excel文件进行自动校验,校验不通过将终止转换并提示错误原因。校验范围包括但不限于:
| 校验项 | 校验规则 |
|---|---|
| 表头格式校验 | 必须与模板完全一致(如“Message Name 报文名称”“Signal Name 信号名称”) |
| 报文名称唯一性校验 | 所有“报文名称”不可重复 |
| 报文ID校验 | 16进制格式(如0x100),且不可重复 |
| 报文长度校验 | CAN协议:8字节;CAN FD协议:8-64字节。本工具生成的DBC默认为支持CAN FD,增加了报文长度选项约束 |
| 报文周期时间校验 | 非负整数(单位:ms),支持空值(表示非周期报文) |
| 信号名称唯一性校验 | 所有“信号名称”不可重复 |
| 信号最值校验 | 物理最小值 ≤ 物理最大值;总线最小值(16进制)与物理值计算逻辑一致。如果在编写Excel时不想计算总线最值,可以留空,只填写物理最值即可,本工具在生成dbc时会自动计算总线最值,DBC验证完毕后可以使用本工具进行dbc转excel操作,会在新的Excel中自动添加16进制的总线最值。注意:物理最值不可留空 |
| 节点有效性校验 | 节点必须关联至少1条报文,不允许“无意义节点”存在(仅存在节点但没有报文关联) |
Excel模板中部分列已设置固定下拉选项,不可手动输入其他值,包括:
| 列名 | 可选值 |
|---|---|
| 报文类型(CAN Type) | CAN、CAN FD |
| 报文长度(Message Length) | 8, 12, 16, 20, 24, 32, 48, 64 |
| 报文格式(Message Type) | CAN Extended(扩展帧)、CAN Standard(标准帧) |
| 发送类型(Message Send Type) | Cycle(周期)、Event(事件)、On Change(变化触发)、Trigger(触发) |
| 排列格式(Byte Order) | Motorola(大端)、Intel(小端) |
| 数据类型(Data Type) | Unsigned(无符号)、Signed(有符号)、Float、Double |
| 节点收发标识 | T(发送)、R(接收) |
| 函数名 | 功能描述 | 参数说明 |
|---|---|---|
excel_to_dbc() | 将Excel文件转换为DBC文件 | excel_file:输入Excel路径;dbc_file:输出DBC路径 |
dbc_to_excel() | 将DBC文件转换为Excel文件 | dbc_file_path:输入DBC路径;excel_file_path:输出Excel路径 |
create_excel_template() | 生成标准Excel模板文件 | excel_file_path:模板保存路径 |
create_dbc_template() | 生成标准DBC模板文件 | dbc_file_path:模板保存路径 |
validate_excel_template() | 校验Excel文件格式与数据合法性 | excel_file_path:待校验Excel路径;返回True(通过)/False(失败) |
dbc_to_c() | DBC文件转C代码 | dbc_file_path:目标DBC文件,c_file_path:代码保存路径 |
界面分为「文件选择区」「操作区」「日志区」三部分:
文件选择区:选择待转换文件(.dbc/.xlsx)与输出路径
操作区:包含「生成模板」「转换」「DBC转C代码」三个核心按钮,支持一键操作
日志区:实时显示操作过程(如文件选择、转换进度、错误提示)
作者:polaris
更新日期:2025-11-14
后续计划:
支持LIN总线LDF文件与Excel互转
增加批量转换功能(多文件批量处理)
增加DBC文件语法校验功能
本工具仅用于CAN总线开发辅助,转换结果需结合CANoe/CANalyzer/CANdb++等工具二次验证,避免因数据错误导致硬件故障。
建议在转换前备份原始DBC/Excel文件,工具不对数据丢失或格式错误承担责任。
不支持非标准DBC扩展格式(如自定义属性、用户定义信号类型),此类文件转换可能导致信息丢失。