일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 윈도우11
- 아웃룩
- windows
- 안드로이드
- 파이썬3
- 엑셀
- Windows11
- Excel
- 윈도우10
- win32com
- python
- 파이썬GUI
- 깃
- Windows10
- pandas
- pythongui
- 오피스
- office
- 비주얼베이직
- 파워포인트
- Android
- matlab
- pyqt5
- git
- 문자열
- html
- 파이썬
- python3
- Outlook
- VBA
Appia의 IT세상
CAN dbc 파일의 구조(Node, Message, Signal) 본문
오늘은 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 |
---|