-
시작하기 전에
hardware version은 3.4, software version은 7.12 라는 정보를 CAN 메시지를 이용하여 전송하는 경우를 가정한다. 3, 4, 7, 12를 각각 hw_ver_major, hw_ver_minor, sw_ver_major, sw_ver_minor라는 부르겠다. 각 신호의 크기가 6 비트라고 가정한다.
일반적인 방법으로 6 비트 신호를 네 개 전송하려면, 24 비트가 필요하다. 이 신호들은 사실상 상수라고 볼 수 있다. 왠지 비트가 낭비되는 것 같지 않은가? 그렇게 생각한 누군가가 더 적은 비트를 써서 여러 신호들을 전송하는 방법을 고안했다. 그것이 멀티플렉스 메시지이다.
멀티플렉스 메시지를 정의하고 사용하는 방법을 설명한다.
개요
- 멀티플렉스 메시지
- dbc에서 멀티플렉스 메시지는 어떻게 정의하는가?
- TSMaster에서 멀티플렉스 신호들은 어떻게 표시되는가?
멀티플렉스 메시지
- 위 경우, 2 비트 길이의 신호가 1개 있고 6 비트 길이의 신호가 1개 있어서, 2 비트 길이의 신호의 값에 따라 6 비트 길이 신호를 다른 의미로 해석하기로 한다면, 8 비트로 네 가지 다른 신호들을 전송할 수 있다.
- 이때 2 비트 길이의 신호를 multiplexor, 6 비트 길이의 신호를 multiplexed signal이라고 부른다. 나는 '멀티플렉서', ('멀티플레스드'가 아닌) '멀티플렉스 신호'라고 부르겠다.
multiplexor [2 bits] multiplexed_signal [6 bits] 0 hw_ver_major 1 hw_ver_minor 2 sw_ver_major 3 sw_ver_minor dbc에서 멀티플렉스 메시지는 어떻게 정의하는가?
- candb++ 에디터에서 일반 신호와 메시지를 정의하는 방법으로 메시지를 정의한다.
- 2 비트 길이의 multiplexor 신호 1개를 정의한다.
- 6 비트 길이의 hw_ver_major, hw_ver_minor, sw_ver_major, sw_ver_minor 신호들을 정의한다.
- multiplexed_message라는 이름의 메시지를 정의한다. 이 메시지에 위에 정의한 신호들을 추가한다.
- 이 상태에서 왼쪽 네비게이터 영역에서 해당 메시지를 클릭하면, 오른쪽 상세 영역에 메시지에 포함된 신호들이 표시된다. 아래 그림처럼. 단, 아래 그림의 빨간 테두리 안에 Multiplexing/Group이 빈 칸이다.

- 상세 영역에서 multiplexor 신호를 더블클릭한다. 신호 정의 차이 뜬다. Multiplexrtype 드롭다운 리스트에서 Multiplexor Signal을 선택한다.

- 상세 영역에서 hw_ver_major 신호를 더블클릭한다. Multiplexortype으로 Multiplexed Signal을 선택한다. Multiplex Value에 multiplexor가 가질 수 있는 값들 중에 하나를 입력한다. 이 예의 경우 0x0이다. 나머지 멀티플렉스 신호들을 대상으로 같은 작업을 한다.

- 위 과정에서 멀티플렉스 신호들의 startbit를 모두 동일하게 설정한다. 나는 0으로 했다. 그리고 multiplexor의 startbit를 6으로 했다.

- 메시지의 Layout을 보면 아래 그림과 같다. 겹침이 없는 멀티플렉서 신호는 표시된다. 익숙하다. 겹쳐진 멀티플렉스 신호들은 표시되지 않는다.

TSMaster에서 멀티플렉스 신호들은 어떻게 표시되는가?
- 트레이스 창에서 멀티플렉스 메시지는 아래 그림과 같이 표시된다. 멀티플렉서의 값에 따라, 해당 멀티플렉스 신호의 값이 업데이트 된다.

- 그래픽스 창에는 아래 그림과 같이 표시된다. 멀티플렉서 신호가 특정 값을 유지하는 동안, 멀티플렉서 신호가 표시된다. 멀티플렉서와 멀티플렉스 신호들이 어떻게 작동하는지 잘 보여준다고 생각한다.

- 멀티플렉스 신호들을 모니터링 하기에는 트레이스 창보다 숫자 표시(Numeric Display) 창이 편리하다. 아직 멀티플렉서가 0, 1 값만 가졌었고 2, 3을 가지지 못했어서 sw_ver_major, sw_ver_minor의 값은 n.a.로 표시되었다.

결론
- 멀티플렉스 메시지를 이용하면 CAN 데이터 비트를 아낄 수 있다.
- 주로 상수를 멀티플렉스 신호로 전송한다.
참고
- CAN baud rate가 500 kbps인 경우를 가정하여 계산해 본다.
- 최대 허용 버스 로드가 80%라고 하면, 실제 보드 레이트는 400 kbps (= 500 kbps x 80%)이다.
- CAN 메시지 아이디가 100개가 있다면, 메시지 아이디당 보드 레이크는 4 kbps/msg id이다.
- 8 바이트 데이터의 CAN 메시지 1개를 전송하는데 대략 120 비트가 소요된다. 4 kbps 전송하면 33.3 msg/sec로 전송할 수 있다. 전송 주기로 30msec이다.
- 위 방식으로 계산하면, 500 kbps CAN에 메시지 아이디 개수와 평균 전송 주기의 관계는 아래 그래프와 같다.

- (모두의 생각이 같을 수 없겠지만,) 나는 멀티플렉스 메시지로 아껴야 할 정도의 전체 대역폭 자원이 부족하다고 생각한다.
hsl's tsmaster 사용기 목차 :: hsl's tsmaster 사용기
'analysis' 카테고리의 다른 글
LIN RBS (Remaining Bus Simulation) - 3/3 (0) 2025.12.15 LIN RBS (Remaining Bus Simulation) - 1/3 (0) 2025.12.14 CAN 통신 에러 (0) 2025.11.30 blf --> csv --> 리샘플 --> xlsx (1) 2025.09.05 트레이스창에서 메시지 필터 걸기 (0) 2025.08.19