tip
-
Python을 PATH에 추가하기tip 2025. 2. 7. 12:34
커맨드 창에서 python을 실행했는데 "알려지지 않은 명령"이라는 에러 메시지가 뜨는 경우, python 디렉토리가 PATH에 없어서 그렇다. 아래 방법으로 PATH를 변경한다.윈도 검색창에 "path"를 입력한다. 검색 결과 중 "시스템 환경 변수 편집"을 선택한다. 시스템 속성창이 열린다. 시스템 속성창이 열리면 "환경 변수(N)..." 버튼을 클릭한다. 환경 변수창이 열린다. 환경 변수 창에서 Path 항목을 더블클릭하여 환경 변수 편집창을 연다.현재 사용자의 환경 변수만 수정할 경우 사용자 변수를, 전체 사용자들의 환경 변수를 수정할 경우 시스템 변수를 선택한다. 환경 변수 편집 창에서 "새로 만들기" 버튼을 클릭한다. 새로 추가된 줄에 Python이 설치된 경로를 입력한다. 기존에 사용하던 P..
-
blf 파일에서 m_id, dlc, d_ts 추출하기tip 2025. 1. 19. 19:17
목적TSMaster로 받은 차량 통신 데이터 파일 (blf)를 분석하여 메시지 아이디 (m_id), 데이터 길이 (dlc, data length code), 전송 주기(d_ts. ts = timestamp, d_ts는 ts의 차이)를 구하는 미니프로그램을 만든다.그동안 나는 blf 파일을 직접 처리할 줄 몰랐다. 그래서 blf를 TSMaster의 Log Converter 기능을 이용하여 텍스트 형식의 asc 파일로 변환한 후, asc 파일을 읽어 데이터를 처리했다. 변환은 한 번만 하면 되는 일이지만 그래도 불편하다. 이 기회에 blf 파일을 직접 다루는 방법을 배운다. blf 파일 읽기m_id, dlc, d_ts를 구하기 위해서는 blf를 읽기만 하면 된다.blf 파일을 읽을 수 있는 Python 모듈..
-
미니프로그램에서 CAN 신호와 시스템 변수 다루기tip 2025. 1. 10. 01:47
시작하기 전에 미니프로그램을 작성하다보면 CAN 신호와 시스템 변수를 다루게 된다. 아래의 경우들이 있다. 미니프로그램에서 CAN 신호를 읽어서 연산에 사용한다.미니프로그램에서 연산한 결과를 CAN 메시지의 신호로 전송한다.신호를 TSMaster의 그래픽, 트레이스, 판넬 창 등에서 사용할 수 있다.메시지는 blf 파일에 저장할 수 있다. (blf 파일을 csv, mat, csv 등으로 변환하여 다른 프로그램에서 읽을 수 있다.)미니프로그램에서 시스템 변수를 읽어서 연산에 사용한다.미니프로그램에서 연산한 결과를 시스템 변수에 저장한다.시스템 변수를 TSMaster의 그래픽, 트레이스, 판넬 창 등에서 사용할 수 있다.시스템 변수를 blf 파일에 저장할 수 있다. (2025-01-10 현재, 시스템 변수..
-
IDS 오감지/ 민감 감지에 관한 고찰tip 2025. 1. 4. 23:26
IDS 오감지/ 민감 감지에 관한 고찰IDS 미니프로그램이 잘 작동한다.0x300번대 메시지들은 침입이 아닌데도 주기 기반 침입 감지가 발생한다.혹시 0x300번대에 메시지들이 다른 번호대 메시지들 보다 많나? 그래서 전송 지연이 연쇄 작용을 일으키나? 하는 의문이 생겼다. import pandas as pdfrom pathlib import Pathimport pickleimport plotly.express as pximport plotly.graph_objects as go# 메시지별 d_ts 통계값을 저장한 xlsx 파일을 읽는다.xlsx_d_ts_distribution = Path.cwd() / 'd_ts_distribution.xlsx'df = pd.read_excel(xlsx_d_ts_dis..
-
침입 판정 기준값 데이터 준비tip 2025. 1. 4. 18:01
침입 감지를 판정할 d_ts의 기준값을 준비한다.¶침입이 있다면 메시지 전송 간격인 d_ts (= timestamp의 diff라는 의미로 d_ts)가 줄어들게 된다.칩입이 없을 때 d_ts의 최소값을 d_ts_min이라고 하자.침입 판정 기준을 d_ts_intrusion_detection_threshold라고 하자.d_ts가 d_ts_min 보다 작아으면 침입으로 감지로 의심할 수 있다.d_ts_min을 구하는데 사용된 데이터가 충분히 많다고 할 수 없다.내가 사용한 데이터는 3분 30초 길이로 너무 짧다.내가 했던 주행도 매우 평범하여 제어기에 연산 하중이 매우 작았을 것이다. 그래서 전송 주기에 영향이 거의 없었을 것이다.데이터가 충분하지 않아 너무 민감하게 침입을 감지할 가능성이 있다.메시지별 d_..
-
asc 파일을 pandas 데이터프레임으로 변환하기tip 2025. 1. 4. 14:02
asc to dataframe¶메시지 전송 주기를 분석하기 위해 수치 데이터 처리에 편리한 pandas를 사용할 것이다.m_id별로 분리된 asc 파일을 읽어서 pandas 데이터프레임을 만든다.데이터 길이 (dlc: data length code)가 일정하지 않다. 어떻게 처리할까?In [16]:import pandas as pdfrom pathlib import PathIn [17]:# data 디렉토리에 있는 모든 .asc 파일의 이름을 출력한다.dir_data = Path('.').absolute()/'asc_per_id'ascs = list(dir_data.glob('*.asc'))print(f'{len(ascs) = :,}')for asc in ascs: print(asc.name)len..
-
asc 파일을 m_id별로 분리하기tip 2025. 1. 4. 13:24
asc 파일을 CAN 메시지 아이디별로 분리 저장한다.¶차에서 받은 CAN 트레이스에는 여러 메시지 아이디(m_id)들의 메시지들이 있다.m_id별 분석을 위해서 m_id별로 asc 파일을 만들어 메시지들을 저장한다.In [1]:from pathlib import Pathimport pandas as pdIn [2]:# 아래 asc 파일을 대상으로 한다.path_to_data_asc = Path(r'C:\Users\haese\OneDrive\01_Projects\1_picode\05_tosun\30_기술\00_교육_자료\CySec\IDS\20240725_venue2024_07_26_09_17_29.asc')# 현재 디렉토리 아래에 asc_per_id 디렉토리를 만든다. dir_output = Path('..
-
mdf 데이터 파일을 읽어서 그래프 그리기tip 2025. 1. 1. 18:23
시작하기 전에 CAN은 메시지 단위의 통신을 한다. CAN 메시지들은 blf 파일에는 메시지 단위로 차곡차곡 저장된다. 아래 그림처럼. 이를 메시지 기반 파일 형식이라고 부르겠다. (위 그림에서 하이라이트 되어있는 첫 줄의 "3A 04 91 ..." 처럼) 바이너리로 저장된 데이터에서 신호를 추출해야 한다. 추출에 필요한 정보는 dbc 파일에 정의되어 있다. (dbc 파일이 무엇인지를 CAN 트레이스 보기 - 바퀴 속도 :: hsl's tsmaster 사용기의 '트레이스 창'에서 부분에서 설명하였다.)dbc 파일이 없으면 신호를 보고 싶은 사람에게 blf 파일은 쓸모가 없다.blf 파일와 짝이 맞지 않는 dbc 파일을 적용하는 경우, 신호를 엉뚱하게 추출하게 된다. 추출하지 못하는 상황보다 더 나쁜 ..
-
CAN dbc 편집tip 2024. 12. 30. 16:14
나는 CANdb++를 사용한다. Vector사의 Freeware이다. 아래 링크에서 다운로드 받을 수 있다. https://www.vector.com/int/en/support-downloads/downloads/add-ons-and-freeware/candb-editor/ CANdb++로 메시지 전송 주기 변경하는 방법CANdb++에는 메시지 전송 주기를 변경하는 기능이 없다. 나는 아래 방법으로 메시지 전송 주기를 변경한다.dbc 파일을 일발 텍스트 에디터로 연다. "MsgCycleTime"으로 검색한다. (예를 들어) 아래의 줄이 검색된다. BA_ "GenMsgCycleTime" BO_ 1025 10;1025는 16진수 0x401의 십진수 값이다. 메시지 아이디 0x401의 전송 주기를 설정한다..
-
async 유무의 차이 - app.set_system_var_double_async() 에서tip 2024. 12. 26. 11:19
CAN 신호들로 실시간 연산하기 - 미니프로그램으로 yaw_rate_ws 계산 :: hsl's tsmaster 사용기에서 CAN의 WHL_SPD_RL과 WHL_SPD_RR을 이용하여 요-레이트를 구하고 이를 로컬 변수인 yaw_rate_ws에 할당하였다. 그리고 yaw_rate_ws를 사용자 정의 시스템 변수인 calc.yaw_rate_ws에 할당한 후, calc.yaw_rate_ws를 그래픽 창에 곡선으로 출력하였다. yaw_rate_ws를 calc.yaw_rate_ws에 할당할 때 app.set_system_var_double('calc.yaw_rate_ws', yaw_rate_ws) 함수를 사용하였다. 이 함수와 유사한 이름의 app.set_system_var_double_async('calc..