26 Star 176 Fork 63

zengfr繁荣 / easymodbus4j

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

easymodbus4j运行效果图截屏

easymodbus4j [chs]

easymodbus4j是一个高性能和易用的 Modbus 协议的 Java 实现,基于 Netty 开发,可用于 Modbus协议的Java客户端和服务器开发.

easymodbus4j [en]

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.

easymodbus4j features 特点:

  • 1、Netty NIO high performance高性能.
  • 2、Modbus Function sync/aync 同步/异步非阻塞。
  • 3、Modbus IoT Data Connector Supports工业物联网平台IoT支持。
  • 4、支持Modbus TCP\Modbus RTU protocol两种通信协议.
  • 5、灵活架构,支持8种生产部署模式,自由组合,满足不同生产要求.
  • 6、通用组件包,支持高度自定义接口.
  • 7、完全支持Modbus TCP 4种部署模式: TCP服务器master,TCP客户端slave,TCP服务器slave,TCP客户端master。
  • 8、完全支持Modbus RTU 4种部署模式: RTU服务器master,RTU客户端slave,RTU服务器slave,RTU客户端master。
  • 9、友好的调试以及日志支持bit\bitset\byte\short\int\float\double。
  • 10、Supports Function Codes:
    • Read Coils (FC1)
    • Read Discrete Inputs (FC2)
    • Read Holding Registers (FC3)
    • Read Input Registers (FC4)
    • Write Single Coil (FC5)
    • Write Single Register (FC6)
    • Write Multiple Coils (FC15)
    • Write Multiple Registers (FC16)
    • Read/Write Multiple Registers (FC23)

repositories

artifactId/jar:
easymodbus4j-core.jar   	Modbus protocol协议
easymodbus4j-codec.jar  	Modbus 通用编码器解码器
easymodbus4j.jar        	Modbus General/Common公共通用包
easymodbus4j-client.jar 	Modbus client客户端
easymodbus4j-server.jar 	Modbus server服务器端
easymodbus4j-extension.jar  Modbus extension扩展包 ModbusMasterResponseProcessor/ModbusSlaveRequestProcessor interface

quick Start快速开发:

第一步step1 ,import jar:

  • 1.1 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,

  • 3.1 select one master/slave and 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 ,FAQs and advanced extensions:

  • 4.1 how to send a request ? to send data

     Thread.sleep(3*1000);// sleep 3s before,when client or server open connection is async;
     Channel  channel =  client.getChannel());
     Channel  channel =  server.getChannelsBy(...));
     ChannelSender sender = ChannelSenderFactory.getInstance().get(channel);
     ChannelSender sender2 = new ChannelSender(channel,unitId,protocolIdentifier);
     sender.readCoils(...)
     sender.readDiscreteInputs(...)
     sender.writeSingleRegister(...)
  • 4.2 how to process request/response? to receive data 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

Example run startup:

  • 1、unzip file easymodbus4j-example-0.0.5-release.zip.
  • 2、for modbus master mode:open autosend.txt file in dir or autosend.txt rsourcefile in easymodbus4j-example-0.0.5.jar
  • 3、for modbus master mode:edit autosend.txt file
  • 4、start startup.bat.
  • 5、you also can edit *.bat for modbus master/salve mode: .

Example实例说明:

  • 1、解压缩zip文件到文件夹
  • 2、java程序 运行不了 则安装jdk8.
  • 3、解压后8个bat文件 对应TCP/RTU 服务器master,客户端slave,服务器slave,客户端master 8种模式.
  • 4、Master模式 可以设置autosend.txt文件,定时发送读写请求。
  • 5、记事本打开bat文件可以编辑相关参数,如定时延时发送时间以及详细日志开关。

开发实例系列教程Develop a series of tutorial examples

easymodbus4j 开发实例系列教程之1----客户端master模式
easymodbus4j 开发实例系列教程之2----服务端master模式

capture demo 运行效果图截屏:

easymodbus4j运行效果图截屏1 easymodbus4j运行效果图截屏2 easymodbus4j运行效果图截屏3 easymodbus4j运行效果图截屏4

capture demo 运行效果图截屏2:

easymodbus4j运行效果图截屏1 easymodbus4j运行效果图截屏2 easymodbus4j运行效果图截屏3 easymodbus4j运行效果图截屏4

MIT License Copyright (c) 2021 zengfr https://github.com/zengfr Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

easymodbus4j 是一个高性能和易用的 Modbus 协议的 Java 实现,基于 Netty 开发,可用于 Modbus 4 的客户端和服务器开发 展开 收起
Java 等 2 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/zengfr/easymodbus4j.git
git@gitee.com:zengfr/easymodbus4j.git
zengfr
easymodbus4j
easymodbus4j
master

搜索帮助

14c37bed 8189591 565d56ea 8189591