Modbus: โปรโตคอลฟิลด์บัสอุตสาหกรรมดั้งเดิม
Modbus remains widely deployed because its data model is simple, not because every implementation is simple. This guide explains frames, register mapping, ti...
ฟิลด์บัสคือโพรโทคอลการสื่อสารที่ใช้ในเครือข่ายอุตสาหกรรมเพื่อเชื่อมต่ออุปกรณ์ภาคสนามเข้ากับตัวควบคุมอุตสาหกรรม ฟิลด์บัสช่วยลดปริมาณการเดินสายที่จำเป็นระหว่างตัวควบคุมกับอุปกรณ์ เนื่องจากอุปกรณ์หลายตัวสามารถเชื่อมต่อกับสายไฟคู่เดียวกันได้
มีเทคโนโลยีฟิลด์บัสยอดนิยมอยู่หลายประเภท เช่น Modbus, Profibus, Foundation Fieldbus, ControlNet, DeviceNet และอื่น ๆ อีกมากมาย
ในปี 1979 Modicon ได้เปิดตัวโพรโทคอลใหม่ที่ใช้ประโยชน์จากชั้นแอปพลิเคชันของโมเดล OSI โดยเฉพาะสำหรับใช้งานกับ PLC ของบริษัท โพรโทคอลนี้มีชื่อว่า Modbus และกลายเป็นฟิลด์บัสที่มีการใช้งานอย่างแพร่หลายเป็นรายแรกในประวัติศาสตร์ระบบอัตโนมัติ

รูปที่ 1 PLC ที่เชื่อมต่อกับอุปกรณ์ภาคสนาม
บทนำสู่ Modbus
Modbus ได้รับการออกแบบมาเพื่อเชื่อมต่ออุปกรณ์ภาคสนามเข้ากับตัวควบคุมอุตสาหกรรม ในช่วงเวลาที่คิดค้นขึ้น อุปกรณ์ส่วนใหญ่ใช้การแทนค่าด้วยแรงดันไฟฟ้าหรือกระแสไฟฟ้าเพื่อสื่อสารสถานะของอุปกรณ์ Modbus สามารถจัดการบิตแบบไม่ต่อเนื่องที่สะท้อนสถานะสูง/ต่ำของเซนเซอร์และแอกชูเอเตอร์ รวมถึงรีจิสเตอร์ที่เก็บค่าจำนวนเต็มซึ่งเทียบเท่ากับค่ากระบวนการแบบแอนะล็อกได้อย่างมีประสิทธิภาพ
การเปลี่ยนผ่านไปสู่เทคโนโลยีฟิลด์บัสที่เป็นไปอย่างช้า ๆ ส่งผลให้ Modbus เป็นหนึ่งในโพรโทคอลที่เรียบง่ายที่สุด และมีการเพิ่มเวอร์ชันใหม่ ๆ ตลอดหลายปีที่ผ่านมา
เดิม Modbus ถูกใช้งานบนลิงก์การสื่อสารแบบอนุกรม เช่น RS-232/RS-485 รูปแบบเหล่านี้ยังคงใช้กันอย่างแพร่หลายภายใต้ชื่อ Modbus RTU และ ASCII ต่อมาโพรโทคอลนี้ได้รับการปรับให้ใช้งานผ่าน TCP/IP และอีเทอร์เน็ต ซึ่งโดยทั่วไปเรียกว่า Modbus TCP และเป็นการใช้งาน Modbus ที่แพร่หลายที่สุดสำหรับระบบติดตั้งสมัยใหม่
โมเดลการสื่อสาร
Modbus ใช้โมเดลการสื่อสารแบบมาสเตอร์/สเลฟ (ไคลเอ็นต์/เซิร์ฟเวอร์ใน Modbus TCP) มาสเตอร์ Modbus จะส่งคำขอไปยังสเลฟ Modbus ซึ่งดำเนินการต่าง ๆ และตอบกลับไปยังมาสเตอร์ ในกรณีนี้ มาสเตอร์มักเป็น PLC ส่วนอุปกรณ์ภาคสนามทำหน้าที่เป็นสเลฟ
เฟรมข้อความใน Modbus ประกอบด้วยหน่วยข้อมูลแอปพลิเคชัน (ADU) และหน่วยข้อมูลโพรโทคอล (PDU) โดย ADU จะแตกต่างกันไปตามประเภทของ Modbus ที่ใช้งาน ขณะที่ PDU ไม่ขึ้นอยู่กับวิธีการสื่อสาร
โดยปกติ PDU ประกอบด้วยรหัสฟังก์ชันและข้อมูลบางส่วน ซึ่งถูกห่อหุ้มอยู่ใน ADU ด้วยแอดเดรสและรหัสตรวจสอบข้อผิดพลาด Modbus TCP ใช้ส่วนหัว MBAP (Modbus Application Protocol) ใน ADU

รูปที่ 2 ADU และ PDU ของ Modbus ASCII/RTU (ด้านบน) และ Modbus TCP (ด้านล่าง) ภาพดัดแปลงจาก Modbus.org
เพื่อให้ PDU ไม่ขึ้นกับเลเยอร์การสื่อสารพื้นฐาน PDU ต้องเป็นไปตามข้อจำกัดด้านขนาดของข้อกำหนดการสื่อสารแบบอนุกรมดั้งเดิม ขนาดดังกล่าวคือ 256 ไบต์สำหรับ ADU ผ่าน RS-485 ดังนั้นเราต้องหักลบ ADU ซึ่งประกอบด้วยไบต์แอดเดรส 1 ไบต์และไบต์ตรวจสอบข้อผิดพลาด 2 ไบต์ ทำให้ PDU มีขนาดจำกัดรวม 253 ไบต์ โปรดทราบว่าแอดเดรสใน ADU แท้จริงแล้วคือ ID ของอุปกรณ์สเลฟบนเครือข่าย Modbus
ส่วนข้อมูลของ PDU จะมีฟิลด์เฉพาะสำหรับรหัสฟังก์ชัน รวมถึงข้อมูลจริงที่กำลังส่ง ฟิลด์เหล่านี้จะกล่าวถึงโดยละเอียดในส่วนถัดไปของบทความ
การแสดงข้อมูล
Modbus แบบดั้งเดิมมีโหมดการส่งข้อมูลสองโหมด: ASCII และ RTU
ในโหมด ASCII ข้อมูลจะส่งเป็นอักขระ ASCII 0-9 และ A-F ส่วนในโหมด RTU ข้อมูลจะแสดงในรูปแบบเลขฐานสอง 8 บิต ข้อมูลและแอดเดรสเข้ารหัสแบบบิ๊กเอนเดียน ส่งผลให้ไบต์ที่มีนัยสำคัญสูงสุดถูกส่งออกไปก่อน
ข้อมูล Modbus มีอยู่สี่ประเภทหลัก:
- อินพุตดิสครีต
- คอยล์ (เอาต์พุต)
- รีจิสเตอร์อินพุต
- รีจิสเตอร์เก็บค่า
อินพุตดิสครีตแสดงข้อมูลหนึ่งบิตและอ่านได้อย่างเดียว ส่วนคอยล์ก็แสดงข้อมูลหนึ่งบิตเช่นกัน แต่สามารถอ่านและเขียนได้ รีจิสเตอร์อินพุตแสดงข้อมูล 16 บิตแบบอ่านอย่างเดียว ขณะที่รีจิสเตอร์เก็บค่าเป็นข้อมูล 16 บิตที่อ่านและเขียนได้

รูปที่ 3 นำมาจากข้อกำหนดโปรโตคอล Modbus
สำหรับแต่ละประเภท จะมีรายการข้อมูลได้สูงสุด 2^16 (65536) รายการในหน่วยความจำของอุปกรณ์ มีรหัสฟังก์ชันเฉพาะสำหรับเข้าถึงข้อมูลแต่ละประเภท โดยข้อมูลแต่ละประเภทมักมีบล็อกหน่วยความจำเฉพาะของตนเอง
ในการระบุแอดเดรสของรายการข้อมูล มาสเตอร์จะใช้ช่วงตั้งแต่ 0-65535 รายการข้อมูลที่ 1 จะอยู่ที่แอดเดรส 0x0000 รายการข้อมูลที่ 2 จะอยู่ที่แอดเดรส 0x0001 และรายการข้อมูลที่ 65536 จะอยู่ที่ 0xFFFF โปรดทราบว่าอุปกรณ์ไม่จำเป็นต้องมีรายการข้อมูลครบทั้ง 65536 รายการ ในความเป็นจริง เทอร์มินัล I/O ระยะไกลส่วนใหญ่ที่ใช้ Modbus มีจำนวนรายการต่ำกว่าขีดจำกัดสูงสุดนี้มาก
ธุรกรรม Modbus
เมื่อเข้าใจวิธีแสดงข้อมูลใน Modbus แล้ว เราสามารถตรวจสอบธุรกรรมได้โดยละเอียด โดยจะพิจารณาจากมุมมองของ PDU เนื่องจาก PDU ไม่ขึ้นกับเลเยอร์การสื่อสาร
ธุรกรรม Modbus ใช้คำสั่งอักขระเลขฐานสิบหก โดยไบต์ 8 บิตหนึ่งไบต์อยู่ในรูปแบบ 0x00 และอักขระแต่ละตัวมีช่วงตั้งแต่ 0-F ดังนั้นรีจิสเตอร์ 16 บิตจึงมีขนาดเท่ากับสองไบต์ และแสดงในรูปแบบ 0x0000
ข้อกำหนด Modbus กำหนด PDU ไว้สามประเภท:
- คำขอ Modbus
- การตอบกลับของ Modbus
- การตอบกลับข้อผิดพลาดของ Modbus
มาสเตอร์เริ่มต้นคำขอโดยใช้รหัสฟังก์ชัน ขณะที่สเลฟส่งการตอบกลับตามคำขอดังกล่าว การตอบกลับที่สำเร็จจะส่งรหัสฟังก์ชันเดียวกับที่มาสเตอร์ส่งมา การตอบกลับกรณีข้อยกเว้นจะตอบด้วยรหัสฟังก์ชันเดียวกัน แต่ตั้งค่า MSB (บิตที่มีนัยสำคัญสูงสุด) เป็น 1 เพื่อระบุว่าเกิดข้อผิดพลาดขึ้น
ข้อกำหนดของ Modbus ระบุรหัสฟังก์ชันไว้หลายรายการ รหัสฟังก์ชัน 0x01 คือฟังก์ชันการอ่านคอยล์
รูปที่ 4 แสดงตัวอย่างลักษณะที่คำขอและการตอบกลับ การอ่านคอยล์ อาจเป็นได้ มาสเตอร์ Modbus ส่งคำขอด้วยรหัสฟังก์ชัน 0x01 (การอ่านคอยล์) โดยเริ่มจากรายการข้อมูลแรก (แอดเดรส 0x0000) และอ่านคอยล์เพียงรายการเดียว ฟังก์ชันการอ่านคอยล์สามารถใช้เพื่ออ่านคอยล์ได้สูงสุด 2000 (0x7D0) รายการในครั้งเดียว

รูปที่ 4 ธุรกรรมการอ่านคอยล์
หากสำเร็จ สเลฟจะตอบกลับด้วยรหัสฟังก์ชันเดียวกันและจำนวนคอยล์ที่ตอบกลับ สถานะคอยล์จะมีความกว้าง n ไบต์ โดยแต่ละบิตแสดงว่าคอยล์นั้น ๆ อยู่ในสถานะ ON (1) หรือ OFF (0)
ในกรณีนี้ คอยล์ที่แอดเดรส 0x0000 อยู่ในสถานะ ON หากคำขอไม่สำเร็จ การตอบกลับกรณีข้อยกเว้นจะมีรหัสฟังก์ชันที่ตั้งค่า MSB เป็น 1 (0x81) พร้อมรหัสข้อยกเว้นที่อธิบายว่าเกิดข้อผิดพลาดอะไรขึ้น รหัสข้อยกเว้น 0x02 หมายความว่ามีการใช้แอดเดรสข้อมูลที่ไม่ถูกต้อง กล่าวคือ ในหน่วยความจำของสเลฟนี้ไม่มีคอยล์ที่ 0x0000
ตัวอย่างถัดไปแสดงธุรกรรม การเขียนรีจิสเตอร์เดี่ยว (รหัสฟังก์ชัน 0x06) ในกรณีนี้ มาสเตอร์ร้องขอให้เขียนข้อมูล 0xA0A0 ไปยังแอดเดรส 0x00FF การตอบกลับของสเลฟเป็นเพียงการส่งคำขอกลับมาเหมือนเดิม
ตัวอย่างการตอบกลับกรณีข้อยกเว้นนี้แสดงรหัสฟังก์ชันที่ตั้งค่า MSB เป็น 1 พร้อมรหัสข้อยกเว้น 0x04 รหัสดังกล่าวหมายความว่าเกิดข้อผิดพลาดที่ไม่สามารถกู้คืนได้ ขณะที่สเลฟกำลังพยายามดำเนินการตามคำขอ

รูปที่ 5 ธุรกรรมการเขียนรีจิสเตอร์เดี่ยว
รหัสฟังก์ชันของ Modbus ทั้งหมดมีรูปแบบคล้ายกับตัวอย่างสองรายการที่แสดงไว้ข้างต้น
รูปที่ 6 แสดงรายการรหัสฟังก์ชันทั่วไป พร้อมรหัสข้อยกเว้นสำหรับการตอบกลับกรณีข้อยกเว้น สำหรับข้อมูลเพิ่มเติม โปรดดูข้อกำหนดของ Modbus

รูปที่ 6 รหัสฟังก์ชันและรหัสข้อยกเว้น
บทสรุป
Modbus ช่วยให้ PLC สามารถสื่อสารกับยูนิตระยะไกลได้ทุกประเภท รวมถึงแบงก์ I/O ยูนิตเทอร์มินัล และคอนโทรลเลอร์อื่น ๆ โดยอาศัยวิธีมาตรฐานในการอ่านและเขียนข้อมูลทั้งแบบดิสครีตและจำนวนเต็ม ซึ่งครอบคลุมแทบทุกกรณีที่เกี่ยวข้องกับการถ่ายโอนข้อมูลดิจิทัล
ปัจจุบัน Modbus เป็นมาตรฐานในอุตสาหกรรม และเป็นโปรโตคอลอุตสาหกรรมแบบปลอดค่าลิขสิทธิ์ที่แพร่หลายที่สุดจนถึงปัจจุบัน แม้จะมีมาก่อนระบบควบคุมสมัยใหม่ส่วนใหญ่ก็ตาม สามารถพบได้ในโรงงานและสถานประกอบการทั่วโลก และแม้จะมีอายุการใช้งานมายาวนาน ก็ยังคงเป็นโปรโตคอลอุตสาหกรรมที่มีความเกี่ยวข้องไปอีกหลายปี