Back to Top

การสื่อสารระหว่าง CPU กับ CPU ด้วยคำสั่ง PUT/GET

 |  Technical Information - Siemens

การสื่อสารระหว่าง CPU กับ CPU ด้วยคำสั่ง PUT/GET

News & Articles

PUT-GET เป็นคำสั่งในส่วนของ S7 connection คือเป็นคำสั่งเพื่อให้ PLC Siemens คุยกับ PLC Siemens ด้วยกันเอง เช่นนำ S7-1200 ไปคุยกับ S7-300 เป็นต้น ซึ่งการคุยกันระหว่าง PLC S7 ทั้งคู่นั้น จะมีตัวหนึ่งที่ทำตัวเป็น Main PLC และอีกตัวหนึ่งทำตัวเป็น Partner PLC และการเขียนโปรแกรม PUT-GET นั้นจะเกิดขึ้นที่ Main PLC เท่านั้น ตัว Partner PLC ไม่ต้องทำการโปรแกรมใดๆเลย เพียงแต่ทำการตั้งค่าและเตรียมข้อมูลให้เหมาะสมเท่านั้น

PUT_GET_01

.


 

คำสั่ง GET

การตั้งค่าและเตรียมข้อมูลฝั่ง Main PLC

1. เตรียมข้อมูลใน Data block ของฝั่ง Main PLC เพื่อให้เป็นตัวเก็บข้อมูลที่จะอ่านมาได้จาก Partner PLC ตามจำนวนที่ต้องการ ตัวอย่างนี้แปลว่าเราต้องการเก็บข้อมูลจากคำสั่ง GET ไว้ที่ DB2
PUT_GET_02.png

2. ตั้งค่า Property Attribute ของ Data block โดยเลือกไม่ใช้ “Optimized block access”
PUT_GET_03.png

การตั้งค่าและเตรียมข้อมูลฝั่ง Partner PLC

1. เตรียมข้อมูลใน Data block ของฝั่ง Partner PLC เพื่อเป็นพื้นที่ที่ให้ Main PLC เอาอ่านจากพื้นที่นี้ ตัวอย่างนี้แปลว่าเราต้องการเปิดพื้นที่ DB10 ของ Partner PLC ให้ Main PLC มาอ่านไปได้
PUT_GET_04

2. ตั้งค่า Property Attribute ของ Data block โดยเลือกไม่ใช้ “Optimized block access”
PUT_GET_05.png

3. ตั้งค่า Connection mechanism โดยทำการ enable “Permit access with PUT/GET communication from remote partner”
PUT_GET_06.png

สร้าง S7 connection เพื่อเชื่อมต่อระหว่าง PLC

1. ในส่วนของ Device configuration -> Network view ตั้งค่า Connections เลือกเป็น S7 connection จากนั้นโปรแกรมจะทำการ highlight อุปกรณ์ที่สามารถเชื่อมต่อกันได้ดังรูป

PUT_GET_07.png

2. นำ mouse ลากเพื่อเชื่อมต่อระหว่าง 2 PLC (อุปกรณ์ตัวแรกที่ click จะเป็น Main PLC และตัวที่ถูกลากไปหาจะเป็น Partner PLC)PUT_GET_08

3. เมื่อลากการเชื่อมต่อสมบูรณ์แล้ว โปรแกรมจะแสดง S7 connection ทั้งในส่วนของ Main PLC (Local PLC) กับ Partner PLC
PUT_GET_09.png

4. สิ่งที่เราควรจะต้องโน้ตเอาไว้คือ Local ID ของ S7 connection นี้ เพราะเราต้องใช้เลขนี้มาใส่ใน block PUT/GET ต่อไป  ตัวอย่างนี้ Local ID คือ W#16#100 เป็นต้น
PUT_GET_10.png

การทำโปรแกรม GET

การเขียนโปรแกรมนั้น เราจะทำการเขียนที่ฝั่งของ Main PLC เท่านั้น

1. วาง block GET ที่ network แล้วเลือก Partner PLC ใน Properties ของ block GET ให้ถูกต้อง
PUT_GET_11.png

2. สังเกตว่าถ้าเราเลือก Partner PLC ถูกต้อง Local ID จะใส่ให้เราอัตโนมัติและตรงกับตัวเลข Local ID ที่เราได้โน้ตเอาไว้ก่อนหน้านี้ หรือเราจะใส่ Local ID เอาเองก็ได้ (แต่แนะนำให้เลือกจาก Partner PLC จะดีกว่า)
PUT_GET_12.png

3. ทำการระบุตัวแปรให้กับขาตัวแปรที่เหลือ

PUT_GET_13.pngตัวอย่างนี้หมายความว่า เราจะไปทำการอ่านค่าจาก DB10 ของ Partner เริ่มจาก DBX0.0 จำนวน 2 word แล้วนำมาเก็บไว้ที่ DB2 ของ Main PLC ที่จำนวนเท่ากัน

  • REQ คือตัว trig เพื่อสั่ง GET ค่าจาก Partner PLC ทำงานที่ขอบขาขึ้นเท่านั้น
  • ADDR_1 คือ pointer ที่ชี้ไปยังตำแหน่ง DB ของ Partner PLC ที่เราต้องการไปอ่านค่ามา
  • RD_1 คือ pointer ที่ชี้ไปยังตำแหน่ง DB ของ Main PLC ที่จะให้เก็บค่าที่ GET มาได้

โดยรูปแบบของ Pointer ที่ต้องใช้คือ “P#bit address” “data type” “length”

ทดสอบโปรแกรม GET

1. ใส่ค่า DB10 ของ Partner PLC เพื่อทดสอบ
PUT_GET_14.png

2. ทำการ trig สัญญาณ REQ ที่ตัว block GET ของ Main PLC
PUT_GET_15.png

3. Main PLC จะอ่านค่าจาก DB10 ของ Partner PLC จำนวน 2 word แล้วนำมาเก็บไว้ที่ DB2 ของ Main PLC
PUT_GET_16.png

========================================================================================================================================================

คำสั่ง PUT

สำหรับคำสั่ง PUT นี้ เราขอใช้ Data block เดียวกับที่ใช้ในคำสั่ง GET ไปแล้ว เพื่อให้เห็นการทำงานและการใส่ค่าของ pointer ได้ดีขึ้นด้วย

การตั้งค่าและเตรียมข้อมูลฝั่ง Main PLC

1. เตรียมข้อมูลใน Data block ของฝั่ง Main PLC เพื่อให้เป็นตัวที่จะส่งข้อมูลออกไปยัง Partner PLC ตามจำนวนที่ต้องการ ตัวอย่างนี้แปลว่าเราต้องการส่งข้อมูลตั้งแต่ offset ที่ 4 ไปยัง Partner PLC
PUT_GET_17.png

2. กรณีที่สร้าง Data block ขึ้นมาใหม่ เรายังคงจำเป็นต้องตั้งค่า Property Attribute ของ Data block โดยเลือกไม่ใช้ “Optimized block access” เหมือนกับตอนใช้งานคำสั่ง GET เพียงแต่กรณีนี้ Data block นี้ถูก disable “Optimized block access” มาแล้ว จึงไม่ได้แสดงให้ดูอีก

การตั้งค่าและเตรียมข้อมูลฝั่ง Partner PLC

1. เตรียมข้อมูลใน Data block ของฝั่ง Partner PLC เพื่อเป็นพื้นที่ที่ให้ Main PLC มาเขียนข้อมูลลงไปได้ ตัวอย่างนี้แปลว่าเราต้องการเปิดพื้นที่ DB10 ตั้งแต่ offset ที่ 4 ของ Partner PLC ให้ Main PLC มาเขียนลงได้
PUT_GET_18.png

2. กรณีที่สร้าง Data block ขึ้นมาใหม่ เรายังคงจำเป็นต้องตั้งค่า Property Attribute ของ Data block โดยเลือกไม่ใช้ “Optimized block access” เหมือนกับตอนใช้งานคำสั่ง GET เพียงแต่กรณีนี้ Data block นี้ถูก disable “Optimized block access” มาแล้ว จึงไม่ได้แสดงให้ดูอีก

สร้าง S7 connection เพื่อเชื่อมต่อระหว่าง PLC

เนื่องจากกรณีนี้ S7 connection ได้ถูกสร้างตั้งแต่ตอนที่เราทำการตั้งค่าเพื่อใช้คำสั่ง GET แล้ว จึงไม่ต้องสร้างอีก แต่ถ้าหากยังไม่เคยถูกตั้งค่ามาก่อนให้ทำเช่นเดียวกับการสร้าง S7 connection ในขั้นตอนของคำสั่ง GET

การทำโปรแกรม PUT

การเขียนโปรแกรมนั้น เราจะทำการเขียนที่ฝั่งของ Main PLC เท่านั้น

1. วาง block PUT ที่ network แล้วเลือก Partner PLC ใน Properties ของ block PUT ให้ถูกต้อง
PUT_GET_19.png

2. สังเกตว่าถ้าเราเลือก Partner PLC ถูกต้อง Local ID จะใส่ให้เราอัตโนมัติและตรงกับตัวเลข Local ID ที่เราได้โน้ตเอาไว้ก่อนหน้านี้ หรือเราจะใส่ Local ID เอาเองก็ได้ (แต่แนะนำให้เลือกจาก Partner PLC จะดีกว่า)
PUT_GET_20.png

3. ทำการระบุตัวแปรให้กับขาตัวแปรที่เหลือ

PUT_GET_21ตัวอย่างนี้หมายความว่า เราจะไปทำการเขียนค่าจาก DB2 ของ Main PLC เริ่มจาก DBX4.0 จำนวน 2 word ไปใส่ใน DB10 ของ Partner PLC ที่จำนวนเท่ากัน และเริ่มจาก DBX4.0 เช่นกัน

  • REQ คือตัว trig เพื่อสั่ง PUT ค่าไปยัง Partner PLC ทำงานที่ขอบขาขึ้นเท่านั้น
  • ADDR_1 คือ pointer ที่ชี้ไปยังตำแหน่ง DB ของ Partner PLC ที่เราต้องการจะเขียนค่าไป
  • RD_1 คือ pointer ที่ชี้ไปยังตำแหน่ง DB ของ Main PLC ที่จะส่งไปยัง Partner PLC

โดยรูปแบบของ Pointer ที่ต้องใช้คือ “P#bit address” “data type” “length”

ทดสอบโปรแกรม PUT

1. ใส่ค่า DB2 ของ Main PLC เพื่อทดสอบ
PUT_GET_22.png

2. ทำการ trig สัญญาณ REQ ที่ตัว block PUT ของ Main PLC
PUT_GET_23

3. ค่าจาก Main PLC จะถูกเขียนไปยัง Partner PLC
PUT_GET_24.png

========================================================================================================================================================

NOTE 1

  • หากมีปัญหาเรื่องคำสั่ง PUT/GET ไม่สามารถอ่านเขียนค่าได้ เราสามารถลอง online ดูแล้ว click ที่ตัว block PUT/GET แล้วดูในส่วน Properties -> Configuration เพื่อดูว่าปัญหาเกิดขึ้นที่ไหน
  • PUT_GET_25.pngตัวอย่างทดสอบด้วยการ disable Permit access with PUT/GET communication ที่ฝั่ง Partner PLC

 

  • เราสามารถเพิ่มชุดข้อมูลได้สูงสุดถึง 4 ชุดข้อมูลต่อ 1 block PUT/GET
    PUT_GET_26.png
  • สำหรับจำนวนข้อมูลที่อ่านเขียนได้ด้วย S7 communication นั้น สามารถดูได้จาก Help ของ TIA ในเรื่อง Common parameters of instructions for S7 communication ซึ่งมีจำนวนข้อมูลที่การันตีด้วยจำนวนดังนี้
    PUT_GET_27.png
    แต่จำนวนสูงสุดที่ใช้ได้นั้น จะเป็นตามตารางดังนี้
    PUT_GET_28.png
    และหากมีการใช้งาน parameter หลายตัว ให้อ้างอิงดังตารางนี้
    PUT_GET_29.png

 

 

NOTE 2

กรณีที่นำ S7-1200/S7-1500 ไปคุย PUT/GET กับ PLC ตระกูล S7-300/S7-400 ให้เราตั้งค่า Rack และ Slot ของ S7 connection ให้เป็น Rack0 Slot2 สำหรับการใช้งานกับ S7-300 และ Rack0 Slot2/3 (แล้วแต่การตั้งค่าของ S7-400 ว่า CPU ไปอยู่ slot ไหน)  สำหรับการใช้งานกับ S7-400
PUT_GET_30

ใน TIA V15 พบว่าหากตั้งค่า Rack/Slot ผิดตั้งแต่แรกแล้วโหลดลง PLC เวลามาเปลี่ยนภายหลัง PLC จะไม่จำค่าใหม่ เมื่อ online ดูจะเห็นค่าเดิมอยู่ คาดว่าน่าจะเป็น bug ดังนั้นต้องสร้าง project ใหม่แล้วสร้างให้ถูกตั้งแต่แรก

 

 

thx to siemens

click1 click2 click3

 PLC, HML, TIA, Siemens, Technical Information, IOT

« Back
© Developed by CommerceLab