-
diag_tester_FRDapplication 2026. 1. 19. 12:43
ESC Diagnostic Tester - Functional Requirement Document (FRD)
개요
- ESC (Electronic Stability Control) 제어기를 진단하는 도구(Diagnostic Tester, 진단 시험기, 시험기)이다.
- ESC와 시험기는 UDS(Unified Diagnostic Services) 기반 통신 프로토콜로 통신한다.
- 통신은 CAN (Controller Area Network)으로 한다.
- 사용자는 GUI에서 서비스를 선택하여 실행할 수 있다.
- MVP(Minimum Viable Product) 접근법으로 단계별 개발을 진행한다.
참조 문서
- esc_diag_hsl.md: ESC 진단 통신 스펙
- libTSCAN_Library_Python_Description.md: TOSUN사의 libTSCAN 라이브러리 사용법
- libTSCANAPI/*.py: TOSUN사의 libTSCAN 라이브러리 사용을 위한 파이썬 모듈
개발 단계
Phase 1 - MVP (Minimum Viable Product)
목표: 기본 진단 통신 기능 구현 및 검증
- CAN 연결/해제
- 하드웨어 인식 및 채널 선택
- CAN 파라미터 설정
- 연결 상태 표시
- Diagnostic Session Control (0x10)
- Default Session (0x01)
- Extended Diagnostic Session (0x03)
- 세션 전환 및 상태 표시
- Tester Present (0x3E)
- 주기적 전송 기능
- suppressPosRspMsgIndicationBit 옵션
- 기본 메시지 송수신 로깅
- 송신 메시지 표시
- 수신 메시지 표시
- 타임스탬프 포함
Phase 2 - 핵심 진단 기능
목표: 실용적인 진단 기능 추가
- Read Data by Identifier (0x22)
- DID 읽기
- 응답 데이터 파싱 및 표시
- Write Data by Identifier (0x2E)
- DID 쓰기
- 쓰기 확인
- DTC 관리
- Read DTC (0x19)
- Clear DTC (0x14)
- DTC 상태 표시
- ECU Reset (0x11)
- Hard Reset (0x01)
- Soft Reset (0x03)
Phase 3 - 고급 기능 (추후 구현)
- Security Access (0x27)
- I/O Control (0x2F)
- Routine Control (0x31)
- Read Memory by Address (0x23)
- Write Memory by Address (0x3D)
- DID 데이터 그래프 출력
GUI 레이아웃
Phase 1, 2 GUI 구성
┌─────────────────────────────────────────────────────────────┐ │ 툴바: [Connect] [Disconnect] [Session] [Reset] │ ├─────────────────────────────────────────────────────────────┤ │ ┌──────────────┬──────────────────────────────────────────┐ │ │ │ │ │ │ │ │ Configuration│ │ │ │ │ │ 메인 패널 │ │ │ │ Diag & Comm │ (탭별 내용 표시) │ │ │ │ │ │ │ │ │ DTC │ │ │ │ │ │ │ │ │ │ Data │ │ │ │ │ │ │ │ │ └──────────────┴──────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────┤ │ 메시지 로그 (송수신 메시지 표시 - 시간, 방향, ID, 데이터) │ │ [12:34:56.123] TX 0x7D1: 10 03 │ │ [12:34:56.130] RX 0x7D9: 50 03 00 32 01 F4 │ ├─────────────────────────────────────────────────────────────┤ │ 상태바: Connected | Baud: 500kbps | Session: Extended(0x03)│ └─────────────────────────────────────────────────────────────┘Phase 1, 2 기능 상세 명세
일반 동작
- 시험기는 사용자가 선택한 서비스의 요청 메시지를 CAN으로 전송한다.
- 필요에 따라 TP(Transport Protocol)을 적용한다.
- 시험기는 전송한 메시지와 메시지의 의미를 메시지 로그에 표시한다.
- 포맷:
[시간] TX/RX CAN_ID: 데이터바이트 | 설명 - 예:
[12:34:56.123] TX 0x7D1: 10 03 | DiagSession Extended
- 포맷:
- 시험기는 제어기의 응답 메시지를 수신한다. 필요에 따라 TP를 적용한다.
- 시험기는 수신한 메시지와 메시지의 의미를 메시지 로그에 표시한다.
- GUI의 상단에 툴바가 있다.
- Connect/Disconnect 버튼
- Session 선택 및 실행 버튼
- Reset 버튼
- GUI 맨아래 상태 표시줄이 있다.
- Connect 상태 (Connected/Disconnected)
- CAN Baud rate
- 현재 Diagnostic Session
1. Configuration (Phase 1)
Configuration 탭에서 통신 파라미터를 설정한다.
1.1 CAN 설정
- CAN/CAN-FD 선택
- 라디오 버튼으로 CAN 또는 CAN-FD 선택
- Phase 1, 2에서는 CAN만 지원
- 채널 선택
- 드롭다운 리스트로 채널 선택
- 프로그램 시작 시 연결된 하드웨어의 채널 수를 자동 감지
- 채널이 없으면 "No device found" 표시
- CAN Baud Rate
- 드롭다운 리스트: 125, 250, 500, 1000 kbps
- 디폴트: 500 kbps
- CAN-FD Baud Rate (Phase 3에서 구현)
- 드롭다운 리스트: 1000, 2000, 4000, 8000 kbps
- 디폴트: 2000 kbps
1.2 진단 통신 설정
- Physical Request ID
- 텍스트 입력 (Hex)
- 디폴트: 0x7D1
- ECU로 보내는 1:1 요청 메시지 ID
- Physical Response ID
- 텍스트 입력 (Hex)
- 디폴트: 0x7D9
- ECU로부터 받는 응답 메시지 ID
- Functional Request ID
- 텍스트 입력 (Hex)
- 디폴트: 0x7DF
- 브로드캐스트 요청 메시지 ID
- ID Format 자동 판별
- ID가 0x7FF 이하: Standard (11-bit)
- ID가 0x7FF 초과: Extended (29-bit)
- 자동 판별 결과를 라벨로 표시
- Fill Byte
- 텍스트 입력 (Hex)
- 디폴트: 0xAA
- CAN 메시지 패딩에 사용
1.3 Transport Protocol 설정
- ST_Min (Separation Time Minimum)
- ST_Min_Tx: 송신 시 프레임 간 최소 간격 (ms)
- ST_Min_Rx: 수신 시 요구하는 최소 간격 (ms)
- 텍스트 입력, 디폴트: 0 ms
- Block Size (BS)
- 텍스트 입력, 디폴트: 0 (무제한)
- Flow Control 없이 보낼 수 있는 연속 프레임 수
- P2 Timeout
- 텍스트 입력
- 디폴트: 500 ms
- 첫 응답 대기 시간
- P2 Extended
- 텍스트 입력
- 디폴트: 5000 ms
- 부정 응답(NRC 0x78) 후 대기 시간
- S3 Server Time
- 텍스트 입력
- 디폴트: 3000 ms
- ECU가 Tester Present 없이 대기하는 시간
- Max Length
- 텍스트 입력
- 디폴트: 4095 바이트
- 단일 서비스 패킷의 최대 길이
Phase 3 파라미터 (현재는 비활성화):
- User Define FC Delay
- FD Max DLC
- At least 8 Bytes 체크박스
- FD BRS 체크박스
1.4 Tester Present 설정
- Enable Tester Present 체크박스
- Connect 상태에서만 활성화
- Disconnect 되면 비활성화 (체크 상태는 유지)
- 체크 시: 설정된 주기로 Tester Present 전송
- 언체크 시: 전송 중지
- suppressPosRspMsgIndicationBit 체크박스
- 체크: 긍정 응답을 억제 (0x3E 0x80)
- 언체크: 긍정 응답 요청 (0x3E 0x00)
- 전송 주기
- 텍스트 입력 (ms)
- 디폴트: 2000 ms
- 권장 범위: 1000~3000 ms (S3 Timer보다 짧게)
2. 진단기 연결/해제 (Phase 1)
2.1 Connect
- 툴바 Connect 버튼
- Configuration에서 설정한 파라미터로 CAN 연결
- 연결 성공 시:
- 상태바: "Connected" 표시
- Baud rate 표시
- 버튼 텍스트: "Disconnect"로 변경
- 연결 실패 시:
- 에러 다이얼로그 표시
- 에러 내용: "Failed to connect. Please check hardware and configuration."
2.2 Disconnect
- 툴바 Disconnect 버튼
- CAN 연결 해제
- Tester Present 자동 중지
- 상태바: "Disconnected" 표시
- 버튼 텍스트: "Connect"로 변경
3. Diagnostic Session Control (Phase 1)
Service ID: 0x10
3.1 GUI 구성
Diag & Comm 탭에 다음 요소가 있다:
- Session 선택 드롭다운
- Default Session (0x01)
- Extended Diagnostic Session (0x03)
- (Phase 3: Programming Session 0x02 추가 예정)
- Change Session 버튼
- 선택된 세션으로 전환 요청 전송
- Connect 상태에서만 활성화
3.2 동작
- 사용자가 세션 선택 후 "Change Session" 버튼 클릭
- 요청 메시지 전송:
10 [session_type]- 예: Extended Session →
10 03
- 예: Extended Session →
- 응답 대기 (P2 Timeout)
- 응답 수신 시:
- 긍정 응답 (0x50):
- 상태바 세션 표시 업데이트
- 메시지 로그:
[시간] RX 0x7D9: 50 03 00 32 01 F4 | Session Changed: Extended
- 부정 응답 (0x7F):
- NRC 코드 파싱 및 표시
- 예:
[시간] RX 0x7D9: 7F 10 13 | NRC: Incorrect Message Length
- 긍정 응답 (0x50):
- 타임아웃 시:
- 에러 다이얼로그: "Response timeout"
3.3 NRC 처리
주요 Negative Response Code:
- 0x11: serviceNotSupported
- 0x12: subFunctionNotSupported
- 0x13: incorrectMessageLengthOrInvalidFormat
- 0x22: conditionsNotCorrect
- 0x78: requestCorrectlyReceived-ResponsePending
4. Tester Present (Phase 1)
Service ID: 0x3E
4.1 자동 전송
- Configuration 탭에서 설정
- 주기적으로
3E 00또는3E 80전송 - suppressPosRspMsgIndicationBit에 따라 서브 기능 결정
4.2 수동 전송
Diag & Comm 탭에 "Send Tester Present" 버튼 추가:
- 클릭 시 즉시 Tester Present 전송
- Connect 상태에서만 활성화
5. ECU Reset (Phase 2)
Service ID: 0x11
5.1 GUI 구성
Diag & Comm 탭에 다음 요소가 있다:
- Reset Type 선택 드롭다운
- Hard Reset (0x01)
- Soft Reset (0x03)
- ECU Reset 버튼
- 선택된 Reset Type으로 ECU 재시작
- Extended Session에서만 활성화
5.2 동작
- 사용자가 Reset Type 선택 후 "ECU Reset" 버튼 클릭
- 확인 다이얼로그: "ECU will be reset. Continue?"
- 요청 메시지 전송:
11 [reset_type] - 응답 수신 시:
- 긍정 응답 (0x51):
- 메시지 로그:
[시간] RX 0x7D9: 51 01 | ECU Reset: Hard Reset - ECU 재부팅 대기 (약 3초)
- 자동 재연결 시도
- 메시지 로그:
- 부정 응답:
- NRC 표시
- 긍정 응답 (0x51):
- Reset 후:
- 세션이 Default Session으로 복귀
- 상태바 업데이트
6. Read Data by Identifier (Phase 2)
Service ID: 0x22
6.1 GUI 구성
Data 탭에 다음 요소가 있다:
- DID 입력
- 텍스트 입력 (Hex, 2바이트)
- 예: F190 (VIN)
- Read DID 버튼
- 입력된 DID 읽기 요청
- 응답 데이터 표시 영역
- Raw 데이터 (Hex)
- ASCII 변환 (가능한 경우)
6.2 동작
- 사용자가 DID 입력 (예: F190)
- "Read DID" 버튼 클릭
- 요청 메시지 전송:
22 F1 90 - 응답 수신 시:
- 긍정 응답 (0x62):
- 데이터 파싱:
62 F1 90 [data...] - Raw 데이터 표시
- ASCII 변환 표시 (printable한 경우)
- 데이터 파싱:
- 부정 응답:
- NRC 표시
- 긍정 응답 (0x62):
6.3 주요 DID 예시 (참고)
- F190: VIN (Vehicle Identification Number)
- F18C: ECU Serial Number
- F187: Spare Part Number
- F19E: System Name or ECU Software Number
7. Write Data by Identifier (Phase 2)
Service ID: 0x2E
7.1 GUI 구성
Data 탭에 추가:
- DID 입력 (Read와 공통)
- Write Data 입력
- 텍스트 입력 (Hex)
- 바이트 단위로 공백 구분
- Write DID 버튼
- Extended Session에서만 활성화
7.2 동작
- 사용자가 DID와 데이터 입력
- 예: DID=F15A, Data=01 02 03
- "Write DID" 버튼 클릭
- 확인 다이얼로그: "Write DID 0xF15A. Continue?"
- 요청 메시지 전송:
2E F1 5A 01 02 03 - 응답 수신 시:
- 긍정 응답 (0x6E):
- 메시지 로그:
[시간] RX 0x7D9: 6E F1 5A | Write DID Success
- 메시지 로그:
- 부정 응답:
- NRC 표시
- 긍정 응답 (0x6E):
8. DTC 관리 (Phase 2)
8.1 Read DTC
Service ID: 0x19
GUI 구성
DTC 탭에 다음 요소가 있다:
- Read DTC 버튼
- DTC 표 (Table)
- 컬럼: DTC Code | Status | Description
- DTC 통계 표시
- Total DTC: n개
- Confirmed DTC: n개
- Pending DTC: n개
동작
- "Read DTC" 버튼 클릭
- 요청 메시지 전송:
- reportDTCByStatusMask:
19 02 FF - 또는 reportNumberOfDTCByStatusMask:
19 01 FF
- reportDTCByStatusMask:
- 응답 수신 시:
- DTC 파싱
- 테이블에 표시
- 통계 업데이트
DTC Status Byte 해석
Bit 7: warningIndicatorRequested Bit 6: testFailedSinceLastClear Bit 5: testNotCompletedSinceLastClear Bit 4: confirmedDTC Bit 3: testFailedThisOperationCycle Bit 2: pendingDTC Bit 1: testNotCompletedThisOperationCycle Bit 0: testFailed8.2 Clear DTC
Service ID: 0x14
GUI 구성
- Clear DTC 버튼
- Extended Session에서만 활성화
동작
- "Clear DTC" 버튼 클릭
- 확인 다이얼로그: "All DTCs will be cleared. Continue?"
- 요청 메시지 전송:
14 FF FF FF - 응답 수신 시:
- 긍정 응답 (0x54):
- 메시지: "DTC cleared successfully"
- DTC 테이블 비우기
- 부정 응답:
- NRC 표시
- 긍정 응답 (0x54):
비기능 요구사항
성능
- CAN 메시지 수신 지연: 최대 10ms
- GUI 응답 시간: 1초 이내
- 메시지 로그 표시: 최소 100줄 버퍼 (스크롤 지원)
신뢰성
통신 에러 처리
- 연결 실패
- 에러 다이얼로그 표시: "Failed to connect. Please check hardware and configuration."
- 상태바에 "Connection Failed" 표시
- 응답 타임아웃
- P2/P2* 타임아웃 시 메시지 로그에 "Response Timeout" 표시
- 사용자에게 알림 (옵션)
- CAN 버스 오류
- Bus-Off 상태 감지
- 에러 다이얼로그: "CAN Bus Error. Please check connection."
- 자동 Disconnect
- 잘못된 메시지 형식
- 메시지 파싱 실패 시 메시지 로그에 "Invalid message format" 표시
- Raw 데이터는 그대로 표시
재연결 메커니즘
- 연결이 끊어진 경우:
- 3초 간격으로 2회 추가 재연결 시도 (총 3회)
- 각 시도마다 상태바에 "Reconnecting... (n/3)" 표시
- 재연결 실패 시 에러 다이얼로그 표시
로깅
메시지 로그
- 모든 진단 통신 송수신 메시지를 로깅
- 타임스탬프 포함 (ms 단위)
- 로그 포맷:
[HH:MM:SS.mmm] DIR ID: DATA | DESCRIPTION- DIR: TX (송신) / RX (수신)
- ID: CAN ID (Hex)
- DATA: 데이터 바이트 (Hex, 공백 구분)
- DESCRIPTION: 서비스 설명
- clear log 버튼
파일 로깅
- logging 모듈을 사용한다.
- Configuration 탭에 "Enable File Logging" 체크박스
- 로그 파일 경로 설정 (텍스트 입력 + Browse 버튼)
- 디폴트 경로:
./logs/diag_log_YYYYMMDD_HHMMSS.txt - 로그 파일은 프로그램 시작 시 새로 생성
- 로그 포맷: 메시지 로그와 동일
설정 저장
- 사용자 설정은
config/esc_diag_tester.json파일에 저장 - 프로그램 종료 시 자동 저장
- 프로그램 시작 시 설정 파일 로드하여 디폴트 값으로 사용
- 설정 파일이 없으면 하드코딩된 디폴트 값 사용
저장되는 설정 항목
- CAN 설정: Baud rate, 채널
- 진단 통신 설정: Request/Response ID, Fill Byte
- TP 설정: ST_Min, Block Size, Timeouts
- Tester Present: 활성화 여부, 주기, suppress 옵션
- 로그 설정: 파일 로깅 활성화, 로그 경로
- 윈도우 크기 및 위치
에러 처리
부정 응답 (NRC) 처리
메시지 로그에 NRC 코드와 설명 표시:
[시간] RX 0x7D9: 7F 10 13 | NRC 0x13: incorrectMessageLengthOrInvalidFormat주요 NRC 코드:
- 0x11: serviceNotSupported
- 0x12: subFunctionNotSupported
- 0x13: incorrectMessageLengthOrInvalidFormat
- 0x22: conditionsNotCorrect
- 0x24: requestSequenceError
- 0x31: requestOutOfRange
- 0x33: securityAccessDenied
- 0x35: invalidKey
- 0x36: exceedNumberOfAttempts
- 0x37: requiredTimeDelayNotExpired
- 0x78: requestCorrectlyReceived-ResponsePending
타임아웃 처리
- P2 Timeout 시:
- 메시지 로그:
[시간] ERROR: Response timeout (P2) - 에러 카운터 증가 (상태바 표시)
- 메시지 로그:
- P2* Timeout 시:
- 메시지 로그:
[시간] ERROR: Response timeout (P2 Extended)
- 메시지 로그:
CAN 버스 오류
- Bus-Off 감지 시 자동 Disconnect 및 에러 알림
- Error Passive 상태는 경고만 표시 (연결 유지)
잘못된 사용자 입력 처리
- 잘못된 Hex 값 입력:
- 입력 검증 (0-9, A-F만 허용)
- 잘못된 입력 시 입력창 빨간색 테두리 표시
- 범위 초과 값:
- Baud rate, Timeout 등 허용 범위 검증
- 경고 메시지 표시
Phase 3 이후 계획 (참고용)
Phase 3 - 고급 진단 기능
- Security Access (0x27)
- Seed/Key 방식
- 키 계산 알고리즘 설정
- 시도 횟수 제한 표시
- I/O Control (0x2F)
- 액추에이터 제어
- 제어 옵션 선택
- Routine Control (0x31)
- 루틴 시작/중지/결과 조회
- 사전 정의된 루틴 목록
- Memory Access
- Read Memory by Address (0x23)
- Write Memory by Address (0x3D)
- 메모리 주소 및 크기 입력
Phase 4 - 데이터 분석 및 시각화
- DID 데이터 그래프
- 주기적 DID 읽기
- 시계열 그래프 표시
- 다중 DID 동시 표시 (최대 5개)
- 그래프 export (이미지, CSV)
- DTC Freeze Frame
- Freeze Frame 데이터 읽기
- 상세 정보 표시
- 데이터 파일 저장
- DID 데이터 CSV 저장
- DTC 리포트 생성
Phase 5 - 자동화 및 편의 기능
- 테스트 시퀀스 자동화
- 스크립트 작성 기능
- 반복 테스트 실행
- DID/DTC 데이터베이스
- 외부 파일(JSON/XML)로 DID/DTC 정의 관리
- 설명 자동 표시
- ODX 파일 지원
- ODX 파일 import
- 자동 설정 적용
기술 스택 (참고)
개발 환경
- 언어: Python 3.10+
- GUI Framework: PyQt5 또는 Tkinter
- CAN Library: libTSCAN (TOSUN)
주요 라이브러리
- PyQt5 / PySide6 (GUI)
- numpy, matplotlib (Phase 4 그래프용)
- json (설정 관리)
프로젝트 구조 (예상)
mobis_esc_diag_tester/ ├── main.py # 메인 엔트리 포인트 ├── config/ │ └── esc_diag_tester.json # 설정 파일 ├── gui/ │ ├── main_window.py # 메인 윈도우 │ ├── config_tab.py # Configuration 탭 │ ├── diag_tab.py # Diagnostic & Comm 탭 │ ├── dtc_tab.py # DTC 탭 │ └── data_tab.py # Data 탭 ├── core/ │ ├── can_manager.py # CAN 통신 관리 │ ├── uds_services.py # UDS 서비스 구현 │ ├── message_parser.py # 메시지 파싱 │ └── logger.py # 로깅 ├── libTSCANAPI/ # TOSUN 라이브러리 ├── doc/ │ ├── esc_diag_tester_FRD.md │ └── esc_diag_hsl.md └── logs/ # 로그 파일개발 일정 (예상)
Phase 1 (2주)
- Week 1: GUI 기본 구조, Configuration 탭, CAN 연결
- Week 2: Diagnostic Session Control, Tester Present, 로깅
Phase 2 (2주)
- Week 3: Read/Write DID, ECU Reset
- Week 4: DTC Read/Clear, 테스트 및 버그 수정
Phase 3 이후
- 필요에 따라 기능 추가
변경 이력
버전 날짜 변경 내용 1.0 2026-01-13 초기 FRD 작성 (Phase 1, 2 중심) 1.1 2026-01-14 트러블슈팅 섹션 추가 (CAN-FD 이슈, P2 타임아웃 반영)
트러블슈팅 (Troubleshooting)
1. ECU가 UDS 요청에 응답하지 않는 문제
증상:
- CAN 버스에 요청 메시지는 보내지만 ECU 응답 없음
- Type: "Data" (표준 CAN) 메시지로 전송됨
- 로그에 timeout 오류 발생
원인:
- Configuration Tab에서 CAN-FD를 선택했지만 실제로는 표준 CAN으로 전송됨
- 일부 ECU는 CAN-FD 전용 모드로 동작하여 표준 CAN 프레임을 무시함
해결책:
# can_manager.py의 TSUDS 생성 시 is_fd_for_tsuds = is_canfd # Configuration 설정과 일치시킴 dlc=8 # 8바이트 DLC 유지 (Flow Control 안정성) bitrate_switch=is_fd_for_tsuds # CAN-FD일 때 BRS 활성화검증 방법:
- CAN 버스 로그에서 Type: "FD", BRS: 1 확인
- ECU가 정상 응답하는지 확인
2. ReadDTC 멀티프레임 응답 타임아웃 문제
증상:
- SessionControl (Single Frame)은 성공하지만 ReadDTC (Multi Frame) 타임아웃
- ECU가 10개 프레임을 모두 전송했지만 TSUDS가 수신 실패
- TSUDS result: 161 (timeout)
- Flow Control 메시지가 중복 전송됨:
- 첫 번째: 표준 CAN "Data" type (
30 00 14) - 두 번째: CAN-FD (
30 00 00) - 세 번째: CAN-FD 64바이트 (
30 00 00 00 00...)
- 첫 번째: 표준 CAN "Data" type (
원인:
- TSUDS가 CAN-FD 모드에서 DLC=64로 설정되면 Flow Control 전송에 버그 발생
- 표준 CAN과 CAN-FD Flow Control이 혼용되어 ECU가 혼란
- Multi-frame 응답 처리 중 ISO-TP 프로토콜 오류
해결책:
# can_manager.py의 TSUDS 생성 시 dlc=8 # 64 대신 8바이트로 제한 (ISO-TP는 8바이트면 충분) is_fd=is_canfd # CAN-FD 사용은 유지추가 안정화:
- ReadDTC retry 로직 추가 (최대 3회 재시도)
- msg_list 큐 초기화 (요청 전 이전 응답 제거)
3. P2/P2* 타임아웃 반영
배경:
- ECU는 SessionControl 응답에 P2/P2* 타이밍 파라미터를 전송
- 응답 형식:
50 <session> <P2_high> <P2_low> <P2*_high> <P2*_low> - 예:
50 03 00 2D 00 C8→ P2=45ms, P2*=200ms
구현:
# uds_services.py의 diagnostic_session_control() if response[0] == 0x50 and len(response) >= 6: p2_can_server = (response[2] << 8) | response[3] # milliseconds p2_star_can_server = (response[4] << 8) | response[5] # milliseconds # Update TSUDS timeout with P2* new_timeout = p2_star_can_server / 1000.0 # Convert to seconds self.can_manager.uds_client.timeout = new_timeout효과:
- Extended Session 진입 시 ECU 요구 타이밍으로 자동 조정
- 멀티프레임 응답의 안정성 향상
4. 설정 파일 저장/로드 문제
증상:
- CAN-FD를 선택했지만 프로그램 재시작 시 CAN으로 초기화됨
- Channel, CAN-FD Baudrate 등 일부 설정이 저장되지 않음
원인:
config_tab.py의load_settings()에서 누락된 필드:can_type(CAN/CAN-FD 선택)canfd_baudratetermination_120channel
해결책:
# config_tab.py의 load_settings() if 'can_type' in settings: if settings['can_type'] == 'CAN-FD': self.canfd_radio.setChecked(True) else: self.can_radio.setChecked(True) if 'channel' in settings: channel_idx = settings['channel'] for i in range(self.channel_combo.count()): if self.channel_combo.itemData(i) == channel_idx: self.channel_combo.setCurrentIndex(i) break if 'canfd_baudrate' in settings: self.canfd_baudrate.setCurrentText(str(settings['canfd_baudrate'])) if 'termination_120' in settings: self.termination_120.setChecked(settings['termination_120'])검증:
- 설정 변경 후 프로그램 종료
config/esc_diag_tester.json파일 확인- 프로그램 재시작 시 설정 유지 확인
5. DTC 표 초기화가 보이지 않는 문제
증상:
- ReadDTC 버튼 클릭 시 이전 DTC가 삭제되지 않는 것처럼 보임
원인:
- UI 갱신이 DTC 응답 수신 후에만 발생
- 표 삭제와 응답 표시가 너무 빨리 일어나 사용자가 인지 못함
해결책:
# dtc_tab.py의 read_dtc() self.dtc_table.setRowCount(0) self.update_statistics([], 0, 0) # Force UI update before ECU request from PyQt5.QtWidgets import QApplication QApplication.processEvents()효과:
- 표 삭제 후 즉시 화면 갱신
- ECU 요청 전에 빈 표를 사용자가 명확히 확인
개발 환경 설정 참고사항
필수 라이브러리:
pip install PyQt5 pip install pandas openpyxl # DTC description xlsx 파싱용libTSCAN 라이브러리:
libTSCANAPI/폴더 필요- TOSUN HS CANFD2 하드웨어 필요
- Windows 64-bit 환경
디버깅 팁:
[DEBUG]로그를 활성화하여 TSUDS 상태 확인- CAN 버스 모니터로 실제 프레임 타입 (Data/FD) 확인
config/esc_diag_tester.json파일로 설정 직접 수정 가능
'application' 카테고리의 다른 글
바이브 코딩으로 진단기 만들기 (0) 2026.01.19 포르쉐 타이칸 CAN 데이터에서 횡가속도 신호 찾기 (0) 2026.01.06 포르쉐 타이칸 CAN 데이터에서 요-레이트 신호 찾기 (1) 2026.01.04 비트 패턴 검색 (0) 2026.01.03 IDS - 다채널: 데이터 처리 코드 변경 (0) 2025.11.26