Modbus คือโปรโตคอลการสื่อสารที่เก่าแก่และแพร่หลายที่สุดในโลก Automation คิดค้นปี 1979 มี 2 แบบหลักคือ Modbus RTU (RS-485) และ Modbus TCP (LAN)
Data Model ของ Modbus
- Coil (0x): ข้อมูล 1 Bit อ่าน/เขียนได้ เช่น สถานะ Output
- Discrete Input (1x): 1 Bit อ่านอย่างเดียว เช่น สถานะ Sensor
- Input Register (3x): 16 Bit อ่านอย่างเดียว เช่น ค่าอุณหภูมิ
- Holding Register (4x): 16 Bit อ่าน/เขียนได้ เช่น Setpoint
ตัวอย่างการอ่านค่าด้วย Python (pymodbus)
from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('192.168.1.10', port=502)
client.connect()
result = client.read_holding_registers(0, 10)
print(result.registers)ทำไม Modbus TCP ถึงนิยมใช้ใน SCADA?
เพราะเป็น Open Standard ไม่มีค่า License และ PLC เกือบทุกยี่ห้อรองรับ ทำให้เชื่อมต่อข้ามแบรนด์ได้ง่าย ไม่ว่าจะเป็น Mitsubishi, Siemens หรือ Omron
Function Code ที่ใช้บ่อยใน Modbus
| FC | ชื่อ | อ่าน/เขียน | ข้อมูลที่เข้าถึง |
|---|---|---|---|
| FC01 | Read Coils | อ่าน | Coils (Bit) หลายตัว |
| FC02 | Read Discrete Inputs | อ่าน | Digital Input (Read-only) |
| FC03 | Read Holding Registers | อ่าน | Register 16 Bit (R/W) |
| FC04 | Read Input Registers | อ่าน | Register 16 Bit (Read-only) |
| FC05 | Write Single Coil | เขียน | Coil 1 ตัว |
| FC06 | Write Single Register | เขียน | Register 1 ตัว |
| FC15 | Write Multiple Coils | เขียน | Coil หลายตัว |
| FC16 | Write Multiple Registers | เขียน | Register หลายตัว |
Modbus TCP vs Modbus RTU ต่างกันอย่างไร?
| ปัจจัย | Modbus TCP | Modbus RTU |
|---|---|---|
| Media | Ethernet (RJ45) | RS-485 (Serial) |
| Port | TCP Port 502 | COM Port |
| Speed | 100 Mbps+ | 9.6–115.2 Kbps |
| Max Distance | 100m (Cat5e), ไม่จำกัดด้วย Switch | 1,200m |
| Multiple Master | ✅ หลาย Client ต่อ Server ได้ | ❌ 1 Master เท่านั้น |
| Unit ID | Unit ID (01–247) | Slave Address (01–247) |
วิธี Enable Modbus TCP บน PLC แต่ละยี่ห้อ
Mitsubishi FX5U — GX Works3
- Navigation → Parameter → FX5UCPU → Module Parameter → Built-in Ethernet Port
- เปิดใช้ Modbus TCP Server → ตั้ง Port 502
- ตั้ง IP Address ของ FX5U
Siemens S7-1200 — TIA Portal
- เพิ่ม MB_SERVER Instruction ใน OB1
- ตั้ง Port 502 และ MB_HOLD_REG (DB ที่ใช้เก็บ Register)
Omron NJ/NX — Sysmac Studio
- Network Configuration → EtherNet/IP Port → Modbus TCP Slave
Troubleshoot Modbus TCP ที่พบบ่อย
- Connection Refused — Port 502 ไม่ได้เปิด หรือ Firewall Block
- Exception Code 01 — Function Code ไม่รองรับ
- Exception Code 02 — Address ที่ขอไม่มีใน PLC
- Exception Code 03 — Count ที่ขออ่านมากเกินไป
- Timeout — PLC ตอบช้า หรือ Network มี Latency สูง
ควรเรียกผู้เชี่ยวชาญเมื่อไหร่?
- Connect แล้วแต่อ่านค่าผิดพลาด ไม่รู้ว่า Register Map ใน PLC เป็นอย่างไร
- ต้องการ SCADA ที่ Connect PLC หลายยี่ห้อผ่าน Modbus
- ต้องการ Enable Modbus บน PLC แต่ไม่มีซอฟต์แวร์

