digitalpetri Modbus is a Java 17 client and server library for Modbus TCP, Modbus TCP Security (TLS), Modbus RTU over serial, and Modbus RTU over TCP. It provides typed request and response PDUs, pluggable transports and codecs, and both synchronous and asynchronous client operations.
Reading holding registers from a Modbus TCP device looks like this:
var transport = NettyTcpClientTransport.create(cfg -> cfg.setHostname("10.0.0.100"));
var client = ModbusTcpClient.create(transport);
try (var ignored = client.open()) {
var response = client.readHoldingRegisters(1, new ReadHoldingRegistersRequest(0, 2));
System.out.println("register bytes: " + HexFormat.of().formatHex(response.registers()));
}Most applications depend on the transport module they use; Maven brings in the core modbus
module transitively.
| Module | Use it for |
|---|---|
modbus |
Core client/server APIs, PDUs, framing, services, and transport interfaces |
modbus-tcp |
Netty transports for Modbus TCP, TCP with TLS, and RTU over TCP |
modbus-serial |
jSerialComm transports for Modbus RTU over a serial port |
For a Modbus TCP application:
<dependency>
<groupId>com.digitalpetri.modbus</groupId>
<artifactId>modbus-tcp</artifactId>
<version>2.1.6</version>
</dependency>See Installation and modules for serial coordinates, Java requirements, and module details.
| Transport | Client | Server | TLS |
|---|---|---|---|
| Modbus TCP | Yes | Yes | Optional mutual TLS |
| Modbus RTU over serial | Yes | Yes | No |
| Modbus RTU over TCP | Yes | Yes | Optional mutual TLS |
See the feature and transport matrix for typed function-code, raw-PDU, and broadcast support.
The documentation index lists every how-to, concept, and reference page.
Common tasks:
- Read and write over Modbus TCP
- Communicate over serial RTU
- Secure a Modbus TCP client with TLS
- Expose data over Modbus TCP
- Configure timeouts and reconnection
- Troubleshoot communication
Concepts and reference:
- Start with the Modbus mental model if the relationship among data areas, unit IDs, PDUs, and transports is unfamiliar.
- Use Addressing, unit IDs, and data before translating a device manual into requests.
- Browse the API reference links for generated Javadocs.
digitalpetri Modbus is licensed under the Eclipse Public License 2.0.