Free Unlock your 1‑hour consultancy—schedule your session today! »

· Eduardo Vieira · Industrial Automation  · 1 min read

Modbus Data Model - Coils, Discrete Inputs, Holding Registers, Input Registers

A deep dive into Modbus data types, addressing, and how to interact with coils, discrete inputs, and registers in your automation systems.

A deep dive into Modbus data types, addressing, and how to interact with coils, discrete inputs, and registers in your automation systems.

Modbus Data Model: Coils, Discrete Inputs, Holding Registers, Input Registers

Overview

Modbus defines four primary data types mapped to function codes:

Data TypeFunction CodesAccessSize
Coils1 (Read), 5, 15Read/Write1 bit
Discrete Inputs2Read-only1 bit
Holding Registers3 (Read), 6, 16Read/Write16 bits
Input Registers4Read-only16 bits

Coils (Discrete Outputs)

  • Represent binary outputs such as relays, LEDs, and actuators.
  • Operate with single-bit resolution.
  • Function Code 1 reads coil status; 5 writes single coil; 15 writes multiple coils.

Example: Reading Coils

from pymodbus.client.sync import ModbusSerialClient
client = ModbusSerialClient(method='rtu', port='/dev/ttyUSB0', baudrate=9600)
result = client.read_coils(address=0, count=10, unit=1)
print(result.bits)

Discrete Inputs (Binary Inputs)

  • Represent binary inputs like switches or sensors.
  • Function Code 2 reads discrete inputs.

Holding Registers (Read/Write 16-bit)

  • Store configuration parameters, setpoints, and control variables.
  • Function Code 3 reads; 6 writes single register; 16 writes multiple registers.

Example: Writing Multiple Registers

from pymodbus.client.sync import ModbusTcpClient
client = ModbusTcpClient('192.168.0.10')
client.write_registers(address=10, values=[100, 200], unit=1)

Input Registers (Read-only 16-bit)

  • Represent sensor readings like temperature, pressure, or analog inputs.
  • Function Code 4 reads input registers.

Addressing

  • Addresses start at 0 in Modbus frames but are often shown as 1-based in documentation.
  • Use unit IDs to differentiate slave devices on a shared bus.

Conclusion

Understanding the Modbus data model is foundational for effective industrial communication. Properly leveraging coils, discrete inputs, and registers enables robust control and monitoring in automation systems.

Back to Blog

Related Posts

View All Posts »