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  "value1key2 "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開源”隨機獲取)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM