รูปปกบทความ สถาปัตยกรรมโปรแกรม Task และ Cyclic Scan

1. 🎯 ตอนที่ 7: สถาปัตยกรรมโปรแกรม: Task และ Cyclic Scan ทำงานอย่างไร?

2. 📖 เปิดฉาก (The Hook)

สวัสดีครับพี่น้องสายออโตเมชั่น! มาจิบกาแฟกางแบบแปลนกันต่อครับ เคยมีรุ่นน้องมาปรึกษาผมหน้าตู้คอนโทรลว่า “พี่ครับ ผมเขียนโปรแกรมเครื่องจักรยาวเหยียดรวมกันในหน้าเดียว พอเครื่องเริ่มซับซ้อนขึ้น ทำไม Cycle Time มันพุ่งสูงปรี๊ดจนเซ็นเซอร์อ่านค่าไม่ทัน แถมจะตามแก้บั๊กทีก็เลื่อนเมาส์หาโค้ดกันตาแฉะเลยครับ!”

นี่คือปัญหาคลาสสิกของคนที่เขียน PLC แบบ “ม้วนคัมภีร์ยาวๆ (Scroll)” ครับ! แต่รู้ไหมครับว่า OMRON ตระกูล CP-Series (รวมถึง CJ/CS) เขาออกแบบสถาปัตยกรรมโปรแกรมมาให้ล้ำกว่านั้น ด้วยการแบ่งโค้ดออกเป็น “การ์ดคำสั่ง” หรือที่เราเรียกว่า “Task” วันนี้ผมในฐานะรุ่นพี่ จะพาไปเจาะลึกหัวใจการทำงานของ PLC ว่าระบบ Cyclic Scan (รอบการทำงาน) มันอ่านโค้ดเรายังไง และเราจะแยกชิ้นส่วนโปรแกรมด้วย Cyclic Task และ Interrupt Task ให้เครื่องจักรทำงานไวปานสายฟ้าแลบได้อย่างไร!

3. 🧠 แก่นวิชาออโตเมชั่น (Core Concepts & Specs)

ก่อนจะไปแบ่งโปรแกรม เราต้องเข้าใจ “ชีพจร” ของ PLC ก่อนครับ PLC ไม่ได้ทำงานพร้อมกันทุกบรรทัด แต่ทำงานเป็นลูปวนลูปซ้ำๆ ที่เรียกว่า Cyclic Scan โดยแบ่งเป็นสเต็ปตามคู่มือเป๊ะๆ ดังนี้:

  1. Overseeing (เช็กความพร้อม): ตรวจสอบฮาร์ดแวร์ แบตเตอรี่ และสถานะต่างๆ
  2. Program Execution (รันโค้ด): ซีพียูเริ่มอ่านโปรแกรม Ladder Logic จากซ้ายไปขวา บนลงล่าง (คำนวณและประมวลผลลอจิก)
  3. Cycle Time Calculation (คำนวณเวลา): จับเวลาว่ารอบนี้ใช้เวลาประมวลผลไปกี่มิลลิวินาที
  4. I/O Refreshing (อัปเดตสถานะ): จุดนี้สำคัญมาก! PLC จะนำผลลัพธ์ที่คำนวณได้ ส่งออกไปที่ Output Terminals และรับค่าสถานะล่าสุดจาก Input Terminals (Sensor/Switch) เข้ามาจำไว้ใน Memory เพื่อใช้รันในรอบถัดไป
  5. Peripheral Servicing (บริการอุปกรณ์เสริม): แลกเปลี่ยนข้อมูลกับพอร์ต USB, Serial, หรือ Network ต่างๆ

ระยะเวลาที่ใช้ตั้งแต่ขั้นตอน 1 ถึง 5 เราเรียกว่า Scan Time (หรือ Cycle Time) ถ้ารอบนี้ใช้เวลานานเกินไป เครื่องก็จะตอบสนองช้าครับ!

การแบ่งโปรแกรมด้วย Task (Task Architecture): ในอดีต โปรแกรม PLC เหมือนม้วนคัมภีร์ (Scroll) ยาวๆ ที่ CPU ต้องอ่านตั้งแต่ต้นจนจบ แต่ใน CP-Series โปรแกรมถูกซอยย่อยเป็น Task (สูงสุด 288 Tasks) เปรียบเหมือน “แฟ้มการ์ดคำสั่ง” ที่แยกหมวดหมู่ชัดเจน โดยแบ่งเป็น 2 ประเภททหารเอก:

  • Cyclic Task (ทหารยามเดินลาดตระเวน): มีได้สูงสุด 32 Tasks (No. 0-31) ซีพียูจะเรียกทำงานเรียงตามลำดับเบอร์ 0 ไปถึง 31 ในช่วง Program Execution ความเจ๋งคือเราสามารถสั่ง “พักงาน (Standby)” หรือ “เรียกตัว (READY)” ทหารยามเหล่านี้ได้ หาก Task ไหนถูกพัก ซีพียูจะข้ามไปเลย ทำให้ Cycle Time ลดลงอย่างมาก!
  • Interrupt Task (หน่วยสวาท VIP): มีได้สูงสุด 256 Tasks เป็น Task งานด่วนพิเศษ! ไม่ต้องรอรอบ Cyclic Scan หากมีเหตุการณ์ฉุกเฉิน (เช่น เซ็นเซอร์ High-speed จับสัญญาณได้ หรือตั้งเวลา Timer ภายในไว้) ซีพียูจะ “หยุด” รัน Cyclic Task ชั่วคราว แล้วกระโดดมาทำ Interrupt Task ทันที! ทำเสร็จค่อยกลับไปรันโค้ดเดิมต่อ (เหมาะกับงานที่ต้องการการตอบสนองระดับ Microsecond!)
แผนผัง Cyclic Scan และ Task Execution ของ OMRON PLC

4. 💻 ร่ายมนต์โค้ดและวงจร (Logic & Wiring)

เพื่อความโปรระดับเซียน เราจะไม่รันทุกอย่างพร้อมกันครับ มาดูการใช้คำสั่งเปิด/ปิด Task อย่าง TKON (Task ON) และ TKOF (Task OFF) เพื่อสลับโหมด Manual / Auto โดยไม่ต้องเอาหน้า Contact ไปดักหน้าคอยล์ทุกตัวกันครับ!

// ------------------------------------------------------------
// [ตัวอย่าง: การสลับ Task ระหว่าง Manual และ Auto Mode]
// ------------------------------------------------------------
// สมมติว่า Task 0 = เมนคอนโทรล (รันตลอด)
// Task 1 = Auto Mode, Task 2 = Manual Mode

// ใน Task 0 (รันตั้งแต่ Startup)
// เมื่อบิดสวิตช์ Auto (CIO 0.01 ON) สั่งเปิด Task 1 และ ปิด Task 2
   0.01
---| |--------------------------------[ TKON 1 ]
                                  |
                                  +---[ TKOF 2 ]

// เมื่อบิดสวิตช์ Manual (CIO 0.02 ON) สั่งเปิด Task 2 และ ปิด Task 1
   0.02
---| |--------------------------------[ TKON 2 ]
                                  |
                                  +---[ TKOF 1 ]

/* 
   Comment สไตล์วิศวกร: 
   การเขียนแบบนี้ โค้ดในโหมด Auto และ Manual จะแยกส่วนกันชัดเจน! 
   ถ้าเราอยู่โหมด Auto โค้ดโหมด Manual (Task 2) จะไม่ถูกนำมาประมวลผลเลย 
   สแกนไทม์ (Cycle Time) ของเครื่องก็จะสั้นลง เครื่องรันได้เร็วขึ้นเยอะครับ!
*/

5. 🛡️ เคล็ดลับคนหน้างาน (Factory Floor Pro-Tips)

จากประสบการณ์คลุกฝุ่นหน้าเครื่องจักร นี่คือจุดที่ต้องระวังเวลาเล่นกับ Task ครับ:

  1. ข้อมูลเชื่อมถึงกันเสมอ (Shared Memory): แม้โค้ดจะแยกหน้ากัน (แยก Task) แต่ Memory Area (เช่น CIO, W, H, D) “ใช้ร่วมกัน (Global)” นะครับ! ห้ามใช้ Output Address เดียวกัน (Duplicate Coil) ไปสั่งงานซ้ำซ้อนในหลายๆ Task เด็ดขาด ไม่งั้นไฟออกอาการ “ผีหลอก” กระพริบติดๆ ดับๆ แน่นอน
  2. ระวัง Cycle Time Too Long (A401.08): ถ้าคุณเขียนลอจิกวนลูปใน Task หนักเกินไปจน Scan Time ทะลุค่า “Watch Cycle Time” (ค่า Default ตั้งไว้ที่ 1000 ms หรือ 1 วินาที) PLC จะมองว่าระบบค้าง (Fatal Error) สั่งหยุดรันทันทีและโชว์ไฟแดง! หากเครื่องคุณโค้ดใหญ่จริง ต้องไปปรับเพิ่มค่าที่หน้า PLC Setup > Timings ครับ
  3. ธงวิเศษ (Initial Task Execution Flag - A200.15): เวลาใช้คำสั่ง TKON เรียก Task ใดๆ ขึ้นมาทำงาน สแกนรอบแรกสุดของ Task นั้น บิต A200.15 จะเป็น ON เสมอ! วิศวกรเก๋าๆ จะใช้บิตนี้ในการโยนค่า Initial Value หรือรีเซ็ตค่าต่างๆ เข้าตู้แฟ้ม D Area เมื่อเริ่มทำงาน Task นั้นๆ ครับ โคตรมีประโยชน์!

6. 🏁 บทสรุป (To be continued…)

การเขียนโปรแกรมแบบแยก Task ไม่เพียงแค่ทำให้ Cycle Time ของ PLC ลดลง และตอบสนองอุปกรณ์ได้ไวขึ้นเท่านั้น แต่มันยังทำให้ “สถาปัตยกรรมโค้ด” ของคุณดูเป็นมืออาชีพ! เวลาเครื่องมีปัญหา ทีม Maintenance หรือเพื่อนร่วมงานสามารถเจาะเข้ามาดูทีละ Task ได้เลย ไม่ต้องไล่โค้ดยาวเป็นกิโลครับ

ในตอนหน้า เราจะมาดูชุดคำสั่งคลาสสิกอย่างกลุ่ม Timer / Counter รวมถึงความแตกต่างระหว่าง BCD กับ Binary ที่ช่างหลายคนมักจะเผลอใส่ค่าผิดจนเครื่องนับพลาดไปไกล เตรียม CX-Programmer ไว้ให้พร้อม แล้วพบกันครับ!


ต้องการที่ปรึกษาด้านการออกแบบตู้คอนโทรล, เขียนโปรแกรม PLC OMRON หรือปรับปรุงเครื่องจักรในโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบ Automation แบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p