31 Commits

Author SHA1 Message Date
windpacer
c7a115c928 fix(builder): AnalogPoint 보조 A1~A4 일반 어드레싱 + 폴링 대상화
이전(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>
2026-06-19 05:20:12 +09:00
windpacer
9d8e0583e7 chore(map): register-map c1~c4 재생성 — 보조 QV(FIQ 적산) 포함
PR #5(빌더 보조 QV 처리)로 재생성. AnalogPoint 보조슬롯의 적산 QV가 실제 주소로
포함됨 → 게이트웨이 재시작 시 라이브 적산 폴링, archive=true.
순수 추가(제거 0): .QV 다수 + 일부 RST/한계값(기존 빌더 드리프트 반영).
리포트 의존 스팀적산 FIQ-6115/6215/8115(C3)·9115/9215/10115/10215(C4) 모두 포함.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 21:53:40 +09:00
windpacer
bb99729e9e chore(report): 디지털잔재정리 문서 폐기 + 리포트 .QV 7개 keep 재분류
- docs/작업지시-history-디지털잔재정리.md: SUPERSEDED 배너(실행 금지).
  2026-06-18 실측 — 삭제대상(비-archive ~2천만)은 디지털 잔재 0, 전부 아날로그
  루프/적산. 특히 .QV는 리포트(history_table)가 의존 → 삭제 시 과거 리포트 파손.
- scripts/sql/report_keep_qv_tags.sql: SteamFlow 적산 FIQ-*.QV 7개를
  archive_enabled=TRUE로 재분류(register-map 누락 보정). realtime/is_active=FALSE
  로 폴링 부작용 0. 멱등(map 재빌드 후 재적용). DB에는 이미 적용.

검증: 리포트 태그 삭제대상 0행, 전체 삭제대상 19.98M→17.62M(2.36M 보호).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 20:42:37 +09:00
windpacer
52defc6a62 docs(report): P1 전환 후 죽은코드 점검 결과 정리 — history_1min 보존·p1_historian.sql 유지 결정
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 11:12:34 +09:00
windpacer
e2b1b8f6e0 docs(report): P1 온라인 히스토리안 스펙 — 1초 링버퍼·연속집계·실시간 KPI/알람
P0 결정론 메트릭(마스크·적산·리셋)의 온라인 확장 스펙. 핵심: 로직이 causal이라
온라인 결과(T) ≡ 배치(시작~T), 로직 변경 없이 스트리밍 가능.

- A. history_1s 1초 링버퍼: Timescale 하이퍼테이블 + 보존정책(14일, 청크DROP) + 압축.
  디스크 = 태그수×윈도×행크기로 상한 고정. 큐레이션 태그(~200) 1초 append.
- B. history_1min 연속집계: evict 전 롤업(집계lag ≪ 보존윈도) → 무손실 장기보존. 2계층.
- C. Hc900LiveKpiService 온라인 누적기: 러닝 상태로 P0와 동일 마스크/양증분/리셋,
  live_kpi 적재, 인과성 동치검증, 버퍼 리플레이 복구.
- D. kpi_alert 실시간 알람: cleaning/drawdown 진입·폐합 베이스라인 이탈(계량드리프트/이송)·생산정지.

큐레이션 태그셋·P0 연계(source 추가)·단계(P1a~d)·수용기준 포함. MVP 문서에 링크.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 18:40:33 +09:00
windpacer
c64bf08aa5 feat(report): cleaning/drawdown 마스크 + 폐합 7컬럼 — 적산 메트릭 비정상운전 제외
적산(.QV) 메트릭이 비정상 운전 분을 포함해 풀기간/월간 집계가 틀어지던 문제 해결.

- 3신호 마스크: (진공 PICA-*.PV>300) OR (제품 FICQ-*18.PV<10) OR (원료 FICQ-*01.PV<10).
  = cleaning(진공깨짐/제품~0) + drawdown(feed~0, 인벤토리 인출/컬럼간 이송) 제외.
- QvDeltaAsync 재작성: 비정상분 제외 후 정상구간 양(+)증분만 합산(cap 5e4).
  리셋 3종 자동처리(999999 wrap·cleaning 리셋·운전조건변경 리셋). excluded_min 메타.
- appsettings Report:Cleaning(컬럼별 진공태그+임계) + Closure 7컬럼 전체 등록.

검증(풀기간 폐합): 마스크 후 6/7 컬럼 99~100% (C-6211 216.8→100.0, C-9111 133.2→99.9,
C-9211 97.8→99.9, C-10211 121.9→99.1). C-10111 91.4%는 C-9111↔C-10111 연결라인
시운전 중 홀드업 축적(정상 비정상상태, KPI가 표시). 라이브: C-9111 일일(04-10) 99.46%,
C-6111 일일(05-15) 99.04% 확인.

현장사실: C-9111↔C-10111 잇는 라인 추가·시운전 중 — C-9111 drawdown 시 인출물이
C-10111 feed로 유입(FICQ-10101 0→~1090, 진공 750→45). 개별 수지 불성립 주원인.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 18:04:13 +09:00
windpacer
30a3286d35 feat(report): 적산(.QV) 정확 메트릭 + 물질수지 폐합 + 웹 대시보드
PV-중앙값 근사 대신 유량 적산(.QV)으로 정확한 적분 메트릭 추가, 웹에서 바로 보기.

- QV 메트릭 4종: production_total·yield_qv·energy_intensity_qv·mass_balance_closure.
  적산 Δ 헬퍼(QvDeltaAsync)는 값 급감(reset/wrap)으로 구간분할 후 구간별 (마지막-처음)
  합산 → gap·양자화 강건, DCS 일일적산과 동일 의미(노이즈 과대계상 없음).
- 매핑은 appsettings SteamAdvisor:Columns 재사용(.QV 치환, 7컬럼). 폐합 스트림은
  Report:Closure:C-6111(Feed + Outputs[제품·경비물·중비물]).
- 웹 대시보드: GET /api/report/columns, /api/report/summary →
  리포트 탭에서 컬럼·날짜 선택 시 물질수지 신뢰블록(IN/OUT/폐합%, 98~101% 색상)
  + 메트릭 표를 즉시 렌더. 엑셀 export와 병존.
- 물리적 타당성 게이트: 수율>1.5·에너지원단위>5·≤0 → no_data+사유(garbage 차단).

검증(2026-05-15 C-6111): 생산 8455kg·수율 0.8739·에너지 0.7791·폐합 99.04%
(feed 9675/out 9582), 17주 폐합 99.1~99.8%. C-9111 garbage 수율 → no_data 처리 확인.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 07:54:34 +09:00
windpacer
37a464ab96 feat(report): P0 셀프서비스 결정론 리포트 — 메트릭 3종·엑셀 토큰 채움·fastRecord 소스
운전원이 올린 엑셀 템플릿의 {{ metric=...; column=... }} 토큰을, 선택한 날짜의
결정론 계산값으로 채워 다운로드하는 셀프서비스 리포트 레이어(P0).

- 메트릭 3종: energy_efficiency·yield·control_residual (분 버킷 피벗, 클린필터,
  KST→UTC 경계). history_table(60s)·fast_record(s/min) 동일 long 포맷이라 source만 교체.
- 컬럼→태그 매핑은 기존 appsettings SteamAdvisor:Columns 재사용(7컬럼 무료).
- EPPlus 토큰 치환 + 셀 주석에 해상도 메타(source/sampling/n/keep) 부착.
- report_template/report_run 테이블 + cells_json 감사 박제.
- 리포트 탭(웹 UI) + 샘플 템플릿.

검증: 빌드 0에러. E2E 라운드트립 실동작(2026-05-15 C-6111 효율 0.778·수율 0.872·
잔차 mean 0.746 — 오프라인 검증값과 일치). 결정론 검증 게이트 준수(표본0=N/A, 0 날조 금지).

⚠️ EPPlus는 NonCommercial 컨텍스트 — 상용 출시 전 라이선스 정리 필요.

설계: docs/작업플랜-셀프서비스-분석리포트-MVP-P0-상세설계.md

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 00:14:35 +09:00
windpacer
aa2174118a docs: 작업지시서(PascalCase 통일)·AI운전원 제어 논의메모·HC900 IO 데이터시트 추가
- 작업지시서-API-필드-PascalCase-통일.md: PascalCase 통일 작업 지시서.
- 논의-AI운전원-제어-아이디어.md: AI 운전원 제어 아이디어 논의 메모.
- ControlEdge HC900 IO Modules Specifications.pdf: RTD/AI 모듈 스펙(레인지·정확도)
  데이터시트 — PT100 양자화 분석 근거 자료.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 12:33:32 +09:00
windpacer
fc197465d4 docs: PT100 RTD 온도값 양자화 원인분석 — RTD 레인지(high/low) 설정 문제
TI-6111C/TI-9211C가 소수점 5자리까지 반복되는 현상의 원인 규명.
field_hist 원본 대조로 데이터·이관·OPC·하드웨어 기각, P2(low+F0) 대조군
실측으로 RTD 레인지 설정(high 1000°C스팬 vs low 500°C스팬)이 분해능·정확도
2배 차이의 단독 원인임을 확정. 해법=레인지를 low로 변경.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 12:21:31 +09:00
windpacer
cb749568d0 chore: 완료된 작업지시서·계획 문서 삭제
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 04:41:40 +09:00
windpacer
61ca8a8c78 feat: Point Builder 컨트롤러 스코핑 + realtime_table 기준 필터/표시
- 컨트롤러 선택 드롭다운 추가, 요약/목록/일괄작업을 선택 컨트롤러로 스코프
- 요약 카드 재정의: 카탈로그/등록(realtime)/라이브/비실시간/미등록
- 목록 필터를 is_active → realtime_table 멤버십(rt: 전체/실시간/실시간 제외)으로 교체
  → 미등록 태그를 골라 실시간으로 보내는 워크플로 지원
- 목록 정렬을 controller_id → tagname 순으로(다중 컨트롤러 대비)
- liveDict 조인을 (controller_id, tagname) 복합키로 정정
- Apply/Append/Sync에 controllerId 스코프 적용(타 컨트롤러 오염/손상 방지)
- 전체 태그 목록을 2단 레이아웃 밖 하단 전체폭으로 이동, 컬럼폭 조정
- Steam Advisor TC 태그 .PV 접미사 정정
- 작업지시서 문서 추가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 19:22:50 +09:00
windpacer
0a7ba93cc8 docs: 진공압력 끓는점 계산법(Antoine 식·상수 A/B/C) 문서 추가
- Antoine 식 log10P=A-B/(C+T)와 A/B/C 의미·단위 주의점 정리
- MSDS만으로 가능한 Clausius–Clapeyron 2-점 근사 방법
- PMA/PGMEA/EL 물성 발췌 + Antoine 상수 자리표시자(외부 DB 필요)
- 온도프로파일 기준밴드와의 교차검증 활용 연결

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 17:01:13 +09:00
windpacer
18963455f2 feat: Steam 온도프로파일 제품명 사용자정의 + 자동매칭 폐지
- 제품 라벨(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>
2026-06-10 16:56:50 +09:00
windpacer
a193d9b364 chore: Sinam 업로드 산출물 보관
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 08:12:01 +09:00
windpacer
d88784635e docs: 작업지시·진단·아키텍처 설계 문서 추가
온도프로파일/PV일관성/PointBuilder/history 작업지시, 신호태그·스팀유량 진단, 베이직아키텍처 재설계, MSDS, LLM채팅 구조 등.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 08:12:01 +09:00
windpacer
f12290fc2b chore: 레지스터맵 생성 스크립트 정리 + field_hist import
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 08:12:01 +09:00
windpacer
961e819d3c docs: 현황보고 정보분산 진단 + plant_context 문서우선 절차
- 진단: 경로형 현황보고가 4소스+3규칙을 LLM이 수작업 종합 → 결함(FT/FCV 값 누락) 분석, 문서우선 채택.
- plant_context: '유닛 KB 문서 먼저 검색 → 제어기 실시간값 조회 → 필드계기 루프매핑' 0순위 절차 + 필드계기 PV/OP 매핑 규칙 명시.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 08:11:03 +09:00
windpacer
0b623e6fce feat: 플랜트 공정 마스터 KB 문서 (P6-1~P10-2)
- 유닛별 단일 기준서: 연결관계·제어루프·필드계기 매핑·검증경로를 1문서로 통합(문서우선 전략).
- P6-1/P6-2(연결O,실시간O), P8(EL,연결X,실시간O), P9-1/P9-2/P10-1/P10-2(연결△,C4 미가동).
- DB 검증 계층(태그·루프)과 사람보완 계층(🖊 토폴로지) 분리 명시.
- 구 P6-1_경비물_제거_공정.md 제거(마스터에 흡수, XV-6121/6122 P6-1 오기재 정정).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 08:11:03 +09:00
windpacer
f9a601e077 fix: 레지스터맵 dedup 흡수 정정 + PICA-9111A/9211A 컨트롤러 오기 수정
- dedup _pfx_num 정규식을 (\d+[A-Za-z]?)로: 단일 trailing letter(TI-6111A 등)를 번호키에 포함해 TICA-xxxxA로 흡수. 인터록/복합 suffix는 fullmatch로 보호.
- TI-6111A/5111A/6211A/8111A, PI-8111A, LI-2113A 등 중복 indicator 흡수 누수 해소.
- Experion 소스 오기 정정: PICA-9111A/9211A 알람SP가 C1 LOOP로 잘못 참조 → C4로 수정(xlsx) 후 C1·C4 맵 재생성.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 08:11:03 +09:00
windpacer
1f989bd861 feat: FF 온도계 위젯 + 민감단 모듈1 T_C 유지 SP 제안
위젯: AdvisoryResult에 config 시각화 필드 추가, ffThermometer() 세로 온도계 위젯 구현 (4단 마커+sweet spot 밴드+하한선+C편차 화살표+옵션 푸터)

모듈1: FeedforwardEngine SteamAdvisor DI + ResolveTcTemp, Normal 모드에서 T_C 유지 Steam OP 제안 (SteamAdvisor Predict + FB trim gain-0.6/dwell20분)
2026-06-07 08:22:43 +09:00
windpacer
7409fabc58 컬럼명칭 통일 C-xxxxx + SIGPIPE 대응 + SteamAdvisor/FF 개선
=== 컬럼명칭 통일 (c{prefix} → C-{prefix}11) ===
Python 분석스크립트: data pkl 경로  →
gen_temp_profiles: tempref 파일명  →
SteamAdvisorController: TagsFor() 숫자서픽스 → 풀컬럼키(C-6111), ToSuffix() 변환
steam.js: ST_TEMP_COLS ['61',...] → ['C-6111',...], selectbox defaultColumn
appsettings.json: Columns 키 c61/c62/... → C-6111/C-6211/..., DefaultColumn c6111→C-6111
run_column.py: 추출/분석시 col_key = f"C-{{prefix}}11"
C-{x}11_{model,tempref}.json: 신규 명칭 기준 기준프로파일/모델 7컬럼분

=== SteamAdvisor 수정 ===
SteamModel: [JsonPropertyName] 매핑(snake_case → PascalCase 역직렬화)
예외처리: LinearCoeffs.Count < 3 방어코드
steam.js: catch(_) {} → 에러메시지 표시, missing_tags 응답처리

=== Feedforward Controller 개선 ===
ff.js: 상승/하강 양방향 램프 confirm, 방향뱃지(↑↓), Normal 모드 표시
FeedforwardController: 업램프 단독제한 제거(양방향), tcReturnTcTarget/Band 노출

=== DB ===
Hc900DbContext: realtime_table_tagname_key 레거시 UNIQUE 제약/인덱스 DROP 로직
Hc900Controllers: ToDictionaryAsync → GroupBy 변환 (중복 tagname 대응)

=== SIGPIPE 대응 ===
gateway.cpp: signal(SIGPIPE, SIG_IGN) 메인스레드 설치
modbus_tcp.cpp: send() flags 0 → MSG_NOSIGNAL (EPIPE 복구)
sigpipe_ignore.c: LD_PRELOAD 우회 공유라이브러리
Hc900GatewayProcessService: LD_PRELOAD 환경변수 설정
2026-06-07 00:29:47 +09:00
windpacer
7b21c35af6 feat: 민감단온도 전환복귀제어 + SteamAdvisor + FeedRamp 전면 구현
=== 민감단온도(T_C) 전환복귀제어 (작업플랜 구현) ===
- FeedforwardModels: TempLowLimit, TcReturnRebTarget/Band, TcReturnDeltaAdRef/Band 추가
- FeedforwardEngine: sigTLow (T_C 하한 트리거, -1e9=비활성) + 온도기반 복귀게이트(tcRecovered)
  -> Recovering→Returning 전이: mbRecovered(물질수지) OR tcRecovered(reb-A+ΔT+T_C)
- FeedRampCalculator: 하강 램프 전면 구현 (RateUpPerMin/RateDnPerMin 분리, θ_up/θ_dn 분기, floor clamp)
- FeedRampExecutorService: 하강 램프 step 방향 지원
- FeedforwardConfigStore: 신규 6개 컬럼 SELECT/INSERT/UPDATE
- Hc900DbContext: temp_low_limit, tc_return_reb_target/band, tc_return_delta_ad_ref/band
- FeedforwardController: API 노출 + feed-ramp start/cancel/status

=== SteamAdvisor ===
- SteamAdvisorController: steam map 로드/시각화/제품매칭/온도프로파일
- steam.js, steam.html: SteamAdvisor 전용 UI 패널

=== Feed Ramp 실행 ===
- FeedRampExecutorService: BG service (BackgroundService)
- FeedRampJobStore: in-memory job store
- FfTrackingStore: ramp tracking DB
- FeedforwardSupervisor/WriteGuard: SP 쓰기 advisory + rate-limit

=== 분석 스크립트 ===
- gen_temp_profiles.py: 컬럼 온도 프로파일 기준 산출 → c{prefix}_tempref.json
- export_plotdata.py: analysis 결과 plot data export
- gen_instrument_ranges.py: 계기 범위 생성
- c6111_extract.py: C-6111 추출/운전모드 분류
- run_column.py: 전체 분석 파이프라인

=== Web UI ===
- ff.js/ff.html/ff.css: 전환류 상태기계 UI, TagBrowser, config save
- fast.js: Fast 조작 패널
- trend.js, pb.js, llmchat.js: 각 패널 확장
2026-06-06 18:33:56 +09:00
windpacer
447ccfa2b8 docs: 데이터 신뢰도·품질 게이트 + 제품별 분리 (§17)
6-2 분석 중 발견한 데이터 선별 방법론 정리:
- §17 온도 프로파일 불변성: 같은 제품·일정 진공이면 부하 무관 온도 일정.
  9-1 load-invariant(신뢰高), 6-2 드리프트.
- §17.1 제품별 분리 선결: 플랜트가 PM/PGMEA/EL 다품종 → 온도=제품 식별자.
  스팀맵·게이트·startup을 제품별로 학습(단일모델 금지).
- §17.2 SP-PV 괴리 = SP방치(MANUAL 캠페인) 탐지. 6-1<5℃ 항상, 6-2 5~6월 최대28℃.
  세척≠(풀피드 888) — 피드/제품으로 세척 vs 제품전환 구분.
- §17.3 현장정보: 품질이슈로 생산조건 변경중 → 5~6월 6-2=트러블슈팅(실험).
  ★학습=안정구간만, 신뢰도게이트를 "학습 데이터 선별기"로 격상. closed-loop 금물.

내일 "안정구간 자동 추출(데이터 선별기)" 구현 예정.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 22:48:11 +09:00
windpacer
4306f76ddb feat: 형제 컬럼(6-2~10차) 분석 + SHUTDOWN + operator-assist + C# SteamAdvisor 포팅
- c6111_extract: roles_for() 동적 생성, COLUMN_EXCEPTIONS per-prefix
- c6111_prodmap/shadow/startup/rolling: --data/--prefix CLI 인자 지원
- run_column.py: 5개 컬럼 전 파이프라인 실행 래퍼
- c6111_shutdown.py: detect_cutoffs + shutdown_milestones (lookback 1200)
- c6111_operator_assist.py: OOD 게이트 + shadow 리플레이
- c6111_export_model.py: 선형근사 JSON export
- SteamAdvisor.cs: Predict+ClassifyMode+InEnvelope (NaN guard, Ood fix)
- SteamAdvisorController: GET/POST /api/steam/predict
- appsettings.json/Program.cs: DI 등록
- docs: 작업지시서 현황 갱신, 진단보고서 작성 (3 MED/8 LOW, 100% 정확도)
2026-06-05 19:46:57 +09:00
windpacer
1bc46b1eb0 feat: 6-1차 컬럼 학습형 제어 오프라인 분석 (생산맵·shadow·startup)
신암정유 6-1차 측류 솔벤트 컬럼(C-6111) 실데이터로 오퍼레이터 모방 제어 분석:

- 데이터 추출기 tag_frame() (field_hist WIDE 포맷 디코드) + 운전모드 분류
- ① 생산맵: 스팀유량=f(피드,제품,목표T_C) 운전점 GBM R²0.99 (steam/feed≈0.73)
- shadow 백테스트: in-envelope 오퍼레이터 OP 94% 모방, OOD 게이트→폴백
- 롤링 재학습: 새 로드레짐 적응 (5월 OP MAE 3.9→1.2%)
- 캠페인내 트림: 컬럼 자기제어, 피드백 미미 → 전향 맵이 제어 지배
- ② START-UP 절차: 레시피 + 제품컷인 트리거(reb-A 84.5℃, ΔT 2℃, 조건기반)

문서: 설계·진행 플랜 + 남은 작업(형제확장·shutdown·assist·live포팅) 작업지시서.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 17:33:17 +09:00
windpacer
b4606fd91d docs: HC900 작업 문서 추가
- Controller.csv: 컨트롤러 설정 정보
- HC900-PID.txt: PID 파라미터 참조
- HW_Universal_Modbus/: HC900 Modbus 통신 매뉴얼
- 작업지시서-대소문자-DB정합성: 대소문자 DB 정합성 작업 지시
- WARNING-문제점: 프로젝트 이슈 트래킹
2026-06-04 09:44:42 +09:00
windpacer
5a49f12e71 feat: C1-C4 컨트롤러별 register-map 추가
Sinam_xlsx 기반 빌드 스크립트로 생성된 각 컨트롤러의 Modbus 레지스터 맵
2026-06-04 09:44:39 +09:00
windpacer
0d0a58923d docs: 컨트롤러별 태그매핑 규칙 문서 업데이트
- Sinam_Tag_all.xlsx + HC Designer CSV + build_register_map_from_sinam.py
  연계 설명 추가
- controller_id = xlsx Indexed Address prefix (C3/C4)
2026-06-04 09:43:57 +09:00
windpacer
f9f6a04054 feat: Sinam_xlsx 기반 register-map 재생성 + C1-C4 컨트롤러 추가
- 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 컨트롤러 설정 추가
2026-06-04 09:43:14 +09:00
windpacer
16fc7a2598 Initial commit: HC900 Crawler
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>
2026-06-03 20:28:14 +09:00