Files
ExperionCrawler/측류추출-자동운전-플랜-byOpus.md
windpacer 87ab8adfe0 docs: 측류추출 자동운전 플랜 문서 추가
C-6111 측류추출탑 자동운전 관련 플랜·관계식·운전 주의점 문서.

- 측류추출-자동운전-플랜-byOpus.md / -컨셉회의.md(.docx)
- 측류추출-관계식.md, PGMEA_측류추출운전방식_주의점.md
- 측류추출-시간지연-적용방식.md(박스 정렬 수정)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 06:31:58 +09:00

252 lines
17 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.
# 측류 추출 증류탑(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 부정확으로 살짝 빗나감. 잔차(SPPV)를
**느리게/약하게** 보정. 약한 이유: ①헌팅 재유발 방지 ②큰 일은 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)
엔진의 모든 쓰기는 아래를 강제 통과한다(다층 독립 방어):
1. **엔진 가드**: rate 제한 · 절대 min/max · **현재 유량범위 대비 밸브 변동폭 제한** · 태그 화이트리스트 · 전 쓰기 감사로그
2. **DCS 측 한계**: RSP 한계(SPHILM/SPLOLM), 출력 한계(OPHILM/OPLOLM) — 엔진과 독립
3. **운전원 스위치**: LSP/RSP, AUTO/MAN — 언제든 즉시 회수 (최우선)
4. **데드맨/워치독**: 엔진 stale → SP경로는 운전원 LSP 회수, OP경로는 DCS 로직이 MAN→AUTO(bumpless) 폴백
5. **ESD/IL/SIS 독립**: BPCS 루프의 MAN/AUTO·LSP/RSP와 무관하게 최종요소에 독립 동작 → 실험을 봉인된 안전 범위에 묶음
6. **한 번에 한 루프**: 간섭 루프 동시 MAN 금지
7. **양방향 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-6111 `trace_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. 합의된 핵심 결정 (요약)
1. 감독제어 — 엔진은 별도 변수에만 쓰고 운전원이 스위치로 채택(권한은 운전원).
2. SP는 **RSP** 경로(LSP/RSP 토글), 외부 추종으로 bumpless.
3. OP는 **MAN+`.op` 쓰기** 경로(기존 ControlOp), 엔진 워치독 + **DCS 데드맨→MAN→AUTO bumpless** 폴백.
4. OP 제어법은 **물리 FF(Cv·배관) + 느린 PI + rate제한** (고정+간헐 보정 비채택).
5. PID 파라미터 재튜닝은 **필수 아님** — MAN에서 OP 대체로 헌팅 안정화 가능(stiction 제외).
6. LLM은 물리 결정론 위에서 ①커미셔닝 ②드리프트진단 ③소프트센서 ④예외처리 ⑤인터페이스 ⑥교차융합 ⑦헌팅원인진단.