กุมภาพันธ์ 2, 2016

การสร้าง Gateway โดยใช้ KUNBUS RevPi Connect และ Ethernet/IP เพื่ออ่านค่า เซ็นเซอร์ Robotiq FT 300 ผ่าน MODBUS RTU

บทความฉบับนี้สอนการเขียนโปรแกรม Python เพื่อประยุกต์การใช้งานของ KUNBUS RevPi Connect และ KUNBUS Ethernet/IP Gateway Module ในการสร้าง Gateway ที่ใช้แปลงข้อมูลระหว่าง MODBUS RTU (RS-485) กับ Ethernet/IP หรือ MODBUS TCP ก็ได้

ตัวอย่างในบทความนี้ใช้ การอ่านค่า จาก เซ็นเซอร์ Robotiq FT 300 ผ่าน MODBUS RTU (RS-485) และส่งค่าไปยังคอมพิวเตอร์ ผ่าน MODBUS TCP Master 

ซึ่งในที่นี้ RevPi Connect จะทำหน้าเป็น MODBUS Master และ Robotiq FT 300 จะทำหน้าที่เป็น MODBUS Slave

และ KUNBUS Ethernet/IP Gateway Module จะทำหน้าที่เป็น MODBUS TCP Slave และคอมพิวเตอร์ จะทำหน้าที่เป็น MODBUS TCP Master

อุปกรณ์ Revolution Pi เช่น RevPi Core 3 และ RevPi Connect ถูกพัฒนาขึ้น เพื่อทดแทน Raspberry Pi (RPi) สำหรับ งานอุตสาหกรรม ซึ่งโดยปกติแล้ว อุปกรณ์ Raspberry Pi ไม่สามารถเชื่อมต่อแบบ Ethernet/IP ได้ โดยตรง แต่เมื่อเป็น Raspberry Pi อุตสาหกรรม เช่น ระบบ Revolution Pi (RevPi) จึงทำให้ สามารถ เชื่อมต่อแบบ Ethernet/IP ได้ เนื่องจากการใช้อุปกรณ์ประเภท Modular Gateway ประกอบเข้าด้วยกัน

หากผู้อ่านมีข้อสงสัยเพิ่มเติม กรุณา ติดต่อ ทีมงาน เทคสแควร์

การกำหนดค่าเริ่มต้น
  1. ทำการ เชื่อมต่อ อุปกรณ์ ทั้งหมด ตามบทความ การใช้งาน RevPi ผ่านโปรโตคอล SSH แบบรีโมท
  2. ทำการ กำหนดค่า RevPi Connect ให้สามารถ เริ่มต้น การทำงานด้วย GUI Mode ได้ ตามบทความ สอนการกำหนดค่าอุปกรณ์ RevPi Core / RevPi Core 3 ให้เริ่มต้นการทำงานด้วย GUI Mode
  3. ทำการ กำหนดค่า RevPi Connect ให้สามารถ ใช้งาน Remote Desktop ได้ ตามบทความ สอนการใช้ Remote Desktop กับ RevPi Core / RevPi Core 3
อุปกรณ์ประกอบ
  • คอมพิวเตอร์ จำนวน 1 เครื่อง
  • อุปกรณ์ RevPi Connect จำนวน 1 ตัว
  • อุปกรณ์ Robotiq FT 300 จำนวน 1 ตัว
  • แหล่งจ่ายไฟ 24V DC จำนวน 2 ชุด
ขั้นตอนการเชื่อมต่อสัญญาณ

1) ทำการกำหนดค่าตั้งแต่ข้อ 1 – 9 ตามบทความ การเขียนโปรแกรม Python โดยใช้ KUNBUS RevPi Connect เพื่ออ่านค่า เซ็นเซอร์ Robotiq FT 300 ผ่าน MODBUS RTU

2) ทำการลาก ไอคอน Gateway Ethernet/IP ในกลุ่ม Gateway Devices จากเมนูทางด้านซ้าย มาอยู่ด้านซ้ายของรูป RevPi Connect (เพื่อให้สอดคล้องกับอุปกรณ์จริง) 

3) เนื่องจาก ผู้ใช้สามารถ กำหนดค่าเกี่ยวกับ MODBUS เพื่ออ่านค่าจาก Robotiq FT 300 ได้หลายค่า ในตัวอย่างนี้จะทดสอบการอ่านค่า Production year, Serial number, Force X, Force Y และ Force Z จึงทำการกำหนดค่า Value Editor ของ Gateway Ethernet/IP ที่เพิ่มขึ้นมา เป็นชื่อตามรูปด้านล่าง

4) เลือกเมนู File และ Export เพื่อทำการสร้างไฟล์ Offset List ที่จะใช้อ้างอิงตำแหน่งของ Address ในการ เขียนโปรแกรม ด้วยภาษา Python โดยให้เลือกเป็นโหมด Offset list (Template เป็น e02.json)

ในที่นี้ ได้ผลลัพธ์ ของไฟล์ OffsetList.txt เป็นตามรายการด้านล่าง

  • Input
    • Year 971 //WORD
    • SN1 973 //WORD
    • Fx 975 //WORD
    • Fy 977 //WORD
    • Fz 979 //WORD

Year หมายถึง ปีที่เซ็นเซอร์ตัวนี้ถูกผลิต มี Offset ที่ Address 971

SN1 หมายถึง หลายเลขอุปกรณ์ ส่วนที่ 1 (จากทั้งหมด 4 ส่วน) มี Offset ที่ Address 973

Fx หมายถึง ค่าแรงที่วัดได้ ในแนวแกน x มี Offset ที่ Address 975

Fy หมายถึง ค่าแรงที่วัดได้ ในแนวแกน y มี Offset ที่ Address 977

Fz หมายถึง ค่าแรงที่วัดได้ ในแนวแกน z มี Offset ที่ Address 979

  • Output
    • Output_1 480 //BYTE
    • Output_3 482 //BYTE
    • Output_5 484 //BYTE
    • Output_7 486 //BYTE
    • Output_9 488 //BYTE

Output_1 เป็นค่าที่จะ Map เข้ากับ Year มี Offset ที่ Address 480

Output_3 เป็นค่าที่จะ Map เข้ากับ SN1 มี Offset ที่ Address 482

Output_5 เป็นค่าที่จะ Map เข้ากับ Fx มี Offset ที่ Address 484

Output_7 เป็นค่าที่จะ Map เข้ากับ Fy มี Offset ที่ Address 486

Output_9 เป็นค่าที่จะ Map เข้ากับ Fz มี Offset ที่ Address 488

5) ใช้โปรแกรม VNC Viewer เข้าไปยังอุปกรณ์ RevPi Connect แล้วเปิดโปรแกรม Python 3 (IDLE)

6) พิมพ์คำสั่งตามรายการด้านล่าง เพื่อทดสอบการอ่านค่าทั้งหมด

import time
import struct
import fcntl
techsquare=open("/dev/piControl0","wb+",0)
techsquare.seek(971)
Year=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(973)
SN1=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(975)
Fx=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(977)
Fy=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(979)
Fz=int.from_bytes(techsquare.read(2),byteorder='little')
print(Year,SN1,Fx,Fy,Fz)
techsquare.seek(480)
Year=Year.to_bytes(2,byteorder='little')
techsquare.write(Year)
techsquare.seek(482)
SN1=SN1.to_bytes(2,byteorder='little')
techsquare.write(SN1)
techsquare.seek(484)
Fx=Fx.to_bytes(2,byteorder='little')
techsquare.write(Fx)
techsquare.seek(486)
Fy=Fy.to_bytes(2,byteorder='little')
techsquare.write(Fy)
techsquare.seek(488)
Fz=Fz.to_bytes(2,byteorder='little')
techsquare.write(Fz)

หากทำตามขั้นตอนนี้เรียบร้อย จะสามารถอ่านค่า Year, SN1, Fx, Fy และ Fx ออกมาได้ และมีการเขียนค่าเข้าไปยัง Output_1, Output_3, Output_5, Output_7 และ Output_9 ตามลำดับ เรียบร้อยแล้ว

7) เชื่อมต่อเข้าไปยัง KUNBUS Ethernet/IP Gateway โดยการทำตามขั้นตอนด้านล่าง

  • เปิดหน้า Web Browser บนคอมพิวเตอร์ และพิมพ์ IP Address ของอุปกรณ์ KUNBUS Ethernet/IP Gateway และ ทำการ Login ตาม รายละเอียด ดังต่อไปนี้
    • Username: Admin
    • Password: 1701

  • จะปรากฎหน้าต่างแสดงข้อมูลเบื้องต้นของอุปกรณ์ ให้ Click ที่ปุ่ม Show ของ Modbus TCP and Output 

  • สังเกตุว่าค่าที่แสดงในหน้าต่างของ Address ดังกล่าว จะตรงกันกับที่ได้รับมาจาก Robotiq FT 300 ที่ได้เขียนโปรแกรม Python เอาไว้

8) ทำการทดสอบการอ่านค่า โดยใช้โปรแกรม QModMaster ที่มีการกำหนดค่าตามรูปด้านล่าง พบว่า สามารถอ่านค่าได้อย่างถูกต้องทั้งหมด

error: Content is protected...