=== 컬럼명칭 통일 (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 환경변수 설정
6.3 KiB
작업지시서 — 민감단(T_C) 전환·복귀 제어 UI 추가 (2026-06-06)
⚠️ 진단 결과 (diagnosis-checklist.md 기준, 2026-06-06)
1.
MapConfig에서TcReturnTcTarget/TcReturnTcBand누락 (MED)문제:
MapConfigAPI 응답 매핑(FeedforwardController.cs:199-233)에서tcReturnTcTarget,tcReturnTcBand2개 누락. 나머지 5개는 매핑됨. 근거:FeedforwardController.cs:219-223—tcReturnRebTarget/Band,tcReturnDeltaAdRef/Band,tempLowLimit은 포함되지만tcReturnTcTarget/Band없음. 영향: UI 설정 폼 재로드 시 이 2개 필드의 값이 손실. (엔진 게이트는 ConfigStore→ColumnConfig에서 직접 읽으므로 게이트 동작에는 영향 없음.) 수정:MapConfig객체에tcReturnTcTarget,tcReturnTcBand2줄 추가.2. 작업2 —
Mode/ModeReason이미 존재 (진단 오류 수정)
AdvisoryResult에Mode(FeedforwardModels.cs:131)와ModeReason(:132)가 이미 존재하며MapColumn에서mode,modeReason으로 노출됨. 모드 배지(Normal/Recovering/Returning) + 사유 표시는 지금 당장 구현 가능. 실제로 없는 것은EnteredByTcLow와 게이트 개별 진척(rebInBand등)뿐이며, 이는 체크리스트(부가기능)에만 필요. 작업지시서가 이미 "advisory 응답에 Mode/사유 필드 있는지 확인, 없으면 확장 선행"이라 명시한 조건부 항목.3. 작업3 —
StartFeedRamp업램프 전용 체크 (MED, 타당)문제:
FeedRampCalculator는 하강을 완전 지원하지만,StartFeedRamp핸들러(FeedforwardController.cs:267-268)가if (body.targetFeed <= adv.CurrentFeed) return BadRequest("업램프만 지원")로 하강 차단. 영향: 운전원이 하강 램프 시작 시 400 Bad Request. 수정: 체크 제거 +ff.js방향 자동 판정 + 확인 문구 방향별 변경.요약
작업 실제 상태 수정 필요 작업1 (설정 폼) MapConfig에서TcReturnTcTarget/Band2줄 누락FeedforwardController.cs2줄 추가작업2 (상태 감시) Mode/ModeReason이미 존재 → 모드 배지 즉시 구현 가능게이트 체크리스트용 EnteredByTcLow등 추가는 선택작업3 (하강 램프) StartFeedRamp업램프 전용 체크 존재FeedforwardController.cs:267-268체크 제거
백엔드 완료(
작업플랜-민감단온도-전환복귀제어.md): 엔진 상태기계·복귀 게이트 3버그 수정 + config 풀스택(DB/ConfigStore) 연결됨. 남은 것 = 운전원이 파라미터를 설정/감시하는 UI. 대상wwwroot/panes/ff.html·wwwroot/js/ff.js.
0. 현 상태
- 백엔드:
ColumnConfig에TempLowLimit·TcReturnRebTarget/Band·TcReturnDeltaAdRef/Band·TcReturnTcTarget/Band존재. DB 왕복(ff_column_config컬럼 + ConfigStore SELECT/INSERT/UPDATE) 완료. - 엔진:
sigTLow(T_C 하한 전환류 트리거) + 복귀 게이트(reb in-band & ΔT(A-D) 안정 & T_C in-band) +EnteredByTcLow진입원인 분기 동작. - UI:
ff-cfg-list(설정 폼, ff.js 동적 렌더) + advisory 화면 존재. 새 필드·상태표시 미반영.
작업 1 — 설정 폼에 민감단 파라미터 추가 [우선순위 1]
대상: ff.js의 ffLoadConfig/config 렌더(ff-cfg-list) + config 저장 API 바디.
추가 입력 필드(컬럼별):
TempLowLimit(T_C 하한 트리거, ℃ raw. 비활성 -1e9)TcReturnTcTarget(T_C 목표온도 ℃, reb-A와 다름) ·TcReturnTcBand(±폭, 기본 1.0)TcReturnRebTarget(reb-A 복귀목표) ·TcReturnRebBand(기본 0.5)TcReturnDeltaAdRef(ΔT(A-D) 기준) ·TcReturnDeltaAdBand(기본 0.4) 검증: 저장→재로드 시 값 유지(DB 왕복). NaN 필드는 빈칸 표시(비활성). 주의: ★TcReturnTcTarget은 T_C(민감단) 목표 — reb-A 목표와 혼동 금지(별 입력란·라벨 명확히). 미설정 시 T_C in-band 게이트 비활성(안전). 제안 보조: 온도프로파일c{prefix}_tempref.json의 매칭제품 median을 target 기본값으로 자동제안 버튼(/api/steam/tempprofile/{col}재활용).
작업 2 — 상태기계(ColumnMode) 감시 표시 [우선순위 2]
대상: ff advisory 화면 + /api/ff/advisory 응답(AdvisoryResult.Mode 등).
표시:
- 현재 모드 배지: Normal / Recovering(전환류) / Returning(복귀램프) — 색상 구분(정상 녹색·전환류 주황·복귀 파랑).
- 전환류 진입 시 사유(
SeverityText: 온도LOW/온도HIGH/ΔP플러딩 등) + 진입원인이 T_C 하한인지(EnteredByTcLow) 노출. - 복귀 게이트 진척: reb in-band·ΔT(A-D) 안정·T_C in-band 각 충족 여부 체크리스트(운전원이 "왜 아직 복귀 안 하나" 파악). 검증: 모드 전이 시 배지·사유 실시간 갱신. (Mode/ModeReason 이미 advisory 응답에 존재.)
작업 3 — 하강 램프 UI [우선순위 3]
대상: ff-ramp(램프 계산기) + /api/ff/feed-ramp.
현 상태: FeedRampCalculator가 상승/하강 양방향 구현됨. StartFeedRamp 업램프 전용 체크 제거됨. UI는 상승 전제.
추가: targetFeed < currentFeed 입력 시 하강 램프로 자동 인식, 방향 배지(↑상승/↓하강) + 하강 rate 표시. 확인 다이얼로그 문구 "올립니다"→방향별("내립니다").
검증: 하강 타겟 입력 시 하강 시간/rate 산출, 방향 표기 정확.
작업 4 (선택) — T_C 유지 advisory 표시
대상: STEAM advisory(steam.js) 또는 ff 화면. 표시: 현재 T_C vs target 편차, 모듈1 제안 steam OP(디커플링), 편차 추세. (모듈1 백엔드 구현 후.)
권장순서 / 의존
작업1(설정) → 작업2(상태감시) → 작업3(하강램프) → 작업4(선택, 모듈1 의존).
작업2는 Mode/ModeReason이 이미 advisory 응답에 존재 → 모드 배지·사유 표시 즉시 구현 가능. 게이트 개별 진척 체크리스트는 AdvisoryResult에 EnteredByTcLow/RebInBand/DeltaAdStable/TcInBand 필드 추가 후 구현.
주의(공통)
- advisory-only·개별 follow 존중(자동 write 강제 금지).
- 9·10차(C4 미연결)는 설정·백테스트만, 라이브 상태표시는 6차(C3) 우선.
- T_C target은 제품전환(bimodal) 시 재설정 필요 — tempref 제품 선택과 연동.