-
목차tip 2024.12.06 09:47
응용 사례CAN 데이터로 제동 성능 평가하기 :: hsl's tsmaster 사용기mat 파일을 데이터프레임으로 변환하고 feather 파일로 저장하기 :: hsl's tsmaster 사용기제동 성능 지표 계산하기 :: hsl's tsmaster 사용기 칩임 감지 시스템 (IDS: Intrusion Detection System) :: hsl's tsmaster 사용기asc 파일을 m_id별로 분리하기 :: hsl's tsmaster 사용기asc 파일을 pandas 데이터프레임으로 변환하기 :: hsl's tsmaster 사용기 CAN 메시지 전송 주기 분포 분석 :: hsl's tsmaster 사용기 침입 판정 기준값 데이터 준비 :: hsl's tsmaster 사용기 IDS 오감지/ 민감 ..
-
UDS 진단 통신으로 하는 소프트웨어 업데이트 6 - 자동 진단diagnostic 2025.03.02 11:55
자동 진단 (Automatic Diagnostic) 앞에서 정의한 서비스 단계들을 하나로 묶어서 작업 그룹을 정의한다. 작업 그룹을 실행시키면 모든 서비스 단계들이 한 번에 순차적으로 "자동" 실행된다. 작업 그룹 정의Diagnostic 창/ Automatic Diagnostic 탭/ 작업 그룹 트리 영역의 "빈 공간"에서 마우스 우클릭하여 "Add a new group"을 선택한다. 폴더 아이콘으로 표시되는 새 작업 그룹이 만들어진다. [주의] "빈 공간"을 선택한 상태가 아니라 항목을 선택된 상태에서 "Add a new group"하면 새 작업 그룹은 선택된 항목 아래에 생성된다. 방금 만든 작업 그룹을 선택하고 마우스 우클릭하여 뜬 팝-업 메뉴에서 "Edit Name"을 선택하고 작업 그룹의..
-
UDS 진단 통신으로 하는 소프트웨어 업데이트 5 - 메타 데이터 업데이트diagnostic 2025.02.28 16:16
소프트웨어 전송 후소프트웨어 전송을 완료한 후 소프트웨어 업데이트를 추적할 수 있는 메타 데이터를 기록한다. 업데이트가 잘 되었는지 확인도 필요하다. 아래 그림의 빨간 테두리 부분이다. 소프트웨어 번호 쓰기논점을 흐리지 않기 위해 업데이트의 이력 관리가 왜 중요한지를 설명하지는 않지만 이는 매우 중요하다. 이력 관리에 필요한 데이터를 제어기에 기록한다. 이력 기록을 위한 루틴이 정의되어 있을 수 있다. 설명을 시작할 때 루틴이 정의되어 있다고 가정했다. 앞에서 0x31 RoutineControl을 설명하였다. 동일한 서비스를 다시 설명하는 것보다 WriteDataByIdentifier와 ReadDataByIdentifier 서비스를 설명하는 것이 더 유용할 것 같아 계획을 수정한다.UDS 표준에 Wr..
-
UDS 진단 통신으로 하는 소프트웨어 업데이트 4 - 소프트웨어 전송 (계속)diagnostic 2025.02.28 12:27
소프트웨어 전송 (계속)아래 그림의 빨간 테두리 부분에 관한 설명이다. 이와 관련한 설정은 Request and Transmit Data 탭에서 한다. 설정 화면은 아래 그림과 같다.설정 항목들은 DataFormat Identifier of Request Transmit Data(0x), Enable User Define MaxNumOfBlockLength(0x), Delay Time after Transfer Request, Delay Time after Transfer Data이다. Data Format IdentifierData Format Identifier of "Request Transmit"을 설명하려면 먼저 "Request Transmit" 서비스의 포맷을 설명해야 한다. 포맷은 아래와 ..
-
UDS 진단 통신으로 하는 소프트웨어 업데이트 3 - 소프트웨어 전송diagnostic 2025.02.27 13:04
소프트웨어 전송소트웨어 전송 과정은 아래 그림과 같다. 소프트웨어가 프로그램될 영역 삭제, 다운로드 요청, 프로그램할 소프트웨어 전송 (데이터 전송), 전송 종료, 소프트웨어 번호 (기타 메타 데이터) 쓰기이다. 영역 삭제와 메타 데이터 쓰기는 자동차사, 협력사 특화된 루틴(기능)이다. UDS에는 RoutineControl 이라는 이름으로 서비스 아이디 0x31이 정의되어 있다. 나는 영역 삭제와 메타 데이터 쓰기를 위한 루틴이 정의되어 있다고 가정하고 설명한다. 다운로드 요청 (서비스 아이디 0x34), 데이터 전송 (서비스 아이디 0x36), 전송 종료 (서비스 아이디 0x37)는 각각의 서비스로 분리되어 있지만 실제로는 합쳐져 실행된다. 그래서 TSMaster에는 Combined Services 라..
-
UDS 진단 통신으로 하는 소프트웨어 업데이트 2 - 보안 접속diagnostic 2025.02.26 16:19
보안 접속(Security Access)시드 & 키 보안 접속으로 설명한다. 아래 순서대로 동작한다. 시드 요청 (Request Seed)Diagnostic 창의 왼쪽에 UDS 표준의 서비스들이 나열된 트리 영역에서 SecurityAccess 항목을 선택하고 마우스 우클릭하여 Add New Service를 선택한다. 그리고 아래 그림과 같이 Request Seed를 입력한다.SecurityAccess의 서비스 아이디는 0x27이다. SecurityAccessType은 입력 칸의 오른쪽 끝 '...' 버튼을 클릭하여 Select Sub Function ID 창을 열고 0x01 RequestSeed를 선택한다. RequestSeed와 SendKey는 둘이 한 쌍을 이룬다. 0x01로 시드를 요청한 경우, ..
-
UDS 진단 통신으로 하는 소프트웨어 업데이트 1 - 작업 개요카테고리 없음 2025.02.26 14:42
시작하기 전에진단 통신은 제어기 소프트웨어 업데이트에도 활용될 수 있다. UDS 표준이 만들어진 시기에는 프로그래밍이라고 불렀다. 요즘은 소프트웨어 업데이트가 더 흔하게 사용된다. 여기서는 문맥에 따라 소프트웨어 업데이트와 프로그래밍을 혼용한다.TSMaster의 UDS Diagnostic 모듈을 이용하여 프로그래밍 하는 방법을 설명한다. 개요제어기 소프트웨어 업데이트는 대략 아래의 절차로 이뤄진다.소프트웨어 업데이트 중에 다른 통신에 방해를 받지 않도록 하기 위해서 모든 제어기들에게 CAN 송신 중지를 요청한다. 모든 제어기에 요청하므로 펑셔널 어드레스로 요청한다. (펑셔널 어드레스는 UDS 진단 통신 (2 / 4) - Transport Protocol 설정 :: hsl's tsmaster 사용기 에서..
-
QR 코드 명함카테고리 없음 2025.02.23 13:09
문제 인식종이 명함은 일회용품이다. 매우 많이 만들어진다. 종이 명함의 종이는 나무에서 온 것이다. 명함 제작에 많은 나무들이 잘려나갔을 것이다. 명함으로 잘려나가는 나무를 줄일 수 없을까? 요즘 명함을 받으면 스마트폰 카메라로 스캔하여 데이터를 연락처 앱에 저장하고 명함은 버린다. 버려진 것은 쓰레기가 되어 환경을 파괴한다. 환경 파괴를 줄일 수 없을까?스마트폰의 문자 인식 성능이 좋아졌다. 하지만 여전히 오인식이 적지 않다. 스캔 후에 데이터를 일일이 검토해야 하는 귀찮음이 있다. 그래서 나는 어떤 명함들은 스캔하지 않고 그냥 버린다. 데이터 오인식을 줄일 수 없을까? 상대가 내 명함을 그냥 버리지 않게 할 수는 없을까?오인식이 없음을 내세워 서비스하는 회사가 있다. 사용자가 촬영한 명함이 그 회사로..
-
SecOC 구현application 2025.02.11 19:38
개요SecOC의 작동을 데모하기 위해 TSMaster 미니프로그램을 짠다. 데모의 구성은 아래 그림과 같다.PC에서 TSMaster를 2개 연다. 한 쪽은 센더, 다른 쪽은 리시버 역할을 한다.센더는 메시지에 MAC을 부착하여 전송한다.리시버는 메시지의 MAC을 검사한다.필요한 경우 FV 값을 변경할 수 있다. PC에서 TSMaster를 2개 열어 사용하기TSMaster가 이미 열려있는 상태에서 설명한다.TSMaster 아이콘에서 마우스 우클릭을 하여 팝-업 메뉴를 띄운다. 메뉴에서 TSMaster를 선택한다. 두 번째 TSMaster가 시작된다. 중간에 TSMaster가 이미 실행 중이라는 안내가 나온다. 양쪽 TSMaster 모두 메인 메뉴/ Hardware/ Channel Selection 버튼..
-
SecOC (Secure On-board Communication)application 2025.02.09 12:18
시작하기 전에 SecOC에 관한 글을 작성한다. 아래 내용들을 포함한다.SecOC가 무엇인가?왜 CRC는 사용하지 않는가?SecOC 구현 SecOC는 무엇인가?SecOC는 Secure On-board Communication을 줄임말이다.On-board는 "차량 내"라는 의미이다. "차량 내 통신 보안" 정도로 해석할 수 있다.AUTOSAR에서 발표한 통신 보안을 위한 사양이다.AUTOSAR는 AUTomotive Open System ARchitecture의 줄임말이다. 문맥에 따라 아키텍처, OS를 혹은 AUTOSAR 기구(organization)를 의미한다.AUTOSAR (Automotive Open System Architecture) 다양한 통신 프로토콜에 적용 가능하다고 한다. 나는 CAN(..
-
CRC 리버스 엔지니어링하기application 2025.02.09 12:14
Reverse Engineer CRC목적CRC를 리버스 엔지니어링하는 것이 어렵지 않다는 것을 보여준다.개요데이터 준비데이터 길이가 16 바이트인 CAN 메시지를 가정한다.시작 바이트는 0번이다.0번 부터 10번 바이트까지를 랜덤 바이트로 채운다.11번 바이트에는 alive counter를 넣는다.12번 부터 15번 바이트까지는 4 바이트 CRC로 채운다.왜 4 바이트 CRC인가?AUTOSAR CRC는 1 바이트이거나 4 바이트이다.1 바이트는 4 바이트보다 상대적으로 CRC 알고리즘을 찾는 리버스 엔지니어링이 쉬울 것 같다. (실제 그런지 모르겠다.) 일부러 어려워 보이는 4 바이트를 선택한다. 어려워도 리버스 엔지니어링 된다는 것을 보여주려는 목적이다실험용 메시지 n_message개를를 생성한다.CR..
-
qwen2.5 on Jetson Orin Nano Super FFT Demo 1, 2카테고리 없음 2025.02.08 14:06
USERfast fourier transformation (FFT)에 대해 이해하고 싶습니다. 진폭과 주파수가 다른 sine과 cosine 웨이브들을 각각 5개씩 더한 입력 데이터를 만들고, 이 데이터를 FFT하여 결과에서 입력한 진폭과 주파수를 확인하는 파이썬 예제를 부탁합니다. 그래프는 plotly로 해주세요.ASSISTANT먼저 필요한 패키지를 불러옵니다.import numpy as npfrom scipy.fft import fft, ifftimport matplotlib.pyplot as pltimport plotly.graph_objs as go다음으로, 진폭과 주파수가 다른 sine와 cosine 웨이브들을 각각 5개씩 더한 입력 데이터를 만듭니다.# 설정값 설정fs = 1000 ..
-
deepseek-r1 on Jetson Orin Nano Super FFT Demo - 3카테고리 없음 2025.02.08 12:49
USERfast fourier transformation (FFT)에 대해 이해하고 싶습니다. 진폭과 주파수가 다른 sine과 cosine 웨이브들을 각각 5개씩 더한 입력 데이터를 만들고, 이 데이터를 FFT하여 결과에서 입력한 진폭과 주파수를 확인하는 파이썬 예제를 부탁합니다. 그래프는 plotly로 해주세요.ASSISTANTThought for 103 seconds 부분을 클릭하면 사고 과정을 볼 수 있습니다.Thought for 103 seconds> Okay, I need to create a Python example that demonstrates understanding of the Fast Fourier Transform (FFT). The user wants to generate inp..
-
claude-haiku on-line FFT Demo카테고리 없음 2025.02.08 12:09
Promptfast fourier transformation (FFT)에 대해 이해하고 싶습니다. 진폭과 주파수가 다른 sine과 cosine 웨이브들을 각각 5개씩 더한 입력 데이터를 만들고, 이 데이터를 FFT하여 결과에서 입력한 진폭과 주파수를 확인하는 파이썬 예제를 부탁합니다. 그래프는 plotly로 그려주세요.ResponseFFT를 사용하여 신호를 분석하는 예제를 만들어보겠습니다.import numpy as npimport plotly.graph_objects as gofrom plotly.subplots import make_subplots# 시간 도메인 설정t = np.linspace(0, 1, 1000)# 입력 신호 생성 (5개의 sine과 5개의 cosine 파형)amplitudes_si..
-
deepseek-r1 on-line FFT Demo카테고리 없음 2025.02.08 02:17
Promptfast fourier transformation (FFT)에 대해 이해하고 싶습니다. 진폭과 주파수가 다른 sine과 cosine 웨이브들을 각각 5개씩 더한 입력 데이터를 만들고, 이 데이터를 FFT하여 결과에서 입력한 진폭과 주파수를 확인하는 파이썬 예제를 부탁합니다. 그래프는 plotly로 해주세요.ThoughtOkay, the user wants to understand FFT through a Python example with Plotly. Let me start by recalling the previous example I provided. Wait, they had sine and cosine waves each with different amplitudes and frequ..
-
deepseek-v3 on-line FFT Demo카테고리 없음 2025.02.08 02:00
Promptfast fourier transformation (FFT)에 대해 이해하고 싶습니다. 진폭과 주파수가 다른 sine과 cosine 웨이브들을 각각 5개씩 더한 입력 데이터를 만들고, 이 데이터를 FFT하여 결과에서 입력한 진폭과 주파수를 확인하는 파이썬 예제를 부탁합니다. 그래프는 plotly로 해주세요.ResponseFast Fourier Transform (FFT)는 시간 도메인의 신호를 주파수 도메인으로 변환하는 알고리즘입니다. 이 변환을 통해 신호를 구성하는 주파수 성분들을 분석할 수 있습니다. 아래는 진폭과 주파수가 다른 sine과 cosine 웨이브를 생성하고, 이를 FFT를 통해 분석하는 파이썬 예제입니다. 그래프는 Plotly를 사용하여 그립니다.예제 코드import numpy..
-
deepseek-r1 on Jetson Orin Nano Super FFT Demo 1카테고리 없음 2025.02.08 01:43
deepseek-r1 / 7.6B/ Jetson Orin Nano SuperPromptfast fourier transformation (FFT)에 대해 이해하고 싶습니다. 진폭과 주파수가 다른 sine과 cosine 웨이브들을 각각 5개씩 더한 입력 데이터를 만들고, 이 데이터를 FFT하여 결과에서 입력한 진폭과 주파수를 확인하는 파이썬 예제를 부탁합니다. 그래프는 plotly로 해주세요.ResponseJetson Orin Nano Super에 보관되어 있던 대화가 사라졌다. 코드import numpy as npimport plotly.graph_objects as go# Parameterssample_rate = 1000 # Sampling rate in Hzduration = 2 # Durati..
-
llama3.1 on Jetson Orin Nano Super FFT Demo 1, 2, 3카테고리 없음 2025.02.08 00:37
USERfast fourier transformation (FFT)에 대해 이해하고 싶습니다. 진폭과 주파수가 다른 sine과 cosine 웨이브들을 각각 5개씩 더한 입력 데이터를 만들고, 이 데이터를 FFT하여 결과에서 입력한 진폭과 주파수를 확인하는 파이썬 예제를 부탁합니다.ASSISTANTFFT는 시간 도메인에서의 신호의 분석을 주파수 도메인으로 변환해주는 중요한 알고리즘입니다.아래 예제에서는 파이썬의 numpy 라이브러리를 이용하여 FFT를 수행하고, 결과에서 입력한 진폭과 주파수를 확인합니다.import numpy as np# 진폭 1,2,3,4,5 각 주파수 0.1,0.2,0.3,0.4,0.5에 해당하는 sine 웨이브t = np.linspace(0, 1, 1000) # 시간 도메인에서 10..
-
AI 코딩카테고리 없음 2025.02.07 22:46
시작하기 전에 나는 근래(오늘은 2025-02-07이다.)에 현대기아자동차연구소에서 회의를 하는 중에 내 블로그를 이용해서 해결 방법을 설명한 적이 있다. 해결책을 TSMaster에 미니프로그램으로 구현하였다. 나는 그 미니프로그램을 마이크로소프트의 Copilot, claude.ai, ChatGPT의 지원으로 작성했다. (이 순서대로 도움을 자주 받았다.) 프로 개발자들의 능력을 0~100 (100이 최고 수준)으로 하자면, 내 코딩 능력은, 추측컨데, 10 이하일 것이다. 너그럽게 봐주면 20 이하 정도. 내가 미니프로그램을 작성할 수 있었던 것은 100% ai 코딩 덕택이다. 코딩 능력이 없다고 해결책을 생각해 낼 사고력이 없는 것이 아니다. 해결책을 생각해 낼 수 있는 충분한 전문 지식, 경험..
-
Python을 PATH에 추가하기tip 2025.02.07 12:34
커맨드 창에서 python을 실행했는데 "알려지지 않은 명령"이라는 에러 메시지가 뜨는 경우, python 디렉토리가 PATH에 없어서 그렇다. 아래 방법으로 PATH를 변경한다.윈도 검색창에 "path"를 입력한다. 검색 결과 중 "시스템 환경 변수 편집"을 선택한다. 시스템 속성창이 열린다. 시스템 속성창이 열리면 "환경 변수(N)..." 버튼을 클릭한다. 환경 변수창이 열린다. 환경 변수 창에서 Path 항목을 더블클릭하여 환경 변수 편집창을 연다.현재 사용자의 환경 변수만 수정할 경우 사용자 변수를, 전체 사용자들의 환경 변수를 수정할 경우 시스템 변수를 선택한다. 환경 변수 편집 창에서 "새로 만들기" 버튼을 클릭한다. 새로 추가된 줄에 Python이 설치된 경로를 입력한다. 기존에 사용하던 P..
-
TSMaster API를 사용하여 CAN 메시지 송신하기 (RBS)application 2025.02.07 12:11
시작하기 전에 요즘 절대 다수의 차량 제어기들은 통신을 한다. 이들 중 상당수는 다른 제어기이 보내는 CAN 메시지들을 수신해야 정상 작동 상태가 된다. CAN 메시지들을 공급하는 방법은 크게 두 가지다. 실제 다른 제어기들과 CAN 버스를 직접 연결하는 방법, CAN 버스 통신을 모사(시뮬레이션) 해주는 방법. 전자는 현실적으로 여러가지 어려움이 있다. 후자를 RBS (Remaining/Rest Bus Simulation)이라고 한다. TSMaster GUI에서 TSMaster가 제공하는 기능들을 조작하여 RBS 하는 방법을 CAN 버스 시뮬레이션 (RBS: Remaining Bus Simulation) :: hsl's tsmaster 사용기, 트레이스를 이용한 RBS(Remaining Bus Sim..
-
Read Data By ID(DID)의 DID 스캐닝 측정 데이터 분석application 2025.01.28 02:55
mobis esc readDID scan blfmobis esc를 대상으로 DID(Data IDentifier)를 0x0000부터 0xFFFF까지 변경하며 readDID 요청을 하는 DID 스캐닝을 하였다.DID 스캐닝을 하며 측정한 CAN 버스 트레이스(blf) 파일을 분석하여 긍정 응답을 받은 DID를 추출한다.import osfrom pathlib import Pathimport canimport pandas as pdldf is not supportedxls is not supportedxlsx is not supported# constant# parse_resp()에서 사용되는 고정값들을 정의한다.# 긍정 응답은 진단 요청에 0x40을 더한 값으로 시작한다.k_offset_positive_res..
-
UDS DID(data identifier) 스캐닝application 2025.01.27 16:03
시작하기 전에 진단 응답 해석하기 :: hsl's tsmaster 사용기 에서 Read ECU ID, Read DTC, Read Software Version, Tester Present 요청으로 진단 통신의 m_id (0x700 ~ 0x7FF)를 스캐닝해보았다. Read ECU ID 요청의 응답은 유용했다. Read DTC나 Read Software Version 요청들의 응답은 유용하지 못했다. 서비스 요청의 파라미터가 제어기들이 지원하지 않는 것이기 때문일 수 있다고 생각한다. 그렇다면 "제어기들이 지원하는 파라미터는 어떤 것들일까?" 하는 의문이 생겼다. m_id를 스캐닝한 것처럼 파라미터를 스캐닝해볼 수 있다. UDS에 정의되어 있는 모든 서비스들을 대상으로 파라미터를 찾는 것은 데모로는 과하..
-
진단 응답 해석하기application 2025.01.26 18:17
venue_parse_diag_resp_blf차(베뉴)에서 측정한 CAN 트레이스(blf 파일)를 분석한다.진단 응답 (DTC: Diagnostic Trouble Code)을 해석한다.DTC 설명은 현대차의 DTC(Diagnostic Trouble Code) 설명을 찾는 방법 :: hsl's tsmaster 사용기에서 구한 DTC 설명을 사용하였다.import osfrom pathlib import Pathimport can # blf 파일 처리를 위해 python-can 모듈을 사용한다.import pandas as pdldf is not supportedxls is not supportedxlsx is not supported# 측정한 blf 파일들k_dir_data = Path().absolute..
-
진단 요청과 응답 m_id 짝 찾기application 2025.01.26 16:02
venue_uds_match_diag_req_resp_m_id_blf차(베뉴)에서 측정한 CAN 트레이스 (blf 파일)을 분석한다.진단 요청과 응답 메시지 아이디들의 짝을 찾는다.표준에 따르면 진단 메시지의 아이디(m_id)는 0x700에서 0x7FF로 정해져있다.표준에 Read ECU ID, Read DTC 등 몇몇 서비스는 대부분의 제어기들이 응답한다.위 두 가지 사실에서 착안하여 m_id를 0x700에서 0x7FF까지 순차적으로 증가시키면서 (스캐닝) Read ECU ID, Read DTC 등의 서비스를 요청한 후, 0x700번대 응답 메시지를 500msec(응답 대기 시간) 동안 기다린다.응답이 있으면 그 메시지의 m_id를 요청 메시지 m_id와 짝으로 판정한다.import osfrom pat..
-
진단 통신으로 제어기 확인하기application 2025.01.26 13:10
시작하기 전에 CAN 통신 데이터를 수집하고, 수집한 데이터에서 메시지 아이디들을 찾고, 찾은 메시지 아이디들을 dbc에서 찾는 방식으로 차에 어떤 제어기들이 있는 지 확인할 수 있다. (dbc에서 m_id들을 찾기 :: hsl's tsmaster 사용기) 이는 차량 형상 관리를 위한 최소한의 점검이다. 이 점검을 통해서 차에 있는 제이기들과 빠진 제어기들을 확인할 수 있다. 제어기들의 하드웨어와 소프트웨어가 설계 사양에 맞는지까지 확인하기는 쉽지 않다. 필요가 있으면 발명이 있다.UDS 서비스 중에 Read Data By Identifier라는 것이 있다. 자동차사들은 진단 통신 사양서에 이 서비스를 명시한다. 그래서 제어기의 하드웨어, 소프트웨어 정보를 읽도록 한다. Read Data By Ident..
-
dbc에서 m_id들을 찾기application 2025.01.26 00:16
dbc에서 m_id들을 찾기목적: 차량 형상 관리 관점에서 설계 사양 (dbc)과 실차의 형상(m_id_info)을 비교한다.m_id_info는 blf 파일에서 m_id, dlc, d_ts 추출하기 :: hsl's tsmaster 사용기에서 측정한 CAN 통신 데이터를 분석한 결과이다. 메시지 아이디(m_id)별로 메시지 길이(dlc), 메지지 전송 주기(d_ts) 정보를 갖고 있다. dbc 파일에서 m_id_info의 m_id들을 찾는다.찾아야할 m_id들은 ~mid_info.xlsx에 저장되어 있다.cantools라는 Python 모듈을 이용하여 dbc의 내용을 읽는다.찾기와 비교를 쉽게 하기 위해서 pandas라는 Python 모듈을 이용한다.xlsx의 내용을 df_car라는 dataframe(d..
-
blf 파일에서 m_id, dlc, d_ts 추출하기tip 2025.01.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 모듈..
-
차량 형상 점검application 2025.01.19 18:14
시작하기 전에 새 차를 개발할 때 시작차(Prototype)를 만든다. 시작차는 기존 차(들)에서 시스템들을 가져다 만든다. (이를 캐리-오버라고 부른다.) 내가 말하는 시스템은 제어기, 센서, 액추에이터로 구성된다. 센서나 액추에이터는 단순 부품일 수도 혹은 그 자체가 하나의 시스템일 수도 있다. (전통적으로 시스템은 차 안에 있었지만 커넥티비티의 발전으로 요즘 시스템은 차 밖에 있을 수도 있다.) 시스템들은 "통신"을 통하여 개별 시스템은 할 수 없는 기능을 구현한다. 소위, 협조 제어 (coordinated control)라고 한다.캐리-오버한 시스템들로 시작차 조립을 한 후 곧바로 모든 시스템 기능들이 정상 동작하는 경우를 나는 겪어보지 못했다. 거기에는 여러 가지 원인들이 있다. 이 들 중에 ..
-
주행 중인 도로의 경사도 구하기 1/t.b.d.application 2025.01.15 17:59
gradient_dynamic주행 중 노면의 경사도를 구한다.# importimport sysfrom pathlib import Pathimport numpy as npimport pandas as pdimport plotly.express as pxfrom PIL import Image # plotly 그래프로 출력하면 노트북 크기가 너무 커서 GitHub에 표시가 안됨. 그래서 이미지로 저장해서 표시하기 위해 사용함함# 블로그에 올리기 위해 plotly renderer의 설정이 필요하다. import plotly.io as piopio.renderers.default = "notebook_connected" # constant# 프로젝트 디렉토리 경로k_dir_project = Path('.')...
-
미니프로그램에서 CAN 신호와 시스템 변수 다루기tip 2025.01.10 01:47
시작하기 전에 미니프로그램을 작성하다보면 CAN 신호와 시스템 변수를 다루게 된다. 아래의 경우들이 있다. 미니프로그램에서 CAN 신호를 읽어서 연산에 사용한다.미니프로그램에서 연산한 결과를 CAN 메시지의 신호로 전송한다.신호를 TSMaster의 그래픽, 트레이스, 판넬 창 등에서 사용할 수 있다.메시지는 blf 파일에 저장할 수 있다. (blf 파일을 csv, mat, csv 등으로 변환하여 다른 프로그램에서 읽을 수 있다.)미니프로그램에서 시스템 변수를 읽어서 연산에 사용한다.미니프로그램에서 연산한 결과를 시스템 변수에 저장한다.시스템 변수를 TSMaster의 그래픽, 트레이스, 판넬 창 등에서 사용할 수 있다.시스템 변수를 blf 파일에 저장할 수 있다. (2025-01-10 현재, 시스템 변수..
-
Python 미니프로그램: 코드에서 CAN 메시지의 신호를 읽는 방법tip 2025.01.07 19:49
코딩을 하다보면 메시지의 신호에서 값을 읽어올 경우가 있다. 그 방법을 설명한다. 신호를 포함하는 메시지를 읽을 수 있도록 준비먼저 읽을 신호를 포함하고 있는 메시지를 코드에서 사용할 수 있도록 준비해야 한다. Python Code Editor의 Properties 탭을 클릭한다. 왼쪽 아래쪽에 Database Symbols 영역이 있다. 읽을 메시지가 포함된 dbc 파일을 체크한다. (TSMaster에서 dbc를 읽으면 pdbc로 변환된다.)Symbols 탭을 클릭한다.Global Definition을 선택한다. 여기에 메시지를 읽는데 필요한 코드가 삽입되어야 한다. 코드 어디에서나 사용되어야 해서 Global Definition에서 정의한다.Functions 탭을 클릭한다.읽을 메시지에서 우클릭한다..
-
침입 감지 시스템 (IDS) - 타임스탬프 보완application 2025.01.05 22:12
시작하기 전에 침입 감지 시스템 (IDS: Intrusion Detection System) :: hsl's tsmaster 사용기에서 실제로 감지된 침입 건수가 내 예상보다 많았다. 원인을 찾다가 아래의 생각이 났다. TSMaster의 Rx 이벤트가 발생할 때 ts(timestamp)를 메시지 수신 시각으로 삼았다.하드웨어에서 메시지를 수신한 시각과 이벤트가 발생한 시각 사이에 차이가 있다면? 그리고 그 차이가 일정하지 않다면?하드웨어가 메시지 수신 시각을 메시지 데이터에 추가하지 않았을까? TSMaster의 메시지는 RawCAN 클래스이다. RawCAN 클래스의 정의에서 time_us (timestamp in microseconds) 를 찾았다. 참고로 RawCAN 클래스는 아래 코드와 같다.cl..
-
IDS 오감지/ 민감 감지에 관한 고찰tip 2025.01.04 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.01.04 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_..
-
CAN 메시지 전송 주기 분포 분석카테고리 없음 2025.01.04 14:59
메시지 전송 주기 분포 분석m_id 별로 메시지 전송 주기의 분포를 확인한다.import pandas as pdfrom pathlib import Pathimport plotly.express as pximport plotly.graph_objects as go# 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(ascs) = 59한 asc를 대상으로 방법을 개발한다.def read_asc_to_df(asc): ''' .asc 파일을 읽어..
-
asc 파일을 pandas 데이터프레임으로 변환하기tip 2025.01.04 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.01.04 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('..
-
침입 감지 시스템 (IDS: Intrusion Detection System)application 2025.01.04 13:18
시작하기 전에사이버 보안은 매우 중요한 주제다. "자동차" 사이버 보안은 사생활, 재산, 안전, 생명에 직접적인 위협이 될 수 있다. 자동차가 무선 통신으로 연결되는 네트워크가 증가할 때마다 더 많고 더 다양한 보안 위협에 노출된다. 차량 내외부의 시스템들 사이에 통신을 통한 협조 제어가 증가할수록 사고 피해의 심각성이 커질 위험이 증가할 개연성이 있다. 통신에 대한 적절한 보안이 필요하다. 통신 보안은 침입 감지부터 시작한다고 말해도 무방할 것이다. TSMaster로 CAN 통신 침입 감지 기능을 만들어본다. [참고] 최신 차량들에는 침입 감지 시스템(IDS: Intrusion Detection System)이 장착되어 있다. 개요IDS 구상트레이스 분석IDS 미니프로그램 코딩침입 판정 기준값 데..
-
Symbol Mapping: 시스템 변수를 CAN 신호로 전송하기simulation 2025.01.03 15:36
시작하기 전에 이전 블로그에서 Symbol Mapping 기능들 중에 CAN 신호들을 이용해서 계산한 결과를 시스템 변수에 넣는 방법을 설명하였다. (Symbol Mapping: CAN 신호로 계산한 결과를 시스템 변수에 넣기 :: hsl's tsmaster 사용기) RBS(Remaining Bus Simulation)를 하다보면 내가 계산한 결과를 CAN으로 전송해야 할 경우가 있다. Symbol Mapping 기능으로 시스템 변수를 CAN으로 전송하는 방법을 설명한다. 개요CAN 신호들로 실시간 연산하기 - 미니프로그램으로 yaw_rate_ws 계산 :: hsl's tsmaster 사용기에서 만든 yaw_rate_ws 신호를 CAN으로 전송한다. 시스템 변수를 전송할 CAN 메시지와 신호 만들기시..
-
mdf 데이터 파일을 읽어서 그래프 그리기tip 2025.01.01 18:23
시작하기 전에 CAN은 메시지 단위의 통신을 한다. CAN 메시지들은 blf 파일에는 메시지 단위로 차곡차곡 저장된다. 아래 그림처럼. 이를 메시지 기반 파일 형식이라고 부르겠다. (위 그림에서 하이라이트 되어있는 첫 줄의 "3A 04 91 ..." 처럼) 바이너리로 저장된 데이터에서 신호를 추출해야 한다. 추출에 필요한 정보는 dbc 파일에 정의되어 있다. (dbc 파일이 무엇인지를 CAN 트레이스 보기 - 바퀴 속도 :: hsl's tsmaster 사용기의 '트레이스 창'에서 부분에서 설명하였다.)dbc 파일이 없으면 신호를 보고 싶은 사람에게 blf 파일은 쓸모가 없다.blf 파일와 짝이 맞지 않는 dbc 파일을 적용하는 경우, 신호를 엉뚱하게 추출하게 된다. 추출하지 못하는 상황보다 더 나쁜 ..
-
PC간 데이터 전송 - 소켓 통신analysis 2024.12.31 09:59
시작하기 전에 실시간으로 FFT 하기 - 미니프로그램과 ai :: hsl's tsmaster 사용기 에서 TSMaster의 FFT 계산 결과를 소켓 통신으로 동일 PC의 FFT Visualizer 프로그램으로 전달하는 방법을 설명했다. 소켓 통신으로 서로 다른 PC의 프로그램 사이에 통신이 가능한지 확인해보았다. 개요클라이언트(TSMaster 미니프로그램)쪽 코드 수정 서버(FFT Visualizer)쪽 코드 수정실행 결과 클라이언트(TSMaster 미니프로그램)쪽 코드 수정FFT 계산 결과를 보내는 쪽인 TSMaster 미니프로그램이 클라이언트이다. FFT 계산 결과를 그래프로 표시하는 FFT Visualizer가 서버이다. 소켓 통신을 연결할 때, ip 주소에 FFT Visualizer가 동..
-
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의 전송 주기를 설정한다..
-
시스템 변수를 로깅하는 방법analysis 2024.12.30 14:14
시작하기 전에 앞에서 미니프로그램으로 바퀴 속도에서 요-레이트를 계산하여 시스템 변수 yaw_rate_ws에 할당하는 방법을 소개했었다. 아래의 문의를 받았다.시스템 변수 yaw_rate_ws를 blf 파일에 로깅할 수 있는가?어떻게 하는가?로깅한 blf를 재생하면 시스템 변수가 재생되는가?답부터 말하자면,시스템 변수를 blf에 로깅할 수 있다.어떻게 하는가를 아래에서 설명하겠다.로깅한 blf를 재생하면 시스템 변수가 재생된다. 추가로 blf를 mat으로 변환할 때, 시스템 변수를 추가하여 변환할 수도 있다. 개요시스템 변수를 blf 파일에 로깅하는 방법시스템 변수가 포함된 blf를 오프라인 재생하여 시스템 변수를 그래픽 창에서 보기나중에 로깅하는 방법이 있을까?시스템 변수가 포함된 blf를 mat..
-
Tlog100x 사용법analysis 2024.12.27 11:11
시작하기 전에차에서 데이터를 측정하는 일은 번거롭다. 로거는 번거로움을 덜어준다. 한 번 설정해서 차 안에 설치를 해두면 시동을 걸고 주행하는 동안 데이터가 로깅된다. 개요Tlogger 구성설정사용데이터 다운로드 Tlogger 구성Tlog1002 (2 채널), Tlog1004 (4 채널)는 아래 그림처럼 생겼다. [노트] Tlogger에는 (다른 토선 하드웨어에 있는 온/오프 할 수 있는) 120오옴 저항이 없다. 저항이 필요한 경우, (아래 그림과 같은) 종단 저항을 추가하여 연결해야 한다. 설정Tlogger에는 두 가지 모드가 있다. 분석 모드와 로깅 모드이다.분석 모드는 일반 하드웨어와 같은 방식으로 PC에 연결하여 실시간으로 데이터를 모니터링할 때 사용한다. 이때 자동 로깅..
-
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..
-
LIN 핀 번호 - 벡터와 토선이 다르다.tip 2024.12.26 09:55
벡터 장치를 사용하다가 토선 장치를 사용하는 경우 커넥터 핀 번호에 주의해야 한다. CAN은 핀 2가 CAN Low, 핀 7이 CAN High인 것이 사실상 표준이다. LIN은 표준적(?)으로 사용되는 핀 번호에 없는 것 같다. CAN과 LIN을 지원하는 벡터 장치의 핀 번호는 아래 그림과 같다. (전체가 아니라 일부인 것 같다. 이런 장치는 벡터의 CAN/LIN Y-케이블 사용을 권고한다.) LIN 핀의 번호는 7번이다. 출처: https://support.vector.com/kb?id=kb_article_view&sysparm_article=KB0011609 토선 TC1012P 장치의 LIN 핀 번호는 8번이다. 벡터 장치와 토선 장치의 LIN 핀 번호가 다르다. CAN High (핀 7), CA..
-
CAN 커넥터와 Y-케이블tip 2024.12.14 10:33
나는 아래 그림의 D-sub 커넥터가 ISO 11898 에서 정한 표준 규격으로 알고 있었다. 사진 출처: CAN bus - Wikipedia 방금 위 사진 출처의 위키피디아를 통해서 위 커넥터가 표준이 아니라 "준표준"이라는 것을 알았다. 어쨌든 CAN 통신을 위한 전선을 마련할 때 D-sub 커넥터를 사용하는 것은 기본이라고 할 수 있다. 핀 배열은 아래와 같다. pin 2: CAN-Low (CAN−)pin 3: GND (ground)pin 7: CAN-High (CAN+)pin 9: CAN V+ (power) 토선 제품들 중에 CAN 채널이 복수개인 경우 D-sub 커넥터 1개에 채널이 2개 있다. 핀 배열은 아래와 같다. 두 채널을 동시에 사용하기 위해서는 아래 그림과 같이 (2, 7)번 핀들..
-
YouTube TSMaster 비디오 목록tip 2024.12.12 20:17
재생 중 데이터 후처리Monitoring playback signal and post-processing features 설명 내용오프라인 재생 중 데이터 후처리 방법을 소개한다. 아래의 데이터 처리가 가능하다.재생 중인 신호의 (최대값, 최소값) 같은 통계치를 구할 수 있다.재생 중인 신호들을 이용하여 연산을 하고, 연산 결과를 시스템 변수에 할당하고, 시스템 변수를 그래픽 창에 표시할 수 있다.재생 중인 신호들 중에서 특정 메시지 아이디만 별도의 blf 파일로 분리할 수 있다.내가 배운것흔히 하는 데이터 후처리를 미리 C 미니프로그램으로 만들어 둔 것이다.사용자는 자기 용도에 맞게 미니프로그램 코드를 수정해야 한다. 예) 처리 대상 메시지 아이디 수정코드를 읽고 수정할 수 있는 사람들에게 유용할 것 ..
-
그래픽 프로그램(graphic program)으로 yaw_rate_ws 계산하기design 2024.12.11 17:52
시작하기 전에전에 파이썬 미니프로그램으로 뒷바퀴 속도들로 부터 요-레이트(yaw_rate_ws)를 구하는 방법을 설명했었다. TSMaster는 파이썬 미니프로그램, C 미니프로그램, 그래픽 프로그램을 지원한다. 내가 C를 잘 다루지 못하기도 하지만, C 미니프로그램은 파이썬 미니프로그램과 사용법이 거의 비슷하여 별도의 설명이 필요하지 않을 것으로 생각한다. 그래픽 프로그램은 나도 처음 접한다. 직접 사용해 보면서 사용법을 정리한다. 파이썬 미니프로그램과 비교하기 편리하도록 yaw_rate_ws 계산하는 프로그램을 작성한다. 개요그래픽 프로그램 작성법프로그램 설명그래픽 창에서 결과 확인하기 그래픽 프로그램 작성법그래픽 프로그램 기본 준비메인 메뉴/ Design/ Graphic Program 버튼을 클..
-
CAN 통신 실험을 위한 툴tip 2024.12.10 21:12
CAN 버스 모니터링, 측정, 분석나는 TSMaster를 사용한다. Tosun사의 유료 소프트웨어이다.아래 링크에서 다운로드 받을 수 있다.https://license.tsmaster.net/mainInterface/pricing CAN dbc 편집CAN dbc 편집 :: hsl's tsmaster 사용기 데이터 처리나는 Python을 사용한다. TSMaster의 메인 메뉴/ Help/ About/ Acknowledgements를 보면 TSMaster는 아래 파이썬 모듈들을 사용한다. [1] python https://www.python.org/[2] canmatrix https://github.com/ebroecker/canmatrix[3] cantools https://github.com/eeri..
-
Symbol Mapping: CAN 신호로 계산한 결과를 시스템 변수에 넣기simulation 2024.12.09 10:54
시작하기 전에TSMaster의 Simulation에 Symbol Mapping 이라는 기능이 있다. 이 기능을 이용하면 CAN(LIN/ FlexRay) 신호를/신호들을 이용하여 연산을 할 수 있고, 연산 결과를 시스템 변수에 넣을 수 있다는 것을 알았다.나는 앞에서 미니프로그램으로 CAN의 바퀴 속도 신호들에서 요-레이트(yaw_rate_ws)를 계산한 적이 있다. (CAN 신호들로 실시간 연산하기 - 미니프로그램으로 yaw_rate_ws 계산 :: hsl's tsmaster 사용기) CAN 신호들로 간단한 계산을 하여 시스템 변수에 넣는 방식이었다. 심볼 매핑의 작동 방식과 동일하다. 다시 말하면 미니프로그램이 아닌 심볼 매핑으로 yaw_rate_ws를 계산할 수 있다는 의미다. 심볼 매핑으로 yaw..
-
트레이스를 이용한 RBS(Remaining Bus Simulation)simulation 2024.12.06 12:22
시작하기 전에제어기를 대상으로 실험을 할 때, 제어기 작동에 필요한 신호들을 CAN으로 공급해야 한다. 이를 RBS (Remaining Bus Simulation, Rest Bus Simulation)라고 한다. 차에서 측정한 CAN 트레이스를 TSMaster 온라인 재생(replay) 기능으로 RBS를 할 수 있다.차에서 측정한 CAN 트레이스에는 시험 대상 제어기가 전송한 메시지들이 포함되어 있다. 이 메시지들을 제외하지 않으면 제어기가 전송하는 메시지와 트레이스에서 재생된 메시지가 동시에 버스에 전송되는 문제가 있다. 트레이스에서 메시지를 제외하여(필터하는) RBS하는 방법을 설명한다. 개요(내가 실험을 한 2024-09-05 현재) TSMaster의 온라인 재생 기능에는 "전송" 메시지 필터 기..
-
Q&A: 옵션에 없는 CAN(-FD) baud rate 설정하는 방법hardware 2024.12.06 10:12
문의TC1001 관련 문의가 있습니다. 해당 제품 데이터시트에서 고지한 지원 baud rate와 달리 TSMaster에서는 125, 250, 500, 1,000kbps만 지원합니다. 100kbps 사용은 불가능 할까요? 해결 방법TSMaster 선택 옵션에 없는 baud rate는 미니프로그램에서 코드로 설정할 수 있습니다.메인 메뉴/ Design/ C Mini Program 버튼을 클릭하여 C Code Editor 창을 엽니다.Functions 탭을 클릭하고, 검색창에 baud를 검색어로 입력합니다. app.configure_can_baudrate()를 찾습니다. 함수를 선택하면 Api Documents 탭에서 상세 정보를 확인할 수 있습니다.baud rate 설정을 위한 미니프로그램을 작성합니다..
-
목차tip 2024.12.06 09:47
응용 사례CAN 데이터로 제동 성능 평가하기 :: hsl's tsmaster 사용기mat 파일을 데이터프레임으로 변환하고 feather 파일로 저장하기 :: hsl's tsmaster 사용기제동 성능 지표 계산하기 :: hsl's tsmaster 사용기 칩임 감지 시스템 (IDS: Intrusion Detection System) :: hsl's tsmaster 사용기asc 파일을 m_id별로 분리하기 :: hsl's tsmaster 사용기asc 파일을 pandas 데이터프레임으로 변환하기 :: hsl's tsmaster 사용기 CAN 메시지 전송 주기 분포 분석 :: hsl's tsmaster 사용기 침입 판정 기준값 데이터 준비 :: hsl's tsmaster 사용기 IDS 오감지/ 민감 ..
-
그래픽 창 사용법tip 2024.12.02 16:00
그래픽 창 영역 구분그래픽 창은 아래 그림에서 푸른색으로 표시한 텍스트 영역과 붉은색으로 표시한 그래프 영역으로 구분된다. 보기(View) 기능View 드롭 다운 메뉴에는 아래의 기능들이 있다. Show Text Only그래프 없이 수치만 표시된다. Column Width Best Fit텍스트 영역의 컬럼 폭을 자동으로 조절한다. Go to Time메뉴를선택하거나 그래픽 창에서 G 키를 입력하면 시간을 입력 창이 열린다. 입력한 시간으로 그래프의 중심이 이동한다. Set Relative Time입력한 시간을 0s로 변경한다. Scroll Up/ Down선택된 곡선을 위/ 아래로 이동한다. 각각 Up 화살표 키와 Down 화살표 키로 대신할 수 있다. Scroll Left/ Scroll Right..
-
여러 그래픽 창들을 독립적으로 확대/축소 하는 법 (sync token)tip 2024.11.27 19:33
분석할 신호들이 많으면 그래픽 창들을 여러 개 만들게 된다. 한 그래픽 창에서 확대/축소를 하면 나머지 그래픽 창들도 연동 (sync, 싱크)되어 확대/축소된다. 때때로 싱크되지 않도록 하고 싶다. 이럴 때 그래픽 창의 설정 메뉴에 sync token(싱크 토큰)을 이용한다. 싱크 토큰 값이 같은 그래픽 창들은 연동되어 확대/축소된다. 기본 싱크 토큰 값은 (위 그림에서 보는 것처럼) "DEFAULT"로 모든 그래픽 창들에 동일하다. 따라서 기본 설정 상태에서는 어느 한 그래픽 창에서 확대/축소을 하면 나머지 창들에서도 모두 확대/축소을 한다. 연동을 깨고 싶으면 싱크 토큰 값을 별도의 값으로 설정하면 된다. 실제 작동을 비디오로 확인하십시오. Graphics Synchronization
-
신호 비교기 (Signal Comparer)test 2024.11.25 17:09
시작하기 전에 CAN 버스 시뮬레이션 :: hsl's tsmaster 사용기에서 RBS를 설명하기 위해 판넬 기능을 이용하여 GUI를 만들었다. GUI로 설명할 수 있는 TSMaster의 간단한 기능을 찾다가 최근에 문의를 받은 신호 비교기(Signal Comparer)가 생각났다. 신호 비교기를 간단하게 설명한다. 개요신호 비교기의 기능 및 사용처신호 비교기 사용법 시그날 비교기의 기능 및 사용처신호 비교기는 실시간으로 변동하는 신호를 미리 정한 조건과 비교한다. 조건 충족 여부를 표시한다.예를 들면, 전압 신호를 모니터링하면서, 전압이 기준 범위에 속할 때는 OK라고 표시하고 벗어났을 때 NOK라고 표시한다. (이런 기능은 BMS(Battery Management System) 개발에 유용하다.) ..
-
CAN 버스 시뮬레이션 (RBS: Remaining Bus Simulation)simulation 2024.11.25 14:46
시작하기 전에제어기 작동 검증 시험을 하는 경우를 가정한다. 제어기에 전원을 연결하고 이그니션 on에 해당하는 신호를 가했을 때, 입출력이 모두 정상이어서 제어기가 정상 작동할 수 있는 상태를 만들어야 한다. 입출력 중에 전기 신호를 직접 받거나 주는 경우, 제어기 내부 회로에 정상 상태에 맞는 전압/ 전류/ 저항/ 기타 값이 읽히도록 외부 회로를 구성하여 연결한다. 마찬가지로 CAN 버스도 정상 상태에 맞는 메시지들을 정해진 주기에 따라 지속적으로 공급해야 하고, 메시지 안의 신호들도 제어기가 정상 상태로 인식하도록 값을 설정해서 공급해야 한다. 이를 RBS (Remaining Bus Simulation 혹은 Rest Bus Simulation)라고 한다. RBS는 크게 오픈-루프(open-loop..
-
yaw_rate_model - ai를 이용한 모델 생성과 활용design 2024.11.07 12:52
시작하기 전에 "바퀴 속도에서 요-레이트를 계산하기"라는 소재로 TSMaster의 미니프로그램 사용법을 설명하고 있다. 설명했던 것들을 나열하면 아래와 같다.차에서 CAN 데이터 측정하는 방법CAN 트레이스 받기 - 하드웨어 설정 :: hsl's tsmaster 사용기측정한 데이터를 그래프로 보는 방법CAN 트레이스 보기 - 바퀴 속도 :: hsl's tsmaster 사용기바퀴 속도에서 실시간으로 요-레이트를 계산하는 방법CAN 신호들로 실시간 연산하기 - 미니프로그램으로 yaw_rate_ws 계산 :: hsl's tsmaster 사용기 이렇게 계산된 요-레이트를 yaw_rate_ws라고 불렀다.yaw_rate_ws가 거칠어서 칼만 필터를 적용해보았다CAN 신호를 실시간으로 필터링 하기 - 미니프로그램과..
-
판넬로 사용자 입력 받는 법simulation 2024.11.03 10:55
시작하기 전에 판넬로 출력하는 방법 - 관계도 :: hsl's tsmaster 사용기 에서 판넬로 미니프로그램에서 계산할 결과를 출력하는 방법을 설명했다. 이번에는 판넬에서 사용자 입력을 받아 미니프로그램에 반영하는 방법을 설명한다. 개요CAN 신호를 실시간으로 필터링 하기 - 미니프로그램과 ai :: hsl's tsmaster 사용기 에서 설명한 칼만 필터를 이용하여 설명한다.이번 설명에서는 칼만 필터의 process_noise와 measurement_noise 파라미터를 사용자가 변경할 수 있도록 한다.판넬 기능을 이용하여 사용자가 파라미터를 입력할 수 있는 GUI를 만든다.판넬의 입력을 미니프로그램에서 사용하려면 시스템 변수를 통해야 한다. 시스템 변수를 만든다.판넬의 위젯을 시스템 변수와 연..
-
판넬로 출력하는 방법 - 관계도analysis 2024.10.25 23:26
시작하기 전에 데이터를 측정 중에 두 신호의 관계를 그래프로 보고 싶은 경우가 있다. 실시간으로 신호 관계를 볼 수 있으면 데이터 측정 후에 별도로 데이터를 처리해서 관계를 확인하고 시험을 다시 하는 반복을 조금이라도 줄일 수 있다.TSMaster에는 Panel 기능이 있다. 판넬 기능으로 Relation Chart(관계도)를 그릴 수 있다. 아래 그림은 관계도를 이용하여 신호들 사이의 관계를 실시간으로 표시한 예이다. 신호들 사이에 아래와 같은 관계가 있는 것을 데이터 측정 중에 알 수 있다.YAW_RATE vs yaw_rate_wsYAW_RATE: CAN 버스의 요-레이트 신호. 센서 측정값yaw_rate_ws: CAN 버스의 바퀴 속도 신호들로 계산한 요-레이트비례하는 관계에 있다. 이상적인 ..
-
제동 성능 지표 계산하기analysis 2024.10.25 02:44
제동 성능 지표 계산하기¶정보¶제동 지표들 계산을 위해서는 "트레이스에 포함된 전체 제동 이벤트들에 대한 분석" 이하 셀만 실행하면 된다.그 이전 셀들은 계산 과정 도출 방법이다.revision¶2024-07-28:initial디셀 유니포머티를 계산하고 그래프로 출력함노트북을 현대자동차의 지인들에게 배포함2024-08-03: 평균 요-레이트, 요-레이트 변동폭을 계산을 추가함2024-10-04: 블로그 포스팅을 위해서 내용을 정리함개요¶전자 제어 제동 시스템 (EBS. Electronic Brake System)에는 10여 가지 제동 성능 평가 지표들이 있다. 그들 중 직진 제동의 성능 지표들로 Deceleration Uniformity (디셀 유니포머티), Average Yaw Rate (평균 요-레..
-
mat 파일을 데이터프레임으로 변환하고 feather 파일로 저장하기analysis 2024.10.25 02:40
mat 파일을 pandas 데이터프레임으로 변환하여 feather 파일로 저장하기¶revision¶2024-07-28:initialmat to dataframe to feather 변환을 구현함2024-07-29:TSMaster의 blf to mat 변환 시, 계산에 필요한 신호들만 선택하는 방법을 적용함WHL_SPD11(0x386), SAS11 (0x2b0), ESP12 (0x153)2024-10-04: 블로그 포스팅을 위해서 내용을 정리함개요¶TSMaster는 CAN 데이터를 blf 포맷으로 저장한다. blf는 CAN 통신을 메시지 단위로 저장하기에 메시지 단위로 데이터를 처리할 경우 좋다. 반면에 메시지와 시그날 구성 정보(소위 CAN 데이터베이스)가 없고, 시그날 단위로 데이터 처리를 할 수 없다..
-
CAN 데이터로 제동 성능 평가하기application 2024.10.25 02:32
시작하기 전에자동차 성능은 꾸준히 향상되어 왔다. 대부분의 일이 그렇듯이 많은 사람들의 노력 덕분이다. 하지만 자동차사별로 성능 향상의 정도는 같지 않은 것 같다. 행복한 가정은 모두 비슷한 방식으로 행복한데, 불행한 가정은 각자의 방식으로 불행하다고 한 톨스토이의 말을 맘대로 가져다 자동차 성능 개발에 붙이자면, 성능 향상을 잘 이룬 회사들은 모두 비슷한 방식으로 개발을 하는데 그렇지 않은 회사들은 각자의 방식으로 개발을 하는 것 같다.(옆에서 봤더니) 잘 하는 회사들은 아래와 같이 하는 것 같다.주관 평가보다는 객관 평가를 한다. 담당자가 바뀌어도 일관된 성능 평가가 이뤄진다.객관 평가를 위한 성능 지표와 시험 방법이 있다. 그리고 목표 성능 지표를 지속적으로 높인다. 새로운 성능 지표와 시험 방법을..
-
CAN 신호들로 실시간 연산하기 - 미니프로그램으로 yaw_rate_ws 계산analysis 2024.10.25 02:30
시작하기 전에CAN 버스를 측정하다 보면, 신호들을 이용하여 실시간으로 연산한 결과를 보고 싶은 경우가 종종 있다. mile per hour로 표시된 차속을 km per hour로 변환하는 것처럼 단순 사칙연산의 경우부터, 센서, 액추에이터와 통신하여 전에 없던 새 기능의 프로토타입을 개발하는 복잡한 경우까지 실시간 연산의 적용 사례는 다양하다. TSMaster는 실시간으로 측정되는 메시지와 신호를 대상으로 C나 Python으로 작성한 스크립트를 실행할 수 있다. 이를 미니프로그램이라고 부른다.이번 블로그에서는 CAN 버스에 있는 바퀴 속도 신호들에서 실시간으로 요-레이트를 계산하는 Python 코드를 작성하는 과정을 소개한다. 이를 통해서 TSMaster의 미니프로그램 기능과 사용법을 설명한다. 개요..
-
CAN 트레이스 받기 - 하드웨어 설정analysis 2024.10.25 02:27
시작하기 전에이전 블로그(CAN 트레이스 보기 - 바퀴 속도 )에서는 이미 누군가가 만든 CAN 트레이스 파일을 읽고, 그 안에 포함되어 있는 바퀴 속도 신호를 TSMaster에서 그래프로 보는 방법을 설명하였다. 이 과정에서 CAN 데이터베이스, 버스, TSMaster의 트레이스 창과 그래픽 창에 관하여 설명하였다.이번 블로그에서는 TSMaster와 CAN-to-USB 변환기로 차량 CAN 네트워크에서 데이터를 받아 트레이스 파일로 저장하는 방법을 설명한다. 개요TSMaster는 다양한 CAN-to-USB 변환기들을 지원한다. CAN-to-PCIe 변환기들도 있다. 문맥에 따라 CAN 변환기, CAN-to-USB 변환기, CAN-to-PCIe 변환기, 하드웨어라고 하겠다.TSMaster에서 하드웨어..
-
CAN 트레이스 보기 - 바퀴 속도analysis 2024.10.25 02:21
시작하기 전에TSMaster 사용법으로 블로그 시리즈를 작성하려고 한다. 그러려면 TSMaster를 소개해야 한다. TSMaster를 소개하기 전에 차량 CAN 통신을 설명해야 한다. 차량 CAN 통신을 설명하기 전에 차량 제어 시스템들을 설명해야 한다. 이렇게 생각하니 이야기를 어디서 어떻게 시작해야 할지 망막하다. 그래서 우선 TSMaster로 할 수 있는 것을 먼저 선보이기로 한다. 마치 수영을 배우려는 사람에게 수영 동작을 하나하나 구분하여 설명하기 전에 수영하는 모습을 보여주면, 배우려는 사람은 전체에 대해 개념을 잡은 상태로 세부를 더 쉽고 빠르게 이해할 수 있는 것처럼 그렇게 되기를 바란다. 개요차에는 여러 제어 시스템들이 있다. 엔진 제어, 제동 제어 등. 이런 제어 시스템들은 통신을 통하..
-
UDS 진단 통신 (4 / 4) - ReadDTC 응답 해석을 위 미니프로그램diagnostic 2024.10.25 02:13
시작하기 전에UDS 진단 통신을 위해 ‘Diagnostic Basic Config’ 화면에서 진단 서비스 요청/응답 메시지를 설정하는 방법과 ‘Diagnostic Console’ 화면에서 진단 서비스 실행 및 응답 메시지 해석 방법 설명( UDS 진단 통신 (3 / 4) - 진단 요청/ 응답 메시지 설정 :: hsl's tsmaster 사용기 )에 이어지는 설명이다.지난 설명에서 DiagnosticSessionControl을 예로 들었다. 이 진단 서비스 메시지는 요청과 응답 메시지 모두 각각 길이가 일정하다. 이번에는 ReadAllDTC 서비스의 요청/응답 메시지 설정 방법을 설명하며 길이가 고정되지 않은 메시지를 처리하는 방법을 설명한다. 개요ReadAllDTC 요청 메시지 설정.DiagnosticS..
-
UDS 진단 통신 (3 / 4) - 진단 요청/ 응답 메시지 설정diagnostic 2024.10.25 02:10
시작하기 전에지난 2 회의 설명에서 ( UDS 진단 통신 (1 / 4) - Transport Protocol, UDS의 개요 :: hsl's tsmaster 사용기 , UDS 진단 통신 (2 / 4) - Transport Protocol 설정 :: hsl's tsmaster 사용기) 통신 프레임의 크기 제한을 초과하는 큰 데이터를 전송하기 위한 용도의 Transport Protocol(TP)과 TP의 파라미터들을 설정하는 방법을 설명하였다. 그래서 CAN의 메시지 크기 제약을 걱정하지 않고 통신을 할 수 있다는 것을 알았다. (이는 진단 통신, CAN 뿐 아니라 다른 통신에도 적용될 수 있다. 어느 통신이나 크기 제약이 있으니까. 그렇다고 모든 통신이 동일한 TP 표준을 사용하지는 않는다. 개념이 유사할..
-
UDS 진단 통신 (2 / 4) - Transport Protocol 설정diagnostic 2024.10.25 02:06
시작하기 전에지난 블로그 ( 'UDS 진단 통신 (1 / 4) - Transport Protocol, UDS의 개요' 수정하기 )에서 TP (Transport Protocol)의 기초를 설명하였다. 실제로 TP를 구현하는 데는 몇 가지 설정이 필요하다. 그 설정 항목들을 설명한다. 개요Diagnostic 창의 Protocol (ISO TP) 탭에 설정 항목들을 설명한다. Transport LayerISO TP 탭에는 아래 그림에 빨간색 네모로 표시한 두 개의 설정 페이지가 있다. Transport Layer와 Diagnostic Layer이다. (Description은 미래 기능 추가를 위한 것인가 보다. 아무 내용이 없다.) Bus Type:CAN, CAN-FD, LIN, Ethernet 중에서 선택한..
-
UDS 진단 통신 (1 / 4) - Transport Protocol, UDS의 개요diagnostic 2024.10.25 02:03
시작하기 전에TSMaster에는 UDS (Unified Diagnostic Services) 모듈이 있다. 이 모듈에는 미리 구현해둔 UDS 기능들이 있다. (서비스라고 부른다.) 이 기능들 이용하여 자동차 제어기와 진단 통신을 할 수 있다. (진단 통신이 무엇인지는 아래에 설명합니다.)당연히 이 기능을 이용하여 제어기의 진단 통신 기능을 검증할 수 있다. 적당한 시험 케이스를 만들면 진단 통신에 사이버 보안 위험이 있는 지도 검증할 수 있다.Automatic Diagnostic (이하, 자동 진단) 기능을 이용하면, 진단 통신 기능 검증이나 사이버 보안 검증 시험을 자동화 할 수 있다. 시험 자동화는 매우 중요하다. 자동차 시스템 개발에는 많은 항목들이 있다. 그들 중 하나가 진단 통신이다. 소프트웨어..
-
CAN 신호를 실시간으로 필터링 하기 - 미니프로그램과 aianalysis 2024.10.25 01:57
시작하기 전에CAN 신호들로 실시간 연산하기 - 미니프로그램으로 yaw_rate_ws 계산에서 CAN 버스의 뒷 바퀴 신호들 (WHL_SPD_RR, WHL_SPD_RL)에서 요-레이트(yaw_rate_ws)를 계산하고, 차량 센서가 측정하여 CAN 버스에 올린 요-레이트(YAW_RATE)와 그래픽 창에서 비교하는 방법을 설명하였다.결과를 보면, YAW_RATE는 매끈한데 비해 yaw_rate_ws는 거칠다. yaw_rate_ws에 실시간으로 필터를 적용할 수 있을까? 하는 의문이 들었다. 사실 나는 '필터는 신호와 노이즈가 섞인 데이터에서 노이즈를 제거한다'는 개념적인 이해를 갖고 있으나 연산 측면에서 필터를 어떻게 코드로 작성할 수 있는 지는 모른다. claude.ai에게 요청하여 코드를 작성했다. 그..
-
실시간으로 FFT 하기 - 미니프로그램과 aidesign 2024.10.25 01:54
시작하기 전에앞에서 설명했던 내용들을 다시 짚어 본다. ESC (a.k.a. VDC) 제어기가 20msec 마다 전송하는 WHL_SPD11 메시지에 바퀴 속도 신호들이 있다. 이들 중 WHL_SPD_RR (Rear Right), WHL_SPD_RL (Rear Left)을 이용하여 실시간으로 요-레이트(yaw_rate_ws)를 계산하여 그래픽스 창에 표시하는 방법을 설명했다.(CAN 신호들로 실시간 연산하기 (yaw_rate_ws))yaw_rate_ws가 매끄럽지 못하여 실시간으로 필터링한 신호 (yaw_rate_ws_filt)를 그래픽스 창에 표시하는 방법을 설명하였다. 칼만 필터를 이용했다. 칼만 필터의 코드는 claude.ai가 짰다. (CAN 신호를 실시간으로 필터링 하기 - 미니프로그램과 ai :..
-
FFT 비주얼라이저 개선 - 미니프로그램과 aianalysis 2024.10.25 00:21
시작하기 전에 지난 실시간으로 FFT 하기 - 미니프로그램과 ai :: hsl's tsmaster 사용기 블로그에서 나는 "claude.ai가 속도와 안전성이 개선된 코드를 만들어 주었다. 아직 해보지 못했다. 시간이 되면 해보고, 가치가 있다면 블로그로 작성하겠다."라고 하며 블로그를 맺었다. 오늘 잠깐 시간이 나서 해봤다. 개요claude.ai는 4개의 개선된 코드를 주었다. matplotlib 대신 PyQt를 사용하여 속도, 안정성에 개선이 있다. 주관적이겠지만 보기에도 더 좋다.1번에 buffer 기능을 더했다. 현재 FFT 결과와 함께 지난 FFT 결과들을 포함한 평균을 함께 표시한다.그래프를 커스텀 할 수 있다. 예를 들면 곡선의 색이나 굵기를 바꿀 수 있다. 축의 스케일을 로그 스케일로 할 ..
-
현대차의 DTC(Diagnostic Trouble Code) 설명을 찾는 방법diagnostic 2024.10.25 00:14
시작하기 전에베뉴 ESC (a.k.a VDC: Vehicle Dynamics Control)를 대상으로 진단 통신을 하며 TSMaster의 UDS 기능 활용법을 설명하는 블로그를 준비 중이다.UDS 서비스들 중에 Read DTC (Diagnostic Trouble Code) 라는 서비스가 있다. (UDS에 관해 구글링하면 많은 좋은 자료들을 쉽게 찾을 수 있다.) 기본 중에 기본인 UDS 서비스이다. 그래서 내 설명에도 등장한다. Read DTC 요청에 ESC는 DTC를 회신한다. 이 DTC가 무슨 의미인지 알면 전체 설명을 더 쉽게 이해할 것이라 생각한다. 그래서 인터넷에서 현대자동차 베뉴 ESC의 DTC와 DTC 설명을 검색했으나, 내 맘에 흡족한 자료를 찾지 못했다. 그래서 DTC와 DTC 설명 자..