Files
HECO2/doc/260602_소스_개발사양서_260520.md
T
jeon a502322188 chore: HERV 통합 저장소 재초기화 커밋
손상된 .git 히스토리(missing tree)로 재초기화 후 작업트리 전체 커밋.
.claude/ 만 제외(로컬 에이전트 설정). 구 저장소 백업(.git_corrupt_backup/) 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 09:32:17 +09:00

117 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 소스 ↔ 개발사양서 비교 분석 (260520)
- **작성일**: 2026-06-02
- **대상 사양서**: `각실제어시스템_개발사양서_DL_동작로직_260520.pptx` (2026.05.20, 전경선 수석)
- **대상 소스**: `d:\project\nuvoton\HERV\program\User\` (Nuvoton NANO100SE3BN, arm-gnu-gcc 빌드)
- **시스템**: 각실제어 시스템(DL) — ERV 본체 + 각실 디퓨저(거실=room1, 침실1~3=room2~4)
- **연관 문서**: `260602_소스_개발사양서_260318.md`
> 검증 방식: 핵심 항목(자동모드 풍량 산출, 쾌적조리, 스마트수면)은 소스 직접 확인.
---
## 0. 260318 → 260520 주요 변경점
- 이력관리에 **"2026.05.20 동작로직 수정 (26.04.28 DL 자료 기반) (9~10P)"** 추가
- **자동모드 로직 전면 개편** (슬라이드9~10):
- 부하점수(Score) 기반 풍량 단수 결정
- Eco / Normal / Turbo 모드별 임계값 (3세트)
- **4종 센서** (CO2 / PM2.5 / PM10 / VOC) — PM10 추가
- **거실 가중치 및 P_max 강제보상 삭제** → 점수 기반으로 직관적 동작
- 히스테리시스(데드밴드) 모드·센서별 정의
- 용어 변경: 전실모드 → **분산모드**, 집중급기 → **집중모드**
- 배선도: 각실분배기 PBA가 휴벤ECO에 부착, AC전원 2구 필요
---
## 1. ✅ 일치 (260318과 동일 유지)
| 항목 | 사양(260520) | 코드 | 위치 |
|---|---|---|---|
| 집중/분산 판정 | dP = P_max P_2nd ≥ 2 → 집중, 아니면 분산, P_max=0 → 전체 OFF | `(vars[0].value - vars[1].value) >= 2` (qsort 내림차순) | `My_system.c:972, 1080` |
| 집중 시 댐퍼 | P_max 실만 ON(100%), 나머지 OFF | Focus_Mode 시 Focus_Room만 110, 타실 0 | `My_system.c:1126~` |
| 안심회복 | 침실1 음압(급기X/배기O), 환기 2단 | 선택실 SA=0/RA=110, 타실 SA=110/RA=0, Fan=2 | `My_system.c:732-770` |
| 공청 PM2.5 단계 | 0~14정지 / 15~29 / 30~49 / 50~69 / 70~ | `m_PM2_5_Level` 15/30/50/70 | `My_Uart.c:1323-1326` |
| 풍량 CMH | 환기 100/150/200/250, 공청 80/100/120/150, 바이패스 150 | 단계 구조 동일, 공청 EA팬 OFF | `MyMotor.c:1294-1307` |
| 디퓨저 LED | 댐퍼 1개라도 열리면 ON, 0~9 디밍, 단색 | SA\|RA≠0 → ON, `Light_Bright` 0~9 | `My_system.c:714-724` |
| 팬 VSP(환기 1~3단) | 1단 EA56/SA57, 2단 61/63, 3단 67/69 | `s_FAN*_VEN_*` 동일 | `MyControl.c:124-152` |
---
## 2. ❌ 핵심 불일치 — 자동모드 로직(26.04.28 개정) 미반영
현재 코드는 **개정 전(점수기반 이전) 로직**으로, 사양이 삭제하라고 명시한 P_max 기반 동작이 남아 있음.
### 2.1 풍량 단수 산출 방식 상이 (가장 큰 차이)
- **사양 260520**: 부하점수 Score = 4실 Level 합산(0~16) →
**0: OFF / 1~4: 1단 / 5~8: 2단 / 9~12: 3단 / 13~16: 4단**
- **코드 현재**:
- 분산: `Tmp_Air_Volume = 4실 합산``if(>=4) =4` (= min(합,4)) — `My_system.c:935, 948`
- 집중: `Tmp_Air_Volume = vars[0].value` (= P_max) — `My_system.c:1082`
| 예시 (Score) | 사양 최종단수 | 코드 최종단수 |
|---|---|---|
| 합 3 (1,1,1,0) 분산 | 1단 | **3단** |
| 합 6 (2,2,1,1) 분산 | 2단 | **4단(cap)** |
| 침실 단독 4 (집중) | 1단 | **4단(P_max)** |
| 합 16 (4,4,4,4) | 4단 | 4단 |
→ 슬라이드10 QA 진리표(7개 케이스)로 유닛 테스트 검증 필요.
### 2.2 Eco / Normal / Turbo 모드별 임계값 미구현
- 사양: 모드별 CO2/PM2.5/PM10/VOC 임계표 3세트
(예: Normal CO2 0~700 / 701~1000 / 1001~1300 / 1301~1600 / 1601~)
- 코드: 단일 임계값 `m_*_Level`(CO2 600/700/800/900) 한 세트, 모드 분기 없음
### 2.3 4종 센서 중 PM10 미사용
- 사양: CO2 / PM2.5 / PM10 / VOC **4종**으로 Level 산출
- 코드: `room_CVP_quality = CO2 | VOC | PM2.5` (3종). `SEN66_pm10p0`는 수신만 하고 Level 계산에 미사용 — `My_system.c:890`
### 2.4 히스테리시스(데드밴드) 부분 적용
- 사양: 모드·센서별 하강 데드밴드 (CO2 50, PM2.5 2, PM10 5, VOC 5/3)
- 코드: **CO2만** `CO2_Histeresys=50` 적용, PM2.5/PM10/VOC 없음 — `My_system.c:673`
---
## 3. ❌ 260318부터 이어진 미반영 (260520에서도 동일)
| 항목 | 사양 260520 | 코드 | 위치 |
|---|---|---|---|
| 쾌적조리 ERV 풍량 | **3단** (각실 급기만 ON) | `Tmp_Air_Volume = 4` (4단), `Set_Run_Mode = MODE_AUTO` | `My_system.c:1026, 1030` |
| 스마트수면 | 1단 고정 / 초기 거실 CLOSE·침실 OPEN / 1시간마다 CO2≥1000 OPEN | 구버전 "자동−1", 전용 댐퍼·CO2 1시간 로직 없음 | `My_system.c:1191-1200` |
| 공기질 색상등급 | (구성 변경) | `Air_Quality_color_process()` `return(0)` dead code | `My_system.c:1216` |
---
## 4. ⚠️ 확인 필요 (변동 없음)
- 팬 VSP 4단: 코드 SA87/EA84 vs 사양(슬라이드11·12) SA86/EA85 (실측 기반) → EEPROM 저장값 확인 권장
- 센서/제어 주기: 사양 "매 제어 주기(예 1분)" (슬라이드10) vs 코드 분배기 폴링 1초
---
## 5. 결론
260520의 핵심 개정(**자동모드 점수기반 풍량 + Eco/Normal/Turbo + PM10 + 모드별 히스테리시스**)은 현재 소스에 **거의 미반영** 상태.
다만 **집중/분산 판정(dP≥2) 및 댐퍼 개폐 패턴**은 이미 일치하므로, "풍량 단수 결정 로직"을 점수기반(Score 테이블 매핑)으로 교체하는 것이 핵심 작업.
### 후속 작업 후보(TODO)
1. 자동모드 풍량을 **Score(0~16) → 단수(0/1/2/3/4)** 테이블 매핑으로 교체 (P_max·cap 방식 제거)
2. Eco/Normal/Turbo 모드별 임계표 도입 (현재 단일 `m_*_Level` → 3세트)
3. PM10(`SEN66_pm10p0`) Level 산출 반영 (3종 → 4종)
4. PM2.5/PM10/VOC 히스테리시스 추가
5. 쾌적조리 3단 수정, 스마트수면 26.03.18 로직 구현
6. 슬라이드10 QA 진리표(7케이스) 기반 검증
---
## 부록. 주요 소스 위치
| 파일 | 역할 |
|------|------|
| `My_system.c` | 자동모드 풍량 산출(`Air_Quality_damper_process`), 집중/분산, 시나리오 모드(`Ext_Run_Mode`) |
| `My_Uart.c` | 센서 임계값/기본값, 분배기 파싱(`Diffuser_parsing`), VSP 테스트 |
| `MyMotor.c` | 디퓨저 댐퍼, 팬 속도, BLDC_SPEED_TABLE |
| `MyControl.c` | 팬 duty 기본값 / EEPROM |
| `My_define.h` | 모드·핀·EEPROM 정의 |