ตอนที่ 3: ภาษา Structured Text (ST) คืออะไร ทำไมโปรแกรมเมอร์ถึงชอบ? ปลดล็อกพลังแห่งโค้ด

1. 🎯 ตอนที่ 3: ภาษา Structured Text (ST) คืออะไร ทำไมโปรแกรมเมอร์ถึงชอบ? ปลดล็อกพลังแห่งโค้ด
2. 📖 เปิดฉาก (The Hook)
จิบกาแฟยามเช้าแล้วมาคุยกันต่อครับน้องๆ ว่าที่ Automation Software Engineer ทุกคน… เคยไหมครับเวลาที่ต้องเขียนโปรแกรมควบคุมเครื่องจักรด้วยภาษา Ladder Diagram (LD) แบบดั้งเดิม ถ้าเป็นแค่การสั่งมอเตอร์เปิด/ปิดด้วยสวิตช์ มันก็ดูง่ายดีใช่มั้ยครับ?
แต่ชีวิตจริงในโรงงานมันไม่ได้ง่ายแบบนั้นน่ะสิ! ลองจินตนาการว่าน้องต้องเขียนเงื่อนไขควบคุมปั๊มน้ำ 50 ตัว ที่ต้องเช็คอุณหภูมิ, คำนวณสูตรคณิตศาสตร์, จัดการข้อมูลแบบตาราง, หรือคัดแยกข้อมูล String รหัสบาร์โค้ด… ถ้าใช้ Ladder น้องอาจจะต้องวาดวงจรหน้าสัมผัสยาวเป็นพันๆ บรรทัด โยงสายกันมั่วจนกลายเป็น “Spaghetti Code” สุดปวดหัว พอเวลาเครื่องจักรมีปัญหา จะหาจุดบั๊ก (Debugging) ทีก็แทบจะต้องงมเข็มในมหาสมุทร
นี่แหละครับคือเหตุผลที่วิศวกรยุคใหม่และโปรแกรมเมอร์สายไอทีถึงหลงรักฮีโร่ของเราที่ชื่อว่า Structured Text (ST)! วันนี้พี่จะพาไปดูว่าภาษานี้มันคืออะไร ทำไมมันถึงเกิดมาเพื่อฆ่าความซับซ้อน และทำไมถึงเป็น “อาวุธลับ” ที่สาย Automation ต้องมีติดตัว!
3. 🧠 แก่นวิชา (Core Concepts)
Structured Text (ST) คือภาษาเขียนโปรแกรมแบบข้อความ (Textual Language) ระดับสูง ที่ถูกกำหนดไว้ในมาตรฐานสากล IEC 61131-3 โดยมีโครงสร้างและไวยากรณ์ (Syntax) ที่ได้รับแรงบันดาลใจมาจากภาษา PASCAL และภาษา C
ทำไม ST ถึงเหนือกว่า Ladder Diagram (LD) ในงานที่ซับซ้อน? พี่ขอสรุปเป็นหมัดฮุก 3 ข้อเน้นๆ ครับ:
- ควบคุม Flow การทำงานได้ดั่งใจ (Control Structures): ใน LD การจะทำเงื่อนไขซ้อนเงื่อนไขเป็นเรื่องยากและกินพื้นที่หน้าจอ แต่ ST มีคำสั่งทรงพลังอย่าง
IF...ELSIF...ELSEและCASE...OFที่ช่วยให้เราจัดการ State Machine หรือเงื่อนไขเครื่องจักรที่ซับซ้อนได้ในไม่กี่บรรทัด - ราชาแห่งการวนลูป (Iteration): ถ้าต้องรีเซ็ตค่ามอเตอร์ 100 ตัวพร้อมกัน ST สามารถใช้คำสั่งวนซ้ำอย่าง
FOR,WHILE, และREPEATได้อย่างง่ายดาย ซึ่งใน LD หรือ FBD นั้นแทบจะทำไม่ได้เลย หรือทำได้ก็ต้องใช้ท่าพิสดารที่อ่านยากมาก - เก่งเรื่องจัดการข้อมูลขั้นสูง (Complex Data Handling): ST ถูกออกแบบมาให้รับมือกับการคำนวณคณิตศาสตร์ทางวิศวกรรม, การจัดการ Array, String, และโครงสร้างข้อมูลแบบ User-Defined Type (DUT) ได้อย่างมีประสิทธิภาพสูงสุด
พูดง่ายๆ คือ LD เหมาะสำหรับงาน Boolean (Logic 0/1) พื้นฐาน แต่ ST คือพระเอกสำหรับ “สมองกล” ที่ต้องคิดวิเคราะห์และจัดการ Data ครับ

4. 💻 ร่ายมนต์โค้ดคอนโทรล (Logic & Implementation)
มาดูตัวอย่างการเขียนโค้ด POU (Program Organization Unit) ด้วยภาษา ST กันครับ เปรียบเทียบให้เห็นภาพว่า ถ้าเราต้องคุมมอเตอร์พร้อมคำนวณอุณหภูมิ โค้ด ST จะสะอาดตาแค่ไหน:
PROGRAM PLC_PRG
VAR
// ประกาศตัวแปรเก็บสถานะอุณหภูมิและมอเตอร์
rTemperature : REAL := 45.5;
xFanMotor : BOOL;
iSpeed : INT;
// ประกาศ Array เก็บข้อมูลการผลิต 10 ค่า
aProductionData : ARRAY [1..10] OF INT;
iIndex : INT;
END_VAR
// =================================================================
// 1. การใช้เงื่อนไข (IF..ELSIF..ELSE) คุมการทำงาน
// =================================================================
// ถ้าอุณหภูมิสูงกว่า 50 องศา ให้พัดลมหมุนเต็มกำลัง 100%
IF rTemperature > 50.0 THEN
xFanMotor := TRUE;
iSpeed := 100;
// แต่ถ้าอุณหภูมิอยู่ระหว่าง 30 ถึง 50 ให้พัดลมหมุนเบาลงที่ 50%
ELSIF rTemperature > 30.0 THEN
xFanMotor := TRUE;
iSpeed := 50;
// นอกเหนือจากนั้น (อุณหภูมิปกติ) ให้ปิดพัดลม
ELSE
xFanMotor := FALSE;
iSpeed := 0;
END_IF;
// =================================================================
// 2. การใช้วงวน (FOR Loop) เพื่อจัดการ Array
// =================================================================
// รีเซ็ตเคลียร์ค่าข้อมูลการผลิตทั้ง 10 ตัวเป็น 0 ด้วยลูป FOR
// (ถ้าเป็น Ladder ต้องวาง Block ย้ายค่า 10 ครั้ง!)
FOR iIndex := 1 TO 10 DO
aProductionData[iIndex] := 0;
END_FOR;5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)
ในฐานะรุ่นพี่ พี่มีจุด “ตกม้าตาย” ยอดฮิตที่คนย้ายมาจากสาย Ladder หรือสาย IT ชอบพลาดตอนเขียน ST มาเตือนครับ:
:=ไม่ใช่=: จำให้ขึ้นใจเลยครับ! ใน ST เราใช้เครื่องหมาย:=(Colon-Equal) สำหรับการ “กำหนดค่า (Assignment)” เช่นxMotor := TRUE;ส่วนเครื่องหมาย=เฉยๆ เอาไว้ใช้ “เปรียบเทียบ (Compare)” ในเงื่อนไขIFเท่านั้นครับ- กฎเหล็กเรื่อง Operator Priority: ลำดับความสำคัญของเครื่องหมายสำคัญมาก! โปรแกรมจะทำในวงเล็บ
( )ก่อนเสมอ ตามด้วยคูณ/หาร และบวก/ลบ ถ้าเขียนสมการยาวๆ แนะนำให้ใส่วงเล็บป้องกันความผิดพลาดเสมอครับ - ระวังกับดัก Infinite Loop (Watchdog Error): ถึงแม้คำสั่งลูปอย่าง
WHILEจะทรงพลัง แต่น้องๆ ห้ามเขียนลูปที่ไม่มีวันจบเด็ดขาด! เพราะ PLC ทำงานแบบ Cyclic Scan หากลูปวนนานเกินเวลา Scan Time ที่ตั้งไว้ (Watchdog) PLC จะมองว่าระบบค้างและสั่ง “STOP” เครื่องจักรทันทีเพื่อความปลอดภัยครับ อันตรายมาก!
6. 🏁 บทสรุป (To be continued…)
เห็นมั้ยครับว่า Structured Text (ST) ไม่ได้น่ากลัวอย่างที่คิด แถมยังเหมือนกับภาษาคอมพิวเตอร์ทั่วไปมากๆ การเปลี่ยนจากการลากสายไฟใน Ladder มานั่งพิมพ์โค้ด ST จะช่วยเปลี่ยนให้น้องๆ กลายเป็น Automation Software Engineer ที่เก่งกาจ สามารถสเกลโปรเจกต์ สร้าง Function Block ขั้นเทพ และทำ HMI รวมไปถึง I/O Mapping ได้อย่างมีระบบแบบแผนครับ
ในตอนหน้า พี่จะพาลงลึกไปดูเรื่อง Data Types พิเศษและการสร้างแม่พิมพ์แบบ OOP ด้วย CODESYS กันต่อ เตรียมเครื่องให้พร้อม แล้วเจอกันครับ!
ต้องการที่ปรึกษาด้านการเขียนโปรแกรม PLC (CODESYS) และพัฒนาระบบ Automation ให้กับโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p