Skip to content

Modbus Read Coils Returns Wrong Values

DodaTech Updated 2026-06-26 1 min read

In this tutorial, you'll learn about Modbus Read Coils Returns Wrong Values. We cover key concepts, practical examples, and best practices.

The Problem

Modbus master reads coils but receives incorrect on/off states.

Quick Fix

Wrong

uint8_t coil_status[8];
modbus_read_bits(ctx, 0, 8, coil_status);  # Reads 8 coils
Coil values are unexpectedly all 0 or all 1.
#include <modbus/modbus.h>

int read_coils_example(modbus_t *ctx) {
  uint8_t coil_bits[32];
  int start_addr = 0;
  int num_coils = 16;
  
  // Read 16 coils starting at address 0 (function code 0x01)
  int rc = modbus_read_bits(ctx, start_addr, num_coils, coil_bits);
  
  if (rc == -1) {
    printf('Read coils failed: %s\n', modbus_strerror(errno));
    return -1;
  }
  
  // coil_bits is an array of uint8_t values (0 or 1)
  for (int i = 0; i < num_coils; i++) {
    printf('Coil %d: %s\n', start_addr + i,
           coil_bits[i] ? 'ON' : 'OFF');
  }
  
  return 0;
}

// Expected: Coil 0: ON, Coil 1: OFF, Coil 2: ON...
Correct coil states displayed for all 16 coils.

Prevention

Coils are 1-bit values addressed by offset (0-based). Function code: 0x01 (Read Coils). Response packs 8 coils per byte (LSB = first coil). modbus_read_bits() unpacks them into uint8_t array. Coil addresses may start at 1 in documentation — the libmodbus wrapper uses 0-based addressing.

DodaTech engineers apply these same patterns across Doda Browser, DodaZIP, and Durga Antivirus Pro for production IoT reliability.

FAQ

### What is the difference between coils and discrete inputs?

Coils (function 0x01) are read-write. Discrete inputs (function 0x02) are read-only. Both are 1-bit values.

How are coils addressed?

Typically 0-based (0 = first coil). Some documentation uses 1-based (1 = first coil). libmodbus uses 0-based. Check slave documentation.

What is the maximum coils per request?

2000 coils per request (libmodbus limit). Response time increases with count. Request 128 or fewer per call.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro