-
Python 미니프로그램: 코드에서 CAN 메시지의 신호를 읽는 방법tip 2025. 1. 7. 19:49
코딩을 하다보면 메시지의 신호에서 값을 읽어올 경우가 있다. 그 방법을 설명한다.
신호를 포함하는 메시지를 읽을 수 있도록 준비
- 먼저 읽을 신호를 포함하고 있는 메시지를 코드에서 사용할 수 있도록 준비해야 한다.
- Python Code Editor의 Properties 탭을 클릭한다.
- 왼쪽 아래쪽에 Database Symbols 영역이 있다.
- 읽을 메시지가 포함된 dbc 파일을 체크한다. (TSMaster에서 dbc를 읽으면 pdbc로 변환된다.)
- Symbols 탭을 클릭한다.
- Global Definition을 선택한다. 여기에 메시지를 읽는데 필요한 코드가 삽입되어야 한다. 코드 어디에서나 사용되어야 해서 Global Definition에서 정의한다.
- Functions 탭을 클릭한다.
- 읽을 메시지에서 우클릭한다. Insert into script를 클릭한다. Global Definition에 코드가 삽입된다.
- CAN 메시지들의 정의가 있는 Databases 모듈을 import 한다.
- WHL_SPD11_1 메시지를 읽기 위한 글로벌 변수를 정의한다.
- 글로벌 변수의 이름은 아래 규칙으로 만들어진다.
- WHL_SPD11: 메시지 이름
- _1: 채널 이름
- 위와 같이 준비하면 해당 메시지를 읽고 쓸 수 있다.
메시지 안의 시그널을 읽는 법
- 새 메시지를 수신할 때 신호를 읽어 사용하게 된다. 그래서 On CAN Rx 이벤트에 신호를 읽는 코드를 추가한다.
- 아래 이름의 함수가 하나 만들어진다. 이름이 직관적이다.
def on_can_rx_WHL_SPD11(ACAN: RawCAN) -> None:
- 함수에서 실행할 코드를 추가한다.
- 메시지의 신호를 읽어서 사용하는 방법은 아래와 같이 간단하다.
def on_can_rx_WHL_SPD11(ACAN: RawCAN) -> None: # WHL_SPD11 메시지를 수신하면, # TSMaster는 on_can_rx_WHL_SPD11 함수를 실행한다. # WHL_SPD11 메시지는 ACAN 인자에 들어있다. # ACAN에 있는 데이터를 WHL_SPD11의 구조에 맞게 읽어야 한다. # WHL_SPD11 구조에 따라 선언된 WHL_SPD11_1 클래스를 이용한다. # Global Definition에서 선언한 WHL_SPD11_1 클래스를 사용하기 위해서 global WHL_SPD11_1 # 변수 이름과 겹치지 않으면 안 해도 된다. # ACAN의 데이터를 WHL_SPD11_1 클래스에 넣는다. # 이로서 WHL_SPD11 메시지의 구조대로 신호들에 값이 할당된다. WHL_SPD11_1.FRawCAN = ACAN # WHL_SPD11_1 메시지의 WHL_SPD_RR과 WHL_SPD_RL 신호를 이용하는 방법 whl_spd_rr_minus_r1 = WHL_SPD11_1.WHL_SPD_RR - WHL_SPD11_1.WHL_SPD_RL
'tip' 카테고리의 다른 글
blf 파일에서 m_id, dlc, d_ts 추출하기 (0) 2025.01.19 미니프로그램에서 CAN 신호와 시스템 변수 다루기 (0) 2025.01.10 IDS 오감지/ 민감 감지에 관한 고찰 (0) 2025.01.04 침입 판정 기준값 데이터 준비 (0) 2025.01.04 asc 파일을 pandas 데이터프레임으로 변환하기 (0) 2025.01.04