easymodbus4j是一个高性能和易用的 Modbus 协议的 Java 实现,基于 Netty 开发,可用于 Modbus协议的Java客户端和服务器开发. easymodbus4j A high-performance and ease-of-use implementation of the Modbus protocol written in Java netty support for modbus 8 mode client/server and master/slave.
快速开发Quick Start:
第一步step1 ,import jar:
maven:
<dependency>
<groupId>com.github.zengfr</groupId>
<artifactId>easymodbus4j-client</artifactId>
<version>0.0.5</version>
</dependency>
<dependency>
<groupId>com.github.zengfr</groupId>
<artifactId>easymodbus4j-server</artifactId>
<version>0.0.5</version>
</dependency>
<dependency>
<groupId>com.github.zengfr</groupId>
<artifactId>easymodbus4j-extension</artifactId>
<version>0.0.5</version>
</dependency>
第二步step2, implement handler:
2.1 if master
实现implement ResponseHandler接口 see easymodbus4j-example:ModbusMasterResponseHandler.java
or 实现implement ModbusMasterResponseProcessor 接口 use new ModbusMasterResponseHandler(responseProcessor);
2.2 if slave
实现implement RequestHandler接口 see easymodbus4j-example:ModbusSlaveRequestHandler.java
or 实现implement ModbusSlaveRequestProcessor 接口 use new ModbusSlaveRequestHandler(reqProcessor);
第三步step3, select one master/slave client/server mode:
modbusServer = ModbusServerTcpFactory.getInstance().createServer4Master(port, responseHandler);
modbusClient = ModbusClientTcpFactory.getInstance().createClient4Slave(host,port, requestHandler);
modbusClient = ModbusClientTcpFactory.getInstance().createClient4Master(host, port, responseHandler);
modbusServer = ModbusServerTcpFactory.getInstance().createServer4Slave(port, requestHandler);
modbusServer = ModbusServerRtuFactory.getInstance().createServer4Master(port, responseHandler);
modbusClient = ModbusClientRtuFactory.getInstance().createClient4Slave(host,port, requestHandler);
modbusClient = ModbusClientRtuFactory.getInstance().createClient4Master(host, port, responseHandler);
modbusServer = ModbusServerRtuFactory.getInstance().createServer4Slave(port, requestHandler);
第四步step4:
4.1 how to send a request ?
Channel channel = client.getChannel());
Channel channel = server.getChannelsBy(...));
ChannelSender sender = ChannelSenderFactory.getInstance().get(channel);
sender.readCoils(...)
sender.readDiscreteInputs(...)
sender.writeSingleRegister(...)
4.2 how to process request/response?
see code in processResponseFrame mothod in ModbusMasterResponseHandler.java or ModbusMasterResponseProcessor.java
public void processResponseFrame(Channel channel, int unitId, AbstractFunction reqFunc, ModbusFunction respFunc) {
if (respFunc instanceof ReadCoilsResponse) {
ReadCoilsResponse resp = (ReadCoilsResponse) respFunc;
ReadCoilsRequest req = (ReadCoilsRequest) reqFunc;
//process business logic for req/resp
}
};
4.3 how to get response to byteArray for custom decode by yourself?
see code in processResponseFrame mothod in ModbusMasterResponseHandler.java or ModbusMasterResponseProcessor.java
public void processResponseFrame(Channel channel, int unitId, AbstractFunction reqFunc, ModbusFunction respFunc) {
if (respFunc instanceof ReadDiscreteInputsResponse) {
ReadDiscreteInputsResponse resp = (ReadDiscreteInputsResponse) respFunc;
byte[] resutArray = resp.getInputStatus().toByteArray();
}
};
4.4 how to show log?
see ModbusMasterResponseHandler.java in example project.
ModbusFrameUtil.showFrameLog(logger, channel, frame);
4.5 how to custom a client/server advance by yourself?
ModbusChannelInitializer modbusChannelInitializer=...;
ModbusServerTcpFactory.getInstance().createServer4Master(port,modbusChannelInitializer);
easymodbus4j 0.0.5 发布,修复更新
easymodbus4j 0.0.5 发布,修复更新
0.0.4 rtu协议模式下 有多处bug,建议全部升级至0.0.5版本。
更新如下:
1、日志统一调整。
2、rtu 修复 req resp同步更新bug。
3、新增debug调试多处关键性日志。
4、正负数bug修复。
5、rtu协议模式下 读写锁bug修复 以及性能优化。
easymodbus4j
easymodbus4j是一个高性能和易用的 Modbus 协议的 Java 实现,基于 Netty 开发,可用于 Modbus协议的Java客户端和服务器开发. easymodbus4j A high-performance and ease-of-use implementation of the Modbus protocol written in Java netty support for modbus 8 mode client/server and master/slave.
#Example Project Code in https://github.com/zengfr/easymodbus4j
Repositories Central Sonatype Mvnrepository easymodbus4j
快速开发Quick Start: 第一步step1 ,import jar: maven: <dependency> <groupId>com.github.zengfr</groupId> <artifactId>easymodbus4j-client</artifactId> <version>0.0.5</version> </dependency> <dependency> <groupId>com.github.zengfr</groupId> <artifactId>easymodbus4j-server</artifactId> <version>0.0.5</version> </dependency> <dependency> <groupId>com.github.zengfr</groupId> <artifactId>easymodbus4j-extension</artifactId> <version>0.0.5</version> </dependency> 第二步step2, implement handler: 2.1 if master 实现implement ResponseHandler接口 see easymodbus4j-example:ModbusMasterResponseHandler.java or 实现implement ModbusMasterResponseProcessor 接口 use new ModbusMasterResponseHandler(responseProcessor); 2.2 if slave 实现implement RequestHandler接口 see easymodbus4j-example:ModbusSlaveRequestHandler.java or 实现implement ModbusSlaveRequestProcessor 接口 use new ModbusSlaveRequestHandler(reqProcessor); 第三步step3, select one master/slave client/server mode: modbusServer = ModbusServerTcpFactory.getInstance().createServer4Master(port, responseHandler); modbusClient = ModbusClientTcpFactory.getInstance().createClient4Slave(host,port, requestHandler); modbusClient = ModbusClientTcpFactory.getInstance().createClient4Master(host, port, responseHandler); modbusServer = ModbusServerTcpFactory.getInstance().createServer4Slave(port, requestHandler); modbusServer = ModbusServerRtuFactory.getInstance().createServer4Master(port, responseHandler); modbusClient = ModbusClientRtuFactory.getInstance().createClient4Slave(host,port, requestHandler); modbusClient = ModbusClientRtuFactory.getInstance().createClient4Master(host, port, responseHandler); modbusServer = ModbusServerRtuFactory.getInstance().createServer4Slave(port, requestHandler); 第四步step4: 4.1 how to send a request ? Channel channel = client.getChannel()); Channel channel = server.getChannelsBy(...)); ChannelSender sender = ChannelSenderFactory.getInstance().get(channel); sender.readCoils(...) sender.readDiscreteInputs(...) sender.writeSingleRegister(...) 4.2 how to process request/response? see code in processResponseFrame mothod in ModbusMasterResponseHandler.java or ModbusMasterResponseProcessor.java public void processResponseFrame(Channel channel, int unitId, AbstractFunction reqFunc, ModbusFunction respFunc) { if (respFunc instanceof ReadCoilsResponse) { ReadCoilsResponse resp = (ReadCoilsResponse) respFunc; ReadCoilsRequest req = (ReadCoilsRequest) reqFunc; //process business logic for req/resp } }; 4.3 how to get response to byteArray for custom decode by yourself? see code in processResponseFrame mothod in ModbusMasterResponseHandler.java or ModbusMasterResponseProcessor.java public void processResponseFrame(Channel channel, int unitId, AbstractFunction reqFunc, ModbusFunction respFunc) { if (respFunc instanceof ReadDiscreteInputsResponse) { ReadDiscreteInputsResponse resp = (ReadDiscreteInputsResponse) respFunc; byte[] resutArray = resp.getInputStatus().toByteArray(); } }; 4.4 how to show log? see ModbusMasterResponseHandler.java in example project. ModbusFrameUtil.showFrameLog(logger, channel, frame); 4.5 how to custom a client/server advance by yourself? ModbusChannelInitializer modbusChannelInitializer=...; ModbusServerTcpFactory.getInstance().createServer4Master(port,modbusChannelInitializer);#Example Project Code master/easymodbus4j-example/src/main/java/com/github/zengfr/easymodbus4j/example
capture运行效果图截屏:
