Modbus Input Register Read Fails
DodaTech
Updated 2026-06-26
1 min read
In this tutorial, you'll learn about Modbus Input Register Read Fails. We cover key concepts, practical examples, and best practices.
The Problem
Modbus master fails to read input registers (function code 0x04).
Quick Fix
Wrong
modbus_read_registers(ctx, 0, 10, reg); # Wrong! Use modbus_read_input_registers
Exception 0x01 (Illegal Function) or 0x02 (Illegal Data Address).
Right
#include <modbus/modbus.h>
int read_input_registers(modbus_t *ctx) {
uint16_t input_reg[16];
// Read input registers (function code 0x04)
int rc = modbus_read_input_registers(ctx, 0, 10, input_reg);
if (rc == -1) {
printf('Read input registers failed: %s (errno=%d)\n',
modbus_strerror(errno), errno);
// Check specific errors
if (errno == EMBBADCRC) {
printf('CRC error — check wiring and baud rate\n');
} else if (errno == ETIMEDOUT) {
printf('Timeout — slave not responding\n');
}
return -1;
}
printf('Read %d input registers:\n', rc);
for (int i = 0; i < rc; i++) {
printf(' Input[%d] = 0x%04X (%d)\n', i, input_reg[i], input_reg[i]);
}
return 0;
}
// Expected: Input[0] = 0x0FA0 (4000) — analog input value
Input[0] = 0x0FA0 (4000) — correct input register value.
Prevention
Use modbus_read_input_registers() for function code 0x04 (not read_registers for holding). Input registers are read-only. Common uses: analog inputs, sensor readings, status values. Address mapping mirrors holding registers but in a separate address space.
DodaTech engineers apply these same patterns across Doda Browser, DodaZIP, and Durga Antivirus Pro for production IoT reliability.
FAQ
← Previous
Modbus Holding Register Read Returns Zero
Next →
Modbus Master Cannot Communicate with Slave
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro