跳到主要内容

DBC 文件文件介绍

DBC(Database CAN)文件是一种用于描述 CAN(控制器局域网)消息和信号的标准化文件格式。它广泛用于汽车和工业领域,以便定义 CAN 网络中节点之间的数据传输规则。以下是 DBC 文件的内容格式解读:


1. 文件结构

DBC 文件的内容主要由以下几个部分组成:

  1. 版本信息 (VERSION)
  2. 新节点定义 (BU_)
  3. 消息定义 (BO_)
  4. 信号定义 (SG_)
  5. 值表定义 (VAL_)
  6. 属性定义 (BA_)
  7. 注释 (CM_)
  8. 信号值描述 (VAL_)
  9. 其他扩展信息

2. 主要语法和内容

2.1 版本信息

VERSION "1.0"
  • 描述 DBC 文件的版本号(可选)。

2.2 新节点定义

BU_: Node1 Node2 Node3
  • BU_ 表示 "Bus Unit",即 CAN 总线上的节点。
  • 后面列出所有在 CAN 网络中定义的节点名称。

2.3 消息定义

BO_ 123 MessageName: 8 SenderNode
  • BO_ 表示 "Message Definition"。
  • 123 是消息 ID(CAN 报文的标识符)。
  • MessageName 是消息的名称。
  • 8 是数据长度,单位为字节。
  • SenderNode 是发送该消息的节点名称。

2.4 信号定义

SG_ SignalName : StartBit|Length@ByteOrder+ValueType (Factor,Offset) [Min|Max] "Unit" ReceiverNodes
  • SG_ 表示信号定义。
  • SignalName 是信号的名字。
  • StartBit 是信号在消息中的起始位。
  • Length 是信号的位长度。
  • ByteOrder 是字节顺序:
    • 0 表示 Motorola(大端模式)
    • 1 表示 Intel(小端模式)
  • ValueType 表示信号的值类型:
    • + 表示无符号数。
    • - 表示有符号数。
  • (Factor, Offset) 是信号值的缩放因子和偏移量。
  • [Min|Max] 是信号的最小值和最大值。
  • "Unit" 是信号的物理单位(如 "km/h", "V", "°C")。
  • ReceiverNodes 是接收该信号的节点列表。

示例:

SG_ Speed : 0|16@1+ (0.1,0) [0|250] "km/h" Node1 Node2
  • 信号名为 Speed,从第 0 位开始,占 16 位,小端模式,无符号数。
  • 缩放因子为 0.1,偏移量为 0。
  • 最小值为 0,最大值为 250,单位为 km/h。
  • 接收节点为 Node1Node2

2.5 值表定义

VAL_ SignalName Value1 "Description1" Value2 "Description2" ... ;
  • 定义信号值的枚举描述。
  • SignalName 是信号名称。
  • Value1, Value2 是信号的具体值。
  • "Description1", "Description2" 是对应值的文本描述。

示例:

VAL_ GearPosition 0 "Neutral" 1 "First" 2 "Second" 3 "Third" 4 "Fourth" 5 "Fifth" 6 "Sixth";
  • 信号 GearPosition 的值 0 表示 "Neutral",1 表示 "First",依此类推。

2.6 属性定义

BA_ "AttributeName" ObjectType ObjectName Value;
  • 定义 DBC 文件中的自定义属性。
  • "AttributeName" 是属性名称。
  • ObjectType 是属性的对象类型(如 BU_, BO_, SG_ 等)。
  • ObjectName 是对象的名称。
  • Value 是属性的值。

示例:

BA_ "GenMsgCycleTime" BO_ 123 100;
  • 定义消息 ID 为 123 的消息的周期时间为 100 毫秒。

2.7 注释

CM_ ObjectType ObjectName "Comment";
  • 定义注释信息。
  • ObjectType 是注释对象的类型(如 BU_, BO_, SG_ 等)。
  • ObjectName 是对象的名称。
  • "Comment" 是注释内容。

示例:

CM_ BO_ 123 "This is a comment for message 123.";
CM_ SG_ Speed "This signal represents vehicle speed.";

2.8 信号值描述

VAL_ MessageID SignalName Value1 "Description1" Value2 "Description2" ... ;
  • VAL_ 类似,但这里是针对特定消息中的信号进行值描述。

示例:

VAL_ 123 Speed 0 "Stop" 1 "Slow" 2 "Fast";
  • 对消息 ID 为 123 中的 Speed 信号进行值描述。

3. 示例完整 DBC 文件

以下是一个简单的 DBC 文件示例:

VERSION "1.0"

NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_

BS_:

BU_: Engine ECU1 ECU2

BO_ 100 EngineData: 8 ECU1
SG_ Speed : 0|16@1+ (0.1,0) [0|250] "km/h" ECU2
SG_ RPM : 16|16@1+ (0.125,0) [0|8000] "rpm" ECU2

BO_ 200 GearInfo: 8 ECU2
SG_ GearPosition : 0|3@0+ (1,0) [0|7] "" ECU1

CM_ BO_ 100 "Engine data including speed and RPM.";
CM_ SG_ Speed "Current vehicle speed.";
CM_ SG_ RPM "Engine revolutions per minute.";

VAL_ GearPosition 0 "Neutral" 1 "First" 2 "Second" 3 "Third" 4 "Fourth" 5 "Fifth" 6 "Sixth";

4. 总结

  • DBC 文件是描述 CAN 网络通信协议的标准文件,包含了节点、消息和信号的详细定义。
  • 它被广泛应用于汽车电子开发,用于描述车辆中各个电子控制单元(ECU)之间的通信规则。
  • 理解 DBC 文件的结构和语法对于 CAN 总线的开发和调试至关重要。