DBC文件小结

Vector的DBC文件描述了CAN网络的通信规范,通过定义signal可以表示CAN帧中的各个物理信号的含义。通过CANdb++ Editor软件可以创建和修改DBC文件,一般监控或控制CAN网络内的节点,不需要解析DBC文件里的全部信息,因为有些信息是给CANoe等软件使用的,我们自己编写软件,只利用vector的DBC文件中的部分信息。一个完整的DBC文件结构如下图:

DBC文件小结

DBC文件小结

35行之前的部分可以忽略,36行定义的的网络节点单元,多个节点之间用空格分开。41、43、47是定义消息,消息结构如下:

BO_ message_id message_name : message_size transmitter {signal}

signal是可选项。45、46、48、49行定义的是信号(Signal),信号的结构如下:

SG_ signal_name multiplexer_indicator : start_bit | signal_size @ byte_order value_type ( factor , offset ) [ minimum | maximum ] unit receiver {, receiver}

其中byte_order分为motorola和intel两种格式,motorola对应0,intel对应1。这两种格式是区别如下:

如果在同一个字节内,则没有区别,如果跨越多个字节则有区别,motorola格式是高位(msb)在低字节(说明:CAN消息的字节排列Byte0 Byte1 … Byte7,Byte0是低字节),intel格式是高位(msb)在高字节。

Intel格式

DBC文件小结

第一字节的bit0对应的是lsb(第一行的红色箭头),第二字节的bit14对应的是msb(第二行的红色箭头)。起始bit是lsb对应的bit0。

Motorola格式

DBC文件小结

第二字节的bit9对应的是lsb(第二行的红色箭头),第一字节的bit7对应的是msb(第一行的红色箭头)。起始bit是lsb对应的bit9。当然也可以修改起始位置,例如将起始位置改为bit8,如下图:

DBC文件小结

55~58行定义的是信号的选项值,其结构如下:

'VAL_' message_id signal_name { value_description } ';'

注意,行结尾有一个分号。其中value_description的定义如下:

value_description = double char_string ;

以上是需要解析的部分,注意字符部分都限制在32字节内,不太方便。

上一篇:ubuntu记录


下一篇:AppSettings从数据库读取