MCPcopy Index your code
hub / github.com/digitalpetri/modbus

github.com/digitalpetri/modbus @v2.1.5

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.1.5 ↗ · + Follow
903 symbols 2,425 edges 126 files 325 documented · 36%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Maven Central

A modern, performant, easy to use client and server implementation of Modbus, supporting: - Modbus TCP - Modbus TCP Security (Modbus TCP with TLS) - Modbus RTU on Serial - Modbus RTU on TCP

Quick Start Examples

Modbus TCP Client

var transport = NettyTcpClientTransport.create(cfg -> {
  cfg.setHostname("172.17.0.2");
  cfg.setPort(502);
});

var client = ModbusTcpClient.create(transport);
client.connect();

ReadHoldingRegistersResponse response = client.readHoldingRegisters(
    1,
    new ReadHoldingRegistersRequest(0, 10)
);

System.out.println("Response: " + response);

Modbus RTU on Serial Client

var transport = SerialPortClientTransport.create(cfg -> {
  cfg.setSerialPort("/dev/ttyUSB0");
  cfg.setBaudRate(115200);
  cfg.setDataBits(8);
  cfg.setParity(SerialPort.NO_PARITY);
  cfg.setStopBits(SerialPort.TWO_STOP_BITS);
});

var client = ModbusRtuClient.create(transport);
client.connect();

client.readHoldingRegisters(
    1,
    new ReadHoldingRegistersRequest(0, 10)
);

System.out.println("Response: " + response);

Maven

Modbus TCP

<dependency>
    <groupId>com.digitalpetri.modbus</groupId>
    <artifactId>modbus-tcp</artifactId>
    <version>2.1.4</version>
</dependency>

Modbus Serial

<dependency>
    <groupId>com.digitalpetri.modbus</groupId>
    <artifactId>modbus-serial</artifactId>
    <version>2.1.4</version>
</dependency>

Features

Supported Function Codes

Code Function Client Server
0x01 Read Coils
0x02 Read Discrete Inputs
0x03 Read Holding Registers
0x04 Read Input Registers
0x05 Write Single Coil
0x06 Write Single Register
0x0F Write Multiple Coils
0x10 Write Multiple Registers
0x16 Mask Write Register
0x17 Read/Write Multiple Registers
  • raw/custom PDUs on Modbus/TCP
  • broadcast messages on Modbus/RTU
  • pluggable codec implementations
  • pluggable transport implementations

License

Eclipse Public License - v 2.0

Extension points exported contracts — how you extend this code

ModbusRequestPdu (Interface)
Super-interface for Modbus request PDUs. [10 implementers]
modbus/src/main/java/com/digitalpetri/modbus/pdu/ModbusRequestPdu.java
ConnectionListener (Interface)
(no doc) [1 implementers]
modbus-tcp/src/main/java/com/digitalpetri/modbus/tcp/client/NettyTcpClientTransport.java
ModbusPdu (Interface)
Super-interface for objects that can be encoded as a Modbus PDU. [21 implementers]
modbus/src/main/java/com/digitalpetri/modbus/pdu/ModbusPdu.java
ModbusResponsePdu (Interface)
Super-interface for Modbus response PDUs. [10 implementers]
modbus/src/main/java/com/digitalpetri/modbus/pdu/ModbusResponsePdu.java
ParserState (Interface)
(no doc) [10 implementers]
modbus/src/main/java/com/digitalpetri/modbus/ModbusRtuResponseFrameParser.java
ParserState (Interface)
(no doc) [10 implementers]
modbus/src/main/java/com/digitalpetri/modbus/ModbusRtuRequestFrameParser.java

Core symbols most depended-on inside this repo

get
called by 111
modbus/src/main/java/com/digitalpetri/modbus/server/ProcessImage.java
put
called by 70
modbus/src/main/java/com/digitalpetri/modbus/server/ProcessImage.java
encode
called by 48
modbus/src/main/java/com/digitalpetri/modbus/ModbusPduSerializer.java
decode
called by 46
modbus/src/main/java/com/digitalpetri/modbus/ModbusPduSerializer.java
getCode
called by 46
modbus/src/main/java/com/digitalpetri/modbus/FunctionCode.java
allocate
called by 42
modbus/src/main/java/com/digitalpetri/modbus/internal/util/BufferPool.java
getFunctionCode
called by 41
modbus/src/main/java/com/digitalpetri/modbus/pdu/ModbusPdu.java
remove
called by 23
modbus/src/main/java/com/digitalpetri/modbus/server/ProcessImage.java

Shape

Method 689
Class 178
Interface 31
Enum 5

Languages

Java100%

Modules by API surface

modbus/src/main/java/com/digitalpetri/modbus/server/ProcessImage.java41 symbols
modbus/src/main/java/com/digitalpetri/modbus/client/ModbusClient.java33 symbols
modbus-tcp/src/main/java/com/digitalpetri/modbus/tcp/client/NettyTcpClientTransport.java23 symbols
modbus/src/test/java/com/digitalpetri/modbus/server/authz/AuthzModbusServicesTest.java20 symbols
modbus-tcp/src/main/java/com/digitalpetri/modbus/tcp/client/NettyRtuClientTransport.java20 symbols
modbus-serial/src/test/java/com/digitalpetri/modbus/serial/SerialPortGetCommPortBehaviorTest.java20 symbols
modbus/src/main/java/com/digitalpetri/modbus/internal/util/BufferPool.java18 symbols
modbus/src/main/java/com/digitalpetri/modbus/client/ModbusTcpClient.java17 symbols
modbus-tcp/src/main/java/com/digitalpetri/modbus/tcp/client/NettyClientTransportConfig.java17 symbols
modbus/src/test/java/com/digitalpetri/modbus/server/authz/ReadWriteAuthzHandlerTest.java16 symbols
modbus/src/main/java/com/digitalpetri/modbus/ModbusRtuResponseFrameParser.java16 symbols
modbus-serial/src/main/java/com/digitalpetri/modbus/serial/SerialPortTransportConfig.java16 symbols

For agents

$ claude mcp add modbus \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact