ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Symbol Mapping: 시스템 변수를 CAN 신호로 전송하기
    simulation 2025. 1. 3. 15:36

    시작하기 전에 

    이전 블로그에서  Symbol Mapping 기능들 중에 CAN 신호들을 이용해서 계산한 결과를 시스템 변수에 넣는 방법을 설명하였다. (Symbol Mapping: CAN 신호로 계산한 결과를 시스템 변수에 넣기 :: hsl's tsmaster 사용기)

     

    RBS(Remaining Bus Simulation)를 하다보면 내가 계산한 결과를 CAN으로 전송해야 할 경우가 있다. Symbol Mapping 기능으로 시스템 변수를 CAN으로 전송하는 방법을 설명한다.

     

    시스템 변수를 CAN 메시지로 전송하는 방법을 설명한다.

     

    개요

     

    시스템 변수를 전송할 CAN 메시지와 신호 만들기

    • dbc에 이미 존재하는 CAN 신호를 시스템 변수 전송에 이용할 수도 있으나, 이런 경우보다는 새 메시지와 신호를 정의하여 전송하는 경우가 많을 것 같다. 그래서 새 CAN 메시지와 신호를 만드는 방법을 먼저 설명한다. 
    • 메인 메뉴/ Analysis/ Database 버튼을 클릭한 후 드롭다운 메뉴에서 Show CAN Database를 클릭하여 CAN Database 창을 연다. 편집할 데이터베이스를 선택한 후, CAN Database 창에서 edit the current selected database를 클릭한다.

    CAN Database 창에서 편집할 dbc를 선택한 후 dbc 편집 버튼을 클릭한다.

    •  CANdb++ Editor 창이 열린다. 아래 순서대로 작업할 것이다.
      • yaw_rate_ws 신호를 담을 새 신호(yaw_rate_ws_m)를 만든다.
      • 이 신호를 담을 새 메시지(calc)를 만든다.
      • 이 메시지에 그 신호를 담을 것이다.
      • 그 메시지를 제어기(ESC)에 연결할 것이다.

    새 신호 만들기

    • CANdb++ Editor 창의 왼쪽 영역에서 Signal을 마우스 우클릭한 후 New...을 클릭한다. 

    CANdb++ Editor 창의 왼쪽 영역에서 Signal을 마우스 우클릭한 후 New...을 클릭한다.

    • 아래 그림과 같이 새 CAN 신호 yaw_rate_ws_m을 정의한다.
      • Name 칸에 yaw_rate_ws_m 이라는 신호 이름을 입력한다. 
      • Value Type에서 IEEE Float를 선택하였다. 
        • 다른 type을 선택해도 될 것 같다. 선택에 따라 Factor와 Offset을 설정해야 한다. (우선 현재 목표에 집중하느라) 안 해봤다. 

    새 CAN 신호를 정의한다.

     

    새 메시지 만들기

    • Message를 마우스 우클릭한 후 New...을 클릭하여 새 메시지 정의창을 띄운다.

     

    • 아래 그림과 같이 새 메시지를 정의한다. 나는 메시지 이름을 calc라고 정했다. ID는 다른 메시지들이 사용하지 않는 아이디(0x222)를 사용했다. DLC는 8 바이트로 했다. (모든 설정을 완료한 후에 윈도를 캡쳐해서 Transmitter에 ESC가 표시되어 있다.) 

    새 CAN 메시지를 정의한다.

     

    메시지에 신호를 담기

    • 메시지 정의 창에서 Signals 탭을 선택한다. 아래쪽에 있는 Add... 버튼을 클릭하여 위에서 정의한 yaw_rate_ws_m 신호를 선택한다.  

    Signals 탭에서 Add... 버튼을 클릭하여 yaw_rate_ws_m 신호를 추가한다.

    • 메시지 정의 창에서 Layout 탭을 선택한다. 아래 그림처럼 yaw_rate_ws_m 신호가 전체 8 바이트 중에서 상위 4 바이트를 차지하는 것을 볼 수 있다. 신호의 위치를 변경하고 싶으면 신호를 드래그&드롭할 수 있다. 

    yaw_rate_ws_m 신호가 메시지의 8 바이트 데이터 영역의 위(앞) 4 바이트를 차지한 것을 볼 수 있다.

     

    메시지를 제어기에 연결하기

    • 메시지 정의 창에서 Transmitters 탭을 선택한다. 아래쪽에 있는 Add... 버튼을 클릭하여 ESC를 선택한다. 이 메시지를 ESC가 보내는 것으로 가정했다.   

    메시지를 제어기와 연결한다.

     

    저장

    • File/ Save 메뉴를 클릭하여 변경 내용을 저장한다. File/ Exit 메뉴를 클릭하여 CAN db++ Editor를 닫는다. (이 절차를 지키는 것이 중요하다. 이렇게 해야 제대로) TSMaster의 CAN Database에 calc 메시지가 추가되어 있다. 

    dbc에 새로 정의한 calc 메시지와 yaw_rate_ws_m 신호를 볼 수 있다.

     

     

    시스템 변수를 CAN 신호에 연결하기

    • 메인 메뉴/ Simulation/ Symbol Mapping 버튼을 클릭하여 Symbol Mapping 창을 연다.
    • Destination System Variable List 영역에서 마우스 우클릭하고 Add System Variable 메뉴를 클릭한다.

    마우스 우클릭으로 Add System Variable을 선택하여 시스템 변수를 추가한다.

    • 추가할 시스템 변수인 yaw_rate_ws를 선택하고 OK 버튼을 클릭한다.

    시스템 변수들 중에서 CAN 신호와 연결할 변수(yaw_rate_ws)를 선택한다.

    • 시스템 변수 yaw_rate_ws가 추가되었다.
    • 시스템 변수 yaw_rate_ws를 calc 메시지의 yaw_rate_ws_m에 연결하기 위해 이를 선택하고 Source Signal 영역에서 Load CAN Database 버튼을 클릭한다.

    시스템 변수 yaw_rate_ws가 Destination System Variable List에 추가되었다. Load CAN Database 버튼을 클릭하여, 이 변수와 연결할 CAN 신호를 선택한다.

    • CAN Database에서 calc 메시지 아래있는 yaw_rate_ws_m 신호를 선택한 후, Symbol Mapping 창 상단의 Connect 버튼을 클릭한다. yaw_rate_ws와 yaw_rate_ws_m이 연결된 것을 확인할 수 있다.

    Connect 버튼을 이용하여 yaw_rate_ws_m을 yaw_rate_ws와 연결한다. 연결 결과가 오른쪽 Expression에 표시된다. 화살표가 시스템 변수의 값이 CAN 신호에 넣어지는 것을 표시한다.

    • (참고) 시뮬레이션을 하려면 calc 메시지가 전송되도록 해야 한다. 이 설정은 CAN Remaining Bus Simulation 창에서 한다. (잠시 후에 설명한다)  Setting 탭의 Options 설정에서 Auto activate associated RBS Tx signal을 체크하면 이 설정을 자동으로 해준다. 필요에 따라 체크한다. 

    calc 메시지가 전송되도록 하려면 RBS 설정을 해줘야 한다. Auto activate associated RTS Tx signal을 체크하면 이 설정을 자동으로 해준다.

     

     

    RBS 시뮬레이션

    • 메인 메뉴/ Simulation/ CAN RBS Simulation으로 CAN Remaining Bus Simulation 창을 연다. CAN RBS 창이라 부르겠다. 
    • CAN RBS 창의 오른쪽 영역에 Active 컬럼에서 전송할 신호들의 상위에 있는 것들을 모두 체크해야 전송이 된다. yaw_rate_ws_m 신호를 전송할 것이다. 이 신호의 상위인 calc 메시지를 체크한다. 이 메시지의 상위인 ESC 제어기를 체크한다. 이 제어기의 상위인 venue_esc 네트워크를 체크한다. 이 네트워크의 상위인 Channel 1 채널을 체크한다.

    전송할 신호를 기준으로 상위에 있는 것들을 모두 체크해야 전송이 된다. 필요에 따라 Auto start RBS를 켜거나 끌 수 있다. Auto start RBS가 꺼진 상태에서는 시작(화살표) 버튼과 정지(네모) 버튼으로 RBS를 on/off 할 수 있다.

    • 나머지 메시지들은 체크하지 않았다. blf 파일을 재생하여 RBS를 할 것이다. blf 파일에 나머지 메시지들이 포함되어 있다. 
    • 필요에 따라 Auto start RBS를 설정한다. 시작, 정지 버튼을 이용하여 RBS를 on/off 할 수 있다.
    • (앞에서 설명한 것처럼) RBS는 온-라인 모드에서만 실행된다. (오프-라인 모드에서는 실행되지 않는다.)
    • 미니프로그램을 실행한다. 
      • RBS는 온-라인 재생 시에만 가능하다. (오프-라인 재생에는 RBS가 안 된다.)
      • TSMaster 입장에서는 yaw_rate_ws 계산은 WHL_SPD11 메시지를 "Tx" 할 때 해야 한다. (오프-라인 재생 시에는  WHL_SPD11 메시지를 "Rx" 할 때 해야 한다.
      • 미니프로그램을 온-라인 재생과 오프-라인 재생에서 사용할 수 있는 calc_yaw_rate()라는 함수를 정의하고, 그 함수가 WHL_SPD11 메시지를 Rx 할 때 (On CAN Rx)와 Tx 할 때 (On CAN Tx) 실행되도록 프로그램을 수정한다.

    yaw_rate_ws 계산 과정을 별도 함수 (calc_yaw_rate_ws())로 정의한다. 같은 연산을 WHL_SPD11 메시지를 Rx 할 때와 Tx 할 때 할 것이기 때문이다. 함수 정의는 Global Definition에 한다.

     

    WHL_SPD11 메시지를 Tx 할 때, calc_yaw_rate_ws()를 실행하도록 한다. Rx 할 때도 동일하게 한다.

    • 온-라인 시뮬레이션을 시작한다.

    메인 메뉴/ Analysis/ Bus Playback/ Bus Replay 창에서 Online Replay 탭/ 시작 버튼을 클릭하여 온-라이 시뮬레이션을 시작한다.

    • CAN RBS를 Auto start로 해두었으면 calc 메시지가 자동으로 전송된다. 그렇지 않을 경우, CAN RBS 창에서 시작 버튼을 클릭하여 RBS를 시작한다.
    • 시스템 변수 WHL_SPD11 메시지가 Tx될 때마다 시스템 변수 yaw_rate_ws가 업데이트된다. 
    • calc 메시지가 전송될 때마다 yaw_rate_ws_m 신호에 최신 yaw_rate_ws가 들어가 전송된다.
    • 아래 그림을 보면 yaw_rate_ws_m과 yaw_rate_ws가 완전히 일치하지 않는다. (= 겹쳐보이지 않는다.) 
      • yaw_rate_ws 시스템 변수는 WHL_SPD11 메시지가 전송되는 시점에 표시된다.
      • yaw_rate_ws_m 신호는 calc 메시지가 전송되는 시점이 표시된다. 
      • 두 메시지 전송 시점에 차이가 있다.

     

     

    결론

    • symbol mapping 기능을 이용하면 시스템 변수와 CAN 신호를 간단히 연결할 수 있다. 
    • RBS와 symbol mapping을 함께 사용하면 (연산 결과가 담긴) 시스템 변수를 CAN 신호로 쉽게 전송할 수 있다. 

     

     


    목차 :: hsl's tsmaster 사용기
         

    CAN 버스 시뮬레이션 (RBS: Remaining Bus Simulation) :: hsl's tsmaster 사용기(판넬 사용법 설명을 포함한다.)

    Symbol Mapping: CAN 신호로 계산한 결과를 시스템 변수에 넣기 :: hsl's tsmaster 사용기    

    Symbol Mapping: 시스템 변수를 CAN 신호로 전송하기 :: hsl's tsmaster 사용기    

    TSMaster API를 사용하여 CAN 메시지 송신하기 (RBS) :: hsl's tsmaster 사용기    

    Python 미니프로그램: 코드에서 CAN 메시지의 신호를 읽는 방법 :: hsl's tsmaster 사용기    

    미니프로그램에서 CAN 신호와 시스템 변수 다루기 :: hsl's tsmaster 사용기