Advanced
14 rungs
2 I/O

Cascade Control — Outer Loop คุมอุณหภูมิ → Inner Loop คุมความดัน

Cascade Control (Outer Temp → Inner Pressure)

ระบบ 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:

  1. Steam แรงขึ้น → flow ไปเตามากขึ้น → อุณหภูมิ slowly ขึ้น
  2. PID ค่อยๆ เห็นอุณหภูมิเกิน SP (ใช้เวลา)
  3. ลด valve → แต่ก่อนหน้า over-shoot ไปเยอะแล้ว

Cascade:

  1. Steam แรงขึ้น → pressure jump
  2. Inner PID เห็น pressure เกิน SP_inner (เร็วมาก) → ลด valve ทันที
  3. อุณหภูมิแทบไม่กระเทือน

สรุป — 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

Cascade Control — Outer Loop คุมอุณหภูมิ → Inner Loop คุมความดัน — Cascade Control (Outer Temp → Inner Pressure)
ระบบ 2 loop ซ้อนกัน — outer (อุณหภูมิ ช้า) → setpoint ของ inner (ความดัน เร็ว) — ตอบสนอง disturbance ได้ดีกว่า PID เดียว
N0ตั้งค่า Tuning เริ่มต้น
First scan — Outer setpoint = 80.0°C, K_outer = 5, Bias = 50.0 kPa
M8150MOVK800, D200
First scan — K_outer (gain)
M8150MOVK5, D202
First scan — Outer bias (steady-state SP_P)
M8150MOVK500, D203
First scan — K_inner (gain)
M8150MOVK10, D212
N1วงจร Start/Stop
Latch Start/Stop
X0M0X1M0
N2Outer Loop (อุณหภูมิ P-control)
Outer error: Err_T = SP_T - PV_T → D300
M0SUBD200, D100, D300
Outer P-output: K_outer × Err_T → D310
M0MULD202, D300, D310
Outer SP: D210 (SP_P) = bias + Outer P-output
M0ADDD203, D310, D210
N3Inner Loop (ความดัน P-control)
Inner error: Err_P = SP_P - PV_P → D320
M0SUBD210, D101, D320
Inner P-output: K_inner × Err_P → D330
M0MULD212, D320, D330
N4Output Valve + Clamp
Output ของวาล์ว: D400 = 500 (center) + D330
M0ADDK500, D330, D400
Clamp ขีดบน: ถ้า D400 > 1000 → ตั้ง D400 = 1000
D400 > K1000MOVK1000, D400
Clamp ขีดล่าง: ถ้า D400 < 0 → ตั้ง D400 = 0
D400 < K0MOVK0, D400
บังคับปิดวาล์วเมื่อระบบหยุด
M0MOVK0, D400
Network count: 5, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

I/O Assignment

AddressRoleNote
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: 5

K_outer — Gain ของ Outer P-control. ค่ามาก = ตอบสนองเร็ว แต่แกว่งมากขึ้น

D203default: 500 (50 kPa)

Outer bias — ค่า SP_P ที่ steady-state เมื่อ error = 0

D210default: คำนวณ

SP_inner — คำนวณอัตโนมัติจาก Outer Loop

D212default: 10

K_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

  1. ดาวน์โหลดไฟล์ cascade-control.csv จากแท็บ CSV ด้านบน
  2. เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
  3. เมนู File → Import → เลือกไฟล์ .csv ที่เพิ่งดาวน์โหลด
  4. กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
  5. ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC