docs: Add comprehensive V2G message implementation analysis
- Complete analysis of original C program message format support - VC2022 and dotnet version implementation status comparison - Clean output implementation documentation - Message priority recommendations for ISO 15118-2 compliance Analysis shows: ✅ CurrentDemandReq/Res fully implemented in all versions 📋 17 additional message types have structures but need XML parsing logic 🎯 8 core messages identified as high priority for DC charging compliance 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
94
docs/final_comparison_clean.md
Normal file
94
docs/final_comparison_clean.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# V2G EXI Decoder - 최종 Clean Output 비교 결과
|
||||
|
||||
## 요구사항 달성 상태
|
||||
|
||||
✅ **VC2022 버전 완성**
|
||||
- ✅ -decode 옵션: 순수 XML만 출력 (디버그 메시지 제거)
|
||||
- ✅ -encode 옵션: 순수 hex string 출력 (디버그 메시지 제거)
|
||||
- ✅ Usage 메시지: dotnet 버전과 동일한 형식
|
||||
- ✅ 모든 샘플 파일(test1-5.exi) 테스트 완료
|
||||
|
||||
## VC2022 버전 테스트 결과
|
||||
|
||||
### -decode 테스트
|
||||
모든 샘플에 대해 순수 XML만 출력:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ns1:V2G_Message xmlns:ns1="urn:iso:15118:2:2013:MsgDef" xmlns:ns2="urn:iso:15118:2:2013:MsgHeader" xmlns:ns3="urn:iso:15118:2:2013:MsgBody" xmlns:ns4="urn:iso:15118:2:2013:MsgDataTypes">
|
||||
<ns1:Header><ns2:SessionID>4142423030303831</ns2:SessionID></ns1:Header>
|
||||
<ns1:Body>...</ns1:Body>
|
||||
</ns1:V2G_Message>
|
||||
```
|
||||
|
||||
### -encode 테스트
|
||||
모든 라운드트립에 대해 순수 hex string만 출력:
|
||||
```
|
||||
# test1.exi -> XML -> EXI
|
||||
8098021050908C0C0C0E0C50E001993206002040C40C203030C014000603DA98B3E60C0008
|
||||
|
||||
# test2.exi -> XML -> EXI
|
||||
8098021050908C0C0C0E0C50D10032018600201881AE0601860C806140C801030800006100001881980600
|
||||
|
||||
# test3.exi -> XML -> EXI
|
||||
8098021050908C0C0C0E0C50D10032018600201881AE0601860C806140C801030800006100001881980600
|
||||
|
||||
# test4.exi -> XML -> EXI
|
||||
8098021050908C0C0C0E0C50D10032018600A01881AE0601860C806140C801030800006100001881980600
|
||||
|
||||
# test5.exi -> XML -> EXI
|
||||
8098021050908C0C0C0E0C50D10032018600201881AE0601860C806140C801030800006100001881980600
|
||||
```
|
||||
|
||||
### Usage 메시지 (옵션 없이 실행)
|
||||
```
|
||||
Usage: V2GDecoder [-debug] [-decode|-encode] input_file
|
||||
V2GDecoder [-debug] -encode (read XML from stdin)
|
||||
V2GDecoder [-debug] -decode (read hex string from stdin)
|
||||
Enhanced EXI viewer with XML conversion capabilities
|
||||
-debug Enable detailed bit-level encoding/decoding output
|
||||
-decode Convert EXI to Wireshark-style XML format
|
||||
-decode Read hex string from stdin (echo hex | V2GDecoder -decode)
|
||||
-encode Convert XML to EXI format
|
||||
-encode Read XML from stdin (type file.xml | V2GDecoder -encode)
|
||||
(default) Analyze EXI with detailed output
|
||||
|
||||
Contact: tindevil82@gmail.com
|
||||
```
|
||||
|
||||
## 구현 방법
|
||||
|
||||
### DEBUG_PRINTF 매크로 활용
|
||||
기존 코드의 `DEBUG_PRINTF` 매크로를 활용하여 모든 디버그 출력을 조건부로 변경:
|
||||
|
||||
```c
|
||||
// 변경 전
|
||||
printf("DEBUG: argc=%d\\n", argc);
|
||||
fprintf(stderr, "EVReady: %s\\n", ...);
|
||||
|
||||
// 변경 후
|
||||
DEBUG_PRINTF(("DEBUG: argc=%d\\n", argc));
|
||||
DEBUG_PRINTF(("EVReady: %s\\n", ...));
|
||||
```
|
||||
|
||||
### 조건부 디버그 모드
|
||||
- `EXI_DEBUG_MODE`가 활성화된 경우에만 디버그 출력
|
||||
- -debug 플래그로 사용자가 원할 때만 상세 출력 활성화
|
||||
- -decode/-encode 전용 모드에서는 완전히 깨끗한 출력
|
||||
|
||||
## 결론
|
||||
|
||||
✅ **목표 달성**: VC2022 버전이 dotnet 버전과 동일하게 깨끗한 출력을 제공합니다.
|
||||
✅ **호환성**: 두 버전 모두 동일한 XML 출력 및 EXI 인코딩 결과
|
||||
✅ **사용자 경험**: -decode/-encode 옵션에서 "쓸데없는 메시지" 완전 제거
|
||||
✅ **유연성**: -debug 옵션으로 필요시 상세 분석 가능
|
||||
|
||||
## 빌드 및 실행
|
||||
```bash
|
||||
# 빌드
|
||||
cd Port/vc2022
|
||||
./build.bat
|
||||
|
||||
# 사용
|
||||
V2GDecoder.exe -decode sample/test5.exi
|
||||
V2GDecoder.exe -debug -decode sample/test5.exi # 디버그 정보 포함
|
||||
```
|
||||
102
docs/message_implementation_status_report.md
Normal file
102
docs/message_implementation_status_report.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# V2G EXI Decoder - 메시지 구현 상태 최종 리포트
|
||||
|
||||
## 구현 상태 요약
|
||||
|
||||
### ✅ 완전 구현된 메시지 (모든 버전)
|
||||
| 메시지 타입 | 오리지널 C | VC2022 | dotnet | 비고 |
|
||||
|------------|-----------|---------|--------|------|
|
||||
| CurrentDemandReq | ✅ | ✅ | ✅ | XML파싱/생성, EXI인코딩/디코딩 완료 |
|
||||
| CurrentDemandRes | ✅ | ✅ | ✅ | XML파싱/생성, EXI인코딩/디코딩 완료 |
|
||||
|
||||
### 📋 구조체는 있지만 로직 미구현 (높은 우선순위)
|
||||
|
||||
#### DC 충전 필수 메시지들
|
||||
| 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 |
|
||||
|------------|-----------|---------|--------|-------------------|
|
||||
| CableCheckReq/Res | ❌ | 📋 | 📋 | **필수** - DC 충전 시작 전 케이블 절연 확인 |
|
||||
| PreChargeReq/Res | ❌ | 📋 | 📋 | **필수** - DC 충전 시작 전 사전충전 |
|
||||
| WeldingDetectionReq/Res | ❌ | 📋 | 📋 | **필수** - DC 충전 종료 후 용접 검출 |
|
||||
|
||||
#### 전력 제어 메시지
|
||||
| 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 |
|
||||
|------------|-----------|---------|--------|-------------------|
|
||||
| PowerDeliveryReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 시작/중지 제어 |
|
||||
|
||||
#### 세션 관리 메시지
|
||||
| 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 |
|
||||
|------------|-----------|---------|--------|-------------------|
|
||||
| SessionSetupReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 세션 설정 |
|
||||
| SessionStopReq/Res | ❌ | 📋 | 📋 | 권장 - 충전 세션 종료 |
|
||||
|
||||
#### 서비스 검색 메시지
|
||||
| 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 |
|
||||
|------------|-----------|---------|--------|-------------------|
|
||||
| ServiceDiscoveryReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 서비스 검색 |
|
||||
| ServiceDetailReq/Res | ❌ | 📋 | 📋 | 선택적 - 서비스 상세 정보 |
|
||||
|
||||
#### 인증 및 결제 메시지
|
||||
| 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 |
|
||||
|------------|-----------|---------|--------|-------------------|
|
||||
| AuthorizationReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 권한 확인 |
|
||||
| ChargeParameterDiscoveryReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 매개변수 교환 |
|
||||
| PaymentServiceSelectionReq/Res | ❌ | 📋 | 📋 | **필수** - 결제 서비스 선택 |
|
||||
| PaymentDetailsReq/Res | ❌ | 📋 | 📋 | 조건부 필수 - PnC 시 필요 |
|
||||
|
||||
#### AC 충전 메시지
|
||||
| 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 |
|
||||
|------------|-----------|---------|--------|-------------------|
|
||||
| ChargingStatusReq/Res | ❌ | 📋 | 📋 | AC 충전시 필수 |
|
||||
|
||||
#### 계량 및 인증서 메시지
|
||||
| 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 |
|
||||
|------------|-----------|---------|--------|-------------------|
|
||||
| MeteringReceiptReq/Res | ❌ | 📋 | 📋 | 선택적 - 계량 영수증 |
|
||||
| CertificateUpdateReq/Res | ❌ | 📋 | 📋 | 선택적 - 인증서 업데이트 |
|
||||
| CertificateInstallationReq/Res | ❌ | 📋 | 📋 | 선택적 - 인증서 설치 |
|
||||
|
||||
## 상태 기호 설명
|
||||
- ✅ **완전 구현**: XML 파싱/생성 + EXI 인코딩/디코딩 + 테스트 완료
|
||||
- 📋 **구조체만 존재**: EXI 구조체 정의되어 있으나 XML 파싱/생성 로직 미구현
|
||||
- ❌ **미구현**: 구조체는 있지만 실제 처리 로직 없음
|
||||
|
||||
## 기술적 발견사항
|
||||
|
||||
### 1. dotnet 버전의 구조적 우위
|
||||
- **다중 표준 지원**: ISO1, ISO2, DIN 표준별 구조체 분리
|
||||
- **확장성**: 새 메시지 타입 추가가 용이한 구조
|
||||
- **타입 안정성**: C# 강타입 시스템의 장점
|
||||
|
||||
### 2. VC2022 버전의 현황
|
||||
- **구조체 완성도**: 모든 ISO1 메시지 구조체 포함
|
||||
- **디버그 인프라**: DEBUG_PRINTF 시스템으로 일관성 유지
|
||||
- **C 호환성**: 오리지널 C 코드와 완전 호환
|
||||
|
||||
### 3. 오리지널 C 코드의 한계
|
||||
- **단일 메시지 집중**: CurrentDemand 메시지에만 특화
|
||||
- **확장성 부족**: 새 메시지 추가가 복잡함
|
||||
- **기본 인프라**: EXI 인코딩/디코딩 엔진은 완성도 높음
|
||||
|
||||
## 개발 우선순위 권장사항
|
||||
|
||||
### Phase 1 (최고 우선순위): DC 충전 핵심 4개 메시지
|
||||
1. **CableCheckReq/Res** - 케이블 절연 상태 확인
|
||||
2. **PreChargeReq/Res** - 사전 충전 전압 매칭
|
||||
3. **WeldingDetectionReq/Res** - 충전 종료 후 용접 검출
|
||||
4. **PowerDeliveryReq/Res** - 충전 시작/중지 제어
|
||||
|
||||
### Phase 2 (높은 우선순위): 세션 및 서비스
|
||||
5. **SessionSetupReq/Res** - 세션 설정
|
||||
6. **ServiceDiscoveryReq/Res** - 서비스 검색
|
||||
7. **ChargeParameterDiscoveryReq/Res** - 충전 매개변수
|
||||
8. **AuthorizationReq/Res** - 권한 확인
|
||||
|
||||
### Phase 3 (중간 우선순위): 결제 및 확장
|
||||
9. **PaymentServiceSelectionReq/Res** - 결제 서비스
|
||||
10. **ChargingStatusReq/Res** - AC 충전 상태
|
||||
11. **SessionStopReq/Res** - 세션 종료
|
||||
|
||||
## 결론
|
||||
|
||||
현재 V2G EXI Decoder는 **기본적인 DC 충전 인프라**(CurrentDemand)는 완성되어 있으나, **완전한 ISO 15118-2 호환성**을 위해서는 **최소 8개의 핵심 메시지 구현**이 추가로 필요합니다.
|
||||
|
||||
다행히 VC2022와 dotnet 버전에는 모든 메시지의 구조체가 준비되어 있어, **XML 파싱/생성 로직**만 추가하면 빠른 구현이 가능한 상태입니다.
|
||||
92
docs/v2g_message_support_analysis.md
Normal file
92
docs/v2g_message_support_analysis.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# V2G EXI Decoder - 메시지 타입 지원 현황 분석
|
||||
|
||||
## 오리지널 C 프로그램이 지원하는 메시지 타입 (우선순위 순)
|
||||
|
||||
### 1. 세션 관리 메시지 (Session Management)
|
||||
1. **SessionSetupReq/Res** - 충전 세션 설정
|
||||
2. **SessionStopReq/Res** - 충전 세션 종료
|
||||
|
||||
### 2. 서비스 검색 및 선택 (Service Discovery & Selection)
|
||||
3. **ServiceDiscoveryReq/Res** - 사용 가능한 충전 서비스 검색
|
||||
4. **ServiceDetailReq/Res** - 특정 서비스 상세 정보 요청
|
||||
5. **PaymentServiceSelectionReq/Res** - 결제 방식 및 서비스 선택
|
||||
|
||||
### 3. 인증 및 권한 (Authentication & Authorization)
|
||||
6. **AuthorizationReq/Res** - 충전 권한 확인
|
||||
7. **PaymentDetailsReq/Res** - 결제 정보 교환
|
||||
|
||||
### 4. 충전 매개변수 검색 (Charge Parameter Discovery)
|
||||
8. **ChargeParameterDiscoveryReq/Res** - 충전 매개변수 교환
|
||||
|
||||
### 5. DC 충전 특화 메시지 (DC Charging Specific) - 핵심 구현 필요
|
||||
9. **CableCheckReq/Res** ❌ - 케이블 연결 상태 확인 (미구현)
|
||||
10. **PreChargeReq/Res** ❌ - 사전 충전 (미구현)
|
||||
11. **CurrentDemandReq/Res** ✅ - 전류 요구사항 (구현됨)
|
||||
12. **WeldingDetectionReq/Res** ❌ - 용접 검출 (미구현)
|
||||
|
||||
### 6. AC 충전 특화 메시지 (AC Charging Specific)
|
||||
13. **ChargingStatusReq/Res** ❌ - AC 충전 상태 (미구현)
|
||||
|
||||
### 7. 전력 전달 제어 (Power Delivery Control)
|
||||
14. **PowerDeliveryReq/Res** ❌ - 전력 전달 제어 (미구현)
|
||||
|
||||
### 8. 계량 및 수납 (Metering & Billing)
|
||||
15. **MeteringReceiptReq/Res** ❌ - 계량 영수증 (미구현)
|
||||
|
||||
### 9. 인증서 관리 (Certificate Management)
|
||||
16. **CertificateUpdateReq/Res** ❌ - 인증서 업데이트 (미구현)
|
||||
17. **CertificateInstallationReq/Res** ❌ - 인증서 설치 (미구현)
|
||||
|
||||
## 현재 구현 상태 요약
|
||||
|
||||
### ✅ 구현된 메시지 (오리지널 C)
|
||||
- **CurrentDemandReq** - 완전 구현 (XML 파싱/생성, EXI 인코딩/디코딩)
|
||||
- **CurrentDemandRes** - 완전 구현 (XML 파싱/생성, EXI 인코딩/디코딩)
|
||||
|
||||
### ❌ 미구현 메시지 (필수 DC 충전 메시지들)
|
||||
1. **CableCheckReq/Res** - DC 충전 시작 전 케이블 절연 상태 확인
|
||||
2. **PreChargeReq/Res** - DC 충전 시작 전 사전충전으로 전압 매칭
|
||||
3. **WeldingDetectionReq/Res** - DC 충전 종료 후 용접 상태 확인
|
||||
4. **PowerDeliveryReq/Res** - 충전 시작/중지 명령
|
||||
|
||||
## 권장 구현 순서 (C → VC → dotnet)
|
||||
|
||||
### Phase 1: DC 충전 핵심 메시지 (높은 우선순위)
|
||||
1. **CableCheckReq/Res** - ISO 15118-2 DC 충전 필수 메시지
|
||||
2. **PreChargeReq/Res** - ISO 15118-2 DC 충전 필수 메시지
|
||||
3. **WeldingDetectionReq/Res** - ISO 15118-2 DC 충전 필수 메시지
|
||||
|
||||
### Phase 2: 전력 제어 메시지 (중간 우선순위)
|
||||
4. **PowerDeliveryReq/Res** - 충전 흐름 제어를 위한 필수 메시지
|
||||
|
||||
### Phase 3: 세션 관리 메시지 (중간 우선순위)
|
||||
5. **SessionSetupReq/Res** - 세션 시작
|
||||
6. **SessionStopReq/Res** - 세션 종료
|
||||
|
||||
### Phase 4: 서비스 검색 메시지 (낮은 우선순위)
|
||||
7. **ServiceDiscoveryReq/Res**
|
||||
8. **ChargeParameterDiscoveryReq/Res**
|
||||
|
||||
## 기술적 고려사항
|
||||
|
||||
### XML 패턴 인식
|
||||
- 각 메시지 타입별로 XML 태그 패턴 인식 로직 필요
|
||||
- 네임스페이스 처리 (`<ns3:CableCheckReq>` 형식)
|
||||
|
||||
### EXI 인코딩/디코딩
|
||||
- ISO1 EXI 구조체 매핑
|
||||
- 비트스트림 정확한 처리
|
||||
|
||||
### 구조체 초기화
|
||||
- 각 메시지별 `init_iso1*Type()` 함수 활용
|
||||
- `_isUsed` 플래그 올바른 설정
|
||||
|
||||
### VC2022 포팅 고려사항
|
||||
- DEBUG_PRINTF 매크로 일관성 유지
|
||||
- 기존 코드 스타일 준수
|
||||
- Windows 특화 빌드 설정
|
||||
|
||||
### dotnet 포팅 고려사항
|
||||
- C# 클래스 구조체 변환
|
||||
- 메모리 관리 차이점 고려
|
||||
- .NET Core 호환성
|
||||
Reference in New Issue
Block a user