[CAN] DBC파일이란?

Heimerdinga_dinga·2022년 11월 2일

임베디드

목록 보기
1/3

갑자기 CAN데이터 파일을 파싱할 일이 생겼는데, CAN데이터에 대한 정보를 .dbc파일로 주셔서 급하게하는 공부공부 ㅠ.ㅠ

1. DBC 파일이란?

  • "Vector"라는 회사에서 만든 파일 타입.
  • 파일의 확장자가 .dbc 라서 dbc 파일이라고 부른다.
  • CAN에 대한 정보들을 기록하는 파일 타입이며, CAN에 관련된 정보를 반드시 .dbc 파일로 작성할 필요는 없지만 .dbc 파일을 많이 사용한다.
  • Vector에 제공하는 CanDb++ Editor 에디터를 활용하여 CAN DBC 파일을 손쉽게 작성하고, 열어 볼 수 있다.
  • CanDb++ sw는 유료버전 무료버전이 있는데 무료버전은 www.vector.com 홈페이지에서 다운로드 받아서 쓸 수 있다.

2. DBC 파일 구조

.dbc 파일 구조는 아래 순서대로 구성되어 있다.

  1. Version / New Symbol
  2. Bit Timing
  3. Node
  4. Value table
  5. Message / Signal
  6. message
  7. Signal
  8. Comment

이제 하나씩 천천히 살펴보자!

2.1 Version / New Symbol

Version

  • CANdb editor의 버전을 의미.
  • 비워두거나 문자열 데이터 작성한다.

    version = ['VERSION' '"' { CANdb_version_string } '"' ];


New Symbol

  • dbc파일에서 사용되는 모든 Symbol에 대해 기술.

newsymbols = [ '_NS' ':' ['CM'] ['BADEF']['BA_'] ['VAL_']['CAT_DEF_'] ['CAT_']['FILTER'] ['BADEF_DEF']['EV_DATA_']
['ENVVARDATA']['SGTYPE_'] ['SGTYPEVAL']['BA_DEF_SGTYPE_']
['BASGTYPE']['SIG_TYPE_REF_'] ['VALTABLE']['SIG_GROUP_']
['SIGVALTYPE']['SIGTYPE_VALTYPE_'] ['BOTX_BU']['BA_DEF_REL_'] ['BAREL']['BA_DEF_DEF_REL_'] ['BUSG_REL']['BU_EV_REL_'] ['BUBO_REL'] ];


2.2 Bit Timing

  • CAN의 통신 속도.
  • 시리얼 통신의 Baudrate와 동일한 개념.
  • 더 이상 사용하지 않는 섹션이지만, DBC파일에 포함되어 있어야한다.

    bittiming = 'BS:' [baudrate ':' BTR1 ',' BTR2 ] ;
    baudrate = unsigned_integer ;
    BTR1 = unsigned_integer ;
    BTR2 = unsigned_integer ;


2.3 Node

  • 쉽게말해서 ECU.
  • CAN통신 송수신의 주체.
  • CAN통신은 Multi Master통신이라고하는데, 이때 Master = Node.
  • .dbc 파일의 Node 섹션에는 모든 참여 Node 이름을 정의해야한다.
  • Node 섹션에 정의된 이름은 고유해야한다.

    nodes = 'BU_:' {node_name} ;
    node_name = C_identifier ;


2.4 Valude table

  • Enum 데이터 타입의 각 타입에 따른 값을 표현하기 위해 사용하는 부분.
  • value table 섹션은 global value tables을 정의한다.
  • value table은 raw signal을 인코딩한 형태로 정의되어 있다.
  • 일반적으로 .dbc 파일에는 global value table이 잘 사용되지않으며, 대신 각 signal에 대한 설명을 독립적으로 정의하여 사용한다.

    valuetables = {value_table} ;
    value_table = 'VAL_TABLE
    ' value_table_name >{value_description} ';' ;
    value_table_name = C_identifier ;


2.5 Message

  • Message 섹션은 cluster에 있는 모든 프레임의 이름과 해당 속성, 프레임에서 전송되는 신호를 정의한다.
  • Message의 Prefix는 'BO_'이며,
  • ID, Name, Node에 대하여 명시하고 있다.

    messages = {message} ;
    message = BO_ message_id message_name ':' message_size transmitter {signal} ;
    message_id = unsigned_integer ;


2.6 Signal

  • signal은 Message 하위에 종속됨.
  • 하나의 Messsage에 여러 signal 구성.
  • 따라서, Signal 섹션에서는 Message에 구성된 모든 signal과
  • Message필드 내에서 signal의 위치/속성을 작성.

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


2.7 Comment

  • Message/Signal의 주석.

    comments = {comment} ;
    comment = 'CM' (char_string |
    'BU
    ' nodename char_string |
    'BO
    ' messageid char_string |
    'SG
    ' messageid signal_name char_string |
    'EV
    ' env_var_name char_string)
    ';' ;


Examples

VERSION ""
NS :
.     NS_DESC

.     CM
.     BA_DEF

.     BA
.     VAL

.     CATDEF
.     CAT
.     FILTER
.     BA_DEF_DEF

.     EVDATA
.     ENVVARDATA
.     SGTYPE
.     SGTYPE_VAL

.     BADEF_SGTYPE
.     BASGTYPE
.     SIGTYPE_REF
.     VALTABLE
.     SIGGROUP
.     SIGVALTYPE
.     SIGTYPEVALTYPE
.     BOTX_BU
.     BADEF_REL
.     BAREL
.     BADEF_DEF_REL
.     BUSG_REL
.     BUEV_REL
.     BUBO_REL
BS:
BU
: Engine Gateway
BO 100 EngineData: 8 Engine
.     SG
PetrolLevel : 24|8@1+ (1,0) [0|255] "l" Gateway
.     SG EngPower : 48|16@1+ (0.01,0) [0|150] "kW" Gateway
.     SG
EngForce : 32|16@1+ (1,0) [0|0] "N" Gateway
.     SG IdleRunning : 23|1@1+ (1,0) [0|0] "" Gateway
.     SG
EngTemp : 16|7@1+ (2,-50) [-50|150] "degC" Gateway
.     SG EngSpeed : 0|16@1+ (1,0) [0|8000] "rpm" Gateway
.     CM
"CAN communication matrix for power train electronics


implemented: turn lights, warning lights, windows";
VAL_ 100 IdleRunning 0 "Running" 1 "Idle" ;








참고자료
https://newbie-developer.tistory.com/243
https://appia.tistory.com/100
http://mcu.so/Microcontroller/Automotive/DBC_File_Format_Documentation.pdf

잘 못 작성된 내용이 있다면 댓글 부탁드립니다. 감사합니다.😊

0개의 댓글