C-6111 측류추출탑 자동운전 관련 플랜·관계식·운전 주의점 문서. - 측류추출-자동운전-플랜-byOpus.md / -컨셉회의.md(.docx) - 측류추출-관계식.md, PGMEA_측류추출운전방식_주의점.md - 측류추출-시간지연-적용방식.md(박스 정렬 수정) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
17 KiB
측류 추출 증류탑(C-6111) — 로컬 LLM 기반 자동운전 플랜
목적:
측류추출-시간지연-적용방식.md의 시간지연/시차 보상 제어를 ExperionCrawler 시스템 위에서 구현하되, 운전원이 단계적으로 신뢰를 쌓아 권한을 넘기는 감독제어(Supervisory Control) 형태의 자동운전을 설계한다. 결정론 엔진이 제어하고, 로컬 LLM(vLLM Qwen)은 그 위에서 진단·예외·인터페이스를 맡는다.문서 성격: 설계/의사결정 기록. 구현 착수 전 합의 완료본. 코드 미작성 상태.
작성일: 2026-05-22 / 갱신: 2026-05-22 (논의 합의 반영) / 대상: C-6111 PGMEA 진공 측류추출 증류탑 (P6 영역)
0. 핵심 원칙
LLM을 빠른 제어 루프에 넣지 않는다. 빠른 보상은 결정론 엔진(코드)이, LLM은 분/이벤트 단위 진단·튜닝·인터페이스만.
| 문제 | 영향 |
|---|---|
| 비결정성 | 같은 입력에 다른 출력 → 밸브 제어에 치명적 |
| 지연(latency) | 토큰 생성 수 초 → Flooding 즉시 대응 불가 |
| 환각 | 잘못된 값 한 줄이 바로 밸브로 → 측류 순도 영역 파괴 |
따름정리: 헌팅 검출·MAN 전환·OP 산출 등 안전·실시간 판단은 모두 결정론. LLM은 그 트립을 설명하고 원인을 진단할 뿐, 직접 트립시키거나 OP를 쓰지 않는다.
1. 물리 결정론 vs LLM — 역할 경계 (이 플랜의 출발점)
운영자가 밸브 사이즈·배관 종류·컨트롤밸브 Cv 값/Cv 커브·플로우미터 유량범위 등 물리 데이터를 보유하면, 제어 수학의 상당 부분이 데이터 피팅 없이 계산된다.
1.1 물리 데이터로 결정론화되는 것 (LLM 불필요)
| 물리 데이터 | 계산되는 모델 |
|---|---|
| Cv 커브(설치특성) | OP(%) → 유량 관계, 밸브 게인 dQ/dOP |
| 배관 종류·구경·길이 | ΔP·마찰, 이송 데드타임 θ = 관내체적/유량 |
| 드럼/트레이 홀드업 체적 | 체류시간 τ = 체적/유량 (D-6113 환류드럼 등) |
| 플로우미터 레인지 | 스케일링·분해능·노이즈 플로어 |
→ 자동운전의 B(하부)·D/R(상부) 타이밍은 하이드롤릭 홀드업(=체적/유량)으로 직접 계산된다. 밸브 게인도 Cv 커브 미분으로 나온다. 이 부분은 그냥 프로그램한다.
1.2 물리 데이터가 못 주는 것
- (가) 분리/조성 동특성 — P(측류)의 "15~20분" 지연은 배관 이송이 아니라 트레이 홀드업+기액평형(VLE)으로 새 조성이 자리잡는 시간. 상대휘발도·트레이 효율·VLE는 Cv 커브에 없음. → B·D는 물리로 계산되지만 P는 별도 모델 필요.
- (나) 모델-플랜트 불일치(드리프트) — Cv 커브는 신품 설계값. 밸브 stiction·마모, E-6103 파울링, 트레이 효율 저하로 시간에 따라 어긋남.
- (다) 목적·맥락·예외 — 회수율 최대 vs 에너지 최소 vs 순도 사수, 등급변경, 기동/정지, 계기고장, 상류 외란.
1.3 따라서 LLM이 실제로 하는 일
LLM의 가치는 물리모델 품질에 반비례. 물리를 잘 잡을수록 LLM은 제어 산수에서 빠지고 가장자리로 이동.
| LLM 역할 | 구체 | 가치 |
|---|---|---|
| ① 커미셔닝 보조 | 밸브 데이터시트·Cv 커브·배관 스펙 파싱 → 엔진 config/코드로 조립, 정합성 점검 | ★★ |
| ② 드리프트 진단((나)) | 물리예측 vs 실측 잔차는 수학, "이 OP·ΔP에서 8% 미달 → 밸브 파울링/마모 의심" 해석·재교정 트리거는 LLM | ★★ |
| ③ 소프트센서 보조((가)) | 측정 안 되는 조성을 온도(TI-6111B/C)로 추론, 분석기 결측 보간 | ★ |
| ④ 감독형 예외 처리((다)) | 엔진이 프로그램 안 된 상황(기동·등급변경·상류 업셋·계기고장) 판단·완화 | ★★★ |
| ⑤ 운전원 인터페이스 | 의도/경제목표 → SV·제약 번역, "왜 이렇게 도는지" 설명 | ★★★ |
| ⑥ 교차 데이터 융합 | 알람+이벤트+랩분석+정비이력+물리잔차 엮어 진단 (기존 MCP 도구) | ★★★ |
| ⑦ 헌팅 원인 진단 | 튜닝 vs stiction vs 외란 판별 → 4단계(OP 개입) 적용 여부 게이트 (§4.3) | ★★★ |
2. 감독제어 아키텍처 — 운전원이 권한을 쥔다
핵심 설계 사상: 엔진은 PID 루프의 SP/OP 레지스터를 직접 덮어쓰지 않는다. 별도 감독변수에 쓰고, 운전원이 스위치로 채택한다. 권한 손잡이는 항상 운전원에게 있다. SP 경로와 OP 경로가 대칭이다.
| SP 경로 (평상시) | OP 경로 (헌팅 시) | |
|---|---|---|
| 엔진이 쓰는 곳 | RSP 소스 포인트 (별도 변수) | .op (PID MAN 상태에서) |
| 운전원 스위치 | LSP ↔ RSP (Local ↔ Remote SP = AUTO↔CAS) | PID MODE: AUTO ↔ MAN |
| 빠른 규제 담당 | DCS PID (그대로 둠) | 엔진(소프트웨어 컨트롤러) |
| 폴백(엔진 사망) | 운전원이 LSP로 토글 | 데드맨 → MAN→AUTO (bumpless) |
| 적용 | 1~3단계 (신뢰 이양) | 4단계 (튜닝발 헌팅 한정) |
2.1 SP 경로 — RSP(Remote Setpoint)
- 엔진은 루프 SP를 절대 안 건드림. 자기 감독소스 포인트에만 OPC write → 그 포인트가 PID의 RSP/X 입력에 control connection.
- 운전원의 LSP/RSP 토글이 유일한 권한 손잡이. RSP면 엔진 SP 추종, LSP면 운전원 수동 — 언제든 가역.
- bumpless 요건(중요): OPC 외부 감독은 DCS의 back-calculation 핸드셰이크를 못 받음. → 루프가 LSP(미선택)일 때 엔진이 현재 실작동 SP를 읽어 자기 출력=현재 SP로 추종시켜야 함. 그래야 운전원이 RSP로 토글하는 순간 충격 없음.
- 공짜 안전망: DCS RSP 한계(SPHILM/SPLOLM, RSP rate)가 엔진과 독립으로 한 겹 더.
- 장점: 1~2단계(제안 표시)는 페이스플레이트가 RSP 후보값을 네이티브로 보여줌 → 별도 화면 개발 불필요.
2.2 OP 경로 — MAN + OP 쓰기 (튜닝발 헌팅 전용)
- 평상시 RSP로는 튜닝발 헌팅이 안 잡힘(PID가 루프에 그대로). 그래서 헌팅 루프에 한해 OP를 직접 잡는다.
- 방식: PID를 MAN으로 → 엔진이
.op에 직접 write. MAN이라 적분이 멈춰 windup 없음, OP 쓰기는 본질적 bumpless. 기존ControlOp(MD→MAN→OP쓰기) /WriteTagAsync(.op)그대로 사용 → 신규 DCS 구성 불필요, 저MoC. - 운전원 회수: MAN의 OP는 엔진이 쓴 마지막 값 → 운전원이 그 값에서 이어 조정, 또는 AUTO로 올림.
- 폴백(엔진 사망): 엔진 워치독 + DCS 컨트롤러 로직이 stale(N초 갱신 없음) 감지 → MAN→AUTO 강제 복귀.
PID가 bumpless output 설정이라 현재 OP(=마지막 LLM_OP)에서 적분 임펄스 없이 규제 재개.
- 정직한 단서: 폴백은 "헌팅하던 그 PID"로 돌아감 → 안전(규제됨, SIS가 극단 차단)하나 엔진 복구 전까지 헌팅 재개. 위험 아님, 차선.
- 설정 확인: MAN 중 SP 추종/홀드 → 폴백 후 어떤 LSP로 규제할지 결정.
- 상위 옵션(임계 루프 한정): 순간 규제 공백도 불가한 빠른 루프는 선택+back-calc(PID는 AUTO 추종 유지, 무충격 즉시 폴백)을 쓰되, 밸브 출력경로를 변형하므로 MoC가 더 엄격. 기본값은 위 MAN 방식.
3. LLM-OP 모드의 제어법 — FF + 느린 PI (rate 제한)
OP 경로로 개입한 동안 엔진이 매 순간 OP에 무엇을 쓰는가. 크루즈컨트롤과 동일 구조: 미리 예측(FF) + 잔차 청소(PI).
F(헌팅) ─Lag필터→ F_clean ─물질수지→ 목표유량 ─Cv커브→ OP_ff ┐
├→ OP → rate제한 → 절대/변동폭 클램프 → 밸브
설정값 − 실측PV ───────────────── 느린 PI ───────→ OP_pi ┘
- FF (피드포워드): 물리로 미리 정답 개도 계산.
개도% = Cv⁻¹( Q / √(ΔP/SG) ). 필터링된 F_clean로 목표유량(B/D/P)을 물질수지로 구하고 → Cv 커브로 OP 계산 → §5 시간상수로 부드럽게 이동. 외란발 헌팅을 잡는 주역(반응이 아니라 예측이라 밸브가 안 채인다). - PI (느린 피드백): Cv 커브는 신품값이라 마모·파울링·ΔP 부정확으로 살짝 빗나감. 잔차(SP−PV)를 느리게/약하게 보정. 약한 이유: ①헌팅 재유발 방지 ②큰 일은 FF가 이미 함.
- rate 제한: OP 변화율 제한으로 밸브 부드럽게.
- 비채택: "고정+간헐 보정" — 보정 사이 능동 규제 0 → 외란 시 PV 드리프트(피드백 상실). 사용 안 함.
- 연결: FF = §5 결정론 보상 엔진 그대로 + 그 위에 작은 PI 트림 하나.
4. 헌팅 검출 & 원인 진단 — 4단계의 게이트
4.1 검출 (결정론)
- 오실레이션 인덱스: 진폭·주기·지속성. 임계 초과(예: 진폭 > 범위의 X%, 주기 안정, N분 지속) 시 트립.
- MAN 전환 트립은 결정론(LLM 지연 불가). LLM은 트립을 설명만.
4.2 원인 분류 (LLM + 데이터 융합) — §1.3-⑦
| 원인 | 4단계(MAN+OP)로 잡히나 | 조치 |
|---|---|---|
| 튜닝 과민 | ✅ 즉시 | MAN 전환 → FF+PI로 OP 핸드홀딩 |
| 상류 외란 | ✅ 잘 잡힘 | 동일(FF가 주역) |
| 루프 간섭 | ⚠️ 부분 | 시차 조절로 완화 |
| 밸브 stiction | ❌ 악화 | 정비 플래그. OP 핸드홀딩 금지(마모만 늘어남) |
→ LLM이 OP-PV 위상·한계주기 파형·상류 신호·정비이력을 엮어 "이건 stiction → 4단계 말고 정비" vs "외란 → 4단계 유효" 판정. 초기엔 LLM 진단 → 운전원 확인 권장.
5. 보상 제어 수식 (결정론, FF의 본체)
원본 문서 §2·§4 기준.
- 1차 지연(Lag) 필터 (이산):
y[k] = y[k-1] + (Δt/τ) · (x[k] − y[k-1]) - 데드타임: 링버퍼로 N틱 지연
- 헌팅 제거: 원료 FT 신호 직후 Lag 필터 τ=300초(3~5분) (원본 §4.1)
| MV | 제어 대상 | τ / 데드타임 | 근거 | 목적 |
|---|---|---|---|---|
| B | 하부 제거량 | 1~2분 | 하이드롤릭 홀드업(물리 계산) | 탑 넘침(Flooding) 즉시 방지 |
| D/R | 상부 제거량/환류 | 5분 | D-6113 드럼 체류시간(물리 계산) | 압력/조성 안정화 |
| P | 측류 제품 추출 | 15~20분 | 분리/조성 동특성(§1.2-가, 별도 모델) | 초고순도 PGMEA 품질 보호 |
| S | 리보일러 스팀 | 가장 빠름 | 압력 즉시 전달 | 하부 온도 직결 |
추가(원본 §4.2/§4.3): PID 블록 dead band 0.5~1.0%, 원료탱크 Surge Control(P-Gain↓ I-Time↑).
6. 안전 봉투 (Safety Envelope)
엔진의 모든 쓰기는 아래를 강제 통과한다(다층 독립 방어):
- 엔진 가드: rate 제한 · 절대 min/max · 현재 유량범위 대비 밸브 변동폭 제한 · 태그 화이트리스트 · 전 쓰기 감사로그
- DCS 측 한계: RSP 한계(SPHILM/SPLOLM), 출력 한계(OPHILM/OPLOLM) — 엔진과 독립
- 운전원 스위치: LSP/RSP, AUTO/MAN — 언제든 즉시 회수 (최우선)
- 데드맨/워치독: 엔진 stale → SP경로는 운전원 LSP 회수, OP경로는 DCS 로직이 MAN→AUTO(bumpless) 폴백
- ESD/IL/SIS 독립: BPCS 루프의 MAN/AUTO·LSP/RSP와 무관하게 최종요소에 독립 동작 → 실험을 봉인된 안전 범위에 묶음
- 한 번에 한 루프: 간섭 루프 동시 MAN 금지
- 양방향 bumpless: 모든 전환에서 충격 없음(PID bumpless output + 엔진 추종)
⚠️ MoC/문화: 자동 시스템이 SP/OP를 조작하는 것은 현장에서 APC로 간주 → 변경관리·운전원 수용 절차 필요(기술 외 항목).
7. 단계별 신뢰 이양 로드맵 (운전원 비전)
| 단계 | 내용 | 경로 | 권한 |
|---|---|---|---|
| 1. 제안 표시 | 엔진이 RSP 소스 포인트에 계산값 write → 운전원이 페이스플레이트에서 "제안 SP"를 봄(LSP 유지) | SP/RSP | 운전원 100% |
| 2. 관찰·신뢰 형성 | 제안값이 합리적인지 운전원이 일정 기간 관찰 | SP/RSP | 운전원 100% |
| 3. SP 주도권 이양 | 신뢰 시 운전원이 RSP로 토글 → 엔진 SP 추종. 언제든 LSP 회수 | SP/RSP | 엔진(가역) |
| 4. 헌팅 자동 안정화 | 헌팅 임계 초과 + 원인=튜닝/외란 확인 시 PID MAN 전환 → FF+PI로 OP 핸드홀딩 → 안정 후 복귀 | OP/MAN | 엔진(데드맨 폴백) |
구현 선행조건(Phase 0): §6-1 엔진 가드 레이어 + 데드맨. (현재 쓰기 경로에 가드 0건 — §10 참조.)
8. 태그/노드 매핑 (실측 — find_tags·trace_connections)
원료 경로(trace_connections):
P-6101(원료펌프) → FT-6101 → FICQ-6101 → FCV-6101 → E-6103(예열) → C-6111 원료 스프레이 분배기
| # | 경로 | MV/제어 | 유량 | 온도 | 수위/압력 | τ |
|---|---|---|---|---|---|---|
| F | 원료 투입 | FICQ-6101→FCV-6101 | FT-6101 | (E-6103 예열) | — | 입력(Lag 300s) |
| S | 리보일러 스팀 | 스팀밸브 | FI-6115 | TI-6111A(BOT), TICA-6111A | PI-6700(스팀압) | 가장 빠름 |
| B | 하부 제거 | 하부 발출 밸브 (밸브태그 미확인) | (미확인) | TI-6111A(BOT) | LI-6111(하부수위) | 1~2분 |
| D/R | 상부/환류 | FICQ-6113(PV29.9/SP36.4) | FI-6113 | TI-6111D(TOP) | LI-6113(D-6113 환류드럼), LICA-6113, PI-6111(진공), PICA-6111 | 5분 |
| P | 측류 제품 | 🔲 사용자 매핑 예정 | FI-6120(PGMEA) | TI-6111B/C(MID) | LI-6121/6122/6123(제품탱크) | 15~20분 |
- OPC Node 형식:
ns=1;s=sinamserver:ficq-6101.sp/.op/.md(MAN=0/AUTO=1). ※ SP 경로 구현 시 write 타깃은 루프 SP가 아니라 RSP 소스 포인트로 바뀜(노드 ID만 교체, 쓰기 코드 동일). - 현재 운전 흔적: FICQ-6113 PV 29.9 / SP 36.4 추종, 진공압 PICA-6111 30.4 → 가동 중 추정.
8.1 미완료 매핑 (담당 구분)
- P(측류 제품 추출) 경로 매핑 — 사용자 직접 진행 예정 (본 플랜 보류)
- B(하부) 발출 유량계·밸브 태그 —
find_tags(6112/6114/6116번대) 또는 C-6111trace_connections downstream로 보강
9. 현 시스템 재사용 자산
| 구분 | 자산 |
|---|---|
| 쓰기 | ExperionOpcWriteClient.WriteTagAsync(.sp/.op), SetModeAsync(MAN/AUTO), ControlOp(MD→MAN→OP→AUTO) / POST /api/experion/{write,mode,control} / UI "OPC UA Write" 탭 |
| 읽기 | ExperionRealtimeService(실시간 PV 구독, IHostedService), query_pv_history(MCP)/ExperionHistoryController |
| 백그라운드 | IHostedService/AddHostedService 패턴 기존 사용 → 신규 AutoRunService : BackgroundService 그대로 적용 |
| LLM 감독 | query_pv_history, find_tags, trace_connections, active_alarms, query_events, summarize_events, generate_status_report, ReAct 에이전트 모드 |
10. 미해결/확인 필요 항목
- P(측류 제품 추출) 경로 매핑 — 사용자 직접 진행
- B(하부) 발출 유량계·밸브 태그 확정
- 쓰기 경로 안전 가드(§6-1) 신규 구현 — 현재
WriteTagAsync에 클램프/rate/변동폭 0건 (Phase 0 선행) - DCS 구성: RSP 소스 포인트 생성·연결, OP 데드맨(stale→MAN→AUTO) 로직, RSP 추종/홀드 설정
- 헌팅 임계 정의(진폭/주기/지속) 및 stiction 자동판별 신뢰 수준
- 각 MV의 hard min/max·변화율·밸브 변동폭 한계(공정 안전 범위) + Cv 커브·배관 물리 데이터 수집 형태
- P(측류) 분리/조성 모델(§1.2-가) 깊이 결정: 고정 τ vs 간이 트레이모델 vs 경험모델
ask_iiot_llm(vLLM) 빈 응답 — vLLM 엔드포인트 상태 점검- Step Test 수행 가능 시점/조건 (가동 중 5~10% 스텝)
- APC 블록 내장 여부 vs 일반 PID 환경 / MoC 절차
부록 A. 참조
- 원본 개념 문서:
측류추출-시간지연-적용방식.md - 쓰기 구현:
src/Infrastructure/OpcUa/ExperionOpcWriteClient.cs,src/Web/Controllers/ExperionControllers.cs(ExperionWriteController) - 실시간 읽기:
src/Infrastructure/OpcUa/ExperionRealtimeService.cs - UI:
src/Web/wwwroot/index.html(#pane-write) - MCP 도구:
mcp-server/server.py(find_tags, trace_connections, query_pv_history, ask_iiot_llm 등)
부록 B. 합의된 핵심 결정 (요약)
- 감독제어 — 엔진은 별도 변수에만 쓰고 운전원이 스위치로 채택(권한은 운전원).
- SP는 RSP 경로(LSP/RSP 토글), 외부 추종으로 bumpless.
- OP는 MAN+
.op쓰기 경로(기존 ControlOp), 엔진 워치독 + DCS 데드맨→MAN→AUTO bumpless 폴백. - OP 제어법은 물리 FF(Cv·배관) + 느린 PI + rate제한 (고정+간헐 보정 비채택).
- PID 파라미터 재튜닝은 필수 아님 — MAN에서 OP 대체로 헌팅 안정화 가능(stiction 제외).
- LLM은 물리 결정론 위에서 ①커미셔닝 ②드리프트진단 ③소프트센서 ④예외처리 ⑤인터페이스 ⑥교차융합 ⑦헌팅원인진단.