# Feedforward Advisory — 스트림 파라미터 해설
## 운전원 교육 자료

> 대상: C-6111 PGMEA 측류추출 증류탑 — 각 스트림(P/R/D/B)별 파라미터 의미와 튜닝 기준

---

## 1. 스트림 역할 (Role)

| Role | 의미 | 적용 스트림 | 동작 방식 |
|:-----|:------|:-----------|:---------|
| **Commanded** | FF가 SP를 직접 계산 | **P**(주생성물), **R**(환류) | Deadtime → Lag → RateLimit → 권장SP |
| **LevelDriven** | 레벨 제어기가 SP 결정, FF는 기대치만 제시 | **D**(유출액), **B**(탑저) | K × Feed, deadtime/lag 없음, 참고용 |
| **Monitor** | 모니터링만, 권장 SP 없음 | (향후 확장) | SP 계산 안 함, PV만 표시 |

---

## 2. 공통 파라미터

### 2.1 K (TargetCoeff) — 목표 계수

**정의**: Feed 대비 해당 스트림의 목표流量 비율.

```
P_stream 권장SP = K × FeedFilter출력  (Commanded, lag/rate 적용 후)
D/B_stream 기대치 = K × FeedFilter출력  (LevelDriven, 즉시 반영)
R_stream 권장SP = K × P_stream 권장SP  (환류, P 경유)
```

**C-6111 기본값**:

| 스트림 | K | 근거 |
|:------|:---|:------|
| P=0.95 | 측류 95% 추출 | 주생성물이 Feed의 95% |
| R=0.80 | 환류비 R/P=0.8 | P 대비 80% 환류 |
| D=0.02 | 유출액 2% | 드럼 퍼지량 |
| B=0.03 | 탑저 3% | 바텀 드로우량 |

**튜닝**: K의 합이 1.0을 넘으면 물질수지 불일치. K_P + K_D + K_B = 1.0이 이상적 (R은 환류라 수지에 포함 안 됨).

### 2.2 Grade (Confidence) — 신뢰도 등급

| Grade | 의미 | Auto-write | 운전원 대응 |
|:------|:-----|:-----------|:-----------|
| **A** | K/θ/τ가 잘 튜닝됨, 권장값 신뢰 가능 | ✅ 허용 | 권장값을 SP로 채택 가능 |
| **B** | 튜닝 불확실성 있음, 참고용 | ❌ 금지 | 운전원 판단 필요, SP 채택 시 주의 |
| **C** | 모델 신뢰 불가, 진단 우선 | ❌ 금지 | 사용하지 말 것, 엔지니어 진단 요청 |

---

## 3. Commanded 스트림 전용 파라미터 (P, R)

Commanded 스트림은 Feed 변화가 권장SP에 반영될 때까지 **3단계 지연**을 거칩니다:

```
FeedFilter출력 → [Deadtime θ] → [Lag τ] → [RateLimit] → 권장SP
```

### 3.1 θ_up / θ_dn (ThetaUpSec / ThetaDnSec) — Deadtime (불감시간)

**정의**: Feed 변화가 해당 스트림에 실제로 영향을 미치기까지의 **순수 지연 시간(초)**.

| 방향 | 파라미터 | 의미 |
|:-----|:---------|:------|
| Feed 증가 | θ_up | 상승 응답까지 걸리는 시간 |
| Feed 감소 | θ_dn | 하강 응답까지 걸리는 시간 |

**비대칭 deadtime**: θ_up과 θ_dn을 다르게 설정 가능 (상승/하강 응답 특성이 다른 공정용).

**C-6111 기본값**: P=60초 (상승/하강 동일). Feed 변화가 C-6111 탑을 거쳐 측류 추출점에 도달하는 시간.

**물리적 의미**: 칼럼 내 액체 홀드업, 트레이/패킹을 통과하는 시간, 응답 지연.

### 3.2 τ (TauSec) — Lag 시정수 (1차 지연)

**정의**: Deadtime 이후 Feed 변화가 지수적으로 정착하는 **시정수(초)**. 1차 저역통과필터의 τ.

```
Lag출력 = Lag출력 + (입력 - Lag출력) × ts / τ

ts=Scan, τ=900초:
  1τ(900초) 후 63% 도달
  2τ(1800초) 후 86% 도달
  3τ(2700초) 후 95% 도달 (≈ 정상상태)
```

**C-6111 기본값**: P=900초(15분). 측류 추출 응답이 느린 이유:
- 칼럼 내 액체 홀드업 완료 시간
- 물질 이동(mass transfer) 속도
- 온도/조성 평형 도달 시간

### 3.3 Rate_up / Rate_dn (RateUpPerMin / RateDnPerMin) — 변화율 제한

**정의**: 권장SP가 **분당 최대 몇 단위까지 변할 수 있는지** 제한.

```
|권장SP(t) - 권장SP(t-1)| ≤ Rate × ts / 60
```

**C-6111 기본값**:
- P: up=30/min, dn=60/min (상승보다 하강 2배 빠름)
- R: up=30/min, dn=30/min (대칭)

**용도**: SP가 급격히 변하는 것을 방지 — DCS의 PID 제어기가 추종 가능한 범위로 제한.

### 3.4 θ vs τ vs Rate — 차이 이해

| 구분 | 성격 | 영향 | 단위 |
|:-----|:-----|:-----|:------|
| **θ (Deadtime)** | 순수 지연 | Feed 변화 후 아무 반응 없음 | 초 |
| **τ (Lag)** | 지수적 정착 | 변화가 서서히 나타남 | 초 |
| **Rate** | 변화율 제한 | SP의 기울기 제한 | /분 |

**직관적 비유 (온수 샤워)**:
- **θ**: 핸들 돌린 후 물이 뜨거워질 때까지 걸리는 시간
- **τ**: 뜨거워지는 속도 (급격/완만)
- **Rate**: 핸들을 1초에 얼마나 돌릴 수 있는지 제한

---

## 4. LevelDriven 스트림 전용 파라미터 (D, B)

LevelDriven은 단순 비례이므로 deadtime/lag/rate 파라미터가 **의미 없음** (0으로 설정):

```
기대치 = K × FeedFilter출력
       → deadtime 없음, lag 없음, rate 제한 없음
```

### 4.1 LevelTag — 레벨 태그

**정의**: 해당 LevelDriven 스트림을 구동하는 **레벨 제어기의 태그명**.

| 스트림 | LevelTag | 레벨 제어기 | 의미 |
|:------|:---------|:-----------|:------|
| D | lica-6113 | D-6113 환류버퍼드럼 레벨 | 유출액 = 드럼 레벨로 제어 |
| B | li-6111 | C-6111 탑저 레벨 | 탑저 = 칼럼 바텀 레벨로 제어 |

**LevelDriven 기대치와 실제 SP의 관계**:
```
FF 기대치 = K × Feed  (참고용)
실제 DCS SP = LIC 출력 (레벨 제어기가 결정)
```

FF는 "Feed가 이만큼이면 D/B에 이 정도 flow가 필요할 것이다"는 **기대치**만 제시. 실제 SP는 레벨 제어기가 결정하므로, FF 기대치는 **운전원이 레벨 제어가 정상인지 확인하는 보조지표**.

---

## 5. RefluxFromProduct — P 경유 환류 (R 스트림)

**정의**: R(환류)이 P(주생성물) 권장SP를 기준으로 비례 계산되는지 여부.

```
RefluxFromProduct = true:
  R_rec = K_R × P_rec (P의 deadtime/lag/rate을 상속받음)

RefluxFromProduct = false:
  R_rec = (K_R × FeedFilter출력 → 독자적인 deadtime/lag/rate)
```

**C-6111 기본값**: R=true (P 경유). 이유:
- 환류량은 주생성물량에 비례
- P의 지연 특성(θ=60, τ=900)을 자연스럽게 상속
- 독립 계산 시 P와 R이 서로 다른 시점에 변동 → 불안정

---

## 6. SP 제한 (SpMin / SpMax)

**정의**: 권장SP가 가질 수 있는 **최소값/최대값**.

```
권장SP = Clamp(계산값, SpMin, SpMax)
```

**C-6111 기본값**:
- P: 0 ~ 9999 (사실상 무제한, Range만 0~9999)
- R: 0 ~ 9999
- D: 0 ~ 9999
- B: 0 ~ 9999

**용도**: 
- 펌프 최소 유량 보호 (SpMin > 0)
- 배관/계기 최대 유량 초과 방지 (SpMax)
- 운전 범위를 물리적 한계 내로 제한

---

## 7. C-6111 기본값 종합표

| 파라미터 | P | R | D | B | 단위 | 비고 |
|:---------|:--|:--|:--|:--|:----|:-----|
| **Role** | Commanded | Commanded | LevelDriven | LevelDriven | — | |
| **K** | 0.95 | 0.80 | 0.02 | 0.03 | — | D+B = Feed의 5%, P = 95% |
| **θ_up** | 60 | — | — | — | 초 | P만 deadtime 적용 |
| **θ_dn** | 60 | — | — | — | 초 | |
| **τ** | 900 | — | — | — | 초 | P만 lag 적용 |
| **Rate_up** | 30 | — | — | — | /분 | 상승 변화율 제한 |
| **Rate_dn** | 60 | — | — | — | /분 | 하강 (2배 빠름) |
| **SpMin** | 0 | 0 | 0 | 0 | — | |
| **SpMax** | 9999 | 9999 | 9999 | 9999 | — | |
| **Grade** | A | A | B | B | — | D/B는 레벨 제어 의존, B 등급 |
| **RefluxFromProduct** | — | true | — | — | — | R은 P 경유 |
| **LevelTag** | — | — | lica-6113 | li-6111 | — | 구동 레벨 태그 |

---

## 8. 튜닝 가이드

### K 조정

```
K 합 체크: K_P + K_D + K_B = 1.0 (이상적)
           현재: 0.95 + 0.02 + 0.03 = 1.00 ✅

K_P 증가 → P 권장 SP 상승 → R(환류)도 상승 (RefluxFromProduct=true)
K_B 증가 → B 기대치 상승 → 탑저 드로우 증가
```

### θ/τ 조정

```
θ가 너무 작음 → Feed 변화에 SP가 너무 빨리 반응 (불안정)
θ가 너무 큼   → 응답 지연, Feed 변화 후 오래 기다려야 함

τ가 너무 작음 → SP가 급변, DCS PID가 추종 못 할 수 있음
τ가 너무 큼   → SP 정착까지 너무 오래 걸림 (30분+)

튜닝 방법: Feed step 테스트 → 실제 PV 응답 곡선에서 θ와 τ 측정
```

### Rate 조정

```
Rate_up/dn이 너무 작음 → SP 변화가 너무 느려서 Feed 변화를 따라가지 못함
Rate_up/dn이 너무 큼   → SP가 급변, DCS 밸브가 추종 못 할 수 있음

적정값: DCS PID의 최대 추종 변화율 × 0.8 (여유)
```
