Allen Bradley PLC

Send data between PLC

ในระบบใหญ่ๆ อาจใช้  PLC หลายตัวร่วมกันควบคุมการทำงานของแต่ละระบบย่อย ดังนั้นจึงจำเป็นต้องมีการส่งข้อมูลระหว่าง PLCเพื่อใช้  Interlock เมื่อระบบย่อยใดๆหยุดทำงาน , ใช้ส่งข้อมูลของระบบหนึ่งไปยังระบบถัดไป หรือใช้ควบคุมการทำงานของอุปกรณ์ในระบบอื่น เป็นต้น ซึ่งจะต้องมี Network เป็นเส้นทางติดต่อสื่อสาร สำหรับ ControlLogix แล้วสามารถใช้งานได้หลาย Network เช่น Ethernet, ControlNet และ  DH+ แต่จะใช้แบบไหนนั้น เราต้องดูตามความเหมาะสม เช่น ถ้าระยะทางเชื่อมต่อระหว่าง PLC ไม่ไกลมาก (< 100m) และต้องการความเร็วในการส่งข้อมูลสูง Ethernet network น่าจะเป็นการเชื่อมต่อที่ดีที่สุด ในทางกลับกันถ้าระยะทางระหว่าง PLC อยู่ไกลกันแต่ยังต้องการความเร็วในการส่งข้อมูล เราควรใช้  ControlNet network เพราะระยะทางได้ไกลเป็นกิโลเมตร (ขึ้นกับจำนวน Tap)   ส่วน DH+ network จะใช้ส่งข้อมูลกับ PLC รุ่นเก่าๆของ AB เช่น PLC5

โครงสร้าง Network

EtherNet (Star)

ControlNet/DH+ (Drop line)

เมื่อเลือก Network ที่ใช้แล้ว เราต้องมี Communication card ตามชนิดของ network ดังนี้

–        Ethernet -> 1756-ENB

–        ControlNet -> 1756-CNB

–        DH+ -> 1756-DH+/RIO

ในทางโปรแกรมเราสามารถส่งข้อมูลไปยัง PLC ตัวอื่นได้ 2 วิธี คือ ใช้คำสั่ง Message (MSG) หรือ Produce-Consumed Tag

ใช้งานคำสั่ง MSG 

1. เพิ่ม Communication module ที่ต้องการในส่วนของ I/O Configuration (ในที่นี้เราใช้ แบบ Ethernet และชื่อ Ethernet_PLC1)

2. สร้าง Tag ที่เกี่ยวข้องและใช้ในคำสั่ง MSG

3. วางคำสั่ง MSG บน rung แล้วกำหนด Message Control tag ที่เราสร้างไว้แล้วตอนต้น ถ้าเป็นการอ่านข้อมูลให้เลือก “Read_PLC2_MSG” แต่ถ้าเป็นการเขียนข้อมูลให้เลือก “Write_PLC2_MSG” จากนั้นคลิ๊กที่กล่องสี่เหลี่ยมดังรูปเพื่อเปิด หน้าต่าง Message configuration ขึ้นมา

4. คลิ๊กที่แท็ป Configuration แล้วเลือกพารามิเตอร์ดังนี้

– Message Type -> เลือกเป็น CIP Data Table Read สำหรับการอ่านข้อมูลและ CIP Data Table Write สำหรับการเขียนข้อมูล

– Source Tag -> Tag ที่เก็บข้อมูลที่อยู่ใน Controller ต้นทาง โดยทั่วไปเราจะ ใช้ DINT[] เป็น Array Buffer สำหรับข้อมูลที่เป็นบิต และใช้ REAL[] เป็น Array Buffer สำหรับข้อมูลที่เป็นจำนวนจริง

– Number of Elements -> จำนวนสมาชิกของอะเรย์ข้อมูล

– Destination Tag-> Tag ที่เก็บข้อมูลที่อยู่ใน Controller ปลายทาง โดยทั่วไปเราจะ ใช้ DINT[] เป็น Array Buffer สำหรับข้อมูลที่เป็นบิต และใช้ REAL[] เป็น Array Buffer สำหรับข้อมูลที่เป็นจำนวนจริง

5. คลิ๊กที่แท็ป Communication แล้วเซ็ต Path ของ PLC ที่รับ/ส่งข้อมูลปลายทางโดยพิมพ์ชื่อ Ethernet card ของ PLC ต้นทาง, Slot ของ Ethernet card ต้นทาง, หมายเลข IP ของ Ethernet card ปลายทาง, 1, Slot ของ CPU ปลายทาง

                                                                                                                                                                                                                                                                                  ตัวอย่าง

ใช้คำสั่ง MSG เพื่ออ่านและเขียนค่าระหว่าง PLC1 และ PLC2 โดยอ่านค่าสถานะ Process01จาก Buffer ของ PLC2 (PLC2_Buffer) มาเก็บไว้ใน Buffer ของ PLC1 (Read_PLC2_Buffer[1].0) และเอาค่า Pressure Alarm (PSH_123) ใน Buffer ของ PLC1 (Write_PLC2_Buffer[0].0) เขียนลงไปที่ Buffer ของ PLC2 (PLC2_Buffer1[0].0)

Rung0 -> Timer รีเซ็ตตัวเองทุก 1 วินาทีเพื่อทริกเกอร์คำสั่ง MSG สำหรับอ่านข้อมูล

Rung1 -> คำสั่ง MSG สำหรับอ่านข้อมูล

Rung2 -> Timer รีเซ็ตตัวเองทุก 1 วินาทีเพื่อทริกเกอร์คำสั่ง MSG สำหรับเขียนข้อมูล

Rung3 -> คำสั่ง MSG สำหรับเขียนข้อมูล

Rung4 -> Tag Read_PLC2_Buffer[0].0Timer ซึ่งเป็น Tag ที่อ่านค่ามาจาก PLC2 ใช้เช็คการเชื่อมต่อระหว่าง PLC1 และ PLC2 ถ้าตัวมันไม่เป็น True ภาย 5 วินาทีจะทำให้ Heartbeat_timer.DN บิต มีค่าเป็น True

Rung5 -> ถ้า Heartbeat_timer.DN บิต มีค่าเป็น True ทำให้เราทราบว่า การเชื่อมต่อระหว่าง PLC1 และ PLC2 มีปัญหา โดยไปเช็ต Flag “Loss_communication”    วิธีนี้เรียกว่า “Heartbeat”

Rung6 -> ใช้รีเซ็ต Read_PLC2_Buffer[0].0

Rung7 -> เอาค่า Tag  PSH_123 ชนิด Boonlean ลง Wrire buffer เพื่อส่งไปให้ PLC2 (ถ้า Tag เป็นชนิด Real ให้ใช้คำสั่ง MOV ในการเอาค่าลง Buffer)

Rung8 -> เอาค่า Tag Read_PLC2_Buffer[1].0 ใน Read buffer ที่อ่านมาจาก PLC2 มาใช้งาน

11 thoughts on “Send data between PLC

  1. ในส่วนของ Compact Logix สามารถส่งข้อมูลหา Control Logix ได้หรือไม่ครับ

      1. แล้วถ้า เป็นคนละวง LAN หละครับ จะส่งข้อมูลได้มั้ยครับ

      2. ขอบคุณครับ ผมส่งผ่านคนละวง LAN เลยไม่ได้สักที

  2. PLC2_Buffer ที่อยู่ใน Source Element (Modul read) เป็น Tag หรือเปล่าครับหรือเป็นอะไร

    1. รายลเอียดบอกไว้แล้วในหัวข้อที่ 2 “สร้าง Tag ที่เกี่ยวข้องและใช้ในคำสั่ง MSG” ครับ
      thaicontrol01

  3. เหมือนกับ ที่อยู่ใน Destination element (modul write) มีที่มายังไงครับ ผมconfig แล้วไม่ผ่าน

  4. สอบถามหน่อยครับ 1756-EN2TR ถ้าจะรับส่ง message กันกับคอมพิวเตอร์ทั่วไปโดยผ่าน Socket connection พวก Winsock ในโปรแกรม VB จะทำได้ไหมครับ

    1. ทำได้ครับ แต่ถ้าให้ง่าย รับส่งค่าผ่าน OPC Server เช่น Kepware, Top server และอื่นๆ ดีกว่าครับ

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