Allen Bradley PLC

Project Organization

Project Organization
PO1

Project คือไฟล์ที่เก็บข้อมูลทั้งหมดสำหรับ PLCเช่น Task, program,Tag, Configuration และอื่นๆ มีไฟล์นามสกุลชื่อ “ACD”

Task ทำหน้าที่ควบคุมการรัน (Scan) โปรแกรม โดยโปรแกรมจะถูกเรียกขึ้นมาตามชนิดและสิทธิของ Task ที่โปรแกรมนั้นอยู่ ControlLogix มี Task สูงสุดได้ 32 task และแบ่งเป็นชนิดดังนี้

• Continuous task จะ scan คำสั่งและโปรแกรมจากบนลงล่างแล้ววนกลับมา scan อย่างต่อเนื่อง

Continuous task จะมีหรือไม่มีก็ได้ แต่มีได้ไม่เกิน 1 task เท่านั้นโดยปกติเมื่อเราสร้างโปรเจคขึ้นใหม่

Continuous task ชื่อ “MainTask” จะถูกสร้างให้เองอัตโนมัติ

PO2

• Periodic task จะ scan คำสั่งและโปรแกรมจากบนลงล่าง เพียงแต่ว่าจะกลับมา scan อีกครั้งก็ต่อเมื่อ ครบช่วงเวลาตามที่กำหนดไว้

PO3

• Event task จะ scan คำสั่งและโปรแกรมตามเหตุการณ์ที่กำหนด เช่น เปลี่ยนสถานะของ input โมดูล เป็นต้น

PO4

ข้อกำหนดของ Task

1)  Controller รัน Task ได้ทีละ 1 Task เท่านั้น รันหลายๆ Task พร้อมกันไม่ได้

2)  Task ที่มีสิทธิสูงกว่า (High Priority) สามารถรันแทรก Task ที่มีสิทธิต่ำกว่าได้ (Low Priority)

3)  Task จะรันโปรแกรมได้ทีละ1 โปรแกรมจนครบหมดทุกโปรแกรม

PO5

รูปด้านบนแสดงแผนภูมิเวลาของ Task สีเทาแสดงถึงว่า Task นั้นถูกเรียกใช้แต่ถูกขัดจังหวะให้หยุดทำงานลงชั่วคราว

  • ช่วง (0 ms) เป็นช่วงที่ Continue Task, Periodic Task และ Motion Planner ถูกเรียกใช้งานแต่ Motion PlannerTask ซึ่งมี Priority สูงสุด จึงได้สิทธิในการรัน
  • ช่วง (1 ms) I/O Task รัน หลังจาก Motion Planner รันเสร็จ
  • ช่วง (5 ms)Continue Task กลับมารันเมื่อ I/O Task รันเสร็จ
  • ช่วง (10 ms) Continue Task ถูกขัดจังหวะโดย Motion Planner
  • ช่วง (11 ms) Continue Task กลับมารัน
  • ช่วง (13 ms) CPU Overhead ขัดจังหวะการรัน Continue Task
  • ช่วง (14 ms) Periodic Task ขัดจังหวะการรัน Continue Task
  • ช่วง (18 ms) Motion Planner ขัดจังหวะการรัน Continue Task
  • ช่วง (19 ms) Continue Task กลับมารันตามปกติ
  • ช่วง (22 ms) CPU Overhead ขัดจังหวะการรัน Continue Task
  • ช่วง (23 ms) Continue Task กลับมารันตามปกติ
  • ช่วง (24 ms) เป็นช่วงที่ Continue Task,Event Task, Periodic Task และ Motion Planner ถูกเรียกใช้งานแต่ Motion PlannerTask ซึ่งมี Priority สูงสุด จึงได้สิทธิในการรัน
  • ช่วง (25 ms) Event Task รัน หลังจาก Motion Planner รันเสร็จ
  • ช่วง (26 ms) Periodic Task รัน หลังจาก Event Task รันเสร็จ
  • ช่วง (30 ms) Continue Task กลับมารัน

สังเกตุว่า Controller จะรัน Continue Task ต่อเนื่องตลอดเวลาและมีสิทธิต่ำที่สุด ดังนั้น Task อื่นจึงขัดจังหวะได้เสมอ

ถ้าหลายๆ Task ถูกเรียกใช้งานพร้อมๆกัน Task ที่ถือสิทธิสูงกว่า Controller ก็จะรัน Task นั้น ซึ่งวิธีการนี้ทำให้ Controller ทำงานได้อย่างยืดหยุ่นและมีประสิทธิภาพสูงสุด !!!

สำหรับ Task ชนิด Periodic หรือ Event ที่มีช่วงเวลาประมวล (Execution time) นานๆ อาจเกิดปัญหาว่า Task ยังรันไม่จบแต่ Task เดิมถูกเรียกขึ้นมารันซ้ำอีก (Overlaps) ดังรูปด้านล่าง Task ที่เรียกขึ้นมาทีหลังจะถูกยกเลิกและไม่ได้รันโดย Controller

PO6

ช่วงที่1 Task ถูก Trigger และ Task รันตามปกติ

ช่วงที่2 Task ถูก Trigger และ Task รันตามปกติ

ช่วงที่3 Task ถูก Trigger และ Task รันตามปกติ

ช่วงที่4 Task ถูก Trigger ขณะที่ Task กำลังรันอยู่

เพราะฉะนั้นเราต้องแน่ใจว่าช่วงเวลาในการรันของ Task (Execution Time หรือ Scan Time) ต้องน้อยกว่าช่วงเวลาที่ Trigger Task (Trigger Period หรือ Interval Time) ซึ่งทั้งสองค่าและจำนวนครั้งที่เกิด Overlaps สามารถดูได้จาก Task Properties ของ Task นั้นๆขณะ Online program อยู่

PO7PO8

วิธีเลือกใช้งาน Task

จะเขียนโปรแกรมไว้ใน Task แบบไหนดี ? ทาง Rockwell ได้ให้คำแนะนำไว้ดังนี้

  • ถ้าเป็นงานต่อเนื่อง ที่ต้องควบคุมอยู่ตลอดเวลา เช่น ควบคุมระดับของเหลวในถัง,อัตราการไหลคงที่, ควบคุมปริมาณบรรจุ และอื่นๆ ให้เขียนโปรแกรมไว้ใน Continue Task
  • ถ้าเป็นงานตามช่วงเวลาที่แน่นอน เช่น หาจำนวนชิ้นงานเฉลี่ยทุกๆชั่วโมง, ตรวจสอบสถานะการเชื่อมต่อกับอุปกรณ์ทุก 10 วินาที และอื่นๆ ให้เขียนโปรแกรมไว้ใน Periodic Task
  • ถ้าเป็นงานที่เกิดขึ้นตามเหตุการณ์ เช่น ควบคุมชุดคัดแยกความเร็วสูงเมื่อเซ็นเซอร์ตรวจเจอชิ้นงานเสีย, ควบคุมระบบหยุดฉุกเฉิน, การชดเชยตำแหน่งเซอร์โวมอเตอร์ และอื่นๆ ให้เขียนโปรแกรมไว้ใน Event Task

Task หนึ่งๆ สามารถมีโปรแกรมได้สูงสุด 32 โปรแกรม

Program ประกอบไปด้วยหลายๆ Routine ซึ่งเป็นส่วนที่เราใช้เขียนโปรแกรมสั่ง งาน

  • รูทีนหลักเรียกว่า “Mainroutine” ซึ่งจะรันขึ้นมาเป็นรูทีนแรกและทำหน้าที่เรียกใช้งาน(Call) รูทีนอื่นๆ
  • “FaultRoutine” จะรันเมื่อมี fault เกิดขึ้นกับโปรแกรม ทั้งสองรูทีนต้องเขียนด้วยภาษา ladder เท่านั้น ส่วนรูทีนอื่นสามารถเขียนด้วยภาษาใดก็ได้ เช่น function block, SFC แต่ละโปรแกรมมีหน่วยความจำของตัวเอง(local memory) เรียกว่า Program tags เฉพาะ routine ที่อยู่ในโปรแกรมนั้นเท่านั้นที่สามารถเข้าถึง Program tags ได้ สำหรับหน่วยความจำส่วนกลาง เรียกว่า “Controller tags” ทุกๆรูทีนสามารถเข้าถึงและใช้งานหน่วยความจำส่วนนี้ได้ ข้อมูล I/O ก็จัดเป็น Controller tags

PO9

System Overhead Time Slice

เป็นการกำหนดช่วงเวลาของ CPU(คิดเป็นเปอร์เซ็นต์) ที่ใช้ในการสื่อสารกับโปรแกรมหรืออุปกรณ์ภายนอก (System Task) เช่น HMI, Trend, คำสั่ง MSG, Serial port, Upload/download และ Online โปรเจค ซึ่งแบ่งมาจากเวลารรัน Continuous Task (ไม่มีผลกับ Periodic Taskและ MotionTask) ปกติมีค่าอยู่ระหว่าง 10-40% ดังนั้นยิ่งค่าเปอร์เซ็นต์ Time Slice มากๆจะทำให้เวลารัน Continuous Task ยิ่งน้อยลงเท่านั้น ตามสมการและตารางด้านล่าง อาจส่งผลกระทบกับการรัน PLC โปรแกรม

CT     = (100/TS%)-1   , (CT มีค่าอย่างน้อย 1 ms)

โดยที่ TS% คือ ค่าเปอร์เซ็นต์ Time Slice และ CT คือเวลารัน Continuous Task หน่วยเป็น ms

PO10

ขั้นตอนกำหนดค่า System Overhead Time Slice

1) เปิดโปรแกรม RSLogix5000 แล้วเลือกเมนู Edit จากนั้นคลิ๊กที่ Controller Properties

PO11

2) คลิ๊กที่แท็ป Advanced แล้วปรับค่า System Overhead Time Slice ตรงช่องเปอร์เซ็นต์ % นอกจากนี้เรายังเลือกได้ว่าช่วงเวลาที่ System Overhead Time Slice ไม่ได้ใช้งานจะให้ CPU ทำอะไรซึ่งเลือกได้ 2 แบบคือ 1) ให้กลับไปรัน Continuous Task (Run Continuous Task) หรือ 2) ยังคงให้รันSystem Task ต่อไปเหมือนเดิมจนครบเวลา

PO12

3) คลิ๊กปุ่ม OK

Create new project 

1) เปิดโปรแกรม RSLogix5000 แล้วเลือกเมนู File จากนั้นคลิ๊กที่ New

PO4

2) เลือกรุ่น (Type) และเวอร์ชั่น (Revision) ของ Processor ที่ใช้งาน        ให้พิมพ์ชื่อโปรเจคลงไปในช่อง Name จากนั้นเลือกชนิดของ Rackและหมายเลข Slot ที่ Processor นั้นถูกติดตั้งอยู่บน Rack (Slot แรกของ ControlLogix Rack คือหมายเลขศูนย์ (0) แล้วนับเพิ่มขึ้นไปทีละหนึ่งไปเรื่อยๆ) ถ้าต้องการเปลี่ยนFolder สำหรับเก็บไฟล์โปรเจค ให้คลิ๊กปุ่ม Browse แล้วเลือก Folder ที่ต้องการเสร็จแล้วคลิ๊กปุ่ม OK

PO14

3) แล้วเลือกเมนู File จากนั้นคลิ๊กที่ Save เพื่อ Save ไฟล์โปรเจค

PO6

Create New Task 

1) คลิ๊กขวาที่ Task จากนั้นคลิ๊ก New Task

PO7

2) พิมพ์ชื่อ Task , เลือกชนิดของ Task แล้วกำหนด Priority ตามต้องการจากนั้นคลิ๊ก OK

PO8

3) Task ที่เราสร้างขึ้นมาจะอยู่ในส่วน Tasks List ดังรูป

PO9

ขั้นตอนสร้างโปรแกรมใหม่ (Create New Program)

1) คลิ๊กขวาที่ Task ที่ต้องการสร้างโปรแกรม จากนั้นคลิ๊ก New Program

PO19

2) พิมพ์ชื่อโปรแกรมลงในช่อง Name จากนั้นคลิ๊ก OK

PO20

3) หลังจากสร้างโปรแกรมแล้วเราต้อง Add เข้าไปใน Schedule ของ Task ที่สร้างขึ้นก่อนหน้า

PO21PO22

4) เสร็จแล้วคลิ๊กปุ่ม OK

ขั้นตอนสร้างรูทีนใหม่ (Create New Routine)

1) คลิ๊กขวาที่ Program ที่ต้องการสร้างรูทีน จากนั้นคลิ๊ก New Routine

PO232) พิมพ์ชื่อรูทีนลงในช่อง Name จากนั้นคลิ๊ก OK (ตามตัวอย่างนี้สร้าง 2 รูทีน ชื่อว่า MainRoutine และ Kinetix300)

PO24

3) ดับเบิ้ลคลิ๊กที่โปรแกรมหรือคลิ๊กขวาที่โปรแกรม แล้วเลือก Properties

PO25

4) คลิ๊กแท็บ Configuration แล้วเลือกรูทีนชื่อ MainRoutine เป็นรูทีนหลัก

PO25_1

5) ดับเบิ้ลคลิ๊กที่ MainRoutine แล้วเขียนคำสั่ง Jump subroutine ไปที่รูทีน Kinetix300

PO26

 

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

 

2 thoughts on “Project Organization

  1. อยากรบกวนให้ช่วยอธิบายเพิ่มเติมเกี่ยวกับการทำงานของ Task เพิ่มเติมหน่อยได้ไหมครับ ว่าผมจะสามารถนำแต่ละ Task ไปใช้งานได้อย่างไรในการเขียนโปรแกรม ช่วยยกตัวอย่างง่ายแบบเปรียบเทียบให้ผมเห็นภาพพอให้ผมคิดตามได้นะครับ ขอบคุณครับ

    1. ถ้าอธิบายง่ายๆ Task คือส่วนที่เอาไว้รันโปรแกรมที่เราเขียน มี 3 ชนิด คือ Continuous task,
      Periodic task และ Event task. ถ้าต้องการให้โปรแกรมรันตลอดเวลา ก็ให้เขียนโปรแกรมไว้ใน Main Task ซื่งเป็น Task แบบ Continuous แต่ถ้าต้องการให้โปรแกรมรันเป็นช่วงเวลา ก็ให้สร้าง Task ใหม่เป็น แบบ Continuous แล้วเขียนโปรแกรมไว้ Task นี้ หรือถ้าต้องการให้โปรแกรมรันตามเหตุการณ์เกิดขึ้น (Trigger)
      ก็ให้สร้าง Task ใหม่เป็น แบบ Event แล้วเขียนโปรแกรมไว้ Task นี้ ….

      ThaiControl01

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