หน้าแรกคู่มือPLCเทคนิคขั้นสูงสอนการเขียน PID Control ใน PLC พร้อมตัวอย่าง PWM และทฤษฎี
PLC
เริ่มต้น
45 นาที

สอนการเขียน PID Control ใน PLC พร้อมตัวอย่าง PWM และทฤษฎี

เรียนรู้การเขียน PID Control ใน PLC แบบง่ายๆ ครบถ้วน ตั้งแต่ทฤษฎี PWM การควบคุม On-Off จนถึงการปรับ PID Parameter พร้อมตัวอย่างการควบคุมอุณหภูมิ

อัพเดทล่าสุด: 8/3/2569

ราคาชุดอุปกรณ์

฿18,220

การเขียน PID Control ใน PLC

การควบคุม PID (Proportional-Integral-Derivative) เป็นเทคนิคสำคัญในระบบอัตโนมัติ ในบทความนี้จะสาธิตการเขียน PID Control ทั้งทฤษฎีและปฏิบัติด้วยตัวอย่างการต้มน้ำร้อนให้ได้อุณหภูมิ 50 องศาเซลเซียส

ระบบควบคุมพื้นฐาน

องค์ประกอบของระบบ

ระบบการต้มน้ำประกอบด้วย 3 ส่วนหลัก:

  1. Controller (PLC): รับค่า Set Value (SV) และออก Output ไปควบคุม Process
  2. Process (Heater): ตัวต้มน้ำที่ถูกควบคุม
  3. Sensor: อ่านค่า Process Variable (PV) ส่งกลับไปยัง Controller

การเชื่อมต่อวงจร:

  • ใช้ PT-100 Sensor แบบ 3-wire เชื่อมต่อกับ PLC
  • Output ใช้ Transistor ขับ SSR (Solid State Relay) ควบคุม Heater
  • สำหรับ HMI ใช้ Twin1 รุ่น 4.3" หรือ 7" กับ Module FX4BT

PWM (Pulse Width Modulation)

หลักการทำงาน

PWM เป็นเทคนิคการออก Output ที่มีค่าอยู่ระหว่าง 0-100% โดยการปรับ Duty Cycle:

  • Duty Cycle 25%: Output ติด 25% ของเวลา
  • Duty Cycle 75%: Output ติด 75% ของเวลา
  • Duty Cycle 100%: Output ติดตลอด

การเขียน PWM Code

ladder
// กำหนด Period = 2000 ms (2 วินาที)
TON T0, K20  // 20 x 100ms = 2000ms

// ควบคุม Duty Cycle
CMP D14, T0  // เปรียบเทียบค่า D14 กับเวลาปัจจุบัน
OUT Y0       // Output ตาม Duty Cycle

ตัวอย่างการใช้งาน:

  • D14 = 0: Output ปิดตลอด (0%)
  • D14 = 1000: Output ติด 1 วิ ปิด 1 วิ (50%)
  • D14 = 2000: Output ติดตลอด (100%)

การควบคุมแบบ On-Off

ปัญหาของ On-Off Control

การใช้วิธี On-Off Control พื้นฐาน:

ladder
// ถ้าอุณหภูมิต่ำกว่า Setpoint -> เปิด Heater เต็ม
CMP< D12, D10    // PV < SV
MOVD K2000, D14  // Output 100%

// ถ้าอุณหภูมิสูงกว่า Setpoint -> ปิด Heater
CMP> D12, D10    // PV > SV
MOVD K0, D14     // Output 0%

ปัญหาที่เกิด:

  • เกิด Overshoot (อุณหภูมิสูงเกิน Setpoint)
  • ระบบไม่เสถียร เกิดการแกว่งขึ้นลง
  • ไม่เหมาะกับระบบที่มี Thermal Mass สูง

ทฤษฎี PID Control

การคำนวณ Error

สิ่งแรกที่ต้องคำนวณคือค่า Error:

Error = SV - PV

เช่น: SV = 50°C, PV = 45°C → Error = 5°C

P-Control (Proportional)

สูตร: P = KP × Error

ladder
SUBD D10, D12, D20  // Error = SV - PV
DTOF D20, D22       // แปลง Error เป็น Float
MULF D22, D6200, D24 // P = Error × KP

คุณสมบัติ:

  • ง่ายต่อการเข้าใจ
  • มี Steady State Error (ไม่สามารถลู่เข้าสู่ Setpoint ได้)
  • KP สูงเกินไป จะทำให้ระบบไม่เสถียร

I-Control (Integral)

สูตร Continuous: I = KI × ∫Error dt

สูตร Discrete: I(k) = I(k-1) + (KP/TI) × Error

ladder
// คำนวณ Integral Term
MULF D22, D6200, D26    // Error × KP
DIVF D26, D6400, D26    // หารด้วย TI
ADDF D26, D28, D26      // บวกกับ I ตอนก่อน
MOVF D26, D28          // เก็บค่าสำหรับรอบต่อไป

คุณสมบัติ:

  • แก้ปัญหา Steady State Error
  • ทำให้ระบบลู่เข้าสู่ Setpoint ได้
  • อาจทำให้เกิด Overshoot

D-Control (Derivative)

สูตร Continuous: D = KD × dError/dt

สูตร Discrete: D = KP × TD × (Error(k) - Error(k-1))

ladder
// คำนวณ Derivative Term
SUBF D22, D32, D34      // Error ปัจจุบัน - Error ก่อน
MULF D34, D6200, D34    // คูณ KP
MULF D34, D6600, D34    // คูณ TD
MOVF D22, D32          // เก็บ Error ปัจจุบันไว้ใช้รอบต่อไป

คุณสมบัติ:

  • ลดการ Overshoot
  • ปรับปรุงการตอบสนองของระบบ
  • ทำให้ระบบเสถียรขึ้น

การเขียน PID แบบครบถ้วน

โครงสร้าง Main Program

ladder
// เริ่ม PID Control
LD M2          // สวิตช์เริ่ม PID
PULSE M5       // สร้าง Pulse เริ่มต้น
CALL P_SELF_PID // เรียกใช้ Subroutine

Subroutine Self PID

ladder
// การกำหนดค่าเริ่มต้น
LD M5
RST T10        // Reset Timer
MOVF K0, D28   // Clear Integral term
MOVF K0, D32   // Clear Previous Error

// Cycle Timing (ทุก 1 วินาที)
TON T10, D6000
LD T10
SET M6

// การคำนวณ PID
LD M6
// คำนวณ Error
SUBD D10, D12, D20  // SV - PV
DTOF D20, D22       // แปลงเป็น Float

// P Term
MULF D22, D6200, D24 // Error × KP

// I Term (ถ้า M7501 ปิด)
LDN M7501
MULF D22, D6200, D26
DIVF D26, D6400, D26
ADDF D26, D28, D26
MOVF D26, D28

// D Term (ถ้า M7502 ปิด)
LDN M7502
SUBF D22, D32, D34
MULF D34, D6200, D34
MULF D34, D6600, D34
MOVF D22, D32

// รวม P+I+D
ADDF D24, D26, D30
ADDF D30, D34, D30

// จำกัดค่า Output (0-2000)
CMPF> D30, K2000
MOVF K2000, D30
CMPF< D30, K0
MOVF K0, D30

// Output สุดท้าย
FTOD D30, D14  // แปลงเป็น Integer สำหรับ PWM

การตั้งค่าพารามิเตอร์

ค่าพารามิเตอร์สำคัญ

  • D6000: Sampling Time (ms) - แนะนำ 1000 (1 วินาที)
  • D6200: KP - ค่าความแรงของ Proportional
  • D6400: TI - Integral Time (วินาที)
  • D6600: TD - Derivative Time (วินาที)

เทคนิค Auto-Tuning

ใช้วิธี Ziegler-Nichols หรือ Auto-Tuning:

  1. เซ็ต I และ D เป็น 0
  2. เพิ่ม KP จนระบบเริ่มแกว่ง
  3. บันทึกค่า KP critical และ Period การแกว่ง
  4. คำนวณพารามิเตอร์ตามสูตร Ziegler-Nichols

การแก้ปัญหาที่พบบ่อย

ระบบไม่เสถียร (Oscillation)

สาเหตุ:

  • KP สูงเกินไป
  • TI น้อยเกินไป (KI สูงเกินไป)

วิธีแก้:

  1. ลด KP ลง 20-30%
  2. เพิ่ม TI (ลด KI)
  3. เพิ่ม TD เล็กน้อย

มี Steady State Error

สาเหตุ:

  • ไม่ได้ใช้ I-Control
  • TI สูงเกินไป (KI ต่ำเกินไป)

วิธีแก้:

  1. เปิดใช้ I-Control (ปิด M7501)
  2. ลดค่า TI

เกิด Overshoot มาก

สาเหตุ:

  • KP หรือ KI สูงเกินไป
  • ไม่ได้ใช้ D-Control

วิธีแก้:

  1. เปิดใช้ D-Control (ปิด M7502)
  2. เพิ่มค่า TD
  3. ลด KP หรือเพิ่ม TI

ระบบตอบสนองช้า

สาเหตุ:

  • KP ต่ำเกินไป
  • TI สูงเกินไป

วิธีแก้:

  1. เพิ่ม KP
  2. ลด TI (เพิ่ม KI)

เคล็ดลับการปรับแต่ง

  1. เริ่มต้นด้วย P-Control: ตั้ง I และ D เป็น 0 ก่อน
  2. ปรับทีละตัว: อย่าปรับหลายพารามิเตอร์พร้อมกัน
  3. บันทึกค่า: เก็บค่าที่ได้ผลดีไว้เป็นอ้างอิง
  4. ทดสอบ Disturbance: ลองเปลี่ยนภาระหรือสภาวะแวดล้อม
  5. ใช้ Data Logging: เก็บข้อมูลเพื่อวิเคราะห์ผลการควบคุม

สรุป

การเขียน PID Control เองใน PLC ช่วยให้เข้าใจหลักการทำงานของระบบควบคุมอย่างลึกซึ้ง แม้จะซับซ้อนกว่าการใช้ Function Block สำเร็จรูป แต่ให้ความยืดหยุ่นในการปรับแต่งและแก้ไขปัญหา

ข้อดีของการเขียนเอง:

  • เข้าใจหลักการทำงานอย่างถ้วนถี่
  • สามารถปรับแต่งได้ตามความต้องการ
  • แก้ปัญหาได้อย่างตรงจุด
  • ไม่ต้องพึ่งพา Function Block ของผู้ผลิต

ข้อควรระวัง:

  • ต้องทำความเข้าใจทฤษฎีก่อน
  • การ Debug ใช้เวลามากกว่า
  • ต้องระวังการ Overflow ของตัวแปร
  • จำเป็นต้องมีการป้องกันค่าผิดปกติ

การฝึกฝนด้วยตัวอย่างการต้มน้ำเป็นจุดเริ่มต้นที่ดี เพราะสามารถทำได้ง่ายและเข้าใจผลการทำงานได้ชัดเจน