การสื่อสารตามมาตรฐาน Modbus เป็นหนึ่งในมาตรฐานการสื่อสารแบบอนุกรม (Serial Communications protocol) ที่ใช้งานอย่างแพร่หลายในระบบอัตโนมัติอุตสาหกรรม (Industrial Automation Systems : IAS) เพื่อสร้างการเชื่อมโยงข้อมูลระหว่างอุปกรณ์ต่างๆ เช่น อุปกรณ์ควบคุมพีแอลซี (Programmable Logic Controllers : PLC) อุปกรณ์ตรวจวัด (Sensor) อุปกรณ์เครื่องกล อุปกรณ์ขับเร้า (Actuator) หน่วยตรวจวัดระยะไกล (Remote Terminal Unit : RTU) รวมถึงระบบคอมพิวเตอร์ที่ใช้ในการควบคุมและแสดงสถานะของอุปกรณ์ต่างๆ (Supervisory control and Data acquisition : SCADA)
Modbus ถูกพัฒนาขึ้นในปีค.ศ. 1979 โดยบริษัท Modicon (ปัจจุบันคือ Schneider Electric) เป็นโพรโทคอลที่ถูกใช้กันอย่างกว้างขวางในงานอุตสาหกรรมเนื่องจากความง่ายในการใช้งานและมีความน่าเชื่อถือ
ในระบบ Modbus RTU จะใช้โพรโทคอลการสื่อสารแบบอนุกรม (Serial-based Protocol) ในขณะที่ระบบ Modbus TCP จะใช้โพรโทคอลการสื่อสารแบบอีเทอร์เน็ต (Ethernet-based Protocol) ซึ่งทั้งสองแบบจะแตกต่างกันตรงที่ความเร็วและระยะทางในการรับส่งข้อมูล โดย Modbus RTU สามารถรับส่งได้ระยะทางสูงสุดถึง 1.2 กิโลเมตร (ที่ความเร็ว 57.6 kbps) ในขณะที่ Modbus TCP สามารถรับส่งได้ที่ความเร็ว สูงสุดถึง 100 Mbps (ที่ระยะทาง 100 เมตร)
Modbus RTU คือ โพรโทคอลที่ใช้การสื่อสารแบบอนุกรม (Serial-based Protocol) ด้วยสถาปัตยกรรมการสื่อสารแบบ Master/Slave หรืออาจกล่าวได้ว่าอุปกรณ์ Slave จะไม่ส่งข้อมูล (Response) กลับมาจนกว่าจะมีการร้องขอ (Request) จากอุปกรณ์ Master ดังรูปที่ 1
Modbus RTU โดยทั่วไปจะใช้การสื่อสารในระดับกายภาพ (Physical Layer) แบบ RS-232 หรือ RS-485 ข้อมูลในโพรโทคอล Modbus จะถูกเก็บ 4 รูปแบบ คือ
โดย Output coils และ Input contacts แต่ละแอดเดรสจะเก็บค่าเพียง 1 บิต หรือมีค่าได้แค่ “0” กับ “1” เปรียบเสมือนค่าการเปิดและปิดของอุปกรณ์รีเลย์และสวิตช์ที่พบได้ในระบบงานอัตโนมัติอุตสาหกรรม
ในขณะที่ Input registers และ Holding registers สามารถเก็บค่าเป็นตัวเลขได้ถึง 16 บิต เปรียบเสมือนค่าที่มาจากอุปกรณ์ตรวจวัดที่ส่งข้อมูลแบบอนาล็อก (Analog)
การสื่อสารของข้อมูลในระบบ Modbus RTU จะรับส่งเป็นชุดข้อมูล โดยที่ใน 1 ชุดข้อมูลนั้นจะประกอบด้วยส่วน 6 ส่วน ดังแสดงในรูปที่ 2
ชุดฟังก์ชันการทำงานสามารถแบ่งหน้าที่ต่างๆ ได้ตามรหัส หรือ Function code รายละเอียดแสดงดังรูปที่ 3 โดยหลักๆ แล้วจะมีฟังก์ชันการทำงานอยู่ 2 แบบ คือ การอ่าน (Read) และเขียน (Write) โดยสามารถเลือกที่จะอ่านหรือเขียนข้อมูลไปยัง Coils หรือ Contacts สำหรับข้อมูลแบบดิจิตอล (Digital) หรือ “0” กับ “1” และ Registers สำหรับอ่านหรือเขียนข้อมูลแบบอนาล็อก โดยมีขนาด 16 บิต หรือ ตั้งแต่ 0000 ถึง FFFF
ตำแหน่งแอดเดรสใน Modbus RTU จะมีขนาด 16 บิต หรือ 65535 ตำแหน่ง ในแต่ละรูปแบบการทำงาน ดังรูปที่ 4
ในส่วนชุดข้อมูล Data Field นั้นจะถูกแบ่งเป็น 2 ชุด ได้แก่
โดยชุดคำสั่งทั้ง 2 จะถูกส่งจากอุปกรณ์ที่ทำหน้าที่เป็น Master เท่านั้น เพื่อสั่งการไปยังอุปกรณ์ Slave ที่ต้องการสื่อสาร
ดังนั้น Frame Message (ไม่รวม Start และ End bits) ที่ถูกส่งไป คือ 13 03 0066 0003 E6A6 โดย
Modbus TCP คือ โพรโทคอลที่ครอบ Modbus RTU เพื่อใช้การสื่อสารแบบอีเทอร์เน็ต (Ethernet-based protocol) ด้วย TCP/IP (Transmission control protocol) ที่พอร์ต (Port) 502 แทนการใช้การสื่อสารแบบอนุกรม ดังรูปที่ 8 ทำให้อุปกรณ์สามารถสร้างการสื่อสารผ่านเครือข่ายเฉพาะบริเวณ (Local area network : LAN) หรือ เครือข่ายอินเตอร์เน็ต (Internet network) รวมไปถึงการเชื่อมต่อแบบไร้สาย (Wireless) โดยมีอุปกรณ์กระจายสัญญาณ (Router หรือ Access point) เป็นตัวกลางในการเชื่อมต่อ
ชุดข้อความใน Modbus TCP (รายละเอียดดังรูปที่ 9 และ 10) เริ่มต้นข้อมูลด้วย Modbus application protocol (MBAP) Header ซึ่งประกอบด้วย Transaction ID, Protocol ID, Length, Unit ID ซึ่งเพิ่มเติมขึ้นมาจาก Modbus RTU ส่วนชุดข้อมูล Function code และ Data จะยังคงเหมือนเดิม ยกเว้นชุดข้อมูล CRC สำหรับเช็คความผิดพลาดจะไม่มี แต่เปลี่ยนไปใช้ของ Ethernet ใน Data link layer แทน
ในกรณีของ Modbus TCP frame message จะเป็น 0001 0000 0006 13 03 0066 0003
การใช้งาน Mitsubishi Q - series PLC โมดูล QJ71MB91 ขาสัญญาณที่ใช้สำหรับการสื่อสารบน Physical Layer ด้วยมาตรฐาน RS-485 ซึ่งเป็นการสื่อสารแบบ Half-Duplex หรืออาจกล่าวได้ว่าเป็นการสื่อสารแบบทางเดียว ไม่สามารถรับและส่งข้อมูลพร้อมกันได้ ขาสัญญาณนั้นประกอบด้วย SDA SDB RDA RDB และ SG สามารถแบ่งตามหน้าที่การทำงานได้เป็น 3 กลุ่ม คือ
โดยการต่อสายเพื่อเชื่อมต่อสัญญาณกับอุปกรณ์อื่น มีดังนี้ SDA ต่อกับ RDA และ SDB ต่อกับ RDB ส่วนขา SG ต่อเข้ากับ GND ดังแสดงในรูปที่ 12
วิธีการตั้งค่าการใช้งาน QJ71MB91 ในโปรแกรม GXwork2 [Ref. 3] ขั้นแรกต้องเพิ่มโมดูล QJ71MB91 ที่อยู่ในหมวดของ Intelligent function module หลังจากนั้นเข้าไปที่เมนู Switch setting เพื่อตั้งค่าการสื่อสารและโหมดการใช้งานซึ่งมี 2 โหมด คือ Master Mode และ Slave Mode ดังในรูปที่ 13
นอกจากนี้ยังต้องมีการตั้งค่า Automatic communication parameter สำหรับในกรณีที่เป็น Master mode ดังรูปที่ 14 โดยจะต้องกำหนดค่า Buffer memory ที่จะใช้ในการรับ-ส่งข้อมูลกับอุปกรณ์ Slave และต้องกำหนดว่า Buffer memory นี้จะต้องถูกจับคู่ เข้ากับ Modbus register อันไหนบ้าง ดังตัวอย่างในรูปที่ 14 นั้น Modbus register #138 ถูกจับคู่กับ buffer memory #2000h สำหรับการอ่านค่าจาก Slave และ Modbus register #0 ถูกจับคู่กับ Buffer memory #4000h สำหรับการเขียนค่าไปยัง Slave
ในกรณีที่ต้องการใช้งาน PLC เป็น Slave mode จำเป็นที่จะต้องตั้งค่าในเมนู Modbus device assignment parameter ดังในรูปที่ 15 ซึ่งจะกำหนดการจับคู่ระหว่างอุปกรณ์ Modbus ทั้ง 4 ประเภทคือ Output coils, Input contacts, Input registers และ Holding registers กับอุปกรณ์ต่างๆ ใน PLC เช่น Output coil #0 ถึง #8192 ถูกจับคู่กับ PLC I/O device Y0 ถึง Y8192 เป็นต้น
รูปที่ 16 แสดงตัวอย่างการใช้งาน Modbus RTU โดยที่ PLC ทำหน้าที่เป็น Modbus Master เพื่ออ่านและตั้งค่าอุณหภูมิของ PID controller จากคู่มือการใช้งานของ PID controller [Ref 6] การอ่านค่า Present value (PV) ถูกกำหนดไว้ที่ Holding register หมายเลข 138 ส่วนการเขียนค่าเพื่อตั้งค่า Set Value (SV) นั้นถูกกำหนดไว้ที่ holding register หมายเลข 0 ดังนั้นในส่วนของ PLC เราก็สามารถกำหนด Buffer memory เช่น #2000h สำหรับการอ่านค่าจาก register# 138 และ #4000h สำหรับการเขียนค่าไปยัง register #0 เป็นต้น
การใช้งานโมดูลการสื่อสาร Modbus TCP สำหรับ Mitsubishi Q-series PLC โมดูล QJ71MT91 แสดงดังรูปที่ 17 โมดูลนี้รองรับทั้งโหมด Master และ Slave โดยที่ในโหมด Master สามารถสื่อสารได้สูงสุด 64 Slave ในเวลาเดียวกัน ส่วนในโหมด Slave สามารถรับข้อมูล Request message ได้ถึง 64 ข้อความในเวลาเดียวกัน และมีช่องการสื่อสารแบบ Ethernet 1 ช่อง
วิธีการตั้งค่าการใช้งานโมดูล QJ71MT91 ในโปรแกรม GXwork2 [Ref. 4] ขั้นแรกจำเป็นที่จะต้องเพิ่มโมดูล QJ71MT91 ก่อน ซึ่งอยู่ในหมวดของ Intelligent Function Module หลังจากนั้นเข้าไปที่เมนู Switch setting เพื่อตั้งค่าการสื่อสารและโหมดการใช้งานว่าต้องการที่จะให้โมดูลทำหน้าที่เป็น Master หรือ Slave ดังรูปที่ 18
ต่อไปเป็นการตั้งค่า Automatic communication parameter สำหรับในกรณีที่เป็น Master mode ดังรูปที่ 19 จะต้องกำหนดค่า Buffer memory ที่จะใช้ในการรับ-ส่งข้อมูลกับอุปกรณ์ Slave และต้องกำหนดว่า Buffer memory นี้จะต้องถูกจับคู่เข้ากับ Modbus register ที่ต้องการจากอุปกรณ์ Slave เช่นเดียวกับในกรณีของ Modbus RTU
แต่ในกรณีใช้งานเป็น Slave mode ต้องตั้งค่าในเมนู Modbus device assignment parameter ดังในรูปที่ 20 ซึ่งจะกำหนดการจับคู่ระหว่างอุปกรณ์ ทั้ง 4 ประเภท คือ Output coils, Input contacts, Input registers และ Holding registers กับอุปกรณ์ต่างๆ ใน PLC เช่นเดียวกับในกรณีของ Modbus RTU
หน่วยตรวจวัดระยะไกลยูนิเวอร์แซล (Universal Remote Terminal Unit : uRTU) [Ref. 7] ซึ่งพัฒนาโดยทีมวิจัยจาก NECTEC เป็นอุปกรณ์ที่ใช้ในการเปลี่ยนสัญญาณข้อมูลทาง Analog ที่ได้รับจาก Sensor เช่น แรงดัน กระแสไฟฟ้า ความถี่ หรือปริมาณอื่น ๆ ให้เป็นข้อมูล Digital เพื่อนำไปใช้ในการประมวลผล หรือรับข้อมูลจากคอมพิวเตอร์เพื่อนำไปใช้สั่งงานการเปิด-ปิด อุปกรณ์ต่าง ๆ ผ่าน uRTU อีกทั้งยังสามารถเก็บข้อมูลตามเวลาโดยอัตโนมัติ (Data logger)
โดย uRTU สามารถติดต่อกับคอมพิวเตอร์ผ่านทาง LAN ด้วย Modbus protocol จากรูปที่ 21 แสดงการเชื่อมต่อสายสัญญาณจากอุปกรณ์ RTD PT100 แบบ 3 สาย ไปยังช่องเชื่อมต่อที่ 1 ของ RTD Card บน uRTU ซึ่งมีทั้งหมด 5 ช่องเชื่อมต่อแต่ละช่องนั้นจะใช้ 2 แอดเดรสในการเก็บข้อมูล แอดเดรสสำหรับอ่านค่าอุปกรณ์ RTD จะอยู่ที่ 30049-30064 โดยขา 1 2 3 ของ RTD ต่อไปยังช่อง A B B ของ uRTU ตามลำดับ
Node-RED เป็นเครื่องมือสำหรับนักพัฒนาโปรแกรมในการเชื่อมต่ออุปกรณ์ฮาร์ดแวร์เข้ากับ APIs (Application Programming Interface) และ Online Services ด้วยวิธีการใหม่ ๆ มีทั้งที่ใช้ได้ฟรีและใน ส่วนที่ต้องเสียเงิน โดย Node-RED สามารถออกแบบ API ในการรับข้อมูล การคำนวณ การแปลงข้อมูล การเก็บข้อมูล หรือเชื่อมต่อกับบริการอื่น ๆ ได้ตามความต้องการของผู้ใช้ วิธีการติดตั้งสามารถดูได้จาก [Ref 8]
โปรแกรม Node-Red สามารถติดตั้งได้หลากหลายแพลตฟอร์ม เช่น คอมพิวเตอร์ส่วนบุคคล Single Board Computer ประเภทต่าง ๆ ในเอกสารนี้เลือกใช้เป็น Raspberry Pi 4 ซึ่งเป็น Single Board Computer ประเภทหนึ่งที่นิยมใช้กันอย่างแพร่หลายสำหรับการสร้างงานต้นแบบ เนื่องจากประสิทธิภาพสูง ราคาไม่สูงมาก และง่ายต่อการใช้งาน
จากรูปที่ 23 แสดงการเชื่อมต่อและการสื่อสารข้อมูลของอุปกรณ์แต่ละอุปกรณ์ โดย Raspberry Pi ทำหน้าที่เป็น Gateway หรือ ตัวกลางในการแปลงเฟรมข้อมูลจากโพรโทคอล Modbus ให้เป็นโพรโทคอล MQTT เพื่อส่งข้อมูลไปยัง IoT Platform ในตัวอย่างนี้เลือกใช้ NETPIE IoT Cloud Platform ที่เปิดให้บริการโดยเนคเทค (รายละเอียดการใช้งานสามารถศึกษาได้จาก [Ref 9]) เพื่อให้ผู้ใช้งานสามารถติดตามผลและควบคุมจากระยะไกล โดยโปรแกรมที่เข้ามาช่วยในการสร้างระบบ IoT สำหรับอุปกรณ์อุตสาหกรรมนี้คือ Node-Red รายละเอียดมีดังนี้
จากรูปที่ 24 ส่วนที่ 1 เป็นการใช้งาน Function Node ในการกำหนดเฟรมข้อมูลคำสั่ง Request รูปแบบ JSON ไปยัง uRTD เพื่อให้ได้รับ Response ข้อมูลค่าที่วัดได้จากอุปกรณ์ RTD กลับมา ซึ่งเฟรมข้อมูลดังกล่าวจะประกอบไปด้วย
โดยชุดข้อมูลนี้สามารถปรับเปลี่ยนได้ตามความเหมาะสมของอุปกรณ์ Modbus (FC, UnitId, Address และ Quantity)
ส่วนที่ 2 เป็นการกำหนดค่าพารามิเตอร์สำหรับ Modbus Node โดยเลือกใช้ Modbus Flex Getter เป็น Node การอ่านค่าจากอุปกรณ์ Modbus สำหรับ Type กำหนดเป็น TCP (สามารถเลือกใช้งานได้ทั้งแบบ TCP และ Serial) Host เป็นการตั้งค่า IP ของ uRTU และ Unit Id สำหรับตั้งค่า UnitId ของ uRTD
ส่วนที่ 3 เป็นการกำหนดค่าพารามิเตอร์สำหรับ MQTT node เพื่อส่งข้อมูล (Publish) ที่อ่านได้ไปยัง IoT Platform ต่างๆ ขั้นตอนแรกกำหนด Topic ให้กับข้อมูลที่ต้องการส่งก่อน ในตัวอย่างกำหนดเป็น @msg/rtd/ch1 ในส่วน Connection พารามิเตอร์แรกคือการกำหนด Server หรือ End-Point (ตามตัวอย่างกำหนดเป็นเป็น broker.netpie.io) และพอร์ตสำหรับโพรโทคอล MQTT (ปกติแล้วจะกำหนดเป็น 1883)
ต่อมาเป็น Client ID คือการกำหนดชื่อให้อุปกรณ์ซึ่งใช้ในการอ้างอิงสำหรับการสื่อสารด้วยโพรโทคอล MQTT โดยในแต่ละ IoT Platform จะกำหนดต่างกันออกไปตามแต่รูปแบบของ Platform นั้น ๆ สำหรับส่วน Security เป็นการเพิ่มความปลอดภัยในการส่งข้อมูลไปยัง Platform โดยจะมี 2 พารามิเตอร์ คือ Username และ Password ขึ้นอยู่กับการกำหนดจากทาง Platform
จากตัวอย่างที่ได้นำเสนอในเบื้องต้นแสดงให้เห็นว่าอุปกรณ์ที่ใช้สำหรับโรงงานอุตสาหกรรมส่วนใหญ่มักจะรองรับโพรโทคอลนี้เป็นหนึ่งในช่องทางการสื่อสาร โดย Modbus ที่ใช้งานกันทั่วไปจะมี 2 รูปแบบ คือ Modbus RTU เป็นการสื่อสารแบบอนุกรม (Serial Level Protocol) ผ่าน RS485 หรือ RS232 เป็นการสื่อสารพื้นฐานที่ใช้ในอุปกรณ์สำหรับโรงงานอุตสาหกรรมทั่วไป ซึ่งมีข้อจำกัดอยู่ที่การสร้างระบบเครือข่ายการสื่อสารข้อมูลระหว่างอุปกรณ์ ทั้งในด้านความหลากลาย และการขยายระบบเพื่อลองรับอุปกรณ์ที่มีเพิ่มมากขึ้น
และอีกรูปแบบ คือ Modbus TCP เป็นการสื่อสารแบบอีเทอร์เน็ต (Ethernet physical layer) ซึ่งถูกสร้างขึ้นมาเพื่อแก้ไขข้อจำกัดของ Modbus RTU ให้สามารถจัดการและเข้าถึงอุปกรณ์ได้ง่ายขึ้นผ่าน TCP/IP ในทางกลับกันนั้น Modbus ทั้ง 2 รูปแบบนี้มีข้อดีและข้อเสียต่างกันขึ้นอยู่กับรูปแบบงานที่นำไปใช้ และเพื่อต่อยอดไปยังระบบ IoT
ขอบคุณครับ ที่แวะมาอุดหนุนทางร้าน