รูปปกบทความ การเขียนและจำลองโปรแกรมแรก

1. 🎯 ตอนที่ 5: การเขียนและจำลองโปรแกรมแรก (First ST Program & Simulation) ทดสอบโค้ดได้ไม่ต้องง้อฮาร์ดแวร์

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

จิบกาแฟกันครับน้องๆ… ถ้าย้อนกลับไปสมัยก่อน ตอนที่เราเพิ่งหัดเขียนโปรแกรม PLC ใหม่ๆ เวลาจะทดสอบโค้ดง่ายๆ อย่างปุ่มกดเปิด-ปิดมอเตอร์ เราต้องทำยังไงครับ? เราต้องมีตัว PLC วางอยู่บนโต๊ะ ต้องมานั่งปอกสายไฟ ต่อสวิตช์ ต่อหลอดไฟเข้ากับ I/O Module แล้วโหลดโปรแกรมลงไป ถ้ากดแล้วไฟไม่ติด… ทีนี้งานงอกเลยครับ! ไม่รู้ว่าเป็นเพราะเขียนโค้ดผิด, ต่อสายไฟผิดขา, หรือสวิตช์เสียกันแน่ เสียเวลา Debug กันเป็นชั่วโมง

แต่ในยุคปัจจุบันที่เรามีซอฟต์แวร์ระดับโลกอย่าง CODESYS ชีวิตเราจะง่ายขึ้นราวกับมีเวทมนตร์ครับ! เพราะ CODESYS มาพร้อมกับฟีเจอร์ที่เรียกว่า Simulation Mode (หรือ Soft PLC Simulator) ที่จำลองเครื่อง PLC เสมือนจริงขึ้นมาบนคอมพิวเตอร์ของเราเลย น้องๆ สามารถเขียนโค้ด Structured Text (ST) แล้วสั่ง Run เพื่อดูผลลัพธ์การทำงานของ Logic ได้ทันทีโดยไม่ต้องต่อสายไฟแม้แต่เส้นเดียว วันนี้พี่จะพามาจับมือทำ Step-by-Step ตั้งแต่เขียนโค้ดบรรทัดแรก ไปจนถึงการจำลองการทำงานกันครับ ลุย!

3. 🧠 แก่นวิชา (Core Concepts)

ก่อนจะไปเขียนโค้ด เรามาทำความเข้าใจกระบวนการทำงานของ Simulation Mode ใน CODESYS กันก่อนครับ

  • Simulation Mode: คือโหมดที่ตัดการเชื่อมต่อกับฮาร์ดแวร์จริง (Physical Target Device) แล้วหันไปรันโปรแกรมบน “ตัวจำลอง (Simulated Target Device)” ที่อยู่ใน RAM ของคอมพิวเตอร์เราแทน ทำให้เราทดสอบ POU ต่างๆ ได้อย่างปลอดภัย
  • Prepared Value: ในโหมดจำลอง เราไม่มีสวิตช์จริงให้กด เราจึงต้องใช้เมาส์คลิกเตรียมค่าไว้ก่อน (เช่น เตรียมค่าให้เป็น TRUE) เปรียบเสมือนการเอานิ้วไปจ่อไว้ที่ปุ่ม
  • Write Values / Force Values: เมื่อเตรียมค่าเสร็จ เราต้องสั่งยืนยัน (Trigger) เพื่อโยนค่านั้นเข้าไปในวงจรสแกนของ PLC ซึ่งทำได้ 2 แบบคือ Write (เขียนค่าชั่วคราว) และ Force (ล็อกค่าถาวร)
ภาพ Flow การทำงานของ Simulation Mode ใน CODESYS

4. 💻 ร่ายมนต์โค้ดคอนโทรล (Logic & Implementation)

เรามาเริ่มโปรเจกต์แรกกันเลยครับ เป็นระบบควบคุมมอเตอร์ง่ายๆ แบบ Latch Circuit (มีปุ่ม Start และ Stop) ด้วยภาษา ST

Step 1: เขียนโค้ดใน POU (PLC_PRG) ไปที่หน้าต่าง Editor ของ PLC_PRG แล้วประกาศตัวแปรและเขียนลอจิกตามนี้ครับ:

PROGRAM PLC_PRG
VAR
    // --- ส่วนประกาศตัวแปร (Variable Declaration) ---
    StartButton : BOOL := FALSE; // สวิตช์เริ่มการทำงาน
    StopButton  : BOOL := FALSE; // สวิตช์หยุดการทำงาน
    MotorRun    : BOOL := FALSE; // สถานะการทำงานของมอเตอร์
END_VAR

// =================================================================
// --- ส่วนลอจิกโปรแกรม (Logic Control) ---
// =================================================================
// ถ้ากดปุ่ม Start และ ไม่ได้กดปุ่ม Stop (ใช้ NOT เพื่อกลับลอจิก)
IF StartButton AND NOT StopButton THEN
    MotorRun := TRUE;   // สั่งจ่ายไฟให้มอเตอร์ (Latch)

// แต่ถ้ากดปุ่ม Stop
ELSIF StopButton THEN
    MotorRun := FALSE;  // ตัดไฟมอเตอร์
END_IF;

Step 2: เปิดโหมด Simulation ที่แถบเมนูด้านบน ไปที่ Online -> เลื่อนลงมาติ๊กถูกที่คำว่า Simulation (สังเกตมุมขวาล่างของจอ จะมีตัวหนังสือสีแดงคำว่า SIMULATION ปรากฏขึ้น)

Step 3: Login ลงเครื่องจำลอง ไปที่เมนู Online -> Login (หรือกดปุ่มลัด Alt+F8) ระบบจะถามว่า “Application does not exist… Do you want to create it and proceed with download?” ให้กด Yes เพื่อโหลดโค้ดลงไปใน Simulator

Step 4: สั่งรันโปรแกรม (Start) ตอนนี้ PLC อยู่ในสถานะ STOP ให้ไปที่เมนู Debug -> Start (หรือกดปุ่ม F5) โค้ดของเรากำลังทำงานแล้วครับ!

Step 5: ทดสอบบังคับค่า (Write Values)

  1. ให้ดับเบิ้ลคลิกที่ช่องคอลัมน์ Prepared value ของตัวแปร StartButton จนค่าเปลี่ยนเป็นคำว่า TRUE (ตัวหนังสือสีน้ำเงิน)
  2. กดปุ่ม Ctrl+F7 (หรือ Debug -> Write values) เพื่อยืนยันการกดปุ่ม
  3. สังเกตที่ตัวแปร MotorRun ค่าจะเปลี่ยนจาก FALSE เป็น TRUE (มอเตอร์ทำงานแล้ว!)
  4. ทดลองดับเบิ้ลคลิกที่ตัวแปร StopButton ให้เป็น TRUE แล้วกด Ctrl+F7 มอเตอร์ก็จะหยุดทำงาน (MotorRun กลับเป็น FALSE) ครับ

5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)

สำหรับมือใหม่ มีจุดปราบเซียนที่มักจะงงกันบ่อยๆ ในโหมด Simulation ที่พี่อยากเตือนไว้ครับ:

  • Write Values vs Force Values: การกด Ctrl+F7 (Write Values) คือการเขียนค่าลงไปในรอบสแกนนั้น 1 ครั้ง (เหมือนเอานิ้วกดปุ่มแล้วปล่อย) หากลอจิกในโค้ดสั่งทับ มันจะเปลี่ยนตามโค้ด แต่การกด F7 (Force Values) คือการ “ล็อกค่า” ไว้เลย ไม่ว่าโค้ดจะสั่งให้เป็นอะไร ค่าที่ Force ไว้จะไม่มีวันเปลี่ยน (เหมือนเอาเทปกาวไปแปะสวิตช์ค้างไว้) ซึ่งอันตรายมากเวลาทำหน้างานจริง ต้องจำให้แม่นครับ!
  • อย่าลืมปิด Simulation Mode: ปัญหาโลกแตกอันดับหนึ่ง! เมื่อเขียนโค้ดเสร็จแล้วจะเอาไปโหลดลงฮาร์ดแวร์จริง (Real Device) เช่น GCAN หรือ WAGO หลายคนลืมเอาติ๊กถูกที่ Online -> Simulation ออก ทำให้สแกนหาเครื่อง PLC ตัวจริงไม่เจอ แล้วก็หาว่าสาย LAN เสียบ้าง คอมพังบ้าง… ก่อนลงฮาร์ดแวร์จริง เช็คโหมดนี้ให้ดีครับ!
  • ค่า Initial Value: ในโค้ดพี่ใส่ := FALSE; ต่อท้ายตอนประกาศ BOOL เพื่อความชัดเจน แต่จริงๆ แล้วใน CODESYS ถ้าเราไม่ระบุ ค่าเริ่มต้นของตัวแปรประเภท BOOL จะเป็น FALSE อัตโนมัติอยู่แล้วครับ

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

จบกันไปแล้วครับสำหรับโปรแกรมแรกของเรา! ตอนนี้น้องๆ ก็สามารถเขียนโค้ด Structured Text (ST) พื้นฐาน และใช้ Simulation Mode เพื่อทดสอบลอจิกต่างๆ (Debugging) ได้ด้วยตัวเองราวกับมีเครื่องจักรจำลองอยู่บนโต๊ะทำงานแล้ว

ในตอนหน้า เราจะมาขยับความแอดวานซ์ขึ้นอีกนิด ด้วยการเอาโค้ดเหล่านี้มาแพ็กใส่กล่องที่เรียกว่า Function Block (FB) หรือการสร้าง “แม่พิมพ์” ชิ้นส่วนซอฟต์แวร์ที่เราสามารถก๊อปปี้ไปใช้กับมอเตอร์กี่ตัวก็ได้โดยไม่ต้องเขียนโค้ดซ้ำ! เตรียมตัวให้พร้อม แล้วพบกันครับ


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