Modbus Function Code คู่มือฉบับสมบูรณ์ FC01-FC16 อ่าน-เขียน Coil/Register อะไรบ้าง

สรุปย่อ: Modbus Function Code คือรหัสคำสั่งที่ระบุว่าอุปกรณ์ Master (เช่น PLC, HMI, SCADA) ต้องการอ่านหรือเขียนข้อมูลประเภทใดจากอุปกรณ์ Slave (เช่น Inverter, Sensor, I/O Module) วิศวกรที่เชื่อมต่ออุปกรณ์ผ่าน Modbus RTU/TCP ต้องเข้าใจ Function Code หลัก 8 ตัว (FC01, 02, 03, 04, 05, 06, 15, 16) เพื่ออ่านคู่มือ Register Map ของอุปกรณ์แต่ละยี่ห้อได้ถูกต้อง
โครงสร้างข้อมูล Modbus: Coil vs Register
ก่อนเข้าใจ Function Code ต้องรู้จักประเภทข้อมูล 4 แบบของ Modbus ก่อน ได้แก่ Coil (บิต อ่าน-เขียนได้ ใช้แทนสถานะ Output แบบ ON/OFF), Discrete Input (บิต อ่านได้อย่างเดียว ใช้แทนสถานะ Input), Holding Register (16 บิต อ่าน-เขียนได้ ใช้เก็บค่าพารามิเตอร์หรือ Setpoint), และ Input Register (16 บิต อ่านได้อย่างเดียว ใช้แทนค่าที่วัดได้จากเซนเซอร์)

| Function Code | ชื่อคำสั่ง | ใช้งานกับ |
|---|---|---|
| FC 01 | Read Coils | อ่านสถานะ Output แบบบิต (อ่าน-เขียนได้) |
| FC 02 | Read Discrete Inputs | อ่านสถานะ Input แบบบิต (อ่านอย่างเดียว) |
| FC 03 | Read Holding Registers | อ่านค่าพารามิเตอร์/Setpoint 16 บิต |
| FC 04 | Read Input Registers | อ่านค่าที่วัดได้ เช่น อุณหภูมิ ความเร็วมอเตอร์ |
| FC 05 | Write Single Coil | สั่ง ON/OFF บิตเดียว (0xFF00=ON, 0x0000=OFF) |
| FC 06 | Write Single Holding Register | เขียนค่าพารามิเตอร์ 1 ตัว เช่น ตั้งความถี่ Inverter |
| FC 15 | Write Multiple Coils | เขียนหลาย Output พร้อมกันในคำสั่งเดียว |
| FC 16 | Write Multiple Holding Registers | เขียนหลายค่าต่อเนื่อง เช่น ค่า Float 32 บิตที่ใช้ 2 Register ติดกัน |
ตัวอย่างการใช้งานจริงกับ PLC และ I/O Module
โมดูล Serial I/O อย่าง BSR/BSM ที่ VR Automation จำหน่าย ใช้ FC01/FC05/FC15 สำหรับควบคุม Digital Output และใช้ FC03/FC04/FC06/FC16 สำหรับอ่าน-เขียนค่า Analog Input/Output ผ่าน Holding Register วิศวกรที่เขียนโปรแกรม PLC เชื่อมต่อ SCADA หรือ HMI ผ่าน Modbus RTU/TCP ควรตรวจสอบ Register Map ในคู่มือของแต่ละอุปกรณ์ก่อนเสมอ เพราะแม้ Function Code จะเป็นมาตรฐานเดียวกัน แต่ Address ของแต่ละยี่ห้อไม่เหมือนกัน
Modbus RTU vs Modbus TCP: Function Code เหมือนกันหรือไม่
Function Code ชุดเดียวกันนี้ใช้ได้ทั้งบน Modbus RTU (สื่อสารผ่าน RS485/RS232 แบบ Serial) และ Modbus TCP (สื่อสารผ่าน Ethernet) ความต่างอยู่ที่ Frame การส่งข้อมูล โดย Modbus TCP จะห่อ Function Code เดิมไว้ใน TCP/IP Packet พร้อม MBAP Header แทนการใช้ CRC Checksum แบบ RTU
ดู PLC และอุปกรณ์ที่รองรับ Modbus RTU/TCP เพิ่มเติมได้ที่ หมวดหมู่ PLC VR Automation
คำถามที่พบบ่อย (FAQ)
Q1: FC03 กับ FC04 ต่างกันตรงไหน ใช้แทนกันได้ไหม?
A: FC03 อ่าน Holding Register (อ่าน-เขียนได้ ใช้กับพารามิเตอร์/Setpoint) ส่วน FC04 อ่าน Input Register (อ่านได้อย่างเดียว ใช้กับค่าที่วัดได้) ในทางปฏิบัติผู้ผลิตหลายรายทำให้ทั้งสอง Function Code ชี้ไปยัง Memory เดียวกันเพื่อความสะดวก แต่ควรอ้างอิงคู่มือของอุปกรณ์แต่ละรุ่นเสมอ
Q2: ทำไมสั่ง Write Single Coil (FC05) แล้วต้องส่งค่า 0xFF00 แทนที่จะเป็น 1?
A: เป็นข้อกำหนดตามมาตรฐาน Modbus Protocol ที่ใช้ 0xFF00 แทนสถานะ ON และ 0x0000 แทนสถานะ OFF เพื่อให้ทุกอุปกรณ์ตีความคำสั่งตรงกัน ค่าอื่นนอกจากนี้ถือว่าไม่ถูกต้องตามมาตรฐาน
Q3: อุปกรณ์ที่รองรับ Modbus ทุกยี่ห้อมี Address Register เหมือนกันหรือไม่?
A: ไม่เหมือนกัน Function Code เป็นมาตรฐานสากล แต่ตำแหน่ง Address ของแต่ละค่า (เช่น อุณหภูมิอยู่ Register ไหน) กำหนดโดยผู้ผลิตแต่ละราย ต้องอ้างอิงคู่มือ Modbus Register Map ของอุปกรณ์นั้นๆ เสมอ
แหล่งข้อมูลและมาตรฐานอ้างอิง
- Catalog อ้างอิงภายใน: Modbus Register Mapping ของโมดูล BSR/BSM และ FATEK FBs PLC — VR Automation
- Modbus Function Command Formats — Instrumentation Tools
- Modbus Function Codes Explained — FC01 to FC23 Complete Reference — ModbusSimulator.com
- Modbus Function Codes — Ozeki

สนใจ PLC / Gateway ที่รองรับ Modbus RTU/TCP?
VR Automation จำหน่ายและให้บริการติดตั้ง พร้อมทีมช่างผู้เชี่ยวชาญ
โทรสอบถามราคา: 083-848-8314
อีเมล: [email protected]
Line: @vrautomation
สต๊อกกรุณาสอบถาม | รับประกันสินค้า | บริการหลังการขาย | ออกใบกำกับภาษีได้
