標籤:

DBC的故事

1.DBC定義

DBC(data base CAN)是汽車ECU間進行CAN通訊的報文內容,有了它相互之間才能聽懂。

2.DBC查看

DBC是文本文件,可以用記事本打開,一般都用CANdb++,可以更方便的查看和編輯。

3.DBC組成

DBC是由一系列的Message和Signal組成,文件定義了Message和Signal的屬性,可參考vector文檔(回復「DBC文檔」獲取)。下面介紹幾個重要的關鍵字:

1)BO_

BO_是對Message的定義。

  • 格式:BO_ ID Name: DLC Transmiter
  • 例子:BO_ 100 ESP_01: 8 ESP
  • 釋義:發送方=ESP,幀名稱=ESP_01,幀ID=0x64,報文長度=8個位元組

2)SG_

SG_是對Signal的定義。

  • 格式:SG_ Name : StartBit | Length @ ByteOrder SignedFlag (Factor,Offset) [Minimum | Maximum] "Unit" Receiver1,Receiver2
  • 例子:SG_ VehSpd : 7|16@0+ (0.01,0) [0|655.35] "km/h" ECM.TCM
  • 釋義:信號名稱=VehSpd,起始地址=7,長度=16,位元組順序=MSB(大端),符號位=無符號,係數=0.01,偏移=0,最小值=0,最大值=655.35,單位=km/h,接收方=ECM和TCM

3)VAL_

VAL_是對Signal枚舉值的定義。

  • 格式:VAL_ ID Name key1 "value1" key2 "value2" ;
  • 例子:VAL_ 100 VehSpdValid 1 "Valid" 0 "Invalid" ;
  • 釋義:幀ID=0x64,信號名稱=VehSpdValid,枚舉值(0x0=Invalid,0x1=Valid)

4.DBC解析

上文已經介紹了DBC的格式,接下來介紹如何使用DBC從原始報文中解析出物理值。在此之前要先理解MSB(大端)和LSB(小端)。MSB是高位在前,LSB是低位在前,大多數都用的MSB。

1)原始值

假設有3個信號:signal1、signal2和signal3,長度分別是16、4、12。這3個信號包括了3種類型:完整位元組,部分位元組和跨位元組。用Layout來比較。下面使用了位操作指令:&是按位與,<<是左移,>>是右移。

  • MSB

MSB高位在前。

signal1:起始地址=7,值=Byte0<<8+Byte1。(Byte0是高位,Byte1是低位)

signal2:起始地址=23,值=(Byte2&0xf0)>>4。(取Byte2的高4位)

signal3:起始地址=19,值=(Byte2&0x0f)<<8+Byte3。(取Byte2的低4位,作為高位)

  • LSB

LSB是低位在前。

signal1:起始地址=0,值=Byte0+Byte1<<8。(Byte0是低位,Byte1是高位)

signal2:起始地址=16,值=Byte2&0x0f。

signal3:起始地址=20,值=(Byte2&0xf0)>>4+Byte3<<4。(Byte2是低位,Byte3是高位)

2)物理值

物理值=原始值*Factor+Offset

3)代碼實現

以.NET(C#)為例,繪製layout,計算出數值。

(回復「DBC例子」獲取源代碼)

  • MSB

  • LSB

5.DBC開源資料

(回復「DBC開源」隨機獲取)


推薦閱讀:

什麼樣的老師,可以管理好班級里同時出現維特根斯坦和希特勒那樣的調皮男學生?
這是第三段故事,熊孩子的故事(中),摻雜了一點個人的想法。7.13
跳級是一種什麼體驗?
二十幾歲住在哪裡對你有多重要?
中國美術學院校考閱卷揭秘:每張高分卷的通關之路上需要經過36位評委老師的火眼金睛

TAG:教育 |