DBC

  • dbc数据库文件是一种用来描述CAN总线协议中协议数据及其代表的具体意义
  • 可以用来监测与分析CAN网络上的报文数据,也可以用来模拟某个CAN节点

DBC文件的创建

  • DBC文件的创建分为以下几个步骤
    1. 创建一个CAN数据库文件
    2. 创建信息需要用到的数值表
    3. 创建信号并且关联数值表
    4. 创建报文
    5. 创建网络节点
    6. 将信号、报文及网络节点进行关联链接
    7. 创建或导入自定义属性并进行修改
    8. 一致性检查

对文件的解析

DBC文件学习

  • 在一个DBC文件中主要包含以下信息
    • 版本与新符号
    • 波特率定义(必须项)
    • 网络节点的定义(必须项)
    • 报文帧的定义
    • 信号的定义
    • 属性定义部分
    • 数值表部分

版本与新符号

  • DBC的文件头部包含“version”与“new symbol”的信息
  1. 版本
    • 版本的信息可以为空,也可以由用户自定定义
  2. 信号量
    • 信号量的信息为在创建DBC文件时会自动生成

波特率

  • 格式如下:BS_:[baudrate:BTR1,BTR2];
    • BS_为关键词用来定义CAN网络波特率
    • []内的内容表示可选部分;可以省略
    • 关键词BS_必须存在,省略则会出错

网络节点的定义

  • 格式如下:BU_:Nodename1 Nodename2 Nodename3 ……
    • BU_为关键词,表示网络节点
    • NodenameX表示定义的网络节点名字,必须要保证唯一性
  • BU_: AVNT ACU HUD :表示定义了AVNT、ACU、HUD这三个网络节点

报文帧的定义

  • 格式如下:BO_ MessageId(10进制数表示) MessageName: MessageSize Transmitter
    • BO_为关键词表示报文
    • Messageld为定义的报文ID,时以10进制表示的
    • MessageName表示该报文的名字,命名规则与C语言变量相同
    • MessageSize表示该报文数据域字节数,为无符号整形数据
    • Transmitter表示发送该报文的网络节点;如果该报文没有指定发送节点,则该值需设置为” Vector__XXX”
  • BO_ 996 HUD_1_B: 8 HUD:表示定义了一条由HUD这个节点发送,数据域长度为8字节,ID为996(0x3E4),名字命名为HUD_1_B的报文

信号的定义

  • 格式如下:SG_ SignalName : StartBit | SignalSize @ ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver
    • SG_为关键字,表示信号
    • SignalName、 StartBit、 SignalSize分别表示该信号的名字、起始位、信号长度
    • ByteOrder表示信号的字节顺序:0代表Motorola格式,1代表Inter格式
      • Intel低字节在前;Motorola高字节在前(仅对多Byte的时候有效)
      • 如果是Motorola,起始位一般是7:如7|[email protected]表示 data = byte0*256 + byte1;简单可理解为大端,高位在前
      • 如果是Inter,起始位一般是0:如0|[email protected]表示data=byte1*256+byte0;简单可理解为小段,低位在前
    • ValueType 表示该信号的数值类型:+表示无符号数,-表示有符号数
    • Factor表示因子,Offset表示偏移量;这两个值于该信号的原始值与物理值之间的转换
      • 物理值=原始值*因子+偏移量
    • Min|Max表示该信号的最小值和最大值,即指定了该信号值的范围;这两个值为double类型
    • Unit表示该信号的单位,为字符串类型
    • Receiver表示该信号的接收节点;若该信号没有指定的接收节点,则必须设置为” Vector__XXX”
  • SG_ HUD_BrightnessLv : 15|[email protected]+ (1,0) [0|15] “lv” ACU,AVNT表示定义了一个命名为HUD_BrightnessLv的信号,其起始位是第15位,信号长度4个位;信号是Motorola格式,数值类型为无符号类型数;因子为1,偏移量为0;信号取值范围为0到15;信号单位为字符串”lv”;该信号接收节点为ACU、AVNT这两个节点

注释部分

  • 格式如下: CM_ Object MessageId/NodeName “Comment”
    • CM_为关键词,表示注解信息
    • Object表示进行注解的对象类型,可以是节点“BU_”、报文“BO_”、消息”SG_”
    • MessageId/NodeName 表示进行注解的对象;
      • 前面的对象类型是信号或者报文,则这里的值应为报文的ID;
      • 前面的对象类型为节点,则这里的值应为节点的名字
    • Comment表示进行注解的文本信息
  • CM_ SG_ 996 HUD_HeightLv “Control hud height level”;表示对ID为996(0x3E4)这条报文下的名为”HUD_HeightLv ”的信号进行注解说明,说明的内容为"Control hud height level"
  • CM_ BU_ HUD “Head Up Display";表示对HUD这个节点进行注解说明,说明的内容为" Head Up Display "

属性定义部分

  • 格式如下:
    BA_DEF_ Object AttributeName ValueType Min Max;
    BA_DEF_DEF_ AttributeName DefaultValue;
    • BA_DEF_为关键字,表示属性定义
    • Object表示属性定义的对象类型,可以是节点“BU_”、报文“BO_”、消息”SG_”、网络节点” ”(用空格表示)等
    • AttributeName表示进行定义的属性名字
    • ValueType表示属性值的类型,可以是整型、字符串、浮点型、枚举类型等
    • Min/Max表示属性值的上下最值,即指定了取值范围(字符串类型没有此项)
    • BA_DEF_DEF_为关键字,表示定义属性的初始值
    • DefaultValue表示该属性的初始值
  • BA_DEF_ SG_ “MyTry” INT 0 11;
    BA_DEF_DEF_ “MyTry” 0;
    表示对定义了一个针对信号类型的属性,属性名为”MyTry”,属性值是整型数据,取值范围在0到11之间,初始值为0

数值表部分

  • 格式如下:VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;
    • VAL_为关键字,表示数值表定义
    • MessageId表示该信号所属的报文ID(10进制数表示)
    • SignalName表示信号名
    • N “DefineN” …… 0 “Define0”表示定义的数值表内容,即该信号的有效值分别用什么符号表示
  • VAL_ 996 HUD_OffSt 1 “Active” 0 “Not Active”;表示对ID为996(0x3E4)的这条报文下的,一个命名为”HUD_OffSt”的信号,进行其数值表的定义;用”Active”取代1;用”Not Active”取代0

相关文章: