State Machine Design Pattern

คู่มือเขียน PLC ด้วย Structured Text (ST) Ep.5: สถาปัตยกรรม State Machine (The Sequence Logic)

ในฐานะ CODESYS Solutions Architect ผมขอแนะนำว่าคุณมาถูกทางแล้วครับ การเปลี่ยนจาก Logic แบบ “If-This-Then-That” ที่พันกันยุ่งเหยิง (Spaghetti Code) มาเป็น State Machine Design Pattern คือก้าวสำคัญที่จะเปลี่ยนคุณจาก “คนเขียน PLC ทั่วไป” ให้เป็น “Automation Software Engineer” ครับ สำหรับ C# Developer แนวคิดนี้คือการนำ State Design Pattern มาใช้คู่กับโครงสร้าง switch...case เพื่อควบคุม Flow การทำงานของเครื่องจักรให้เป็นระเบียบและคาดเดาได้ครับ 1. Concept: State Variable & CASE Statement ใน C# คุณอาจคุ้นเคยกับ enum และ switch เพื่อจัดการ State ของ Application ใน CODESYS เราก็ทำแบบเดียวกันครับ: State Variable: คือตัวแปรที่ทำหน้าที่เป็น “Pointer” บอกว่าตอนนี้เครื่องจักรอยู่ที่ขั้นตอนไหน (Step ไหน) โดยเรามักจะใช้ INT (0, 10, 20…) หรือ ENUM (Idle, Run, Error) CASE Statement: คือคำสั่งที่ใช้แยกการทำงานของแต่ละ State ออกจากกันอย่างเด็ดขาด ในแต่ละรอบสแกน (PLC Cycle) จะมีเพียง 1 State เท่านั้น ที่ถูกประมวลผล กฎเหล็กของ State Machine: ...

1 กุมภาพันธ์ G 2026 · 3 นาที · Wisit P. (Senior Architect)
Function Blocks in ST

คู่มือเขียน PLC ด้วย Structured Text (ST) Ep.4: การเรียกใช้ Function Block มาตรฐาน (Timers & Triggers)

ในฐานะ CODESYS Solutions Architect ยินดีต้อนรับสู่โลกของ IEC 61131-3 ครับ สำหรับ C# Developer การทำความเข้าใจ Function Block (FB) นั้นง่ายมากครับ ให้มองว่า Function Block คือ “Class” ใน C# ครับ ก่อนใช้งาน ต้อง Instantiate (ประกาศตัวแปร) ก่อนเสมอ (เหมือน new Timer()) FB มี Memory/State (จำค่าเก่าได้ เช่น เวลาที่นับค้างไว้ หรือสถานะปุ่มรอบที่แล้ว) การเรียกใช้ (Call) คือการสั่งให้ Object นั้นทำงานในรอบสแกน (Cyclic Scan) นั้นๆ นี่คือ Best Practices ในการใช้งาน Standard Libraries (TON, R_TRIG) ในภาษา ST ครับ 1. วิธีการประกาศตัวแปร Instance (Declaration) ใน CODESYS เราไม่ใช้ keyword new ในการสร้าง Object แต่เราจะประกาศในส่วน VAR ครับ การประกาศนี้ระบบจะจอง Memory ให้โดยอัตโนมัติ ...

31 มกราคม G 2026 · 3 นาที · Wisit P. (Senior Architect)
Loops and Arrays in CODESYS

คู่มือเขียน PLC ด้วย Structured Text (ST) Ep.3: การวนลูปและการจัดการข้อมูลชุด (Loops & Arrays)

ในฐานะ CODESYS Solutions Architect ผมขอแสดงความยินดีที่คุณเริ่มเห็นพลังของ Structured Text (ST) ครับ นี่คือจุดที่ C# Developer จะได้เปรียบอย่างมหาศาล เพราะการจัดการข้อมูลจำนวนมาก (Arrays) และการวนซ้ำ (Loops) ใน Ladder Logic นั้นค่อนข้างยุ่งยากและกินพื้นที่หน้าจอ แต่ใน ST คุณสามารถเขียนจบได้ในไม่กี่บรรทัดครับ บทความนี้เราจะเจาะลึกเรื่องการวนลูป โดยเน้นเรื่อง “ความปลอดภัยในระดับอุตสาหกรรม” ที่ Dev สาย PC มักจะพลาดกันครับ 1. FOR Loop และการจัดการ Array (The Power of Iteration) ใน C# คุณคุ้นเคยกับ for (int i=0; i<n; i++) ใช่ไหมครับ? ใน CODESYS ST ก็ทำงานเหมือนกัน แต่ Syntax จะออกไปทางภาษา Pascal ครับ จุดที่ต้องระวังสำหรับ C# Dev: 1-Based Indexing: แม้เราจะประกาศ Array เริ่มที่ 0 ได้ แต่ในวงการ PLC นิยมประกาศเริ่มที่ 1 (เช่น 1..100) เพื่อให้ตรงกับ Tag name หรือเอกสารทางไฟฟ้า Boundaries: CODESYS เคร่งครัดเรื่อง Array Bounds มาก ถ้าหลุด Range อาจเกิด Exception จน Controller หยุดทำงานได้ (ในโปรเจกต์จริงควรใช้ฟังก์ชัน CheckBounds ช่วย) ตัวอย่าง: การ Reset ค่าการผลิต 100 รายการ (Array Initialization) ส่วนประกาศตัวแปร (VAR): ...

30 มกราคม G 2026 · 3 นาที · Wisit P. (Senior Architect)
Control Flow Logic in ST

คู่มือเขียน PLC ด้วย Structured Text (ST) Ep.2: การตัดสินใจของโปรแกรม (Control Flow: IF & CASE)

ในฐานะ CODESYS Solutions Architect ผมขอสรุปการเขียน Control Flow Statements ในภาษา ST ให้คุณเข้าใจง่ายๆ โดยเปรียบเทียบกับ C# ครับ หัวใจสำคัญของการเขียน Logic ใน PLC คือ “ความชัดเจน” (Readability) และ “ความปลอดภัย” (Safety) ครับ เพราะ Code ของเราควบคุมเครื่องจักรที่มีอันตราย ไม่ใช่แค่จัดการ Data เหมือนฝั่ง IT เรามาดูรายละเอียดกันครับ 1. IF…THEN…ELSIF…ELSE (The Decision Maker) ใน C# คุณใช้ if (condition) { } แต่ใน ST เราไม่มีปีกกา เราใช้ THEN และปิดท้ายด้วย END_IF; เสมอ Scenario: ระบบเติมน้ำเข้าถัง (Hysteresis Control) โจทย์คือควบคุมปั๊มน้ำ (Fill Pump) โดยใช้ Hysteresis Logic (น้ำต่ำเริ่มเติม, น้ำเต็มหยุดเติม) เพื่อป้องกันปั๊มทำงานกระชาก (Chattering) PROGRAM PLC_PRG VAR rLevel : REAL; // ระดับน้ำปัจจุบัน (0-100%) xPumpStart : BOOL; // สั่งปั๊มทำงาน // Config Parameters (ควรประกาศเป็น Constant หรือ Retain Variable) c_rLowLevel : REAL := 10.0; // จุดเริ่มทำงาน c_rHighLevel: REAL := 90.0; // จุดหยุดทำงาน END_VAR // --------------------------------------------------------- // Logic: Hysteresis Control // --------------------------------------------------------- IF rLevel < c_rLowLevel THEN // ถ้าน้ำต่ำกว่า 10% ให้เริ่มเดินปั๊ม (Set Active) xPumpStart := TRUE; ELSIF rLevel > c_rHighLevel THEN // ถ้าน้ำสูงเกิน 90% ให้หยุดปั๊ม (Reset) xPumpStart := FALSE; ELSE // ช่วงกลาง (10-90): ให้คงสถานะเดิมไว้ (Memory/Latch) // ไม่ต้องเขียน Code อะไร หรือเขียนย้ำว่า xPumpStart := xPumpStart; ; END_IF; 💡 Architect Insight: สังเกตว่าผมไม่ได้เขียน ELSE เพื่อสั่ง FALSE ทันทีที่ระดับเกิน 10% แต่ปล่อยให้มันทำงานจนถึง 90% นี่คือเทคนิค Hysteresis ที่ C# Developer ต้องปรับจูน Logic ให้เข้ากับ Physics ของโลกจริงครับ ...

29 มกราคม G 2026 · 3 นาที · Wisit P. (Senior Architect)
Ladder Logic vs Structured Text

คู่มือเขียน PLC ด้วย Structured Text (ST) Ep.1: ปูพื้นฐาน Syntax และ Data Types

ยินดีต้อนรับสู่ บทที่ 1: ปูพื้นฐาน Structured Text (ST) ครับ ในฐานะที่คุณเป็น Software Developer สาย C#/.NET ที่กำลังก้าวเข้าสู่โลกของ Industrial Automation ผมบอกได้เลยว่า Structured Text (ST) จะเป็นภาษาที่คุณรักที่สุดในบรรดาภาษา PLC ทั้ง 5 ภาษาตามมาตรฐาน IEC 61131-3 ครับ นี่คือคู่มือฉบับรวบรัดที่จะช่วยคุณปรับจูน Mindset จากการมองวงจรไฟฟ้า (Ladder) มาเป็นการเขียน Code แบบที่คุณคุ้นเคย 1. ศึกแห่งภาษา: Ladder Logic (LD) vs. Structured Text (ST) ทำไมเราถึงต้องย้ายมาเขียน ST? ในเมื่อ Ladder ก็ดูง่ายดี? คำตอบคือ “Complexity” (ความซับซ้อน) ครับ Ladder Diagram (LD): เปรียบเสมือนการวาด Wiring Diagram เหมาะมากสำหรับ Logic แบบ Boolean ง่ายๆ เช่น “ถ้ากดปุ่ม A และ Sensor B ทำงาน ให้ Motor C หมุน” มันเห็นภาพ Power Flow ชัดเจน ช่างไฟเข้าใจง่าย Structured Text (ST): คือ High-Level Language ที่มีรากฐานมาจากภาษา Pascal และ C มันเกิดมาเพื่อจัดการกับสิ่งที่ Ladder ทำได้ยากหรือทำไม่ได้เลย เช่น: Complex Math: การคำนวณสูตรคณิตศาสตร์ซับซ้อน ถ้าเขียนด้วย Ladder บล็อกจะต่อกันยาวเหยียดจนดูไม่รู้เรื่อง แต่ใน ST เขียนแค่บรรทัดเดียวจบ Loops & Iterations: การวนลูป FOR, WHILE เพื่อจัดการข้อมูลใน Array จำนวนมาก ทำได้ง่ายและกระชับกว่ามาก String Manipulation: การตัดต่อข้อความ หรือคุยกับ Barcode Scanner/Printer ภาษา ST จัดการได้เหมือน C# ครับ Architect Verdict: ใช้ Ladder สำหรับ Safety Interlock ง่ายๆ แต่ถ้าเมื่อไหร่เริ่มมีการคำนวณ (Calculation), การวนลูป (Loops), หรือการจัดการข้อมูล (Data Handling) ให้เปลี่ยนมาใช้ ST ทันทีครับ ...

28 มกราคม G 2026 · 3 นาที · Wisit P. (Senior Architect)