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

การใช้ Python สร้าง IoT Gateway โดยใช้ RevPi (Raspberry Pi อุตสาหกรรม) เพื่ออ่านค่า Power Meter / Energy Meter ผ่าน MODBUS RTU

บทความฉบับนี้สอนการเขียนโปรแกรม Python เพื่อนำไปประยุกต์การใช้งานในลักษณะ IoT Gateway โดยการอ่านค่า พลังงาน เช่น แรงดัน กระแสไฟฟ้า Active Power หรือ Power Factor ฯลฯ ผ่าน MODBUS RTU หรือ MODBUS TCP ก็สามารถทำได้ ซึ่งในอนาคต สามารถ ส่งข้อมูลดังกล่าว ไปยังระบบ Cloud ได้

โดยการเชื่อมต่อ KUNBUS RevPi Controller เช่น RevPi Core 3 หรือ RevPi Connect เข้ากับมิเตอร์ ซึ่งในบทความนี้ ใช้ของยี่ห้อ LEOS รุ่น AC3-MF1 เป็น AC 3 Phase Multi Function Power Meter มีฟังก์ชั่นการใช้งานครบถ้วน

มีการใช้พอร์ต RS-485และฟีเจอร์ MODBUS Master Virtual Module ของ RevPi

ซึ่งในที่นี้ RevPi Connect จะทำหน้าเป็น MODBUS Master และ LEOS รุ่น AC3-MF1 จะทำหน้าที่เป็น MODBUS Slave

อุปกรณ์ Revolution Pi เช่น RevPi Core 3 และ RevPi Connect ถูกพัฒนาขึ้น เพื่อทดแทน Raspberry Pi (RPi) สำหรับ งานอุตสาหกรรม

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

การกำหนดค่าเริ่มต้น
  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 ตัว
  • อุปกรณ์ LEOS รุ่น AC3-MF1 จำนวน 3 ตัว
  • แหล่งจ่ายไฟ 24V DC จำนวน 2 ชุด
ขั้นตอนการเชื่อมต่อสัญญาณ

1) อุปกรณ์ LEOS รุ่น AC3-MF1 สามารถวัดไฟได้ 3 เฟส และสามารถทำการส่งค่าที่วัดได้ ออกมาทาง MODBUS RTU หรือ RS-485 ได้

หลังจากทำการจ่ายไฟเลี้ยงให้อุปกรณ์ทั้งหมดแล้ว ให้ทำการต่อสายตาม Diagram ด้านล่าง

2) เปิดหน้า Web Browser บนคอมพิวเตอร์ และพิมพ์ IP Address ของอุปกรณ์ RevPi Connect และ ทำการ Login ตาม รายละเอียด ดังต่อไปนี้

  • Username: admin
  • Password: ดูได้จากสติ้กเกอร์ด้านข้างของอุปกรณ์ RevPi

3) จะปรากฏหน้าต่าง Web Server ของ อุปกรณ์ RevPi Connect ให้เลือกแทบ SERVICES เพื่อทำการกด Enabled Modbus Master และกดปุ่ม SAVE ALL

4) ให้เลือกแทบ APPS แล้วทำการ Click ที่ปุ่ม START เพื่อเริ่มต้นโปรแกรม PiCtory

5) ให้ทำการลาก ไอคอน ModbusRTU Master ในกลุ่ม Virtual Devices จากเมนูทางด้านซ้าย มาอยู่ด้านข้างของรูป RevPi Connect (ในช่อง empty ข้างใดก็ได้) 

6) กำหนดค่าพอร์ต RS-485 ของ RevPi Connect ให้ตรงกับ อุปกรณ์ LEOS รุ่น AC3-MF1 ตามรูปด้านล่าง

7) เนื่องจาก ผู้ใช้สามารถ กำหนดค่าเกี่ยวกับ MODBUS เพื่ออ่านค่าจาก อุปกรณ์ LEOS รุ่น AC3-MF1 ได้หลายค่า ในตัวอย่างนี้จะทดสอบการอ่านค่าตามรายละเอียดด้านล่าง

  • Voltage Line 1 to Neutral
  • Voltage Line 2 to Neutral
  • Voltage Line 3 to Neutral
  • +/- Phase Current Line 1
  • +/- Phase Current Line 2
  • +/- Phase Current Line 3
  • +/- Total Active Power
  • Power Pactor Total

จึงทำการกำหนดค่า Value Editor ของ ModbusRTU MASTER ที่เพิ่มขึ้นมา เป็นชื่อตามรูปด้านล่าง

8) คลิกขวาที่ รูป ModbusRTU MASTER ที่เพิ่มขึ้นมา แล้วเลือกเมนู Extended Data จะปรากฎหน้าต่าง Extended Data ของ ModbusRTUMaster ตัวนี้ขึ้นมา ให้ทำการกำหนดค่าของ ModbusRTUMaster ให้สอดคล้องกับการกำหนดค่าก่อนหน้า ตามรูปด้านล่าง

จากนั้นให้ทำการบันทึกค่าตามขั้นตอนดังต่อไปนี้

  • เลือกเมนู File -> Save As
  • เลือกเมนู File -> Save as Start-Config.
  • เลือกเมนู File -> Load Start-Config.
  • เลือกเมนู Tools -> Reset Driver แล้วกดปุ่ม OK

9) ใช้โปรแกรม PuTTY จากคอมพิวเตอร์ หรือ เปิดโปรแกรม Terminal ที่อุปกรณ์ RevPi Connect แล้วพิมพ์คำสั่งด้านล่าง เพื่อทดสอบการอ่านค่าจาก อุปกรณ์ LEOS รุ่น AC3-MF1 ผ่าน MODBUS RTU

  • piTest -1 -r L1N
  • piTest -1 -r CL1
  • piTest -1 -r AP_Total
  • piTest -1 -r PF_Total

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

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

  • L1N 11 //WORD
  • L2N 13 //WORD
  • L3N 15 //WORD
  • CL1 17 //WORD
  • CL2 19 //WORD
  • CL3 21 //WORD
  • AP_Total 23 //WORD
  • PF_Total 25 //WORD

L1N หมายถึง Voltage ระหว่าง Line 1 กับ Neutral

L2N หมายถึง Voltage ระหว่าง Line 2 กับ Neutral

L3N หมายถึง Voltage ระหว่าง Line 3 กับ Neutral

CL1 หมายถึง Current ของ Phase Line 1

CL2 หมายถึง Current ของ Phase Line 2

CL3 หมายถึง Current ของ Phase Line 3

AP_Total หมายถึง Total Active Power

PF_Total หมายถึง Power Factor Total

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

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

import time
import struct
import fcntl
techsquare=open("/dev/piControl0","wb+",0)
techsquare.seek(11)
L1N=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(13)
L2N=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(15)
L3N=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(17)
CL1=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(19)
CL2=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(21)
CL3=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(23)
AP_Total=int.from_bytes(techsquare.read(2),byteorder='little')
techsquare.seek(25)
PF_Total=int.from_bytes(techsquare.read(2),byteorder='little')
print(L1N,L2N,L3N,CL1,CL2,CL3,AP_Total,PF_Total)

หากทำตามขั้นตอนนี้เรียบร้อย จะสามารถอ่านค่า L1N,L2N,L3N,CL1,CL2,CL3,AP_Total และ PF_Total ออกมาได้อย่างถูกต้อง

*หากมีการเปลี่ยนพอร์ตใหม่แล้วอ่านค่าได้เป็น 0 หรือ ใช้ไม่ได้ให้ทำการ restart อุปกรณ์ RevPi Connect เพื่อทำการทดสอบอีกครั้งหนึ่ง

error: Content is protected...