Cascade Control — Outer Loop คุมอุณหภูมิ → Inner Loop คุมความดัน
ระบบ 2 loop ซ้อนกัน — outer (อุณหภูมิ ช้า) → setpoint ของ inner (ความดัน เร็ว) — ตอบสนอง disturbance ได้ดีกว่า PID เดียว
หลักการ
Cascade Control ใช้ 2 PID loop ซ้อนกัน:
SP_outer ──→ [Outer PID]──→ SP_inner ──→ [Inner PID]──→ Output
↑ ↑
PV_outer PV_inner
(slow) (fast)
ตัวอย่างคลาสสิก: เตา reactor ที่ต้องคุมอุณหภูมิด้วย steam jacket
- Outer loop: PV = อุณหภูมิ reactor (ช้า, ~5 นาทีตอบ), SP = 80°C
- Inner loop: PV = pressure ของ steam jacket (เร็ว, ~5 วินาทีตอบ), SP = ตามที่ outer loop คำนวณ
ทำไม Cascade ดีกว่า Single PID?
ลองดูสถานการณ์: steam pressure ในท่อขึ้นกระทันหัน (disturbance)
Single PID:
- Steam แรงขึ้น → flow ไปเตามากขึ้น → อุณหภูมิ slowly ขึ้น
- PID ค่อยๆ เห็นอุณหภูมิเกิน SP (ใช้เวลา)
- ลด valve → แต่ก่อนหน้า over-shoot ไปเยอะแล้ว
Cascade:
- Steam แรงขึ้น → pressure jump
- Inner PID เห็น pressure เกิน SP_inner (เร็วมาก) → ลด valve ทันที
- อุณหภูมิแทบไม่กระเทือน
สรุป — disturbance ที่เข้าสู่ inner loop ถูก reject ก่อนถึง outer loop
เมื่อใดใช้ Cascade?
- Inner process เร็วกว่า outer ≥ 3-5 เท่า (rule of thumb)
- มี measurable intermediate variable (เช่น pressure, flow ที่ไหลเข้า)
- Disturbance ผ่าน inner loop บ่อย (เช่น supply pressure แกว่ง)
ถ้าไม่ครบเงื่อนไข → ใช้ single PID พอ ไม่ต้องซับซ้อน
Implementation
ตัวอย่างนี้ใช้ PID แบบ P-only (ไม่มี integral) เพื่อ simplicity ถ้าต้องการ full PID ให้ใช้ EPID (Wizard-only ใน SamSoar2022)
Outer: Error_T = SP_T (D200) - PV_T (D100)
SP_P = K_outer × Error_T + Bias
Inner: Error_P = SP_P (D210) - PV_P (D101)
Valve = K_inner × Error_P + Center
K_outer = 5 (D202): กรณี Error_T = 1°C → SP_P เพิ่ม 5 kPa
K_inner = 10 (D212): กรณี Error_P = 1 kPa → Valve เพิ่ม 10 (×0.1%)
ลำดับการทำงาน
First scan
↓
SP_T = 80.0°C (D200 = 800)
SP_P_offset (bias) = 50 kPa (D203)
K_outer = 5 (D202)
K_inner = 10 (D212)
PV_P_default = 50 (D211 — used if outer not running)
↓
Read sensors:
D100 = อุณหภูมิ ×0.1°C (e.g. 750 = 75.0°C)
D101 = ความดัน ×0.1 kPa (e.g. 480 = 48.0 kPa)
↓
Outer loop (every scan):
Err_T = D200 - D100 → D300
Out_T = K_outer × Err_T → D310
SP_P = D203 + D310 → D210
↓
Inner loop (every scan):
Err_P = D210 - D101 → D320
Out_P = K_inner × Err_P → D330
Valve = K500 + D330 → D400 (×0.1% — clamp 0-1000)
ขยายเพิ่ม
- PI / PID แทน P-only — ลด steady-state error
- Anti-windup — clamp integral term เมื่อ output saturate
- Mode switching — manual / auto (M coil สลับ source ของ output)
- HMI tuning — เปิด D202, D212 ให้ผู้ใช้ปรับเอง
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X0 | ปุ่ม Start (NO) | |
| X1 | ปุ่ม Stop (NC) |
Parameters ที่ปรับได้
D100default: —PV outer (อุณหภูมิ ×0.1°C — เช่นจาก RTD module)
D101default: —PV inner (ความดัน ×0.1 kPa — เช่นจาก pressure transmitter)
D200default: 800 (80.0°C)Setpoint outer (HMI เขียนค่า)
D202default: 5K_outer — Gain ของ Outer P-control. ค่ามาก = ตอบสนองเร็ว แต่แกว่งมากขึ้น
D203default: 500 (50 kPa)Outer bias — ค่า SP_P ที่ steady-state เมื่อ error = 0
D210default: คำนวณSP_inner — คำนวณอัตโนมัติจาก Outer Loop
D212default: 10K_inner — Gain ของ Inner P-control. Inner เร็ว → K สูงได้
D400default: คำนวณ (0-1000)Output ของวาล์ว ×0.1% (clamped 0-100%) — ส่งไปยัง analog output module
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
ทำไมไม่ใช้ EPID instruction?
EPID ของ SamSoar2022 ต้อง configure ใน Wizard UI (ไม่ import จาก CSV) และซับซ้อนกว่าตัวอย่าง simplicity ตัวอย่างนี้แสดงโครงสร้าง cascade ด้วย P-only เพื่อให้เข้าใจ concept ก่อน — งานจริงควร upgrade เป็น EPID พร้อม integral และ derivative
ค่า D203 (bias = 500) คืออะไร?
เป็น 'steady-state SP_P' — ค่าเริ่มต้นของ pressure setpoint ที่จะให้อุณหภูมิคงที่ที่ SP_outer (เช่น 80°C ต้องการ steam pressure 50 kPa) เมื่อ error = 0, SP_P = bias เพื่อ maintain process. หาค่านี้จากการทดลองเปิด valve คงที่ดูว่าค่า pressure ที่อุณหภูมิ steady = เท่าไร
ทำไม inner loop ต้องเร็วกว่า outer?
ถ้า inner ช้าเท่าหรือใกล้เคียง outer → ระบบจะแกว่ง (oscillate) เพราะ inner ยังไม่ทันแก้ไขก่อน outer คำนวณใหม่ Rule of thumb: time constant inner ≤ 1/3-1/5 ของ outer ตัวอย่างนี้ pressure response ~2s, temperature response ~10-30s → ratio 1/5-1/15 ดีมาก
ทำไมต้อง clamp valve 0-1000?
Output ของ analog module Samkoon คือ 0-4095 หรือ 0-1000 (กลับเป็น %, ×0.1%) ถ้าไม่ clamp อาจมีค่าติดลบหรือเกิน 100% — driver wizard อาจตีความผิด หรือ valve ช่วงผิด ตามมาตรฐานต้อง saturate ที่ 0% และ 100% เสมอ — และต่อมาควรเพิ่ม anti-windup integral เมื่อ saturate
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
cascade-control.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC
