控制邏輯與演算法
本頁說明 SMB 系統的 Step 切換規則、閥門位置計算的數學模型、Zone 計算公式,以及從閥門狀態自動識別組態的演算法。
1. Step 切換核心規則
規則 1:旋轉閥位置每 Step +1
每個 Step 切換時,所有活動中的旋轉閥位置 +1,以 mod N 循環:
Position: 1 → 2 → 3 → 4 → 5 → 6 → 1 → ...
塞住的閥門(Position=0)不受影響。
規則 2:入口閥與出口閥的固定偏移
同一組態中,各閥門之間的位置差(偏移量)在所有 Step 中保持不變。偏移量由 Zone 配置決定。
例如 1/2/2/1 組態:V01(D) 和 V02(F) 的偏移量永遠是 3。
規則 3:氣動閥邏輯
氣動閥 PV 的開關由出口閥位置決定:
- recycle 位置的 PV 關閉(流體直通下一柱)
- 其他出口位置的 PV 開啟(流體轉向出口閥)
- 對於吸脫附製程,各 Zone 邊界的 PV 關閉
2. 數學模型
通用公式
所有閥門位置都可以用同一個公式計算:
position = ((step - 1 + offset) % N) + 1
其中:
step:當前 Step(1-indexed)offset:該閥門功能的偏移量(由 Zone 配置決定)N:管柱總數(6 柱系統 N=6)
各組態偏移量表
SMB 組態
| 組態 | D | E | F | R | recycle | D2 | Wash |
|---|---|---|---|---|---|---|---|
| 1/2/2/1 | 0 | 0 | 3 | 4 | 5 | — | — |
| 2/2-2 | 0 | 5 | 2 | 3 | — | 4 | — |
| 2/2/2 | 0 | 1 | 4 | 5 | — | — | — |
| 1-1/2/2 | 0 | 0 | 3 | 4 | 5 | — | 5 |
吸脫附組態
| 組態 | S | S out | W | W out | F | F out |
|---|---|---|---|---|---|---|
| 2-1-3 | 0 | 1 | 2 | 2 | 3 | 5 |
| 2-0-4 | 0 | 1 | — | — | 2 | 5 |
| 3-0-3 | 0 | 2 | — | — | 3 | 5 |
計算範例:1/2/2/1 Step 3
N = 6, step = 3
V01(D): offset=0 → ((3-1+0) % 6) + 1 = 3
V02(F): offset=3 → ((3-1+3) % 6) + 1 = 6
V03: 塞住 → 0
V04(E): offset=0 → ((3-1+0) % 6) + 1 = 3
V05(R): offset=4 → ((3-1+4) % 6) + 1 = 1
V06(rec): offset=5 → ((3-1+5) % 6) + 1 = 2
PV302 關閉(recycle 在 C2)
其餘 PV 開啟
驗證:對照 閥門狀態表 Step 3 → V01=3, V02=6, V04=3, V05=1, V06=2, PV302 關閉。
3. Zone 計算公式
SMB 4-Zone 計算
SMB 製程的端口沿管柱環排列順序為:D(入口) → E(出口) → F(入口) → R(出口) → 回到 D。
Zone 的柱數由端口位置差決定:
Zone I = E_pos - D_pos + 1 (D 到 E,含兩端)
Zone II = F_pos - E_pos - 1 (E 到 F 之間)
Zone III = R_pos - F_pos + 1 (F 到 R,含兩端)
Zone IV = N - Zone I - Zone II - Zone III
所有計算需考慮循環(mod N)。
範例:1/2/2/1 Step 1
D_pos=1, E_pos=1, F_pos=4, R_pos=5, N=6
Zone I = 1 - 1 + 1 = 1 柱
Zone II = 4 - 1 - 1 = 2 柱
Zone III = 5 - 4 + 1 = 2 柱
Zone IV = 6 - 1 - 2 - 2 = 1 柱
結果: 1/2/2/1 ✓
吸脫附 Zone 計算
吸脫附製程的端口順序為:S(入口) → W(入口) → F(入口) → 回到 S。
有水洗區時(W 存在):
S區 = W_pos - S_pos
W區 = F_pos - W_pos
F區 = N - S區 - W區
無水洗區時(W=0):
S區 = F_pos - S_pos
W區 = 0
F區 = N - S區
範例:2-1-3 Step 1
S_pos=1, W_pos=3, F_pos=4, N=6
S區 = 3 - 1 = 2 柱
W區 = 4 - 3 = 1 柱
F區 = 6 - 2 - 1 = 3 柱
結果: 2-1-3 ✓
範例:3-0-3 Step 1
S_pos=1, F_pos=4, N=6(無水洗)
S區 = 4 - 1 = 3 柱
W區 = 0
F區 = 6 - 3 = 3 柱
結果: 3-0-3 ✓
4. 自動識別演算法
給定任意一組 Step 的閥門位置和功能,自動推導出組態名稱。
識別流程
完整識別決策樹
結合塞住閥門快速判斷:
演算法 Pseudocode
def identify_configuration(valve_positions, valve_functions, N=6):
"""
valve_positions: {"V01": 1, "V02": 4, ..., "V06": 6}
valve_functions: {"V01": "D", "V02": "F", ..., "V06": "recycle"}
"""
# Step 1: 識別製程類型
functions = set(valve_functions.values())
is_smb = bool(functions & {"D", "D1", "E", "R", "recycle"})
is_adsorption = bool(functions & {"S", "S out", "W out", "F out"})
# Step 2: 根據入口閥位置計算各 Zone 柱數
if is_smb:
D_pos = get_position("D")
E_pos = get_position("E")
F_pos = get_position("F")
R_pos = get_position("R")
zone_I = (E_pos - D_pos) % N + 1
zone_II = (F_pos - E_pos - 1) % N
zone_III = (R_pos - F_pos) % N + 1
zone_IV = N - zone_I - zone_II - zone_III
return f"{zone_I}/{zone_II}/{zone_III}/{zone_IV}"
elif is_adsorption:
S_pos = get_position("S")
F_pos = get_position("F")
has_W = "W" in functions
if has_W:
W_pos = get_position("W")
S_zone = (W_pos - S_pos) % N
W_zone = (F_pos - W_pos) % N
F_zone = N - S_zone - W_zone
else:
S_zone = (F_pos - S_pos) % N
W_zone = 0
F_zone = N - S_zone
return f"{S_zone}-{W_zone}-{F_zone}"