การใช้งาน S7-1200 เป็น Modbus TCP Server

การใช้งาน S7-1200 เป็น Modbus TCP Server

ในหัวข้อก่อนหน้า เราได้ทำการตั้ง PLC S7-1200 เป็น Modbus TCP Client เพื่อให้ PLC ไปอ่านค่าจากอุปกรณ์อื่นๆมาเก็บไว้ที่ PLC เอง เช่น เราอาจจะเอา PLC ไปอ่านค่าจาก temperature controller หรือ VSD ที่เป็นยี่ห้ออื่นๆ เป็นต้น

แต่ในหัวข้อนี้ เราจะทำการตั้ง PLC S7-1200 ให้เป็น Modbus TCP Server แทน นั่นคือ PLC จะเป็นตัวปล่อยข้อมูล Modbus เพื่อให้อุปกรณ์อื่นๆมาอ่าน/เขียนค่าแทน

MBTCP_Server_00.png

ขั้นตอนการตั้งค่า Modbus TCP Server

1. สร้าง Data block ขึ้นมาใหม่ เพื่อใช้เป็นตัวตั้งค่า parameter ของ Modbus
MBTCP_Server_01.png

2. ตั้งชื่อตัวแปร Parameter และกำหนด Data type เป็น TCON_IP_v4 (ต้องทำการพิมพ์เอง หากเลือกจาก drop down menu จะไม่มี data type ชนิดนี้)
MBTCP_Server_02.png

หากเรามากระจายดูข้อมูลในตัวแปรชนิด TCON_IP_v4 จะเห็นว่ามีพารามิเตอร์ต่างๆที่เกี่ยวข้องกับการสื่อสาร Modbus อยู่ภายใน
MBTCP_Server_03.png

3. ทำการตั้งค่าให้ Start value ให้กับ parameter ของ Modbus
MBTCP_Server_04

โดย

  • InterfaceId คือหมายเลข Hardware identifier ของพอร์ท Profinet ซึ่งสามารถตรวจสอบได้จาก Device configuration ของตัว PLC เราดังรูปด้านล่าง
  • ID คือหมายเลขอะไรก็ได้ตั้งแต่ 1-4095 ซึ่งคำสั่ง MB_SERVER แต่ละตัว จะต้องมี ID เฉพาะตัวที่ไม่ซ้ำกัน
  • ConnectionType กำหนดเป็น 11 เท่านั้นเพื่อตั้งให้เป็นการสื่อสารแบบ TCP ( Block MB_Client ไม่รองรับการสื่อสารแบบ UDP)
  • ActiveEstablished ในกรณีนี้ให้ตั้งค่าเป็น 0
  • RemoteAddress ในกรณีนี้ให้ตั้งเป็น 0 ทั้งหมด คือให้อุปกรณ์ Client หมายเลขใดมาอ่านค่าจาก S7-1200 ก็ได้
  • RemotePort ในกรณีของ MB_SERVER ให้ตั้งเป็น 0
  • LocalPort ให้ตั้งเป็น 502 ซึ่งเป็น port มาตรฐานของการสื่อสาร Modbus
MBTCP_Server_05.png
วิธีการตรวจสอบ Hardware identifier ของพอร์ท Ethernet

4. ทำการสร้าง Data block ขึ้นมาใหม่อีก 1 ตัว เพื่อใช้เป็นพื้นที่ที่จะให้อุปกรณ์ Modbus Client สามารถมาอ่านต่อไปได้
MBTCP_Server_06.png

5. สร้างตัวแปร Array เพื่อใช้เป็น buffer ของพื้นที่ Modbus ที่ต้องการแชร์ให้ Modbus Client
MBTCP_Server_07.png

6. วาง block MD_SERVER ไว้ที่ตัวโปรแกรม OB
MBTCP_Server_08.png

7. กำหนดค่าต่างๆให้กับ block MB_SERVER โดย
MBTCP_Server_09

  • EN ขา Enable นี้ควรจะมี contact เพื่อควบคุมการทำงานของ block MB_SERVER ซึ่งจะแตกต่างจาก block MB_CLIENT ที่เราสามารถปล่อย EN ให้ทำงานตลอดเวลาได้ เนื่องจาก MB_CLIENT มีขา REQ ให้สามารถควบคุมได้อีกตัว
  • DISCONNECT ปกติตั้งเป็น 0 ในกรณีของ MB_SERVER
  • MB_HOLD_REG เป็น pointer ที่ชี้ไปยังตำแหน่งที่เราต้องการแชร์เป็นพื้นที่ของ Modbus
  • CONNECT เป็นตัว pointer ที่ชี้ไปยัง parameter ในการสื่อสาร Modbus

8. ทำการ compile และ download โปรแกรมลง PLC บางครั้งเราอาจจะเจอ error ที่บอกว่า Data block ยังไม่ได้ถูก compile ในกรณีให้เราทำการ compile ตัว Data block ก่อน แล้วค่อยโหลดโปรแกรมลง PLC อีกที
MBTCP_Server_10.png

MBTCP_Server_11.png

9. เมื่อโหลดโปรแกรมลง PLC แล้ว เมื่อเราทำการ ON ขา EN ตัว PLC ก็พร้อมทำงานเป็น Modbus TCP Server ได้แล้ว
MBTCP_Server_12.png

10. ทดสอบด้วยการใช้โปรแกรม Modscan เพื่อมาอ่านค่าจาก PLC จะเห็นว่าได้ค่าที่ตรงกัน ซึ่ง address Modbus จะเริ่มต้นที่ 40001 เป็นต้นไป
MBTCP_Server_13.png

11. เรายังสามารถใช้รูปแบบ direct pointer ในรูปแบบของ “P#bit address” “data type” “length” เช่น P#M100.0 WORD 100 เพื่อชี้ไปยังตำแหน่งที่ต้องการแชร์ให้เป็นพื้นที่ Modbus โดยตรงได้เช่นกันดังรูป
MBTCP_Server_14

MBTCP_Server_15.png

การจัดการพื้นที่ Modbus

ปกติแล้ว พื้นที่ที่ pointer ชี้ไปใน parameter MB_HOLD_REG นั้นจะมีรูปแบบดังรูป เราสามารถใช้เป็น direct pointer หรือเป็น array ดังตัวอย่างที่ได้ทำมาก็ได้MBTCP_Server_16.png

แต่การใช้ MB_SERVER นั้น ยังสามารถแชร์พื้นที่ input/output ของ PLC ไปยัง Modbus Client ได้อีกด้วย ซึ่งพื้นที่เหล่านี้จะมีพื้นที่และ address ตายตัวตามรูปแบบดังตารางข้างล่าง โดยที่เราไม่ต้องมี pointer ใดๆมาชี้เพื่อใช้งานกับพื้นที่ input/output ของ PLC เลย
MBTCP_Server_17.png

เมื่อทำการทดสอบด้วย Modscan จะเห็นว่า Modscan จะสามารถเห็นการทำงานของ input จริงๆของ PLC ได้เลย ซึ่งการมอง input ของ PLC เป็นแบบ BOOL จะเริ่มต้นที่ address 10001 เป็นต้นไป
MBTCP_Server_18.png

และเมื่อทำการทดสอบด้วย Modscan จะเห็นว่า Modscan จะสามารถเห็นการทำงานของ output จริงๆของ PLC ได้เช่นกัน (สามารถสั่งงานได้ด้วยหากไม่ได้ขัดแย้งกับโปรแกรมใน PLC)  ซึ่งการมอง output ของ PLC เป็นแบบ BOOL จะเริ่มต้นที่ address 00001 เป็นต้นไปMBTCP_Server_19.png

การ offset Modbus address

ในบางครั้ง เราอาจจะไม่ได้ต้องการให้ address Modbus ของเราเริ่มต้นที่ 40001 เสมอไป ซึ่งเราสามารถตั้ง offset ให้ address ของ Modbus เริ่มต้นที่ตำแหน่งอื่นได้ด้วยพารามิเตอร์ใน Instance data block ของตัว MB_SERVER

1. ให้ทำการ MOVE ค่า offset ที่ต้องการไปใส่ใน Instance data block ของ MB_SERVER ที่ชื่อว่า “HR_Start_Offset”
MBTCP_Server_20.png

2. เพิ่ม contact First scan ก่อนหน้าคำสั่ง MOVE เพื่อให้ทำงานครั้งเดียวตอนเริ่มทำงาน
MBTCP_Server_21.png

3. เมื่อ download ลง PLC แล้วจะเห็นว่าจากเดิมที่ address Modbus เริ่มต้นที่ 40001 ไปเป็น 40021 คือขยับไปอีก 20 นั่นเอง
MBTCP_Server_22.png

 

 

 

 

 

 

Advertisements

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