Appia의 IT세상

CAN dbc 파일의 구조(Node, Message, Signal) 본문

Development/Communication

CAN dbc 파일의 구조(Node, Message, Signal)

Appia 2020. 1. 8. 07:01
반응형

오늘은 dbc파일 구조에 대해서 이야기를 드리고자 합니다. 물론 아마도 이 형태로 검색을 하셨거나, 이 포스팅을 보시는 분들을 아마도 CAN통신에 대해서 어느정도는 인지하고 있다고 생각합니다. ( , CAN통신에 익숙하지 않으시거나, 처음이신 분들을 위해서 향후 관련해서 별도 포스팅 계획중)

 

일단 dbc 파일은 CAN통신에서 사용하는 네트워크 데이터 베이스라고 생각하시면 좋을 것 같습니다. , 통신에 사용되는 siganl 부터 각 노드에 대한 정보까지 모두 기술 되어 있습니다.

 

물론 제가 이 포스팅을 하는 이유는, dbc 에디터 및 로더를 만들 생각입니다. 하지만, 이 구조를 모른다면 향후 올리는 포스팅에 대해서 이해하기가 힘들 수 있기 때문입니다.

 

물론, 많은 분들은 벡터사에서 나온 CANdb++등을 이용해서 보거나 작성하지만, 그 툴을 이용해서 많은 데이터를 한번에 처리하거나 아니면 대량의 신호를 생성할 떄는 그닥 편리하지 않다고 생각합니다.

 

그럼 먼저 dbc 파일의 전반적인 구조에 대해서 살펴보겠습니다.

 

전체 구조는 위에서는 보이는 바와 같습니다. 물론 어떤 분들은 Message Siganl에만 집착하시는 분들도 있지만, DBC는 통신을 하기 위한 전반적인 정보를 담고 있다 보니, 생각보다 많은 정보들을 가지고 있습니다.

(물론 주로 Message/Signal 기반으로 이야기 할 예정입니다.)

 

Version / New Symbol

시작은 버전 정보로 시작합니다. 그리고 New_Symbol의 경우 dbc파일에서 사용되는 모든 Symbol에 대해서 기술 하고 있습니다. 다음은 간단한 예입니다.

 

VERSION ""

 

 

NS_ :

NS_DESC_

CM_

BA_DEF_

BA_

VAL_

CAT_DEF_

CAT_

FILTER

BA_DEF_DEF_

EV_DATA_

ENVVAR_DATA_

SGTYPE_

SGTYPE_VAL_

BA_DEF_SGTYPE_

BA_SGTYPE_

SIG_TYPE_REF_

VAL_TABLE_

SIG_GROUP_

SIG_VALTYPE_

SIGTYPE_VALTYPE_

BO_TX_BU_

BA_DEF_REL_

BA_REL_

BA_DEF_DEF_REL_

BU_SG_REL_

BU_EV_REL_

BU_BO_REL_

SG_MUL_VAL_

 

 

Bit Timing

CAN 통신의 속도라고 보시면 됩니다. 흔히 예전에 시리얼 통신을 할 때에 Baudrate를 입력하거나 설정하셨을 것입니다. 이 부분 또한 baudrate를 이야기 합니.

BS_: 

 

Node

노드를 쉽게 이야기 하면 ECU라고 보셔도 됩니다. CAN 통신이 차량에서 이루어지다 보니, 관련해서 송수신의 주체가 ECU입니다.

BU_: NodeName

 

 

Value table

Value table은 흔히 말하는 Enum 형태의 데이터 타입의 각 타입의 따른 값을 표현하기 위해서 사용하는 부분입니다. 

 

Message / Signal

이부분은 반드시 잘 봐 주시길 부탁드립니다. 앞 부분들이야, 많이 사용되지 않는다고 하더라도, 이 부분들은 dbc뿐만 아니라 이 부분을 토대로 다른 영역에서도 만들어지기 때문에 반드시 봐주셔야 합니다.

 

message

메시지의 Prefix는 'BO_' 입니다. 이 부분 바탕으로 ID, Name, Node에 대해서 명시하고 있습니다. 

BO_ ID(message ID) name(Message name) ':' TX 노드정보

 

 

Signal

Signal들은 주로 메시지 하위에 속합니다. 다음과 같은 구조로 되어 있습니다. Signal들은 Message 하위에 종속 된다고 생각하시면 됩니다. 따라서, 하나의 메시지의 여러 Signal들이 구성 됩니다. 

' SG_' signal_name ':' start_bit'|'signal_size '@' byte_order value_type '(' factor ',' offset ')' '[' minimum'|'maximum ']' unit 수신노드

 

Comment

message / signal 주석이라고 보시면 됩니다.

'CM_' (char_string | 'BU_' node_name char_string | 'BO_' message_id char_string)

 

 

오늘은 CAN DBC의 Message, Signal, Comment의 실제 쓰여지는 방법 및 구조에 대해서 살펴봤습니다. 하지만, 여기에서는 사용자 정의 속성에 대해서는 다루지 않았습니다. 이번 포스팅을 토대로, DBC Loader/Writer를 제작하고자 합닏니다. 궁금하신 점이나 문의 사항 있으시면 언제든지 문의 부탁드립니다.

 

 

 

반응형

'Development > Communication' 카테고리의 다른 글

CAN통신의 Multiplexing이란  (0) 2020.01.12
Comments