หน้าแรกคู่มือPLCพื้นฐาน PLC และ SamSoar2022พื้นฐาน Modbus Protocol สำหรับ PLC
PLCปานกลาง · Intermediate11 นาที

พื้นฐาน Modbus Protocol สำหรับ PLC

พื้นฐาน Modbus สำหรับ PLC: หลักการ Master-Slave แบบ Request-Response, Data Frame ของ RS485 กับ TCP/IP, ข้อมูล 4 ประเภทกับ Function Code และตารางตำแหน่งข้อมูล Modbus ของ Samkoon PLC

Modbus คือโปรโตคอลมาตรฐานเปิดที่อุปกรณ์ต่างยี่ห้อใช้คุยกันแบบ Master-Slave (Request-Response) ผ่านสาย RS485 หรือสาย LAN (TCP/IP) ข้อมูลแบ่งเป็น 4 ประเภทคือ Coil (0x), Input (1x), Input Register (3x) และ Holding Register (4x) จุดที่สับสนบ่อยคือ 4x อ่านด้วย FC03 ส่วน 3x อ่านด้วย FC04

อัพเดทล่าสุด: 26 ตุลาคม 2569

ชุดอุปกรณ์สำหรับบทความนี้

ราคาชุดอุปกรณ์

฿3,690

ทำไมต้องรู้เรื่อง Modbus

ถึงตอนนี้เราใช้ PLC ตัวเดียวทำงานของมันได้ดีแล้ว ทั้ง Input, Output และ Function ต่างๆ แต่ในโรงงานจริงยังมีอีกความท้าทายคือ การคุยกับอุปกรณ์อื่น

  • ระบบที่ต้องใช้ PLC มากกว่า 1 ตัว เพราะเครื่องจักรใหญ่หรือมีหลายส่วน
  • การคุยกับอุปกรณ์ต่างรุ่น ต่างแบรนด์ ต่างผู้ผลิต

ปัญหาเหล่านี้ส่วนใหญ่แก้ได้ด้วย Modbus เพราะ Modbus เป็นภาษากลาง

  • เป็นภาษาที่เปิดเผยเป็น Open standard (สเปคอยู่ที่ modbus.org)
  • ถูกนำไปอ้างอิงและใช้งานอย่างแพร่หลายโดยผู้ผลิต Controller และอุปกรณ์ต่างๆ
  • ใช้แพร่หลายในอุตสาหกรรม Automation และเกือบทุก Device ยุคใหม่รองรับการสื่อสารผ่าน Modbus

หลักการ Master-Slave

ในเครือข่าย Modbus ต้องมีอุปกรณ์ 1 ตัวเป็นหัวหน้า เช่นต่อ PLC 2 ตัวผ่านสายไฟ 2 เส้นตามมาตรฐาน RS-485

  • Master (บางทีเรียก Client) เป็นผู้ส่งคำขอหรือ Request
  • Slave (บางทีเรียก Server) เป็นผู้ตอบกลับหรือ Response

การทำงานวนแบบ Request → Response → Request → Response ไปเรื่อยๆ

Master ทำได้ 2 อย่างหลักคือ อ่าน กับ เขียน เช่น Read Coil, Read Input Status, Read Holding Registers, Read Input Registers, Write Single Coil และ Write Single Register ถ้าพูดในภาษา PLC ก็คืออ่านค่า X, Y, M, S, D ได้เกือบหมด และเขียนค่า Bit หรือค่า 16 Bit ไปที่ลูกข่ายได้

ไม่จำเป็นต้องเป็น PLC เท่านั้นถึงจะเป็น Master ได้ หน้าจอ HMI หรือคอมพิวเตอร์ที่มีโปรแกรม Config เป็น Modbus Master ก็ได้ แต่ซีรีส์นี้จะใช้ PLC เป็น Master

ข้อมูลที่วิ่งในสาย: Byte

ข้อมูลที่ส่งในสายคือ 0 กับ 1 ชุดละ 8 ตัว

  • 1 Byte = 8 Bits เช่น 0000 0000
  • เขียนเป็นเลขฐาน 16 ได้ เพราะเลขฐาน 16 หนึ่งหลักใช้ 4 Bit จึงมักเขียนเป็น 0x ตามด้วยเลข 2 หลัก เช่น 0x00 = 0 และ 0xFF = 255

Byte เหล่านี้เรียงกันเป็น Modbus Data Frame

Modbus Data Frame

แบบส่วนประกอบของ Frame
Modbus RS485 FrameDevice Address · Function Code · Data · Error Check
Modbus TCP/IP FrameTransaction Identifier · Protocol Identifier · Length · Unit ID · Function Code · Data
  • Device Address: สาย RS485 สองเส้นต่ออุปกรณ์ได้หลายตัว จึงต้องกำหนด Slave ID ให้แต่ละตัว แล้วใส่ ID ลงใน Frame
  • Error Check: ข้อมูลในสายคือแรงดันไฟฟ้า อาจโดนสัญญาณรบกวน จึงมีส่วนตรวจความผิดพลาดใน Frame
  • TCP/IP ใช้สาย LAN และระบุแต่ละ Node ด้วย IP Address จึงไม่มี Device Address แต่มีส่วนอื่นแทน

ไม่ว่าจะผ่าน RS485 หรือสาย LAN ส่วนที่มี เสมอ ทั้งใน Request และ Response คือ Function Code กับ Data

  • Function Code บอกคำสั่งที่ต้องการให้ Slave ทำ (ยาว 1 Byte) เช่น "ช่วยส่งข้อมูล Coil ให้หน่อย 10 ชุด" หรือ "ช่วยเปิด Coil Y0 ให้หน่อย"
  • Data บอกตำแหน่ง Address เริ่มต้นกับจำนวน Block (ยาว n Byte ปกติ 4 Byte) เช่น "อ่าน Coil ตั้งแต่ M0 จำนวน 10 ชุด" ก็คือ M0 ถึง M9

ตัวอย่างอ่าน Frame

สั่งให้อ่าน Coil ตำแหน่ง Modbus Address 0 จำนวน 10 ชุด

Request:  ... [01] [00] [00] [00] [0A] ...
Response: ... [01] [02] [05] [00] ...
  • Request: 01 = Function Code 01 (อ่าน Coil), 00 00 = Address 0, 00 0A = จำนวน 10 ชุด (A ในฐาน 16 = 10 ในฐาน 10)
  • Response: 01 = Function Code เดิม, 02 = อ่านมาได้ 2 Bytes (16 Bit หรือ 1 Word), ข้อมูลคือ 05 00 หรือ 0000 0101 0000 0000

ข้อมูล 4 ประเภทและ Function Code

อุปกรณ์ที่รองรับ Modbus จะมีหน่วยความจำส่วนหนึ่งเผื่อไว้สำหรับ Modbus แบ่งเป็น 4 ชนิด แต่ใช้งานจริงมองเป็น 2 กลุ่มคือ 1 Bit กับ 16 Bit

ชนิดAddressขนาดFunction Code
Coil0x1 BitFC01 (อ่าน), FC05
Input1x1 BitFC02 (อ่าน)
Input Register3x16 BitFC04 (อ่าน)
Holding Register4x16 BitFC03 (อ่าน), FC06, FC16

ระวังสับสน: Address 4x (Holding Register) อ่านด้วย FC03 ส่วน 3x (Input Register) อ่านด้วย FC04 เลข 3 กับ 4 จึงสลับกันระหว่าง Address กับ Function Code

คู่มือผู้ผลิตอุปกรณ์บางเจ้าให้มาแค่ Memory Address ไม่บอก Function Code เราต้องรู้เอง เช่นคู่มือบอกให้อ่านตำแหน่ง 4x0 แปลว่าต้องใช้ FC03 อ่านที่ตำแหน่ง 0

ดังนั้นก่อนใช้คำสั่ง Modbus ต้องรู้ 2 อย่าง

  1. ใช้ Function Code อะไร
  2. อ่านจากตำแหน่งไหน โดยอ้างอิงคู่มือผู้ผลิตว่า Coil, Input หรือ Register ที่ต้องการอยู่ที่ตำแหน่งใด

ตำแหน่งข้อมูล Modbus ของ Samkoon PLC

ตารางที่ใช้ในคลิปสำหรับ PLC Samkoon

ข้อมูลช่วงชนิดข้อมูลฟังก์ชันอ่านฟังก์ชันเขียนตำแหน่งข้อมูล
X0~127bit0x01/0x020x050
EX0~511bit0x01/0x020x05512
Y0~127bit0x010x05/0x0f10000
EY0~511bit0x010x05/0x0f10512
M0~8191bit0x010x05/0x0f30000
S0~999bit0x010x05/0x0f50000
T0~255bit0x010x05/0x0f60768
C0~255bit0x010x05/0x0f60512
D0~8191word0x03/0x040x06/0x1040000
TV0~255word0x030x06/0x1060256
CV0~199word0x030x06/0x1060000
CV32200~255dword0x030x06/0x1061024
AI0~31word0x030x06/0x1020000
EAI0~79word0x030x06/0x1020100
AO0~31word0x030x06/0x1020512
EAO0~79word0x030x06/0x1020612

ตอนต่อไปจะลงมือปฏิบัติ อ่านค่า X, Y, M, D ผ่าน Modbus จริง

Address นับจาก 0 หรือ 1

ส่วนนี้ไม่ได้อยู่ในคลิป แต่เป็นสาเหตุที่อ่านค่าเลื่อนไป 1 ตำแหน่งบ่อยที่สุด Modbus เขียน Address ได้ 2 แบบ

แบบHolding Register ตัวแรกใช้ที่ไหน
Protocol Address นับจาก 00 (ในเฟรมคือ 00 00)ค่าที่ส่งจริงใน Data Frame, SamSoar2022, SKTool และตาราง Modbus Address ของ Samkoon
แบบ 4xxxx นับจาก 140001คู่มืออุปกรณ์หลายยี่ห้อ และโปรแกรม Master ที่ตั้งเป็น Base 1

Address ในบทเรียนชุดนี้ใช้แบบ นับจาก 0 ทั้งหมด ถ้าคู่มืออุปกรณ์เขียนแบบ 4xxxx ให้ลบ 40001 ก่อนใส่ เช่น 40010 → Address 9

ตัวเลข D0 = 40000 ในตาราง Samkoon ดูคล้ายแบบ 4xxxx แต่ไม่ใช่ เป็น Protocol Address นับจาก 0 ที่ส่งในเฟรมเป็น 9C 40 ตารางเต็มอยู่ในรูปตาราง Modbus Address ของหน้าสินค้า PLC เช่น FAs-32MR-AC-E

สรุป

  • Modbus เป็นมาตรฐานเปิดที่ทำงานแบบ Master-Slave (Request-Response) ผ่าน RS485 หรือ TCP/IP
  • ทุก Frame มี Function Code กับ Data เสมอ ส่วน RS485 มี Device Address และ Error Check เพิ่ม
  • ข้อมูล 4 ประเภท: Coil (0x), Input (1x), Input Register (3x), Holding Register (4x) และ 4x อ่านด้วย FC03
  • ก่อนสื่อสารต้องรู้ Function Code และตำแหน่งข้อมูลจากคู่มือผู้ผลิต

ตอนถัดไป

15. คำสั่ง Modbus RTU/RS485

22 นาทีปานกลาง · Intermediate

คำถามที่พบบ่อย

Modbus คืออะไร ใช้ทำอะไร?
เป็น Communication Protocol มาตรฐานเปิด (Open standard) ที่ผู้ผลิต Controller และอุปกรณ์ต่างๆ นำไปใช้อย่างแพร่หลาย ทำให้ PLC หลายตัว หรือ PLC กับอุปกรณ์ต่างรุ่นต่างยี่ห้อ อ่านและเขียนข้อมูลกันได้
Master กับ Slave ต่างกันอย่างไร?
Master (บางทีเรียก Client) เป็นผู้ส่ง Request ไปที่ลูกข่าย ส่วน Slave (บางทีเรียก Server) เป็นผู้ตอบ Response กลับ การสื่อสารวนแบบ Request → Response ไปเรื่อยๆ นอกจาก PLC แล้ว HMI หรือคอมพิวเตอร์ที่มีโปรแกรมรองรับก็เป็น Master ได้
Modbus RS485 กับ Modbus TCP/IP ต่างกันอย่างไร?
RS485 ใช้สายไฟ 2 เส้น ใน Frame มี Device Address (Slave ID) และ Error Check ส่วน TCP/IP ใช้สาย LAN ระบุอุปกรณ์ด้วย IP Address จึงไม่มี Device Address แต่มี Transaction Identifier, Protocol Identifier, Length และ Unit ID แทน ทั้งสองแบบมี Function Code กับ Data เหมือนกันเสมอ
ข้อมูล 4 ประเภทของ Modbus คืออะไร?
Coil (0x) และ Input (1x) เป็นข้อมูล 1 Bit ส่วน Input Register (3x) และ Holding Register (4x) เป็นข้อมูล 16 Bit
Function Code ไหนใช้อ่าน Holding Register?
FC03 — จุดที่สับสนบ่อยคือ Address 4x อ่านด้วย Function Code 03 ไม่ใช่ 04 ส่วน FC04 ใช้อ่าน Input Register (3x) FC01 อ่าน Coil (0x) และ FC02 อ่าน Input (1x)

ควรอ่านก่อน: