Skip to content

EVThunder/UDS_Tool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BMS UDS 진단통신 Tool

Windows Forms 기반의 BMS CAN/UDS 진단통신 모니터링 툴입니다. PCAN-USB 장비를 통해 Main/Sub BMS와 CAN 메시지를 송수신하고, ISO-TP(CAN-TP) 위에서 UDS 서비스를 수행하여 배터리 상태, DTC, 세션, WriteDataByIdentifier 기능을 확인합니다.

현재 구현 기준: Windows C# WinForms, net10.0-windows, PEAK PCANBasic.NET, Classic CAN Standard ID, DLC 8, PCAN_USBBUS1, 125 Kbps

📖 추가 문서

📌 핵심 기능

기능 설명 주요 파일
PCAN 연결 PCAN-USB 채널 초기화, CAN 송수신, 연결 상태 UI 표시 Form1.cs, CanTpClient.cs
UDS DID 조회 단일 DID 및 Snapshot DID(0xF310) 조회, BMS 데이터 매핑 UdsClient.cs, BmsDid.cs, BmsDataMapper.cs
CAN-TP 처리 Single/First/Consecutive/Flow Control 프레임 송수신 및 조립 CanTpFrame.cs, CanTpClient.cs, CanTpReceiver.cs
Main/Sub BMS 판별 응답 CAN ID 기준으로 Main(0x701) / Sub(0x711) 응답 구분 Form1.cs, CanTpFrame.cs
DTC 조회/삭제 ReadDTCInformation(0x19)ClearDiagnosticInformation(0x14) 처리 UdsClient.cs, UdsResponseParser.cs
Session 제어 Default/Extended Session 전환, Extended Session 유지용 Tester Present 자동 송신 Form1.cs, UdsClient.cs
Write Parameter 충방전 허용, Fan/Heater, 임계값 등을 WriteDataByIdentifier(0x2E)로 설정 BmsWriteDataForm.cs, BmsWriteCatalog.cs

📁 프로젝트 구성

UDS_Tool/
├─ FirstUI.slnx
├─ README.md
├─ docs/
│  └─ BMS UDS 진단통신 Layer 구조.md
└─ FirstUI/
   ├─ FirstUI.csproj
   ├─ Program.cs
   ├─ Form1.cs / Form1.Designer.cs
   ├─ CanTpClient.cs / CanTpReceiver.cs / CanTpFrame.cs
   ├─ UdsClient.cs / UdsResponseParser.cs / UdsMultiDidParser.cs
   ├─ BmsData.cs / BmsDataMapper.cs
   ├─ BmsDid.cs / BmsWriteDid.cs
   ├─ BmsWriteData.cs / BmsWriteCatalog.cs / BmsWriteDataForm.cs
   └─ UdsService.cs
영역 역할
Form1 UI 이벤트, PCAN 연결, UDS 요청/응답 흐름, 상태 표시, 로그 출력
CanTp* CAN 8 byte 프레임 위의 ISO-TP 송수신, 멀티프레임 재조립
Uds* UDS Request 생성, Positive/Negative Response 파싱
Bms* BMS DID 정의, raw value 변환, 화면 데이터 모델, Write 파라미터 카탈로그
docs/ Layer 구조와 파일별 책임 설명 문서

🔄 시스템 아키텍처

[Windows WinForms UDS Tool]
        |
        | UDS Request / Response
        v
[UDS Client / Parser Layer]
        |
        | ISO-TP(SF/FF/CF/FC)
        v
[PCAN-USB / CAN Bus]
        |
        +--> [Main BMS / TC375]  Response ID: 0x701
        |
        +--> [Sub BMS / TC375]   Backup Response ID: 0x711

현재 툴은 요청 ID 하나(0x700)를 사용하고, 응답 ID로 Main/Sub BMS를 구분합니다. 산출물의 범용 UDS 예시에는 0x7E0/0x7E8, 0x7E1/0x7E9 구조도 포함되어 있으나, 이 저장소의 C# 구현 기준은 0x700/0x701/0x711입니다.

📡 CAN/UDS 통신 사양

CAN 기본값

항목 현재 구현값 위치
CAN Channel PCAN_USBBUS1 Form1.cs
Bitrate PCAN_BAUD_125K Form1.cs
Frame Type Classic CAN, Standard ID 산출물/코드 기준
DLC 8 byte CanTpFrame.cs
Request ID 0x700 CanTpFrame.cs
Main Response ID 0x701 CanTpFrame.cs
Sub Response ID 0x711 CanTpFrame.cs
DID Read Timeout 1500 ms Form1.cs

CAN-TP 프레임

프레임 PCI 구조 비고
Single Frame 0x0L [Length] + UDS Payload + Padding UDS payload 최대 7 byte
First Frame 0x1L 10 LL + Payload 첫 6 byte 전체 payload 길이 포함
Consecutive Frame 0x2N SN + Payload 7 byte Sequence Number 검증
Flow Control 0x30 30 00 00 00 00 00 00 00 First Frame 수신 후 Tool이 송신

지원 UDS 서비스

기능 Request SID Positive SID 요청 예 사용 조건
Diagnostic Session Control 0x10 0x50 10 01, 10 03 CAN 연결 후
ECU Reset 0x11 0x51 11 01 Extended Session
ReadDataByIdentifier 0x22 0x62 22 F1 40 CAN 연결 후
WriteDataByIdentifier 0x2E 0x6E 2E F4 10 01 Extended Session
ReadDTCInformation 0x19 0x59 19 02 FF CAN 연결 후
ClearDiagnosticInformation 0x14 0x54 14 FF FF FF CAN 연결 후
TesterPresent 0x3E 0x7E 3E 80 Extended Session 유지
Negative Response - 0x7F 7F RequestSID NRC 모든 서비스 오류

TesterPresent는 suppress positive response bit(0x80)를 사용하므로 ECU 구현에 따라 Positive Response가 생략될 수 있습니다.

🧾 주요 DID Map

화면 표시 DID

영역 항목 DID Raw/Scale 표시 변환
Cell & Pack Cell 1~4 SOC 0xF101~0xF104 % raw %
Cell & Pack Cell 1~4 SOH 0xF111~0xF114 % raw %
Cell & Pack Cell 1~4 Voltage 0xF121~0xF124 V * 100 raw / 100.0 V
Cell & Pack Cell 1~4 Temp 0xF131~0xF134 raw ℃
Cell & Pack Pack SOC 0xF140 % raw %
Cell & Pack Pack Current 0xF205 A * 10, signed int16 signed(raw) / 10.0 A
Cell & Pack Charge Enable 0xF20B 0/1 0=OFF, 1=ON
Cell & Pack Discharge Enable 0xF207 0/1 0=OFF, 1=ON
Cell & Pack Max Charge Current 0xF208 A * 10 raw / 10.0 A
Cell & Pack Max Discharge Current 0xF209 A * 10 raw / 10.0 A
Vehicle Status BMS Mode 0xF200 enum 0=STOP, 1=RUN
Vehicle Status Charging 0xF201 enum 0=DISCHARGING, 1=CHARGING, 2=IDLE
Vehicle Status Contactor 0xF202 enum 0=OPEN, 1=CLOSED, 2=PRECHARGE
Vehicle Status Balancing 0xF203 enum 0=STABLE, 1=BALANCING, 2=UNSTABLE
Vehicle Status Thermal 0xF204 enum 0=STABLE, 1=COOLING, 2=HEATING
Vehicle Status Operation 0xF206 enum 0=NORMAL, 1=CHARGE, 2=DISCHARGE, 3=FAULT, 4=SLEEP
Vehicle Status Fault Summary 0xF300 enum 0=NORMAL, 1=WARNING, 2=FAULT
Snapshot BMS Snapshot 0xF310 Multi DID payload [DID 2 byte + VALUE 2 byte] 반복

Sub BMS 응답에서는 산출물 기준으로 Operation Mode, Pack SOH, Heater, Cell Balancing 일부 항목이 미지원일 수 있으므로 UI에서 N/A 처리 정책을 둡니다.

WriteDataByIdentifier DID

카테고리 항목 DID 길이 값/스케일 비고
Cell Balancing Balancing Enabled 0xF401 1 byte 0=OFF, 1=ON Sub BMS 정책에 따라 제한 가능
Charge / Discharge Charge Enable 0xF410 1 byte 0=OFF, 1=ON Extended Session
Charge / Discharge Discharge Enable 0xF411 1 byte 0=OFF, 1=ON Extended Session
Thermal Management Fan Command 0xF430 1 byte 0=OFF, 1=ON Extended Session
Thermal Management Heater Command 0xF431 1 byte 0=OFF, 1=ON Sub BMS 미지원 가능
Threshold / Calibration Over Voltage Threshold 0xF450 2 byte raw = V * 100 3.0~5.0 V
Threshold / Calibration Under Voltage Threshold 0xF451 2 byte raw = V * 100 2.0~4.0 V
Threshold / Calibration Over Temperature Threshold 0xF452 2 byte raw = ℃ -40~125 ℃
Threshold / Calibration Over Current Threshold 0xF453 2 byte raw = A * 10 0~500 A
Monitoring Pack Current 0xF205 2 byte raw = A * 10, signed Write 팝업에서 읽기 전용

Write 기능은 BmsWriteData의 타입, 범위, 스케일, 길이 검증을 거친 뒤 2E DID_H DID_L DATA... 형식으로 송신합니다.

🧪 주요 동작 흐름

1. PCAN 연결

CONNECT 클릭
  -> PCANBasic.Initialize(PCAN_USBBUS1, PCAN_BAUD_125K)
  -> 성공 시 CAN Connected 상태 표시
  -> Read/Session/DTC 버튼 활성화

2. DID 조회

Read 버튼 클릭
  -> UdsClient.CreateReadDidRequest(did)
  -> CanTpClient.Send(payload)
  -> ECU Response 수신
  -> CanTpReceiver.ProcessFrame()
  -> UdsResponseParser.TryParseReadDidResponse()
  -> BmsDataMapper.Apply()
  -> UI 값 갱신

Snapshot(0xF310)은 여러 DID 값을 하나의 응답에 담을 수 있어 Multi Frame으로 수신될 수 있습니다. 응답 payload는 62 F3 10 + [DID + VALUE] 반복 형태로 파싱합니다.

3. DTC 조회/삭제

READ DTC
  -> TX: 19 02 FF
  -> RX: 59 02 FF + [DTC 3 byte + Status 1 byte] 반복
  -> DTC List 갱신

CLEAR DTC
  -> TX: 14 FF FF FF
  -> RX: 54
  -> DTC List Clear

산출물 기준 DTC 예시는 0x010001 Over Voltage, 0x010002 Under Voltage, 0x010003 Over Temperature, 0x010004 Over Current, 0x010005 Communication Error, 0x010006 Main BMS Fault, 0x010007 Sub BMS Fault입니다.

4. Session 및 Tester Present

CHANGE SESSION
  -> Default: 10 01
  -> Extended: 10 03
  -> Positive Response: 50 session

Extended Session 진입 후
  -> Tester Present: 3E 80
  -> 주기적으로 송신하여 세션 유지

Write Parameter는 현재 UI에서 Extended Session일 때만 활성화됩니다.

5. Write Parameter

WRITE DATA 클릭
  -> Write 팝업 표시
  -> 현재 값 Read
  -> 입력값 타입/범위/스케일 검증
  -> TX Preview 생성
  -> WriteDataByIdentifier 송신
  -> Positive Response 6E DID 확인

🖥️ UI 구성

영역 표시/제어 항목
Connection CAN 연결 상태, 채널, Bitrate, BMS Source(Main/Sub/Waiting)
UDS Control Session 선택/전환, Tester Present 상태, ECU Reset
Cell Data 4개 Cell SOC/SOH/Voltage/Temperature
Pack Summary Pack SOC, Pack Voltage, Avg Temp, Pack Current
Vehicle Status BMS Mode, Charging, Contactor, Balancing, Thermal, Operation, Fault
DTC List DTC Code, Status, 설명
Log CAN TX/RX, UDS 응답, 오류/Timeout 로그
Write Parameter 제어/임계값 Write, TX Preview, 현재값 조회

🚀 설치 및 실행 가이드

필요 환경

항목 설명
OS Windows
.NET SDK 프로젝트 Target Framework와 호환되는 .NET SDK (net10.0-windows)
IDE Visual Studio 또는 dotnet CLI
CAN 장비 PEAK PCAN-USB
Driver/Library PEAK PCAN Driver, Peak.PCANBasic.NET NuGet package
대상 ECU Main/Sub BMS 또는 TC375 기반 데모 ECU

실행

git clone https://github.com/EVThunder/UDS_Tool.git
cd UDS_Tool

dotnet restore .\FirstUI\FirstUI.csproj
dotnet build .\FirstUI\FirstUI.csproj
dotnet run --project .\FirstUI\FirstUI.csproj

Visual Studio에서는 FirstUI.slnx를 열고 FirstUI 프로젝트를 시작 프로젝트로 지정한 뒤 실행하면 됩니다.

⚙️ 기본 설정 위치

설정 파일 현재값
PCAN Channel Form1.cs PCAN_USBBUS1
Bitrate Form1.cs PCAN_BAUD_125K
UDS Request ID CanTpFrame.cs 0x700
Main Response ID CanTpFrame.cs 0x701
Sub Response ID CanTpFrame.cs 0x711
CAN Data Length CanTpFrame.cs 8
Multi Frame Buffer CanTpReceiver.cs 4096 byte
DID Timeout Form1.cs 1500 ms
Write Catalog BmsWriteCatalog.cs Write 가능 항목/범위/스케일

🔧 개발 및 테스트

빌드 확인

dotnet build .\FirstUI\FirstUI.csproj

수동 통신 체크리스트

No 시험 항목 사전 조건 송신/조작 기대 결과
1 PCAN 연결 PCAN-USB 연결, USBBUS1, 125K CONNECT Status Connected
2 Main Snapshot Main BMS 정상 22 F3 10 RX 0x701 Multi Frame, Main 값 갱신
3 Sub Snapshot Main Fault, Sub Backup 22 F3 10 RX 0x711, Sub 값 갱신
4 Extended Session CAN Connected 10 03 50 03, Tester Present ACTIVE
5 Tester Present Extended Session 3E 80 응답 생략 또는 7E 80
6 DTC Read Fault 발생 상태 19 02 FF DTC List 갱신
7 DTC Clear DTC 존재 14 FF FF FF DTC List Clear
8 Write Charge Enable Extended Session 2E F4 10 01 6E F4 10, Write OK
9 Baudrate mismatch ECU와 툴 Baudrate 불일치 Read DID Timeout 로그

Releases

No releases published

Packages

 
 
 

Contributors

Languages