AUTOMORPHSW Team

DBC 檔案是什麼?CAN 資料庫的結構與常見錯誤一次搞懂

DBC 檔案是什麼?CAN 資料庫的結構與常見錯誤一次搞懂

CANoe 的 Trace 視窗裡,0x1A0 08 52 03 ... 這串生資料能顯示成「引擎轉速 850 rpm、水溫 88°C」,靠的就是一個 DBC 檔。它是 CAN 網路的「翻譯字典」——沒有它,匯流排上流動的只是十六進位。看懂 DBC 的結構,就看懂了 CAN 通訊設計的一半。

DBC 檔案結構

四層結構:從網路到位元

DBC 由外而內是四層:

是什麼類比
Network(網路)整個 CAN 叢集一本字典
Node(節點)收發訊息的 ECU說話的人
Message(訊息)一個 CAN 訊框(有 ID、長度、發送節點)一句話
Signal(訊號)訊息裡的一個物理量(轉速、溫度)句子裡的一個詞

一個訊息(一個 CAN ID)裡打包多個訊號——8 個位元組(傳統 CAN)要塞下轉速、溫度、狀態旗標好幾樣,於是每個訊號要精確定義「我住在第幾位元、佔幾位元」。

一個訊號的五個必要屬性

以「引擎轉速」為例,DBC 要定義:

  1. 起始位元(Start Bit)+長度(Length):住哪、佔多寬。例如從 bit 16 起佔 16 位元
  2. 位元組序(Byte Order)Intel(小端)還是 Motorola(大端)——這是 DBC 最容易出錯的一格(見下)
  3. 因子(Factor)+偏移(Offset):raw 值換算物理值的公式 物理值 = raw × factor + offset。轉速 factor=0.25 代表 raw 每加 1 等於 0.25 rpm
  4. 最小/最大值:合法範圍
  5. 單位(Unit):rpm、°C——顯示用,也是文件的一部分

換算公式是 DBC 的靈魂:ECU 在匯流排上只傳整數(raw),因子與偏移讓同一個 16 位元欄位可以表達「0~16383.75 rpm」這種帶小數的範圍,而不浪費頻寬傳浮點數。

製作 DBC 最常見的四個錯誤

  1. 位元組序搞反(Intel ↔ Motorola):訊號值變成亂跳的大數或負數,但格式檢查不會報錯——因為佈局合法,只是解錯了。這是 DBC 除錯第一嫌疑犯
  2. 訊號重疊:兩個訊號的位元範圍相交,一個變動污染另一個。CANdb 這類編輯器有佈局檢視能一眼看出重疊
  3. 因子/偏移抄錯:數值差一個數量級或固定偏移——通常在跟實車或規格書對數時才發現
  4. DLC 與訊號範圍不符:訊息長度不夠放下所有訊號的最高位元

DBC 之外:這個家族還有誰

DBC 是 CAN 的傳統格式(Vector 的 CANdb 格式,事實標準)。往外看:

格式用於關係
DBCCAN/CAN FD傳統主流
LDFLINLIN 的對應物
ARXMLAUTOSAR 系統描述涵蓋更廣(含乙太網、SOME/IP),AUTOSAR 專案的來源
CDDUDS 診斷診斷專用(見 UDS 是什麼

大型專案裡這些是同一套系統描述的不同切面,工具鏈之間會轉換——但轉換過程正是位元組序、命名、範圍出錯的高發區,值得在流程裡加一道檢查。

給不同角色的實用建議

  • 測試工程師:拿到 DBC 先在工具裡載入、對著實車跑一趟,確認訊號值合理——這比讀規格書快得多
  • 通訊設計者:訊號佈局要留擴充餘裕,別把 8 位元組塞到滿;命名用得上的規範,後面追溯才順
  • 除錯時:值不對先懷疑位元組序,再懷疑因子偏移,最後才懷疑 ECU

下一步

從 DBC/ARXML 資料庫設計、一致性檢查到匯流排通訊驗證,歐特莫夫(Vector Informatik 合作夥伴)協助把通訊矩陣建成可維護的資產。