01什么是DBC
DBC是Database Can的缩写,其代表的是CAN的数据库文件,在这个文件中把CAN通讯的信息定义的非常完整清楚,而CAN网络的通讯就是依据这个文件的描述进行的,所以DBC文件的作用非常强大,正是因为有了它才可以使得整个CAN网路的节点控制器无差错的协同同步开发。
DBC数据库文件是用来描述CAN网络节点间数据通讯的一种文件,包含了CAN总线协议中协议数据及其所代表的具体意义。
简单的讲,dbc文件描述了在CAN网络上有哪些报文信息;这些报文上又携带了哪些信号信息;该报文是从哪个节点发出,哪个节点进行接收的等信息。
是通讯的核心文件,通过创建一个DBC文件可以使你非常深刻的理解文件所包含的含义,同时有助于你理解已经存在的DBC文件,本质上都是相通的。
DBC是vector公司定义的can网络通信文件格式,vector的规范《DBC File Format Document》从下面链接获得
百度网盘:https://pan.baidu.com/s/1GUvfEHv1NQbJ2bL2e7ZL5w 提取码:d622
02DBC文件长什么样
Version 和 new_symbols
如下图,Dbc文件头部包含着”version”与”new symbol”的信息
- version信息可以为空,也可以由用户自定定义;
- new symbol信息在我们创建dbc文件时就已经自动生成,所以这一部分的信息我们无需过多留意,一般默认即可
波特率BS_
BS:[baudrate:BTR1,BTR2];
其中BS为关键字,用于定义CAN网络的波特率;[ ]内容表示为可选部分,可以省略(如下图例子中即把该部分省略了)
网络节点定义BU_
BU: Nodename1 Nodename2 Nodename3 ……
BU 为关键字,表示网络节点
Nodename1、Nodename2 网络节点名字,由用户自己定义;(需要保证节点命名的唯一性)
举例:
BU_: VCU_Vehicle_Control_Unit MotorCtrol SCU PC Vector__XXX :表示定义了:VCU_Vehicle_Control_UnitMotorCtrolSCUPCVector__XXX这五个网络节点
报文帧的定义BO_
BO MessageId(10进制数表示) MessageName: MessageSize Transmitter
BO 为关键字,表示报文;
- MessageId 报文ID,是以10进制数表示的;(如例子中的996,代表报文ID为0x3E4,是longlong类型,也就是CAN ID的值;)
- MessageName 报文的名字,命名规则和C语言变量相同;
- MessageSize 报文数据域字节数,为无符号整型数据,CAN 2.0为最大8字节,CAN FD 最大64字节;
- Transmitter 该报文的网络节点;如果该报文没有指定发送节点,则该值需设置为” Vector__XXX”。
举例:
BO_ 201959408 MSG1: 8 VCU_Vehicle_Control_Unit报文ID:201959408(0xC09A7F0)报文名:MSG1分隔符 : “:”报文长度:8字节
信号的定义SG_
SG SignalName (SigTypeDefinition) : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver
SG 为关键字,表示信号;
SignalName(SigTypeDefinition) : 表示该信号的名字 和 多路选择信号的定义;
SigTypeDefinition是可选项,有3种格式:
- a)空,表示普通信号。
- b)M,表示多路选择器信号。
- c)m50,表示被多路选择器选择的信号,50,表示当M定义的信号的值等于50的时候,该报文使用此通路。
StartBit、 SignalSize 表示该信号起始位、信号长度;
ByteOrder 表示信号的字节顺序:0代表Motorola格式,1代表Inter格式;
ValueType 表示该信号的数值类型:+表示无符号数,-表示有符号数;
Factor,Offset 表示因子,偏移量;这两个值用于信号的原始值与物理值之间的转换
转换如下:物理值=原始值*因子+偏移量;
Min|Max 表示该信号的最小值和最大值,即指定了该信号值的范围;这两个值为double类型;
Unit 表示该信号的物理单位,为字符串类型;
Receiver 表示该信号的接收节点;若该信号没有指定的接收节点,则必须设置为” Vector__XXX”
举例子:
SG_ AngRateZ : 40|20@1- (0.01,0) [-500|500] "deg/s" Vector__XXXAngRateZ表示定义了一个命名为AngRateZ的普通信号,40|20其起始位是第40位,信号长度20 bit;1信号是Inter格式,-数值类型为有符号类型数;因子为0.01,偏移量为0;信号取值范围为-500|500;信号物理单位为字符串”deg/s”;该信号接收节点没有指定,所以就是Vector__XXX
注解部分CM_
CM Object MessageId/NodeName “Comment”
CM 为关键字,表示注解信息;
Object 表示进行注解的对象类型,可以是节点“BU”、报文“BO”、消息”SG_”;
MessageId/NodeName 表示进行注解的对象,
- 若前面的对象类型是信号或者报文,则这里的值应为报文的ID(10进制数表示);
若前面的对象类型为节点,则这里的值应为节点的名字;
Comment 表示进行注解的文本信息;
举个例子: ```c CM SG 996 HUD_HeightLv “Control hud height level”
表示对ID为996(0x3E4)这条报文下的名为”HUD_HeightLv ”的信号进行注解说明,说明的内容为”Control hud height level”。
注释以 “” 包围,注释内部不允许出现“号。<br /><a name="wwDCW"></a>## 特征(属性)定义部分**BA_****BA_DEF_ 特征名称类型定义**```cBA_DEF_ Object AttributeName ValueType Min Max;BA_DEF 标签Object 特征类型,可以是BU_(节点特征定义)、BO_(报文特征定义)、SG_(信号特征定义)、空格(项目特征定义);AttributeName 特征名称(C语言变量格式)ValueType 特征值类型(只能是十进制、十六进制、浮点数、枚举、字符5种类型)Min Max 数值类型这里出现范围,枚举类型这里是枚举值,字符类型,这里是空。

BADEF_DEF 特征默认值定义
BA_DEF_DEF_ AttributeName DefaultValue;BA_DEF_DEF_ 标签AttributeName 特征名称(C语言变量格式)DefaultValue 该特征的默认设置值

BA_ 特征项目设置值定义
BA_ AttributeName projectValue;BA_ 标签AttributeName 特征名称(C语言变量格式)projectValue 该特征的设置值

举例:
举例:BA_DEF_ BO_ “GenMsgCycleTime” INT 0 65535;BA_DEF_DEF_ “GenMsgCycleTime” 2200;BA_ “GenMsgCycleTime” BO_ 400 100;表示对定义了一个针对消息类型的特征,特征名为”GenMsgCycleTime”,特征值是整型数据,取值范围在0到65535之间;默认值为2200;项目设置值 CAN ID ==400的消息的该特征值设置为100
数值表部分VAL_
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。只有自然数类型的信号才可以使用数值表表示。
03一个实例
VERSION ""NS_ :NS_DESC_CM_BA_DEF_BA_VAL_CAT_DEF_CAT_FILTERBA_DEF_DEF_EV_DATA_ENVVAR_DATA_SGTYPE_SGTYPE_VAL_BA_DEF_SGTYPE_BA_SGTYPE_SIG_TYPE_REF_VAL_TABLE_SIG_GROUP_SIG_VALTYPE_SIGTYPE_VALTYPE_BO_TX_BU_BA_DEF_REL_BA_REL_BA_DEF_DEF_REL_BU_SG_REL_BU_EV_REL_BU_BO_REL_SG_MUL_VAL_BS_:BU_: IMUBO_ 814 Latitude: 8 Vector__XXXSG_ PosLat2 : 0|64@1- (1E-008,0) [-90|90] "deg" Vector__XXXBO_ 813 Longitude: 8 Vector__XXXSG_ PosLon2 : 0|64@1- (1E-008,0) [-180|180] "deg" Vector__XXXBO_ 812 AngRateVehicle: 8 IMUSG_ AngRateZ : 40|20@1- (0.01,0) [-500|500] "deg/s" Vector__XXXSG_ AngRateY : 20|20@1- (0.01,0) [-500|500] "deg/s" Vector__XXXSG_ AngRateX : 0|20@1- (0.01,0) [-500|500] "deg/s" Vector__XXXBO_ 811 HeadingPitchRollSigma: 8 IMUSG_ AngleRollSigma : 40|20@1+ (0.0001,0) [0|100] "deg" Vector__XXXSG_ AnglePitchSigma : 20|20@1+ (0.0001,0) [0|100] "deg" Vector__XXXSG_ AngleHeadingSigma : 0|20@1+ (0.0001,0) [0|100] "deg" Vector__XXXBO_ 810 HeadingPitchRoll: 6 IMUSG_ AngleRoll : 32|16@1- (0.01,0) [-180|180] "deg" Vector__XXXSG_ AnglePitch : 16|16@1- (0.01,0) [-90|90] "deg" Vector__XXXSG_ AngleHeading : 0|16@1+ (0.01,0) [0|360] "deg" Vector__XXXBO_ 809 Accel_Vehicle: 8 IMUSG_ AccelZ : 40|20@1- (0.0001,0) [-8|8] "g" Vector__XXXSG_ AccelY : 20|20@1- (0.0001,0) [-8|8] "g" Vector__XXXSG_ AccelX : 0|20@1- (0.0001,0) [-8|8] "g" Vector__XXXBO_ 808 VelocityLevelSigma: 8 IMUSG_ VelSigma : 48|16@1+ (0.001,0) [0|65.535] "m/s" Vector__XXXSG_ VelUSigma : 32|16@1+ (0.001,0) [0|65.535] "m/s" Vector__XXXSG_ VelNSigma : 16|16@1+ (0.001,0) [0|65.535] "m/s" Vector__XXXSG_ VelESigma : 0|16@1+ (0.001,0) [0|65.535] "m/s" Vector__XXXBO_ 800 Time: 6 IMUSG_ GpsTime : 16|32@1- (0.001,0) [0|2147483.647] "s" Vector__XXXSG_ GpsWeek : 0|16@1+ (1,0) [0|65535] "w" Vector__XXXBO_ 807 VelocityLevel: 8 IMUSG_ Vel : 48|16@1- (0.01,0) [-327.68|327.67] "m/s" Vector__XXXSG_ VelU : 32|16@1- (0.01,0) [-327.68|327.67] "m/s" Vector__XXXSG_ VelN : 16|16@1- (0.01,0) [-327.68|327.67] "m/s" Vector__XXXSG_ VelE : 0|16@1- (0.01,0) [-327.68|327.67] "m/s" Vector__XXXBO_ 806 PosSigma: 8 IMUSG_ PosUsigma : 40|20@1+ (0.0001,0) [0|100] "m" Vector__XXXSG_ PosNsigma : 20|20@1+ (0.0001,0) [0|100] "m" Vector__XXXSG_ PosESigma : 0|20@1+ (0.0001,0) [0|100] "m" Vector__XXXBO_ 805 Altitude: 4 IMUSG_ PosAlt : 0|32@1- (0.001,0) [-2147483.648|2147483.648] "m" Vector__XXXBO_ 804 LatitudeLongitude: 8 IMUSG_ PosLon : 32|32@1- (1E-007,0) [-214.7483648|214.7483648] "deg" Vector__XXXSG_ PosLat : 0|32@1- (1E-007,0) [-214.7483648|214.7483648] "deg" Vector__XXXBO_ 803 InsStatus: 8 IMUSG_ GpsNumSats2 : 56|8@1+ (1,0) [0|255] "" Vector__XXXSG_ GpsNumSats : 48|8@1+ (1,0) [0|255] "" Vector__XXXSG_ GpsAge : 32|16@1+ (0.01,0) [0|655.35] "" Vector__XXXSG_ GpsNumSats2Used : 24|8@1+ (1,0) [0|255] "" Vector__XXXSG_ system_state : 0|8@1+ (1,0) [0|9] "" Vector__XXXSG_ satellite_status : 16|8@1+ (1,0) [0|9] "" Vector__XXXSG_ GpsNumSatsUsed : 8|8@1+ (1,0) [0|255] "" Vector__XXXBO_ 802 Accel_IMU_Raw: 8 IMUSG_ AccelRawZ : 40|20@1- (0.0001,0) [-50|50] "g" Vector__XXXSG_ AccelRawY : 20|20@1- (0.0001,0) [-50|50] "g" Vector__XXXSG_ AccelRawX : 0|20@1- (0.0001,0) [-50|50] "g" Vector__XXXBO_ 801 Ang_Rate_Raw_IMU: 8 IMUSG_ AngRateRawZ : 40|20@1- (0.01,0) [-500|500] "deg/s" Vector__XXXSG_ AngRateRawY : 20|20@1- (0.01,0) [-500|500] "deg/s" Vector__XXXSG_ AngRateRawX : 0|20@1- (0.01,0) [-500|500] "deg/s" Vector__XXXBA_DEF_ SG_ "GenSigSendType" ENUM "Cyclic","OnWrite","OnWriteWithRepetition","OnChange","OnChangeWithRepetition","IfActive","IfActiveWithRepetition","NoSigSendType";BA_DEF_ SG_ "GenSigInactiveValue" INT 0 0;BA_DEF_ BO_ "GenMsgCycleTime" INT 0 0;BA_DEF_ BO_ "GenMsgSendType" ENUM "Cyclic","not_used","not_used","not_used","not_used","Cyclic","not_used","IfActive","NoMsgSendType";BA_DEF_ BU_ "NmStationAddress" HEX 0 0;BA_DEF_ "DBName" STRING ;BA_DEF_ "BusType" STRING ;BA_DEF_ BU_ "NodeLayerModules" STRING ;BA_DEF_ BU_ "ECU" STRING ;BA_DEF_ BU_ "CANoeJitterMax" INT 0 0;BA_DEF_ BU_ "CANoeJitterMin" INT 0 0;BA_DEF_ BU_ "CANoeDrift" INT 0 0;BA_DEF_ BU_ "CANoeStartDelay" INT 0 0;BA_DEF_DEF_ "GenSigSendType" "Cyclic";BA_DEF_DEF_ "GenSigInactiveValue" 0;BA_DEF_DEF_ "GenMsgCycleTime" 0;BA_DEF_DEF_ "GenMsgSendType" "NoMsgSendType";BA_DEF_DEF_ "NmStationAddress" 0;BA_DEF_DEF_ "DBName" "";BA_DEF_DEF_ "BusType" "CAN";BA_DEF_DEF_ "NodeLayerModules" "";BA_DEF_DEF_ "ECU" "";BA_DEF_DEF_ "CANoeJitterMax" 0;BA_DEF_DEF_ "CANoeJitterMin" 0;BA_DEF_DEF_ "CANoeDrift" 0;BA_DEF_DEF_ "CANoeStartDelay" 0;BA_ "DBName" "CANProtocol";SIG_VALTYPE_ 800 GpsTime : 1;
