Beginner
8 rungs
3 I/O

ควบคุมเปิด/ปิดแบบมี hysteresis (Bang-Bang)

On/Off Control with 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
Complexity5 rungsparameter tuning + EPID
Use caseตู้เย็น, ฮีตเตอร์ใหญ่extruder, oven, reactor

โปรแกรม PLC

ควบคุมเปิด/ปิดแบบมี hysteresis (Bang-Bang) — On/Off Control with Hysteresis (Bang-Bang)
ควบคุมฮีตเตอร์ 2 จุดตัด — เปิดที่ SP-2°C, ปิดที่ SP+2°C — ป้องกัน output กระตุก (chatter) จากสัญญาณรบกวน
N0ตั้งค่า Setpoint + Hysteresis เริ่มต้น
First scan — ตั้ง Setpoint = 50.0°C และ Hysteresis = 2.0°C (×0.1)
M8150MOVK500, D200
First scan — Hysteresis ±2.0°C (HMI เขียนค่าใหม่ได้)
M8150MOVK20, D201
N1คำนวณ Threshold
คำนวณ SP_LOW = SP - HYST → D210
M8151SUBD200, D201, D210
คำนวณ SP_HIGH = SP + HYST → D211
M8151ADDD200, D201, D211
N2ควบคุมฮีตเตอร์แบบ Bang-Bang
ฮีตเตอร์ติดเมื่ออุณหภูมิ < SP_LOW (D100 < D210) — latch ด้วย SET
D100 < D210M0SETY0
ฮีตเตอร์ดับเมื่ออุณหภูมิ > SP_HIGH (D100 > D211) — unlatch ด้วย RST
D100 > D211RSTY0
บังคับดับฮีตเตอร์เมื่อระบบหยุด (M0 OFF) — เพื่อความปลอดภัย
M0RSTY0
N3วงจร Start/Stop
Latch Start/Stop — Start (X0) + self-hold พร้อม Stop (NC X1)
X0M0X1M0
Network count: 4, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

I/O Assignment

AddressRoleNote
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

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