Skip to content

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).
#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

### What is the difference between input and holding registers?

Input registers (0x04) are read-only — typically sensor values. Holding registers (0x03) are read-write — configuration and outputs. Both are 16-bit.

What error codes occur?

ETIMEDOUT: slave not responding. EMBBADCRC: CRC mismatch. EBADSLT: invalid slave ID. Check wiring, baud rate, and slave address.

Can I write to input registers?

No. Input registers are read-only by Modbus specification. Use holding registers for writable values.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro