ตัวอย่างโปรแกรมไฟกระพริบ PLC FX-5U Mitsubishi

ตัวอย่างโปรแกรม PLC: ไฟวิ่ง 5 ดวง (Running Light)

ตัวอย่างโปรแกรม: ไฟวิ่ง 5 ดวง (Sequence Control)

โจทย์: ไฟ 5 ดวง (Y0-Y4) ติดเรียงกันทีละดวง วนลูปไปเรื่อยๆ และสามารถปรับความเร็วได้

แนวคิดการเขียนโปรแกรม (Logic Concept)
เราจะใช้วิธี "การหมุนบิต (Bit Rotation)" ซึ่งเป็นวิธีที่ง่ายและมีประสิทธิภาพที่สุดสำหรับไฟวิ่ง
1. สร้าง Timer วนลูปเพื่อกำหนดจังหวะเวลา (Pulse Generator)
2. ใช้คำสั่ง ROLP (Rotate Left Pulse) เพื่อเลื่อนตำแหน่งไฟทีละดวง
3. ย้ายค่าจาก Register ไปยัง Output (Y)

1. กำหนดอุปกรณ์ (Device Assignment)

Deviceชื่อเรียก (Symbol)หน้าที่การทำงาน
X0 Switch Start สวิตช์เปิดการทำงาน (ON = เริ่มวิ่ง)
D0 Speed Setting ตัวเก็บค่าเวลา (หน่วย ms) เช่น ใส่ค่า 500 = 0.5 วินาที
T0 Timer Loop ตัวจับเวลาเพื่อสร้างจังหวะกระพริบ
D10 Lamp Register รีจิสเตอร์เก็บสถานะไฟ (Bit 0-4 จะถูกส่งไป Y0-Y4)
Y0 - Y4 Lamp 1 - 5 หลอดไฟแสดงผล 5 ดวง

2. โปรแกรม Ladder Logic (FX5U Style)

ส่วนที่ 1: กำหนดค่าเริ่มต้น (Initialization)

เมื่อเริ่มระบบ ต้องกำหนดให้มีไฟติดก่อน 1 ดวง (Bit แรก) ไม่งั้นจะไม่มีอะไรให้วิ่ง

เกร็ดความรู้: SM402 (Initial Pulse)
คือ Special Relay ที่จะ "ทำงาน (ON) เพียงแค่ 1 สแกนไทม์แรก" ทันทีที่ PLC เริ่ม Run และจะดับตลอดไป
นิยมใช้สำหรับ การกำหนดค่าเริ่มต้น (Initialization) เช่น การเซ็ตค่าความเร็วเริ่มต้น หรือรีเซ็ตค่าต่างๆ เพื่อไม่ให้ค่าเก่าที่ค้างอยู่มารบกวนการทำงาน
(* เมื่อกด X0 และระบบเพิ่งเริ่มทำงาน (SM402 ทำงานแวบเดียวตอน Run) ให้ Set ค่าเริ่มต้น *)
X0         SM402 (Initial Pulse)
|--[ ]---------^--------------------[ MOV K1 D10 ]--|
                                    (Set Bit 0 = ON)

(* กำหนดความเร็วเริ่มต้น ถ้า D0 เป็น 0 ให้ใส่ค่า 500ms ป้องกัน Error *)
SM400 (Always ON)   D0=0
|--[ ]-------------[ = D0 K0 ]-----[ MOV K500 D0 ]--|

ส่วนที่ 2: สร้างจังหวะเวลา (Timer Loop)

สร้าง Timer ที่วนลูปตัวเองเพื่อสร้างสัญญาณ Pulse ทุกๆ เวลาที่ตั้งไว้ใน D0

(* Timer T0 นับเวลาตามค่า D0 เมื่อครบกำหนด จะตัดตัวเองแล้วเริ่มใหม่ *)
X0          T0 (Done)
|--[ ]----------[ / ]-------------------( OUT T0 D0 )--|

ส่วนที่ 3: สั่งเลื่อนตำแหน่งไฟ (Shift Logic)

หัวใจสำคัญ: เมื่อ Timer ครบกำหนด ให้หมุนบิตใน D10 ไปทางซ้าย 1 ตำแหน่ง

(* เมื่อ T0 ทำงาน ให้หมุนบิตใน D10 ไปทางซ้าย 1 บิต *)
T0
|--[ ]----------------------------------[ ROLP D10 K1 ]--|
                                    (Rotate Left 1 bit)

(* ตรวจสอบ: ถ้าบิตวิ่งเกินดวงที่ 5 (Bit 5 ขึ้นไป) ให้ Reset กลับมาดวงที่ 1 *)
D10 >= K32 (Bit 5 ON)
|--[ >= D10 K32 ]-----------------------[ MOV K1 D10 ]--|

ส่วนที่ 4: ส่งออก Output (Output Mapping)

ย้ายค่าบิตจาก D10 ไปที่ Output จริง (Y0-Y4)

(* ย้ายค่า 5 บิตล่างของ D10 ไปที่ Y0-Y4 *)
SM400
|--[ ]----------------------------------[ K2Y0 = D10 ]----|

(* หมายเหตุ: K2Y0 หมายถึงกลุ่มข้อมูล 8 บิต เริ่มต้นที่ Y0 (Y0-Y7) *)
 

3. อธิบายการทำงานทีละขั้นตอน

  1. เริ่มต้น (Start):
    • เมื่อกด X0 PLC จะนำค่า K1 (เลขฐานสองคือ 0000 0001) ไปใส่ใน D10 โดยอาศัยจังหวะแรกที่ SM402 ทำงาน
    • ผลลัพธ์: ไฟดวงที่ 1 (Y0) จะติดขึ้นมาเป็นค่าเริ่มต้น
  2. หน่วงเวลา (Delay):
    • T0 จะเริ่มนับเวลาจนถึงค่าที่ตั้งใน D0 (เช่น 500ms)
  3. ขยับไฟ (Shift):
    • เมื่อ T0 ทำงานครบกำหนด คำสั่ง ROLP จะทำงาน 1 ครั้ง
    • ค่าใน D10 จะถูกหมุนไปทางซ้าย จาก 0000 0001 (1) เป็น 0000 0010 (2)
    • ผลลัพธ์: ไฟดวงที่ 1 (Y0) ดับ และดวงที่ 2 (Y1) ติด
  4. วนลูป (Loop):
    • กระบวนการนี้จะทำซ้ำไปเรื่อยๆ ไฟจะวิ่งจาก Y0 -> Y1 -> Y2 -> Y3 -> Y4
  5. รีเซ็ตลูป (Reset):
    • เมื่อไฟวิ่งผ่านดวงที่ 5 (Y4) ค่าใน D10 จะกลายเป็น 32 (Bit 5 ON)
    • คำสั่งเปรียบเทียบ >= K32 จะทำงาน และสั่ง Reset ค่า D10 กลับมาเป็น 1 อีกครั้ง เพื่อให้เริ่มที่ Y0 ใหม่

4. การนำไปประยุกต์ใช้

  • เปลี่ยนจำนวนดวงไฟ: แก้ไขตรงคำสั่งเปรียบเทียบ เช่น ถ้ามี 8 ดวง ก็เปลี่ยนเป็น >= K256 (Bit 8)
  • เปลี่ยนความเร็ว: เปลี่ยนค่าใน D0 ผ่าน HMI หรือโปรแกรมได้เลย โดยไม่ต้องแก้ Ladder
  • ไฟวิ่งสวนทาง: เปลี่ยนคำสั่งจาก ROLP (หมุนซ้าย) เป็น RORP (หมุนขวา)

-- จบเอกสารตัวอย่าง --

Visitors: 11,478