응급 수동 보정(FIQ-*.QV를 addr=0/realtime=false로 keep 분류)은 이제 불필요.
빌더가 AnalogPoint 보조슬롯에서 FIQ-*.QV를 실제 주소·realtime=TRUE·archive=TRUE로
생성하므로 map 재빌드/--db-conn 적용 시 자동 분류·폴링된다. 이력 보존용으로만 유지.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
이전(PR#5)은 비루프 AnalogPoint에만, 또 realtime=False로 보조를 넣어 적산 QV가
크롤러 폴링집합(is_active AND realtime_enabled)에서 빠져 라이브로 흐르지 않았다.
- is_analog 판정을 분기 앞으로 올려 모든 AnalogPoint(루프 포함)에 보조 처리 적용.
루프 엔트리와 겹치면 seen_tags가 중복 흡수.
- 슬롯명 있는 A1~A4를 일반적으로 모두 어드레싱(공백 슬롯만 제외).
- realtime 기본값(True) 사용 → 보조도 폴링 대상. QV=연속 누적값만 archive 유지.
- FlexibleParameter(사용자정의)는 기존대로 realtime=False(폴링 제외) 유지.
맵 재생성(c1~c4): 순수 추가. C3 +6(FICQ-8118/LICA-5113 GAIN/RATE/RESET 등 루프
보조 누락분), 리포트 스팀적산 FIQ-*.QV 전부 포함, 제거 0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
FIQ 류 적산기는 QV(적산)가 FlexibleParameter가 아니라 AnalogPoint 보조슬롯
(AuxiliaryNameA{n}=QV ↔ SourceAddressA{n})에 노출된다. 빌더는 FlexibleParameter
에서만 .QV를 만들어 FICQ-*.QV는 잡았지만 FIQ-*.QV(스팀 적산 등)를 전부 놓쳤다.
→ 리포트(energy_intensity_qv 등)가 의존하는 태그가 register-map/map_master에서
누락되어 archive 기준 '삭제대상'으로 오분류, 라이브 폴링도 안 됐음.
AnalogPoint else 분기에 보조 A1~A4 처리 추가: 이름 있는 보조슬롯을 실제
SourceAddress로 해석해 {item}.{AuxName} 엔트리 생성, QV=연속 누적값→archive=TRUE.
realtime=False(기존 .QV/FlexibleParameter와 동일 정책).
검증(dry build): C3 FIQ-6115/6215/8115.QV, C4 FIQ-9115/9215/10115/10215.QV 등이
실제 주소(8390 등)·archive=true로 생성. 커밋맵 대비 순수 추가(제거 0).
→ map 재빌드 시 keep 분류 자동 유지 + 라이브 적산 폴링 가능.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- report_template에 schedule_enabled/period/hour/source 컬럼(ALTER IF NOT EXISTS,
p0_report.sql + 서비스 EnsureSchema 멱등).
- Hc900ReportScheduleService: 매 N초 활성 템플릿마다 완료된 기간(anchor)을
lookback 내 산출 → report_run 성공기록 없으면 FillAsync 생성·기록.
중복 0(HasSuccessfulRun dedup)·다운타임 자동복구. 윈도는 셀 토큰 period=가 결정.
- IReportTemplateStore.UpdateSchedule/HasSuccessfulRun, ListAsync에 스케줄 컬럼.
- PUT /api/report/template/{id}/schedule (period/hour 검증).
- UI: 목록에 스케줄 상태 표시 + 선택 템플릿 스케줄 편집기.
- appsettings Report:Schedule (간격·catchup) 추가.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
온라인 히스토리안 1계층 — 디스크 상한 고정 1초 버퍼.
- history_1s Timescale 하이퍼테이블(1h 청크) + 압축(6h) + 보존 14일(청크DROP, 디스크 상한 고정).
- Hc900FastHistoryService: 매 1초 realtime_table 큐레이션 태그 → history_1s append.
기동 시 스키마/정책 멱등 생성. Hc900HistoryService(60s) 패턴.
- ReportColumnMap.HistorianTags(): 메트릭/마스크가 읽는 태그를 기존 config에서 유도(~105개,
중복정의 없음) — 유량 .PV/.QV, 진공, 민감단 TC, 하부루프 .PV/.SP/.OP.
- Report:Historian config(Enabled/IntervalSeconds/RetentionDays).
검증: 라이브 초당 ~38행 append, 샘플 간격 ~1.004s, 보존/압축 정책 활성.
주의(데모): realtime 폴링이 areas 61/62/81만 커버 → 1s 버퍼도 해당 컬럼만(배포 시 전 컨트롤러).
1s 버퍼 주 가치는 .PV/.OP 동특성; .QV 적산은 60s로도 정확.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 제품 라벨(P0/P1)에 MSDS 화학물질명(PMA/PGMEA/EL) 매핑 레이어 추가
(product_labels.json, 플랜트=컬럼별). 통계 기준밴드는 데이터 산출 유지
- 운전원용 ⚙제품명 설정 모달: GET/POST /api/steam/productlabels/{col}
- 온도기반 자동매칭 폐지 → 운전원이 고른 제품만 기준밴드로 비교, 미선택 시작
- 드롭다운: 탭 진입/컬럼변경 시 즉시 채움, 선택은 플랜트별 localStorage 유지
- 중복 '제품(수동)' 배지 제거(헤더 줄바꿈 해소)
- 설계·검수 문서 추가
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- daily_report.py: 지정 기간 일별 운전값(피드·스팀·비율·온도) + 생산맵 예측품질
(predOP_MAE·within2%·OOD) 표. --prefix/--asset/--start/--end/--train-end.
6-2차 4~5월 검증: 신뢰구간 OP MAE 0.89%, 고부하(OOD) 외삽으로 최대 -10%.
- run_column.py: 10차(101/102)는 본 dump 창 대부분 시운전(PROD 2~6%) 주석.
2026-06 생산 진입 → 데이터 누적/최신 dump 재반입 시 정상 분석 대상.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
10차는 리보일러 레벨이 LI-10111이 아니라 LIA-10111(10-1)/LIA-10211(10-2).
기존 예외가 이를 reflux_drum으로 잘못 라벨 → 정정:
- reb_level → LIA-10111/LIA-10211 (사용자 확정)
- reflux_drum → base 규칙 LICA-10113/LICA-10213 (실존, 리플럭스 드럼)
검증: 8개 컬럼 전부 16/16 해석(5차는 T_C=TI-5111B 대체로 T_B와 공유).
참고: reb_level·reflux_drum은 현재 FEATURES·startup 미사용(수집만).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
run_column.py 실행목록에 빠졌던 컬럼 보완 — 전체 8개 측류 솔벤트 컬럼 커버:
- 5차(51/P5) 신규 추가: 완전 누락이었음. 민감단 TI-5111C 센서 부재(A/B/D만)
→ COLUMN_EXCEPTIONS["51"]에서 T_C를 TI-5111B로 대체(사용자 확정).
- 9-2(92), 10-2(102) 추가: COLUMN_EXCEPTIONS엔 있었으나 COLUMNS 실행목록 누락.
검증: 8개 컬럼 핵심 FEATURES 전부 해석 OK, 5차·9-2 추출 스모크 정상(336519행).
(플랜트8은 단일 train=81, 8-2 없음 확인.)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- register-map.json 재생성 (C3: 328→1974 registers)
- .PV/.SP/.OP 등 suffix 추가, write_addr 필드 도입
- LOOP_LAYOUT 기반 고정 레이아웃 전개 + 명명되지 않은 레지스터 보존
- FC16 쓰기를 위한 write_addr 분리 (.MD는 LOOPSTAT 읽기/MODEIN 쓰기)
- build_register_map_from_sinam.py 리팩터
- --controller 인자 추가 (C3/C4/C5 복수 컨트롤러 지원)
- --validate-csv 옵션 추가 (HC Designer CSV 교차검증)
- tag명 대문자 유지 (ToLower 금지)
- 출력 경로 Path 객체 사용
- gateway-config.json: C1-C4 컨트롤러 설정 추가
Honeywell HC900을 Modbus TCP로 직접 폴링 → gRPC → C# 크롤러 → PostgreSQL.
기존 Experion OPC UA 데이터 경로를 HC900 직접 통신으로 대체.
- industrial-comm/cpp: C++ Modbus 게이트웨이 (gRPC 서버)
- src: C# .NET 8 ASP.NET Core 크롤러 + 웹 UI (3-Layer)
- mcp-server: Python FastMCP (RAG/NL2SQL/P&ID)
- 다중 컨트롤러(N-Controller) 지원
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>