ควบคุมเปิด/ปิดแบบมี hysteresis (Bang-Bang)
ควบคุมฮีตเตอร์ 2 จุดตัด — เปิดที่ SP-2°C, ปิดที่ SP+2°C — ป้องกัน output กระตุก (chatter) จากสัญญาณรบกวน
หลักการ
ระบบควบคุมแบบ On/Off (Bang-Bang) เปิด/ปิด actuator ตาม setpoint ใช้ในงานที่ไม่ต้องการความแม่นยำสูง เช่น:
- ตู้เย็น (compressor on/off)
- ปั๊มน้ำในแท็งก์ (level on/off)
- ฮีตเตอร์ในตู้อบ (heater on/off)
ปัญหาของ On/Off ธรรมดา
ถ้าใช้แค่ AW>= D100 D200 เปิดฮีตเตอร์, AW< D100 D200 ปิด:
อุณหภูมิ: 49.9 → 50.0 → 50.1 → 50.0 → 49.9 → 50.0 ...
Output: ON → OFF → ON → OFF → ON → OFF
Chatter — output สลับ ON/OFF เร็วมากที่จุด setpoint ส่งผลเสีย:
- คอนแทคเตอร์ไหม้เร็ว (relay/contactor ถูกออกแบบมาให้สลับช้าๆ)
- ฮีตเตอร์อายุสั้น (thermal cycling stress)
- เสียงดังรบกวน
วิธีแก้: Hysteresis (Deadband)
แทนที่จะใช้ setpoint จุดเดียว ใช้ 2 จุด:
- SP_LOW = SP − 2°C (เปิด heater)
- SP_HIGH = SP + 2°C (ปิด heater)
อุณหภูมิ
55│ ____
│ ____/ \____
52│ ____/ \____ ← ปิดที่นี่ (52°C)
50│ Setpoint ──────────────────── ← เป้าหมาย (50°C)
48│ ──────── ← เปิดที่นี่ (48°C)
│
Output ติด/ดับช้าๆ (cycle 5-10 นาที) แทน ms — actuator อายุยาวขึ้น แต่อุณหภูมิไม่นิ่งจริงๆ มัน oscillate ±2°C รอบ setpoint
Logic Implementation
ใช้ SET/RST (latching) แทน OUT — ปลอดภัยจากการ flicker
LDW< D100 K480 // อุณหภูมิ < 48.0°C (×0.1)
SET Y0 // เปิด heater (latch)
LDW> D100 K520 // อุณหภูมิ > 52.0°C
RST Y0 // ปิด heater (unlatch)
ระหว่าง 48–52°C output คงเดิม (ไม่เปลี่ยน) — นั่นคือ deadband
ลำดับการทำงาน
First scan
↓
D200 = 500 (SP = 50.0°C)
D201 = 20 (HYST = 2.0°C)
↓
Read sensor → D100 (×0.1°C, e.g. 489 = 48.9°C)
↓
Calc thresholds:
D210 = D200 - D201 = 480 (SP_LOW = 48.0)
D211 = D200 + D201 = 520 (SP_HIGH = 52.0)
↓
LDW< D100 D210 → SET Y0 (เปิด heater)
LDW> D100 D211 → RST Y0 (ปิด heater)
ขยายเพิ่ม
- Asymmetric hysteresis — เปิดเร็ว, ปิดช้า (เช่น turn-on at -1°C, turn-off at +5°C)
- Compressor lockout — เพิ่ม timer ป้องกันคอมเปิด-ปิดซ้ำใน 5 นาที (ตู้เย็น)
- HMI tuning — ผู้ใช้กรอก SP, HYST จาก HMI โดยเขียนเข้า D200, D201
เปรียบเทียบกับ PID
| On/Off (this) | PID | |
|---|---|---|
| Accuracy | ±hyst (e.g. ±2°C) | ±0.5°C |
| Cost | ฟรี (relay/contactor) | ต้อง analog output + tuning |
| Complexity | 5 rungs | parameter tuning + EPID |
| Use case | ตู้เย็น, ฮีตเตอร์ใหญ่ | extruder, oven, reactor |
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X0 | ปุ่ม Start (NO) | |
| X1 | ปุ่ม Stop (NC) | |
| Y0 | คอนแทคเตอร์ฮีตเตอร์ | ส่งไปที่ relay/SSR ขนาดเหมาะกับฮีตเตอร์ |
Parameters ที่ปรับได้
D100default: —Process value (อุณหภูมิปัจจุบัน ×0.1°C) — อ่านจาก analog module / RTD module
D200default: 500 (50.0°C)Setpoint ×0.1 — HMI เขียนค่าเข้า register นี้
D201default: 20 (2.0°C)Hysteresis ครึ่งช่วง — เพิ่ม = chatter น้อยลง, ลด = ควบคุมแม่นขึ้น
D210 / D211default: คำนวณขีดจำกัดล่าง / บน — คำนวณอัตโนมัติทุก scan
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
ค่า D100 มาจากไหน?
อ่านจาก analog input หรือ RTD/TC module เช่น Samkoon F-Series มี F-RTD-04 (อ่าน RTD 4 ช่อง) ค่าออกมาเป็น ×0.1°C ตรงๆ ถ้าใช้ analog module 4-20mA ต้องแปลงค่าเองโดย MUL/DIV
ทำไมใช้ SET/RST ไม่ใช้ OUT?
OUT จะ ON เฉพาะตอน contact เป็น TRUE — ระหว่าง 48-52°C contact ทั้งคู่เป็น FALSE ทำให้ Y0 ดับ (ไม่ใช่ผลที่ต้องการ) SET/RST ทำให้ Y0 "จำ" สถานะล่าสุดไว้ — ON ตั้งแต่อุณหภูมิ < 48 จนกว่าจะ > 52 ค่อย OFF
ทำไมต้องคำนวณ SP_LOW / SP_HIGH ทุก scan?
เพื่อให้ HMI เปลี่ยน SP หรือ HYST ได้ทันที ถ้าผู้ใช้กรอก SP=60 ที่ HMI → D200=600 → next scan D210=580, D211=620 อัตโนมัติ ทางเลือก: คำนวณเฉพาะตอน HMI เปลี่ยน SP โดย LDP บน special bit
Hysteresis ±2°C เพียงพอไหม?
ขึ้นกับงาน: ตู้แช่ ±2°C ดีมาก, oven ±5°C OK, reactor เคมีอาจต้อง ±0.5°C — แต่ ±0.5 จะ chatter มาก ใช้ PID แทน เริ่มต้นที่ ±2°C แล้วค่อยปรับตามเสียง relay กับความนิ่งของ process
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
onoff-hysteresis.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC
