ฟังก์ชันพื้นฐานที่ใช้กันทั่วไปใน PLC

          หากยังไม่มีประสบการณ์ในการเขียนภาษา Ladder ทางเราได้ทำบทความสำหรับผู้เริ่มต้นที่ต้องการศึกษาไว้แล้ว ลิงค์: https://plantequipment.co.th/basic-programming-in-plc/ โดยในบทความนี้จะต่อยอดจากพื้นฐานทำให้สามารถใช้งานตัว PLC ได้อย่างหลากหลายมากขึ้น บางครั้งก็เป็นตัวช่วยในการเขียนโปรแกรมได้เป็นอย่างดี ซึ่งในครั้งนี้เองก็จะใช้ PLC ยี่ห้อ Amsamotion รุ่น AMX-FX3U-M26MR-E ตัวเดิม ในเมื่อเกริ่นมาขนาดนี้ ไปลุยกันดีกว่าครับ

การใช้งาน Auxiliary Relays (M)

          เป็น Relay ภายในของ PLC ทำหน้าที่ช่วยเพิ่มความยืดหยุ่นในสถานการณ์ต่างๆ ไม่ว่าจะเป็นการเก็บข้อมูลสถานะการทำงานหรือใช้ในการควบคุมการทำงานของโปรแกรม PLC โดยไม่ได้เกี่ยวข้องกับการควบคุม Output โดยตรง และในบางครั้งยังสามารถเอามาควบคุมการทำงานของ Output ได้ขึ้นอยู่กับการออกแบบโปรแกรมของแต่ละคน ตัวอย่างในการใช้งานดังนี้

ก่อนกด X0

หลังกด X0

           ผลลัพธ์ของการใช้ M คือ หากกด X0 ทำให้ M0 ติด แล้วเมื่อ M0 ติดก็จะทำให้ Y0 ติดไปด้วย ซึ่งถ้าใช้งานในรูปแบบนี้อาจจะคิดได้ว่า การทำงานไม่ต่างจากปกติที่เอา X0 ไปควบคุม Y0 โดยตรง แต่เมื่อต้องมี Process บางอย่างที่เริ่มซับซ้อนขึ้น ตัวแปร M จะมีความสำคัญอย่างมากในการจัดการโปรแกรมก่อนไปถึงสั่งการ Output ต่างๆ

            จะขอยกตัวอย่างในการใช้ประโยชน์จาก M คือ ใช้ในการแบ่งโหมดการทำงานเพื่อให้มองได้ง่ายขึ้น ยกตัวอย่างคือ จำลองควบคุมปริมาณน้ำในแท็งก์น้ำโดยจะมีโหมด Manual ที่ใช้ปุ่มกดเพื่อสั่งทำงานและปุ่มกดเพื่อหยุดการทำงานของปั๊มน้ำ แล้วจะมีโหมด Auto ที่ใช้ Level Switch ในการควบคุมปั๊มน้ำให้ทำงานอัตโนมัติ ดังนี้

ตัวอย่างการใช้งาน M

การใช้งาน Comment

          เมื่อเราเขียนโปรแกรมที่ขนาดเริ่มใหญ่ขึ้นอาจจะทำให้สับสนระหว่างตัวแปรที่ใช้งานได้ ไม่ว่าจะเป็นตัวแปรฝั่ง Input, ตัวแปรฝั่ง Output รวมไปถึงตัวแปร M ด้วย ซึ่งตัวแปรเหล่านี้สามารถ Comment ได้เช่นกัน นอกจากนี้ยังมีความสำคัญตรงที่เวลากลับมาดูโปรแกรมอีกครั้งก็จะทำให้เข้าใจได้ง่ายขึ้นว่าอะไรเป็นอะไร โดยที่ไม่ต้องไปไล่สายไฟแต่ละเส้นเพื่อดูว่าเส้นไหนคืออะไรอีกด้วย ยกตัวอย่างเช่น วงจรเปิดปิดไฟใช้ Switch จำนวน 3 ตัวไว้เปิดไฟแต่ละดวงก็จะมีสีแดง สีเขียว และสีเหลือง เป็นต้น

ก่อนใช้งาน Comment

หลังใช้งาน Comment

การใช้งาน Set/Reset

          1. Set จะเป็นฟังก์ชั่นที่ใช้ในการค้างสถานะทำงานถาวร ถ้าจะให้มองภาพง่ายๆ เหมือนกับตอนที่ใช้งานในรูปแบบ Self-Holding ยกตัวอย่างการใช้งานคือ การนำ X0 มาใช้งานแบบ NO ไปควบคุม Y0 ดังรูปด้านล่าง

ก่อนกด X0

หลังกด X0

หลังปล่อย X0

          ผลลัพธ์ของการใช้ Set คือ หลังจากที่กด X0 แล้วจะเห็นได้ว่า สถานะของ Y0 ยังคงค้างการทำงานอยู่แม้ว่าจะไม่ส่งสัญญาณเข้าไป หากต้องการหยุดการทำงานต้องใช้คำสั่ง Reset ในขั้นตอนถัดไป

          2. Reset จะเป็นฟังก์ชั่นในการยกเลิกสถานะการทำงานของ Set หรือก็คือ เปลี่ยนจากสถานะ 1 (High) เป็น 0 (Low) นั่นเอง ตัวอย่างการใช้งานจะต่อจากตัวอย่างของ Set คือ เพิ่ม X1 ใช้งานแบบ NO เพื่อใช้คำสั่ง Reset ดังรูปด้านล่าง

ก่อนกด X1

หลังกด X1

          ผลลัพธ์ของการใช้ Reset คือ Y0 จะถูก Reset สถานะกลับไปเป็น 0 (Low) อีกครั้ง ตั้งแต่มีการกด X1 ไปแล้ว

          ซึ่งการใช้งาน Set และ Reset นั้นมีประโยชน์ในการใช้งานมากมาย แต่นอกจากมีข้อดีก็ยังมีข้อควรระวังในการใช้อยู่คือ ลำดับการวางตำแหน่งการทำงาน ด้วยความที่ภาษา Ladder จะสนใจคำสั่งอันล่างสุด ยกตัวอย่างคือ หากวางการทำงานของ Reset ไว้ก่อน Set เมื่อมีการกด Push Button พร้อมกัน จะทำให้ไม่สามารถ Reset ได้ ดังรูปข้างล่าง

ตัวอย่างการวางตำแหน่ง Reset ก่อน Set

การใช้งาน Edge Pulse

          Edge Pulse หรือที่เรียกกันว่า ขอบสัญญาณพัลส์ โดยที่พัลส์ (Pulse) นั้นจะเป็นคลื่นทางดิจิทัล (Digital) ที่สามารถนำมาประยุกต์ใช้งานได้ทั้งหมด 2 กรณีได้แก่ ขอบขาขึ้น (Rising Edge) และขอบขาลง (Falling Edge) ดังรูปข้างล่าง

ลักษณะการตรวจจับของ Edge Pulse แต่ละแบบ

          1. Rising Edge หรือ ขอบขาขึ้น จะเป็นการเปลี่ยนสถานะทางไฟฟ้าจาก 0 (LOW) ไปเป็น 1 (HIGH) ซึ่งในภาษา Ladder เมื่อนำไปใช้งานกับ Input ถ้าหากตรวจจับได้ว่ามีการเปลี่ยนแปลงสถานะจะทำการส่งสัญญาณพัลส์ (Pulse) ไป 1 ลูกคลื่น โดยขึ้นอยู่ที่ว่าจะเอาสัญญาณนั้นไปทำอะไรต่อขึ้นอยู่กับการใช้งานแต่ละคน ลักษณะการใช้งานเป็นดังนี้

ก่อนกด X0

หลังกด X0

          ผลลัพธ์ Rising Edge คือ เมื่อกด X0 แล้ว Y0 จะติดในระยะเวลาที่สั้นมากๆ แทบมองไม่เห็นว่ามีการเปลี่ยนแปลงอยู่ หากต้องการให้ Y0 ทำงานค้างสถานะนั้นจำเป็นต้องต่อแบบ Self-Holding หรือใช้งานฟังก์ชัน Set

          ตัวอย่างงานที่นำ Rising Edgeไปใช้ ได้แก่ ใช้ Proximity Senser ในการนับของที่ผ่านตามสายพาน, ใช้เป็นสัญญาณทริคเกอร์การทำงานบางอย่างให้ทำงานก็ต่อเมื่อเปลี่ยนสถานะจาก 0 (LOW) เป็น 1 (HIGH) เท่านั้น และในบางกรณีเพื่อป้องกันการทำงานผิดพลาดเมื่อมี Input บางอย่างตรวจจับค้างอยู่

          2. Falling Edge หรือ ขอบขาลง จะเป็นการเปลี่ยนสถานะทางไฟฟ้าจาก 1 (HIGH) ไปเป็น 0 (LOW) ซึ่งการทำงานในการส่งสัญญาณพัลส์ (Pulse) แบบเดียวกับ Rising Edge แต่ส่งตอนตรวจจับช่วงสถานะของขอบขาลงเท่ากันนั้น ลักษณะการใช้งานเป็นดังนี้

ก่อนกด X0

หลังกด X0

หลังปล่อย X0

          ผลลัพธ์การยกตัวอย่างคือ เมื่อกด X0 แล้ว Y0 จะยังไม่ทำงาน แต่หากปล่อยแล้ว Y0 จะติดในระยะเวลาที่สั้นมากๆ เช่นกันเหมือนในกรณี Rising Edge หากต้องการให้ Y0 ทำงานค้างสถานะจำเป็นต้องต่อแบบ Self-Holding หรือใช้งานฟังก์ชัน Set

          ตัวอย่างงานที่นำ Falling Edgeไปใช้ ได้แก่ ใช้ Proximity Senser ในการเช็คว่าของที่เลื่อนผ่านบนสายพานพ้นจากจุดตรวจจับหรือยัง เพื่อที่จะได้เริ่มกระบวนการถัดไป และใช้เป็นสัญญาณทริคเกอร์การทำงานบางอย่าง ให้ทำงานก็ต่อเมื่อเปลี่ยนสถานจาก 1 (HIGH) เป็น 0 (LOW) เท่านั้น

Rising Edge

Falling Edge

การใช้งาน Timer

          เป็นฟังก์ชันที่ใช้ในการควบคุมการหน่วงเวลา (Delay) ในกระบวนการทำงานต่าง ๆ ซึ่งการใช้งาน Timer นั้นสามารถช่วยในการควบคุมการทำงานของอุปกรณ์ต่าง ๆ ตามเวลาที่กำหนดได้ ซึ่งแต่ละโปรแกรมจะมี Timer หลากหลายรูปแบบและใช้งานอาจจะแตกต่างกัน ไม่ว่าจะเป็น On-Delay Timer, Off-Delay Timer รวมไปถึง Timer ที่ส่งสัญญาณแบบพัลส์ Pulse แต่ในโปรแกรมที่เราใช้จะมี Timer แบบ On-Delay Timer เท่านั้น แต่ก็สามารถนำมาประยุกต์ใช้เป็น Off-Delay Timer ได้เช่นกัน

          โดยการใช้ Timer นั้นจะทำงานในรูปแบบ On-Delay Timer เป็นการหน่วงเวลาระยะเวลาหนึ่ง โดยมีเงื่อนไขคือ หาก Input เป็น 1 (High) เมื่อครบตามระยะเวลาที่กำหนดแล้ว Output ของ Timer จะส่งสัญญาณ 1 (High) ออกมา ซึ่งสามารถนำไปใช้งานต่อได้ขึ้นอยู่กับการใช้งาน เป็นดังนี้  

การใช้งาน Timer แบบโดยตรง

          เมื่อพิจารณาการทำงานในรูปด้านบนแล้วจะเห็นได้ว่า เมื่อ Set Timer ไว้ที่ 5 วินาที หากจ่ายไฟเข้าไปทาง Input ไม่ถึง 5 วินาที ทาง Output จะไม่ทำงาน แต่ถ้าหากจ่ายไฟเข้าไปครบตามเวลาที่ตั้งไว้จะทำให้ Output ส่งสัญญาณ 1 (High) ออกมานั่นเอง หากหยุดจ่ายไฟตัว Timer จะหยุดทำงานทันที ทีนี้ตามไปดูวิธีการเขียนใน PLC กัน

การต่อใช้งาน Timer

          โดยจะใช้ X0 ใช้งานแบบ NO ในการจ่ายไฟให้ Timer ซึ่งจะตั้งเวลาไว้ที่ 5 วินาที ซึ่งในโปรแกรมที่ใช้เขียนนั้นจะกำหนดเป็น K50 (K1 = 0.1 วินาที) เนื่องจาก Timer ที่ใช้แต่ละตำแหน่งมีวิธีการกำหนดระยะเวลาที่แตกต่างกันออกไป ลักษณะการใช้งานเป็นดังนี้

เริ่มกด X0 ค้างไว้

ปล่อยให้ X0 ค้างจนครบเวลาที่กำหนด

          ผลลัพธ์ของการใช้ Timer แบบโดยตรง คือ เมื่อกด X0 ไว้จนครบ 5 วินาทีตามที่ตั้งไว้ ทำให้ Output ของ Timer นั้นส่งสัญญาณ 1 (High) ออกมา ดังนั้น Y0 จึงติด แต่ถ้าหากกด X0 อีกครั้งจะทำให้ Timer หยุดการทำงานทันที

          นอกจากนี้ยังสามารถประยุกต์ใช้งานแบบ Off-Delay Timer ได้อีกด้วย ซึ่งจะเป็นการใช้ Timer นับเวลาเพื่อที่จะหยุดการทำงานของอุปกรณ์นั้นๆ มีวิธีการใช้งานประมาณ 2 แบบหลักๆ คือ        

          1. หน่วงเวลาให้ทำงานตามระยะเวลาที่กำหนดแล้วหยุดทันที เป็นวิธีการที่จ่ายไฟไปทริกเกอร์ให้อุปกรณ์หนึ่งทำงาน แล้วให้ Timer นับระยะเวลาตามที่กำหนด หากครบกำหนดแล้วอุปกรณ์นั้นจะหยุดการทำงานทันที

รูปแบบที่ 1 ในการใช้งาน Timer แบบ Off-Delay Timer

          ยกตัวอย่างการใช้งานคือ ให้ X0 ใช้งานแบบ NO และ Rising Edge จากนั้นกด X0 แล้วปล่อยเพื่อเปิดควบคุม Y0 ให้ทำงานตามระยะเวลาที่กำหนด โดยจะกำหนดให้ทำงาน 5 วินาทีแล้วดับลง หากต้องการให้ทำงานต้องกด X0 อีกรอบ ลักษณะการใช้งานเป็นดังนี้

ก่อนกด X0

หลังกด X0 แล้วปล่อย

เมื่อ Timer นับเวลาจนครบตามที่กำหนดไว้

          ผลลัพธ์ของการใช้ Off-Delay Timer แบบที่ 1 คือ เมื่อกด X0 แล้วทำให้ Y0 ทำงานเป็น 5 วินาที หากครบเวลาตามที่กำหนดแล้วจะดับลง หากต้องการให้ทำงานอีกรอบต้องกด X0 เพื่อจ่ายไฟให้ทำงานอีกครั้ง

          2. หน่วงเวลาเพื่อหยุดการทำงานหลังจากไม่มีการจ่ายไฟแล้ว เป็นวิธีการที่จ่ายไฟไปทริกเกอร์ให้อุปกรณ์หนึ่งทำงาน ถ้าหยุดการจ่ายไฟจะให้ Timer หน่วงการทำงานของอุปกรณ์นั้นตามระยะเวลาที่กำหนดไว้ หากครบกำหนดแล้วอุปกรณ์นั้นจะหยุดการทำงานทันที

รูปแบบที่ 2 ในการใช้งาน Timer แบบ Off-Delay Timer

          ยกตัวอย่างการใช้งานคือ ให้ X0 ใช้งานแบบ NO จากนั้นกด X0 เพื่อสั่งให้ Y0 ทำงานไปเรื่อยๆจนกว่าจะปล่อย X0 ให้หยุดจ่ายไฟ แล้วทำการหน่วงเวลาตามที่กำหนดไว้คือ 5 วินาที เพื่อให้ Y0 ดับลง ลักษณะการใช้งานเป็นดังนี้

ก่อนกด X0

หลังกด X0

หลังปล่อย X0

เมื่อ Timer นับเวลาจนครบตามที่กำหนดไว้

          ผลลัพธ์ของการใช้ Off-Delay Timer แบบที่ 2 คือ เมื่อกด X0 ค้างไว้ ทำให้ Y0 นั้นติดตลอด แต่ถ้าหากทำการปล่อย X0 จะเกิดการหน่วงเวลาการทำงานไว้ที่ 5 วินาที หลังจากนั้น Y0 ก็จะดับลงไป หากต้องการให้ทำงานต้องกด X0 อีกครั้ง

          หลังจากที่เรียนรู้การใช้งาน Timer ทำให้เห็นได้ว่า สามารถนำไปประยุกต์ใช้งานได้อย่างหลากหลายไม่ว่าจะเป็นการหน่วงเวลาเพื่อเปิดการใช้งานรวมไปถึงการหน่วงเวลาเพื่อปิดการใช้งาน ทั้งนี้ทั้งนั้นอยู่ที่การออกแบบระบบวงจรว่าต้องการให้ทำงานอยู่ในรูปแบบไหนตามความเหมาะสม

การใช้งาน Counter

          เป็นฟังก์ชั่นที่ใช้ในการนับจำนวนต่างๆขึ้นอยู่กับลักษณะการใช้งาน โดยจะมี Counter อยู่ด้วยกันทั้งหมด 2 รูปแบบคือ การนับจำนวนขึ้น (Counter up) และการนับจำนวนลง (Counter down) โดยจะใช้สัญญาณ Input เป็นตัวกระตุ้นให้ทำงานถ้าหากมีการส่งสัญญาณ Input 1 ครั้งจะทำให้ตัว Counter นับที่ละ 1 สเต็ป ซึ่งแต่ละโปรแกรมที่ใช้นั้นจะมีฟังก์ชัน Counter แตกต่างกันออกไป        

          แต่โปรแกรมที่เราใช้นั้นจะเป็น Counter up ถ้าหากต้องการใช้ Counter down จำเป็นต้องใช้ Address ของตัว Counter แบบเฉพาะและมีตัวช่วยในการใช้งาน Counter down ได้ ก็คือ M8200 นั่นเอง (ไม่ได้มีแค่ M8200 นะครับ) โดยรูปแบบการทำงานเป็นดังนี้

รูปแบบการใช้งาน Counter แบบเพิ่มลดได้

          โดยจะกำหนดให้ X0 เป็นการเพิ่มจำนวน, X1 เป็นการลดจำนวน, X2 เป็นการรีเซ็ตค่า, C200 เป็น Address ของ Counter ที่สามารถใช้งานแบบเพิ่มลดจำนวนได้ และ Y0 เป็นตัวรับค่า Output จาก Counter ซึ่งในวงจรที่ออกแบบไว้นั้นจะมีการใช้ Interlock ระหว่าง X0 กับ X1 เพื่อไม่ให้ทำงานพร้อมกัน แล้วใช้ X1 สั่งให้ M8200 ทำงานเพื่อไปเปิดใช้งาน Counter down ลักษณะการใช้งานเป็นดังนี้

ก่อนใช้งาน

กด X0 เพื่อเพิ่มจำนวนนับ

กด X0 จนเพิ่มจำนวนนับครบตามที่กำหนด

กด X0 เพื่อเพิ่มจำนวนจับเกินกว่าที่กำหนด

กด X1 เพื่อลดจำนวนนับจนต่ำกว่าที่กำหนด

กด X2 เพื่อรีเซ็ตค่าที่นับไว้

          ผลลัพธ์ของการใช้งาน Counter แบบเพิ่มลดจำนวนได้คือ หากกด X0 จนครบหรือเกินกว่าที่กำหนด จะทำให้ Output ของ Counter ทำงานโดยจะนำสัญญาณมาควบคุม Y0 จึงทำให้ Y0 นั้นติดขึ้นมา แต่ถ้าหากกด X1 ต่ำกว่าที่กำหนดก็จะทำให้ Y0 นั้นดับลง และสุดท้ายถ้าหากกด X2 ที่ต่อกับฟังก์ชั่น Reset ตัว Counter นั้นก็จะรีเซ็ตค่าให้กลับมาที่ 0 โดยไม่สนใจว่าจะนับถึงเท่าไหร่แล้ว

          ความรู้ทั้งหมดที่ผมได้ทำเป็นสื่อการเรียนรู้นั้นสามารถนำไปประยุกต์ใช้งานในรูปแบบอื่นๆได้ รวมไปถึงวิธีการต่อ Ladder ก็สามารถปรับเปลี่ยนได้เช่นกันตามความเหมาะสมของแต่ละคน ผมหวังว่าจะเป็นประโยชน์ต่อผู้ที่เข้ามาศึกษาการใช้ฟังก์ชั่นพื้นฐานต่างๆใน PLC ไม่มากก็น้อย