Modbus Function Codes — Complete Reference Guide
Key Takeaway
Complete reference for Modbus function codes FC01 through FC16 — what each reads or writes, request/response frame structure, and which are most commonly used.
Quick Answer
Modbus function codes specify the operation in each transaction. The most commonly used are FC03 (read holding registers), FC04 (read input registers), FC06 (write single register), and FC16 (write multiple registers).
Function Code Reference
| Code | Name | Access |
|---|---|---|
| FC01 | Read Coils | Read discrete outputs |
| FC02 | Read Discrete Inputs | Read discrete inputs |
| FC03 | Read Holding Registers | Read 16-bit R/W registers |
| FC04 | Read Input Registers | Read 16-bit RO registers |
| FC05 | Write Single Coil | Write one discrete output |
| FC06 | Write Single Register | Write one holding register |
| FC15 | Write Multiple Coils | Write multiple discrete outputs |
| FC16 | Write Multiple Registers | Write multiple holding registers |
Exception Responses
When a slave cannot process a request, it returns the function code with bit 7 set (FC + 0x80) followed by an exception code indicating the error type.
Slave-Initiated Communication
Standard Modbus is strictly master-initiated. A slave cannot send unsolicited data — this is a fundamental difference from DNP3.
Frequently Asked Questions
FC03 reads holding registers (4xxxx, read/write, for setpoints and configuration). FC04 reads input registers (3xxxx, read-only, for sensor readings). Many devices use only FC03.
FC16 writes a block of consecutive holding registers in one request — more efficient than multiple FC06 commands.
No. Only the master initiates transactions. Slaves respond only when polled.