บทความฉบับนี้สอนการเขียนโปรแกรม 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 ประกอบเข้าด้วยกัน
หากผู้อ่านมีข้อสงสัยเพิ่มเติม กรุณา ติดต่อ ทีมงาน เทคสแควร์
การกำหนดค่าเริ่มต้น
- ทำการ เชื่อมต่อ อุปกรณ์ ทั้งหมด ตามบทความ การใช้งาน RevPi ผ่านโปรโตคอล SSH แบบรีโมท
- ทำการ กำหนดค่า RevPi Connect ให้สามารถ เริ่มต้น การทำงานด้วย GUI Mode ได้ ตามบทความ สอนการกำหนดค่าอุปกรณ์ RevPi Core / RevPi Core 3 ให้เริ่มต้นการทำงานด้วย GUI Mode
- ทำการ กำหนดค่า 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 ที่มีการกำหนดค่าตามรูปด้านล่าง พบว่า สามารถอ่านค่าได้อย่างถูกต้องทั้งหมด