ตอนที่ 7: สถาปัตยกรรมโปรแกรม: 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 โดยแบ่งเป็นสเต็ปตามคู่มือเป๊ะๆ ดังนี้:
- Overseeing (เช็กความพร้อม): ตรวจสอบฮาร์ดแวร์ แบตเตอรี่ และสถานะต่างๆ
- Program Execution (รันโค้ด): ซีพียูเริ่มอ่านโปรแกรม Ladder Logic จากซ้ายไปขวา บนลงล่าง (คำนวณและประมวลผลลอจิก)
- Cycle Time Calculation (คำนวณเวลา): จับเวลาว่ารอบนี้ใช้เวลาประมวลผลไปกี่มิลลิวินาที
- I/O Refreshing (อัปเดตสถานะ): จุดนี้สำคัญมาก! PLC จะนำผลลัพธ์ที่คำนวณได้ ส่งออกไปที่ Output Terminals และรับค่าสถานะล่าสุดจาก Input Terminals (Sensor/Switch) เข้ามาจำไว้ใน Memory เพื่อใช้รันในรอบถัดไป
- 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!)

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