☰
[Note-DBC]DBC制作
2026/10/10 2:36:26 网站建设 项目流程

记录DBC制作的基础流程及注意点

1、DBC结构介绍

项说明举例
Networks(最顶层)代表一整套 CAN 网络,一个 dbc 文件对应一个 Network
ECUs是设备对象,可以理解为硬件产品,Network nodes是这个 ECU 在总线上的通信节点身份。一个 ECU 硬件,对应一个 Network Node。
Network nodes(网络节点)CAN 总线上的通信端点,谁来发报文、谁收报文。例:VCU、BMS、MCU,每一个都是 Node;
Messages(报文 / CAN 帧)

总线传输的一整帧数据包(CAN 标准帧最大 8 字节,CAN FD 最多 64 字节)。

  • 每个 Message 拥有唯一 CAN-ID,DLC(数据长度)、发送周期、发送节点。
  • ✅ 关系:1 条 Message 里面,可以打包存放多个 Signals

例如:

ID=0x123 报文,8 字节数据,里面同时放:电机转速、电机温度、故障状态多个信号。

Signals

DBC 里最小数据单元,是 Message 内部的一段 bit 数据,代表一个物理量。

  • 属性:起始 bit、位长度、字节序(Motorola/Intel)、缩放因子、偏移、单位、最大最小值
  • 公式:物理值 = 原始值 × factor + offset
例子:报文第 0~15bit,定义为MotorSpeed,因子 0.1,单位 rpm。 抓到原始值 1500 → 物理转速 = 150 rpm

2、信号信息(以这两条报文为例)

报文 1:VCU→ECU 扭矩指令报文VCU2ECU_TorqCmd

项目参数
报文名称VCU2ECU_TorqCmd
CAN-ID0x120(标准帧)
DLC8
发送节点 (Transmitter)VCU
接收节点 (Receiver)ECU
发送类型

Cyclic 周期 100ms

报文内信号清单

信号名位长起始 Bit字节序符号FactorOffset单位物理范围说明
Torque_Cmd160MotorolaSigned0.10N·m-200~200目标扭矩指令
Torque_Limit_Max1616MotorolaUnsigned0.10N·m0~250最大扭矩限制
Motor_Enable232MotorolaUnsigned10-0~30: 禁止 1: 使能 2: 故障停机
Reserve1634MotorolaUnsigned10-0~63保留位,预留扩展
Drive_Mode440MotorolaUnsigned10-0~150: 经济 1: 动力 2: 蠕行
Reserve2444MotorolaUnsigned10-0~15保留
Reserve31648MotorolaUnsigned10-0~65535保留

报文 2:ECU→VCU 电机状态反馈报文ECU2VCU_MotorState

项目参数
报文名称ECU2VCU_MotorState
CAN-ID0x121(标准帧)
DLC8
发送节点 (Transmitter)ECU
接收节点 (Receiver)VCU
发送类型Cyclic 周期 100ms

VCU2ECU_TorqCmd(

信号名位长起始 Bit字节序符号FactorOffset单位物理范围说明
Motor_Speed160MotorolaSigned10rpm-8000~8000电机实际转速
Motor_Torque_Feedback1616MotorolaSigned0.10N·m-200~200实际输出扭矩
Motor_Temp832MotorolaUnsigned10℃0~250电机定子温度
Inverter_Temp840MotorolaUnsigned10℃0~250逆变器温度
Motor_Fault_Code848MotorolaUnsigned10-0~255故障码,0 = 无故障
Motor_Status456MotorolaUnsigned10-0~150: 待机,1: 运行,2: 故障,3: 停机
Reserve460MotorolaUnsigned10-0~15保留位

约定:Motorola 大端(汽车行业 DBC 默认)

3、DBC制作流程

(1)新建空白DBC数据库

  1. 打开 CANdb++ Editor
  2. 顶部菜单:File→Create Database
  3. 模板弹窗:选择CANTemplate.dbc(普通 CAN2.0A/B);如果是 CAN FD 选CAN_FD_Template.dbc,点 OK
  4. 保存弹窗:选择存放路径,文件名建议英文,不要中文空格,保存类型(*.dbc),点保存

此处模板按自己的需求选择即可,如CAN、CANFD、J1939等

设置DBC文件的名字

(2)节点创建

右键Network nodes,NEW

建好之后如下图,ECUs不用管,在节点中创建了ECU后,ECUs和Networks中会自动出现

  • Networks:总线网络对象,一套 DBC 代表 1 条 CAN/CAN‑FD 总线。
  • Tx Messages:本总线全部发送报文集合,所有 Message 都在这里汇总。
  • Signals:全局信号池,所有信号定义存放于此。

(3)新建 Signals(信号,最小数据单元)

依次把矩阵里全部 12 个信号新建完成:Torque_Cmd、Torque_Limit_Max、Motor_Enable、Reserve1、Drive_Mode、Reserve2、Reserve3、Motor_Speed、Motor_Torque_Feedback、Motor_Temp、Inverter_Temp、Motor_Fault_Code、Motor_Status、Reserve

枚举示例:Motor_Enable可以添加 Value Table 0=Motor_Disable,1=Motor_Enable,2=Motor_ErrStop

你在哪设设成什么结果(树里自动出现的位置)
报文 MessageTransmitter = 某个节点该节点的Tx Messages下出现这条报文
信号 Signal属于某条报文该报文下的Signals里出现这个信号;全局Signals列表也出现
信号 SignalReceivers = 某些节点这些节点下出现接收的信号(视版本,可能叫 Rx Signals)

(4)新建 Messages(CAN 报文 / 帧)

1)创建第 1 条报文 VCU2ECU_TorqCmd(ID:0x120,VCU 发送)

修改每个信号的start_bit(在创建信号的时候,没有地方可以设置,在信号加载到对应的CAN帧下后可以在此处设置)

2) 创建第 2 条报文 ECU2VCU_MotorState(ID:0x121,ECU 发送)

与VCU2ECU_TorqCmd一样

(5)一致性检查(必做!)

顶部菜单View→Consistency Check

  • 查看结果:Error 必须清零,Warning 可以按需评估 常见错误:
  1. Signal bit overlap:信号 bit 重叠,需要修改起始 bit
  2. Message without transmitter:报文没有绑定发送节点
  3. Duplicate CAN ID:ID 重复冲突

下面针对三种常见错误,给出具体的排查步骤和修改示例。

1) Signal bit overlap(信号 bit 重叠)

排查步骤:

  1. 双击报错信号,打开信号编辑窗口,查看其Start Bit和Length。
  2. 对照同一条报文下其它信号的起始 bit 和位长,确认重叠区间。
  3. 例如Torque_Cmd占 bit 0~15,若Torque_Limit_Max误设为起始 bit 8,则两者在 bit 8~15 重叠。

修改示例:将Torque_Limit_Max的起始 bit 从 8 调整为 16,使其占用 bit 16~31,与Torque_Cmd完全错开。

2) Message without transmitter(报文没有绑定发送节点)

排查步骤:

  1. 双击报错报文,打开 Message 编辑窗口。
  2. 检查Transmitter字段是否为空。
  3. 确认该报文应由哪个节点发送,例如VCU2ECU_TorqCmd应由 VCU 发送。

修改示例:在Transmitter下拉框中重新选择VCU并确认,保存后该报文会出现在 VCU 节点的Tx Messages下,报错消除。

3) Duplicate CAN ID(ID 重复冲突)

排查步骤:

  1. 在 Messages 列表中按 CAN ID 排序,检查是否存在相同 ID 的报文。
  2. 双击其中一条报文,记录其 ID,再与另一条对比。
  3. 例如两条报文都使用了0x120,即发生冲突。

修改示例:将其中一条报文的 ID 改为未占用的地址,例如把ECU2VCU_MotorState的 ID 从0x120改为0x121,确保全网 ID 唯一。

(6)保存 DBC,验证

Ctrl+S保存VCU_ECU_CAN.dbc

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询