ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LIN RBS (Remaining Bus Simulation) - 2/3
    카테고리 없음 2025. 12. 14. 20:23

    LIN 메시지 전송하기

    • TSMaster에서 LIN 메시지를 전송하기 위해서 먼저 아래 두 가지를 해야 한다.
      • 하드웨어 설정
      • LDF 임포트

    하드웨어 설정

    • 내게는 LIN 통신을 하는 제어기가 없다. 대신 LIN 채널이 여러 개 있는 TC1026P 하드웨어를 사용하기로 한다. TC1026P의 채널 1과 채널 2를 직접 연결한다. 이렇게 하면 채널 1에서 헤더를 송신하고 채널 2에서 수신한 헤더에 상응하는 응답을 송신하도록 할 수 있을 것이라는 생각이다. 헤더와 응답이 합쳐져서 하나의 LIN 메시지가 된다.

    제어기 대신 TC1026P의 두 채널을 연결하여 LIN 네트워크를 만든다.

     

    • 메인 메뉴/ Hardware/ Channel Selection에서 LIN 채널을 설정한다. 나는 2 채널을 사용할 것이라서 Channel Count를 2로 하였다. LIN 1, LIN 2에 TC1026P의 1, 2번 채널을 할당했다.

    LIN 채널을 설정한다.

    • 메인 메뉴/ Hardware/ Network Hardware에서 baud rate, protocol, Only monitor the IDs assigned to this node, Keep Low Level when Stop Mode를 설정한다. 

    LIN 하드웨어를 설정한다.

    • 보드 레이트, 프로토콜, Keep Low Level when Stop Mode는 자동차사의 LIN 사양서에 따라 설정하면 될 것이다.
    • 아래 그림의 LIN 프로토콜들이 지원된다.

    TSMaster가 지원하는 LIN 프로토콜들이다.

    • LIN 트레이스창에서 ldf 파일에 정의되지 않은 메시지도 모니터를 하려면 Only monitor the IDs assigned to this node를 언체크한다. 

     

    LDF 임포트

    • ldf 파일 임포트 방법은 아래 두 가지가 있다. 
      • ldf 파일을 TSMaster 창에 드래그&드롭하여 임포트 할 수 있다. 
      • 메인 메뉴/ Analysis/ Database/ Show LIN Database로 LIN Database 창을 연다. LIN Database 창에서 Add Database 버튼을 클릭하여 임포트할 ldf 파일을 선택한다.

    • 임포트한 ldf 는 채널 1에 할당된다. 채널 2에도 ldf를 할당하기 위해서는 Channel 2에서 마우스 우클릭한 후 임포트한 데이터베이스 이름을 선택한다.

    • 나는 TSMaster를 설치할 때 함께 설치된 LINDemo.ldf 파일을 이용하여 실험한다.

    • ldf 에는 LINDemo라는 네트워크가 있다.
    • LINDemo 네트워크에는 4개의 노드가 있다. MasterNode, SteeringLamp, HeaLamp, Wiper이다.
    • MasterNode가 마스터이다. (BodyControl 이라고 이름을 지었으면 좋았을 것 같다.)
    • MasterNode는 SlavesControls 메시지를 송신하고, SteeringLampStates, HeadLampStates, WiperStates 메시지들을 수신한다.
    • SteeringLamp 노드는 MasterNode가 송신한 SlavesControls 메시지를 수신하고, SteeringLampStates 메시지를 송신한다. 
    • HeadLamp 노드도 MasterNode가 송신한 SlavesControls 메시지를 수신한다.  HeadLampStates 메시지를 송신한다. 
    • 그림에는 나오지 않지만 Wiper 노드도 MasterNode가 송신한 SlavesControls 메시지를 수신한다. WiperStates 메시지를 송신한다. 

     

     

    LIN 메시지 전송

    • 메인 메뉴/ Analysis/ Transmit/ Add LIN Transmit을 선택하여 LIN Transmit (전송)창을 연다.
    • 전송창의 툴바 버튼을 이용하여 전송할 LIN 메시지를 창에 추가한다.
      • 툴바의 가장 왼쪽 버튼으로 데이터베이스 창에서 메시지를 선택하여 추가할 수 있다.
      • 툴바의 왼쪽에서 두 번째 버튼으로 사용자 정의 메시지를 추가할 수 있다.
      • 툴바의 중간에 있는 "채널/ 네트워크/ 노드" 선택 버튼을 클릭하면 데이터베이스에서 노드를 선택할 수 있다. 선택한 노드의 모든 송수신 메시지들이 추가된다. 아래 그림은 CH1/ LINDemo/ MasterNode를 선택하여 추가한 전송창의 그림이다. 

    "채널/ 네트워크/ 노드" 선택 버튼을 이용하여 CH1/ LINDemo/ MasterNode를 선택한 후 전송창

     

    • 선택된 노드의 메시지들이 전송창에 추가되었다. 각 메시지는 노드를 기준으로 Tx, Rx가 표시되어 있다.
    • 모드를 Schedule Table 혹은 Single Frame으로 선택할 수 있다.
    • 아래 그림은 스케줄표를 선택한  경우이다. Deplay (전송)버튼이 있다. 이 버튼을 클릭하면, 전체 메시지들이 스케줄 표에 따라 전송된다.

    • 아래 그림은 싱글 프레임을 선택한 경우이다. Deploy (전송)버튼이 사라지고, 각 메시지에 삼각형의 플레이 버튼이 표시된다. 플레이 버튼을 클릭할 때마다 해당 메시지가 전송된다.

    • 메인 메뉴/ Analysis/ Trace/ LIN 메시지를 볼 수 있는 LIN Trace 창을 연다.

     

    • 전송창에서 스케줄표를 선택하고 전송 버튼을 클릭하였다. 결과는 아래 그림과 같다.
    • 트레이스창을 보면, SlaveControls 메시지가 LIN 1 채널에서 Tx되어 LIN 2 채널에서 Rx 되는 것을 볼 수 있다. SlaveControls는 MasterNode가 전송하는 메시지다. MasterNode가 헤더를 전송하고 응답도 전송해서 메시지가 성공적으로 전송된 것 같다. 그래서 메시지가 검은색으로 표시됐다.
    • 나머지 메시지들은 Receive Data Timeout 에러가 발생했다. 그래서 메시지들이 빨간색으로 표시됐다. MasterNode가 헤더를 전송하였으나 응답이 전송되지 않았다. 그래서 데이터 수신 타임아웃 에러가 발생한 것으로 추측한다.    

    • 내 추측이 맞는지 실험 목적으로 메시지 방향을 Rx에서 Tx로 변경하여 전송을 해보았다. 모든 메시지들이 LIN 1 채널에서 전송되고 LIN 2 채널에서 수신된다.

    • 그런데 이것은 내가 바라는 바는 아니다. 나는 LIN 1 채널의 MasterNode가 헤더를 전송하고, LIN 2 채널의 슬레이브 노드들이 응답을 전송하여 메시지들이 완성되도록 하고 싶다.
    • LIN Transmit 창을 하나 더 생성하고, CH2/ LINDemo/ SteeringLamp 노드를 선택하였다.
    • 실험을 위해서 MasterNode 노드와 SteeringLamp 노드 모두 SlavesControls 메시지와 SteeringLampStates 메시지만 송수신하도록 하였다. 메시지 전송 방향은 ldf에 정의된 설정을 그대로 적용하였다.
    • SteeringLamp 노드는 대기 상태로 두고  MasterNode는 전송하도록 하였다. 예상대로 SlavesControls 메시지는 제대로 송수신된다. SteeringLampStates는 Receive Data Timeout 에러가 발생한다. 

    • SteeringLamp 노드와 MasterNode 노드 모두 전송하도록 하였다. SlavesControls 메시지와 SteeringLampStates 메시지 모두 정상적으로 전송된다. 

    • 참고 삼아 SteeringLamp 노드도 Master Node로 설정한 후, 두 노드 모두 전송하도록 해보았다. 예상대로 에러가 발생한다. 에러의 종류는 다양하다. 한 네드워크에 마스터가 두 개 있을 수 없다.

    • 그런데 위 실험에서 MasterNode가 메시지의 헤더 부분만 전송하고 SteeringLamp 노드가 응답 부분을 전송하는 것인지, MasterNode는 SlavesControls 메시지 전체를 그리고 SteeringLamp 노드는 SteeringLampStates 메시지 전체를 전송하는 것인지 알 수가 없다. 
    • LIN RBS (Remainig Bus Simulation)는 왠지 Master Node 노드가 헤더 부분을 SteeringLamp 노드가 응답 부분을 전송할 것 같다. 
    • 쓰던 글이 날라갈까봐 LIN RBS (Remaining Bus Simulation) - 3/3 :: hsl's tsmaster 사용기에서 이어서 설명한다. 

     

    이전 글: LIN RBS (Remaining Bus Simulation) - 1/3 :: hsl's tsmaster 사용기