-
판넬로 출력하는 방법 - 관계도analysis 2024. 10. 25. 23:26
시작하기 전에
데이터를 측정 중에 두 신호의 관계를 그래프로 보고 싶은 경우가 있다. 실시간으로 신호 관계를 볼 수 있으면 데이터 측정 후에 별도로 데이터를 처리해서 관계를 확인하고 시험을 다시 하는 반복을 조금이라도 줄일 수 있다.
TSMaster에는 Panel 기능이 있다. 판넬 기능으로 Relation Chart(관계도)를 그릴 수 있다.
아래 그림은 관계도를 이용하여 신호들 사이의 관계를 실시간으로 표시한 예이다.
- 신호들 사이에 아래와 같은 관계가 있는 것을 데이터 측정 중에 알 수 있다.
- YAW_RATE vs yaw_rate_ws
- YAW_RATE: CAN 버스의 요-레이트 신호. 센서 측정값
- yaw_rate_ws: CAN 버스의 바퀴 속도 신호들로 계산한 요-레이트
- 비례하는 관계에 있다. 이상적인 경우 완전히 일치해야 한다.
- SAS_Angle vs YAW_RATE
- SAS_Angle: CAN 버스의 조향각 신호. 센처 측정값
- YAW_RATE: CAN 버스의 요-레이트 신호. 센서 측정값
- 조향각에 따라 요-레이트가 양의 상관 관계에 있다.
- 차속, 도로의 횡경사 등에 따라 기울기가 다르다.
- 조향각이 증가할 때와 감소할 때의 경로가 다르다.
- YAW_RATE vs LAT_ACCEL
- YAW_RATE: CAN 버스의 요-레이트 신호. 센서 측정값
- LAT_ACCEL: CAN 버스의 횡가속도 신호. 센서 측정값
- 요-레이트와 횡가속도는 양의 상관 관계에 있다.
- 차속, 도로의 횡경사 등 여러 원인으로 관계 곡선이 복잡하다.
관계도를 그리는 방법
- 메인 메뉴/ Simulation/ Panel 버튼을 클릭하여 Panel 창을 만든다.
- 판넬 창의 왼쪽 부분을 캔버스 영역 오른쪽을 프라퍼티 영역이라고 부르겠다.
- 프라퍼티 영역에서 "Toolbox" 탭을 클릭한다.
- "View Only" 아래 "Relation Chart"를 더블 클릭한다.
- 캔버스에 관계도 위젯이 표시된다.
- 테두리를 마우스로 드래그하여 적당한 크기로 만든다.
- 프라퍼티 영역의 Properties 탭을 클릭하고 "Height" 나 "Width" 프라퍼티에 수치를 입력하여 조절할 수도 있다.
- 중요한 것은 x축과 y축에 변수를 설정하는 것이다.
- x축 변수를 설정하려면 "EditSignalIndex"에서 0을 선택한다.
- CAN 신호라면 "VarType"에서 CANSignal을 선택한다.
- "VarLink"를 클릭하면 오른쪽에 ... 버튼(3점 버튼)이 생긴다. 이 버튼을 클릭하면 데이터베이스 창이 열린다. 신호를 선택하고 OK 버튼을 클릭하여 창을 닫는다.
- y축 변수를 설정하려면 EditSignalIndex에서 1을 선택한다.
- 시스템 변수라면 VarType에서 SystemVar를 선택한다.
- VarLink를 클릭하여 3점 버튼을 클릭하면 시스템 변수 창이 열린다. 변수를 선택하고 OK 버튼을 클릭한다.
- 판넬 창 상단 왼쪽에 연필 모양 버튼을 클릭하면 실행 모드로 전환된다.
- 실행모드가 되면 오른쪽에 프라퍼디 영역이 사라진다. (편집 모드에서 그리드 점들을 표시하게 했다면 (기본 설정) 그리드 점들도 사라진다.)
- 판넬은 온라인 상태에서만 작동한다. TSMaster - panel relation graph
주의: 온라인 재생과 오프라인 재생 시 미니프로그램에서 고려할 점
- 판넬은 "온라인" 상태에서만 작동하기 때문에, 트레이스를 재생하며 판넬의 관계도를 보려면 아래처럼 두 가지 방법처럼 온라인 상태를 만들어야 한다.
- 하드웨어를 연결하여 온라인 상태에서 트레이스를 재생한다. 하드웨어 없이 데이터 분석하는 경우 할 수 없다.
- 가상 하드웨어로 설정하고 트레이스를 재생한다. 가상 하드웨어 설정은 "메인 메뉴/ Hardware/ Channel Selection"에서 할 수 있다. Channel Selection 창에서 Hardware Channel Selection에 Virtual Device를 선택한다.
- 온라인 재생과 오프라인 재생은 메시지 송수신 방향이 반대가 된다.
- yaw_rate_ws를 계산하는 미니프로그램은 WHL_SPD11 메시지를 "수신(Rx)"할 때 계산을한다. WHL_SPD11 메시지를 송신(Tx)할 때 계산하도록 코드를 수정해야 한다.
- 수정된 코드는 아래와 같다.
# CODE BLOCK BEGIN Global_Definitions from TSMaster import * # import import Databases as dbs # global WHL_SPD11_1 = dbs.TWHL_SPD11_1() # function def calc_yaw_rate_ws(ACAN: RawCAN) -> None: ''' WHL_SPD11 메시지를 이용하여 yaw rate를 계산한다. on_canfd_rx_WHL_SPD11() 함수와 on_canfd_tx_WHL_SPD11() 함수에 동일한 계산 수행이 필요하여 별도의 함수로 만들었다. on_canfd_rx_WHL_SPD11() 함수와 on_canfd_tx_WHL_SPD11() 함수에서는 이 함수를 호출하여 계산을 수행한다. ''' global WHL_SPD11_1 # WHL_SPD11 메시지를 WHL_SPD11_1 변수에 넣는다. # WHL_SPD11_1 변수를 먼저 선언해주어야 함. # 변수 선언은 Global Definition에서 함 WHL_SPD11_1.FRawCAN = ACAN # yaw_rate_ws를 계산한다. whl_spd_rr_minus_rl = WHL_SPD11_1.WHL_SPD_RR - WHL_SPD11_1.WHL_SPD_RL # 베뉴의 rear track은1.555m이다. # wheel_spd_rr_minus_rl를 rear track으로 나눠서 yaw rate를 구한다. # wheel speed는 kph이다. mps로 변환하기위해 1000 / 36000을 곱한다. # radian을 deg로 변환하기 위해 180 / pi를 곱한다. # 위 연산을 하는 것은 whl_spd_rr_minus_rl에 10.27을 곱하는 것과 같다. yaw_rate_ws = whl_spd_rr_minus_rl * 10.27 # 사용자 변수 calc.yaw_rate_ws에위에서 계산한 yaw_rate_ws를 넣는다. app.set_system_var_double('calc.yaw_rate_ws', yaw_rate_ws) return None # CODE BLOCK END Global_Definitions # CODE BLOCK BEGIN Instance Instance = MpInstance('panel') # CODE BLOCK END Instance # CODE BLOCK BEGIN On_CAN_FD_Rx WHL_SPD11 LTEsLTEsOTAy def on_canfd_rx_WHL_SPD11(ACAN: RawCAN) -> None: ''' WHL_SPD11 메시지를 수신(Rx)할 때마다 WHL_SPD11 메시지를 이용하여 yaw rate를 계산한다. ''' calc_yaw_rate_ws(ACAN) return None # CODE BLOCK END On_CAN_FD_Rx WHL_SPD11 # CODE BLOCK BEGIN On_CAN_FD_Tx WHL_SPD11 LTEsLTEsOTAy def on_canfd_tx_WHL_SPD11(ACAN: RawCAN) -> None: ''' WHL_SPD11 메시지를 송신(Tx)할 때마다 WHL_SPD11 메시지를 이용하여 yaw rate를 계산한다. ''' calc_yaw_rate_ws(ACAN) return None # CODE BLOCK END On_CAN_FD_Tx WHL_SPD11 # CODE BLOCK BEGIN Step_Function NQ__ def step() -> None: pass # CODE BLOCK END Step_Function
마무리
- 신호들 사이의 관계를 실시간으로 그래프로 그리면, 실시간으로 시험 조건을 변경하여 데이터 측정과 처리 사이클을 줄일 수 있다. 즉, 개발 시간을 단축할 수 있다.
- 판넬을 이용하여 관계도를 그릴 수 있다.
- 판넬은 온라인 상태에서 동작한다. 하드웨어 없이 온라인 재생을 할 경우 가상 하드웨어를 이용한다.
- 온라인 재생과 오프라인 재생의 경우 메시지의 송수신 방향이 반대다. 이를 고려하여 메시지 송신 시에 연산을 하도록 작성된 미니프로그램은 메시지 송신 시에 연산을 수행하도록 수정해야 한다.
'analysis' 카테고리의 다른 글
제동 성능 지표 계산하기 (4) 2024.10.25 mat 파일을 데이터프레임으로 변환하고 feather 파일로 저장하기 (2) 2024.10.25 CAN 데이터로 제동 성능 평가하기 (0) 2024.10.25 CAN 신호들로 실시간 연산하기 - 미니프로그램으로 yaw_rate_ws 계산 (0) 2024.10.25 CAN 트레이스 받기 - 하드웨어 설정 (0) 2024.10.25