Vector的DBC文件描述了CAN網絡的通信規范,通過定義signal可以表示CAN幀中的各個物理信號的含義。通過CANdb++ Editor軟件可以創建和修改DBC文件,一般監控或控制CAN網絡內的節點,不需要解析DBC文件里的全部信息,因為有些信息是給CANoe等軟件使用的,我們自己編寫軟件,只利用vector的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格式
第一字節的bit0對應的是lsb(第一行的紅色箭頭),第二字節的bit14對應的是msb(第二行的紅色箭頭)。起始bit是lsb對應的bit0。
Motorola格式
第二字節的bit9對應的是lsb(第二行的紅色箭頭),第一字節的bit7對應的是msb(第一行的紅色箭頭)。起始bit是lsb對應的bit9。當然也可以修改起始位置,例如將起始位置改為bit8,如下圖:
55~58行定義的是信號的選項值,其結構如下:
'VAL_' message_id signal_name { value_description } ';'
注意,行結尾有一個分號。其中value_description的定義如下:
value_description = double char_string ;
以上是需要解析的部分,注意字符部分都限制在32字節內,不太方便。