Allen Bradley PLC

Programming Structure

เขียนโปรแกรมต้องมี Structure ที่ดี…..

ในทาง Digital แบ่ง Logic ตามการทำงานได้เป็น 2 ชนิด คือ Combinational logic และ Sequential logic โดยที่ Combinational logic นั้นค่า output ขึ้นอยู่กับค่าของ Input ปัจจุบันเพียงอย่างเดียวเท่านั้น ตรงกันข้ามกับ Sequential logic ที่ค่า output ไม่ได้ขึ้นอยู่กับค่าของ Input อย่างเดียวแต่ขึ้นกับสถานะ (State) ของตัวเองด้วย ดังรูปด้านล่าง

ตัวอย่าง

ps1

เครื่องใส่ผลแอ็ปเปิ้ลลงกล่อง ซึ่งประกอบด้วย 2 สายพาน คือสายพานลำเลียงผลแอ็ปเปิ้ลและสายพานลำเลียงกล่อง โดยมีเซ็นเซอร์ SE1 นับจำนวนผลผลแอ็ปเปิ้ลและเซ็นเซอร์ SE2 เช็คตำแหน่งของกล่อง เมื่อเครื่องอยู่ในโหมด Auto และพนักงานกดปุ่ม Start เครื่องจะเริ่มทำงาน โดยป้อนผลแอ็ปเปิ้ลลงกล่อง กล่องละ 10 ผล เมื่อครบตามจำนวนแล้ว สายพานลำเลียงผลแอ็ปเปิ้ล จะหยุดรอจนกว่ากล่องเปล่าเลื่อนเข้ามายังตำแหน่งของ เซ็นเซอร์ SE2 จากนั้นสายพานลำเลียงผลแอปเปิ้ลจึงเริ่มทำงานอีกครั้ง เป็นอย่างนี้เรื่อยไป จนกว่าพนักงานกดปุ่ม Stop หรือมี Alarm เกิดขึ้น ได้แก่ ผลแอ็ปเปิ้ลติดขวางปากกล่อง, ไม่มีผลแอ็ปเปิ้ลลงกล่อง หรือไม่มีกล่องป้อนเข้ามาบนสายพาน ถ้ามี Alarm  พนักงานต้องกดปุ่ม Reset เพื่อรีเซ็ต Alarm จากนั้นกดปุ่ม Start เครื่องจึงกลับมาทำงานใหม่อีกครั้ง  ในโหมด Manual พนักงานสามารถสั่งงานอุปกรณ์ได้โดยตรงจากการปุ่มกดควบคุมแต่ละสายพาน

ตามตัวอย่างนี้เราสามารถเขียนโปรแกรม Ladder  ได้ทั้งแบบ Combination logic และ Sequential logic โดยมีหลักการง่ายๆคือแบ่งการทำงานของเครื่องจักรหรือกระบวนการออกเป็นส่วนย่อยๆตามลักษณะการทำงาน โดยที่ส่วนย่อยๆเหล่านี้อาจจะทำงานเป็นอิสระต่อกันหรือเชื่อมต่อกันก็ได้

โปรแกรมแบบ Combination logic เอาท์พุตของอุปกรณ์จะทำงานตามอินพุตซึ่งเราจะแบ่งโครงสร้างโปรแกรมออกเป็นส่วนย่อยๆ โดยใช้  Subroutine ดังนี้

–        MainRoutine เป็นรูทีนหลักใช้ Jump ไป Subroutine

–        Alarm เป็นรูทีนสำหรับเขียน Alarm ของเครื่อง

–        Box_Conveyor ใช้ควบคุมการทำงานของ Box conveyor

–        Machine_Status ใช้แสดงสถานะของเครื่อง ได้แก่ Ready, Running, Fault, Auto และ Manual

–        Part_Conveyor ใช้ควบคุมการทำงานของ Part conveyor

MainRoutine

Alarm

Box_Conveyor

โปรแกรมแบบ Combination logic เอาท์พุตของอุปกรณ์จะทำงานตามอินพุตดังนั้น เริ่มต้นจากเอาท์พุตของ Box_Conveyor ซึ่งทำงานเมื่อระบบอยู่ในสถานะ running และ Counter นับผลแอ็ปเปิ้ลครบแล้ว อย่างไรก็ตาม Box_Conveyor  จะขยับไปได้นิดเดียว เพราะ Counter จะถูกรีเซ็ต เราจึงนำ เงื่อนไขที่กล่องยังเลื่อนไปไม่ถึง Box_Present เซ็นเซอร์ มาขนานกับ Counter

Machine_Status

Part_Conveyor

Part_Conveyor ทำงานเมื่อระบบอยู่ในสถานะ running และ Counter ยังนับผลแอ็ปเปิ้ลไม่ครบและกล่องยังอยู่ในตำแหน่งรับผลแอ๊บเปิ้ล

สำหรับโปรแกรมแบบ Sequential logic เอาท์พุตของอุปกรณ์จะทำงานตามอินพุตและ State (หรือ Step) ซึ่งเราเราจะแบ่งโครงสร้างโปรแกรมออกเป็นส่วนย่อยๆ โดยใช้  Subroutine ดังนี้

–        MainRoutine เป็นรูทีนหลักใช้ Jump ไป Subroutine

–        Alarm เป็นรูทีนสำหรับเขียนเงื่อนไข Alarm ของเครื่อง

–        Machine_Status ใช้แสดงสถานะของเครื่อง ได้แก่ Ready, Running, Fault, Auto และ Manual

–        Output ใช้ Step ไปสั่งงาน Output ของอุปกรณ์ต่างๆ

–         State_Machine ใช้กำหนดขั้นตอน(Step) และเงื่อนการเปลี่ยน Step ของเครื่อง (Transition) ซึ่งในที่นี้มีอยู่ 2 ขั้นตอนได้แก่ ขั้นตอนการเลื่อนกล่อง(Feed Box)และขั้นตอนการป้อนผลแอ็ปเปิ้ลลงกล่อง (Fill Part) ดัง State diagram ด้านล่าง สังเกตุว่าเครื่องจะเข้าสู่ขั้นตอน Feed Box ได้นั้นระบบต้องอยู่ในสถานะ Running และเมื่อเข้าสู่ขั้นตอน Feed Box แล้วเราจะเอา Tag ของ Step ไปสั่งงาน Output เพื่อขับสายพานของกล่อง จากนั้นจึงเปลี่ยนเข้าขั้นตอน Fill Part เมื่อเซ็นเซอร์ SE2 เช็คว่ามีกล่องอยู่ในตำแหน่งแล้ว ในขั้นตอน Fill Part เราจะเอา Tag ของ Step ไปสั่งงาน Output เพื่อขับสายพานป้อนผลแอ็ปเปิ้ลและเมื่อ Counter นับผลผลแอ็ปเปิ้ลได้ตามที่กำหนดไว้ เครื่องจะกลับเริ่มต้นที่ขั้นตอน Feed Box อีกครั้ง สลับกันไปเรื่อยๆ

อย่างไรก็ตามการเปลี่ยนจาก Step หนึ่งไปยังอีก Step ต้องเปลี่ยนทีละ Step และอยู่ในสถานะ Running

MainRoutine

Output

State_Machine แบบ Latch-Unlatch

State_Machine แบบจำนวนเต็ม (Integer)

structure14

structure15

ในการนำไปใช้จริง เรามักจะเอาวิธีการเขียนโปรแกรมทั้งสองแบบมาใช้ร่วมกัน เพราะจะใช้ State machine เพียงอย่างเดียว เราต้องเขียน State ให้ครอบคลุมทุกๆเงื่อนไข ซึ่งอาจมีจำนวนมากและวุ่นวายพอควร ดังนั้นถ้าส่วนไหนมีการทำงานไม่ซับซ้อนก็เขียนโปรแกรมแบบ Sequential แต่ถ้าส่วนไหนมีลำดับขั้นตอนที่แน่นอน ก็เขียนแบบ State machine ช่วย ยังไงลองนำไปใช้งานกันดูนะครับ

หากมีข้อสงสัย อีเมลล์มาถามได้ที่ thaicontrol01@gmail.com หรือ Fan Page https://www.facebook.com/thaicontrol01 ครับ

4 thoughts on “Programming Structure

  1. State Diagram เหมาะมากๆครับสำหรับการออกแบบระบบที่มีความซับซ้อน ขอบคุณมากครับที่ให้ความรู้และใช้ได้จริง

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s