跳至主要内容

控制邏輯與演算法

本頁說明 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 組態

組態DEFRrecycleD2Wash
1/2/2/100345
2/2-205234
2/2/20145
1-1/2/2003455

吸脫附組態

組態SS outWW outFF out
2-1-3012235
2-0-40125
3-0-30235

計算範例: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}"

延伸閱讀