
คู่มือเขียน 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 ของโลกจริงครับ ...