{"id":20271035,"url":"https://github.com/zengfr/easymodbus4j","last_synced_at":"2025-07-15T16:31:47.223Z","repository":{"id":53894987,"uuid":"178504570","full_name":"zengfr/easymodbus4j","owner":"zengfr","description":"easymodbus4j是一个高性能和易用的 Modbus 协议的 Java 实现，基于 Netty 开发，可用于 Modbus协议的Java客户端和服务器开发, A high-performance and ease-of-use implementation of the Modbus protocol written in Java netty support for modbus 4 mode..","archived":false,"fork":false,"pushed_at":"2022-11-20T08:44:52.000Z","size":301,"stargazers_count":223,"open_issues_count":6,"forks_count":90,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-05-20T09:04:05.918Z","etag":null,"topics":["easymodbus4j","iot","java","modbus","modbus4j","modbusrtu","modubstcp","netty"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zengfr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-30T03:05:14.000Z","updated_at":"2025-04-01T19:40:40.000Z","dependencies_parsed_at":"2022-08-13T03:31:08.521Z","dependency_job_id":null,"html_url":"https://github.com/zengfr/easymodbus4j","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zengfr/easymodbus4j","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zengfr%2Feasymodbus4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zengfr%2Feasymodbus4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zengfr%2Feasymodbus4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zengfr%2Feasymodbus4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zengfr","download_url":"https://codeload.github.com/zengfr/easymodbus4j/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zengfr%2Feasymodbus4j/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265445302,"owners_count":23766445,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["easymodbus4j","iot","java","modbus","modbus4j","modbusrtu","modubstcp","netty"],"created_at":"2024-11-14T12:35:50.671Z","updated_at":"2025-07-15T16:31:47.197Z","avatar_url":"https://github.com/zengfr.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"![easymodbus4j运行效果图截屏](https://github.com/zengfr/easymodbus4j/blob/master/easymodbus4j-example/src/main/resources/capture.PNG?raw=true)\n# easymodbus4j [chs]\neasymodbus4j是一个高性能和易用的 Modbus 协议的 Java 实现，基于 Netty 开发，可用于 Modbus协议的Java客户端和服务器开发.\n# easymodbus4j [en]\nA 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.\n \n### easymodbus4j features 特点:\n- 1、Netty NIO high performance高性能.\n- 2、Modbus Function sync/aync 同步/异步非阻塞。\n- 3、Modbus IoT Data Connector Supports工业物联网平台IoT支持。\n- 4、支持Modbus TCP\\Modbus RTU protocol两种通信协议.\n- 5、灵活架构,支持8种生产部署模式,自由组合,满足不同生产要求.\n- 6、通用组件包,支持高度自定义接口.\n- 7、完全支持Modbus TCP 4种部署模式: TCP服务器master,TCP客户端slave,TCP服务器slave,TCP客户端master。\n- 8、完全支持Modbus RTU 4种部署模式: RTU服务器master,RTU客户端slave,RTU服务器slave,RTU客户端master。\n- 9、友好的调试以及日志支持bit\\bitset\\byte\\short\\int\\float\\double。\n- 10、Supports Function Codes:\n\t* Read Coils (FC1)\n\t* Read Discrete Inputs (FC2)\n\t* Read Holding Registers (FC3)\n\t* Read Input Registers (FC4)\n\t* Write Single Coil (FC5)\n\t* Write Single Register (FC6)\n\t* Write Multiple Coils (FC15)\n\t* Write Multiple Registers (FC16)\n\t* Read/Write Multiple Registers (FC23)\n### repositories\n- Project Example Code : https://github.com/zengfr/easymodbus4j\n- Mvnrepository Repositories: [Repositories Central Sonatype Mvnrepository easymodbus4j](https://mvnrepository.com/artifact/com.github.zengfr/easymodbus4j)\n``` \nartifactId/jar:\neasymodbus4j-core.jar   \tModbus protocol协议\neasymodbus4j-codec.jar  \tModbus 通用编码器解码器\neasymodbus4j.jar        \tModbus General/Common公共通用包\neasymodbus4j-client.jar \tModbus client客户端\neasymodbus4j-server.jar \tModbus server服务器端\neasymodbus4j-extension.jar  Modbus extension扩展包 ModbusMasterResponseProcessor/ModbusSlaveRequestProcessor interface\n``` \n \n### quick Start快速开发:\n\n#### 第一步step1 ,import jar:\n- 1.1 maven:\n\t```\n\t\u003cdependency\u003e\n\t\u003cgroupId\u003ecom.github.zengfr\u003c/groupId\u003e\n\t\u003cartifactId\u003eeasymodbus4j-client\u003c/artifactId\u003e\n\t\u003cversion\u003e0.0.5\u003c/version\u003e\n\t\u003c/dependency\u003e\n\t\u003cdependency\u003e\n\t\u003cgroupId\u003ecom.github.zengfr\u003c/groupId\u003e\n\t\u003cartifactId\u003eeasymodbus4j-server\u003c/artifactId\u003e\n\t\u003cversion\u003e0.0.5\u003c/version\u003e\n\t\u003c/dependency\u003e\n\t\u003cdependency\u003e\n\t\u003cgroupId\u003ecom.github.zengfr\u003c/groupId\u003e\n\t\u003cartifactId\u003eeasymodbus4j-extension\u003c/artifactId\u003e\n\t\u003cversion\u003e0.0.5\u003c/version\u003e\n\t\u003c/dependency\u003e\n\t```\n#### 第二步step2,implement handler:\n- 2.1 if master  \n\t*  实现implement ResponseHandler接口 \n\t\tsee easymodbus4j-example:ModbusMasterResponseHandler.java\n\t*  or 实现implement ModbusMasterResponseProcessor 接口 use new ModbusMasterResponseHandler(responseProcessor); \n- 2.2 if slave \n\t*  实现implement RequestHandler接口 \n\tsee easymodbus4j-example:ModbusSlaveRequestHandler.java \n\t*  or 实现implement ModbusSlaveRequestProcessor 接口 use new ModbusSlaveRequestHandler(reqProcessor); \n\n#### 第三步step3,\n- 3.1 select one master/slave and client/server mode:\n\t```java\n\tmodbusServer = ModbusServerTcpFactory.getInstance().createServer4Master(port, responseHandler);\n\tmodbusClient = ModbusClientTcpFactory.getInstance().createClient4Slave(host,port, requestHandler);\n\n\tmodbusClient = ModbusClientTcpFactory.getInstance().createClient4Master(host, port, responseHandler);\n\tmodbusServer = ModbusServerTcpFactory.getInstance().createServer4Slave(port, requestHandler);\n\n\tmodbusServer = ModbusServerRtuFactory.getInstance().createServer4Master(port, responseHandler);\n\tmodbusClient = ModbusClientRtuFactory.getInstance().createClient4Slave(host,port, requestHandler);\n\n\tmodbusClient = ModbusClientRtuFactory.getInstance().createClient4Master(host, port, responseHandler);\n\tmodbusServer = ModbusServerRtuFactory.getInstance().createServer4Slave(port, requestHandler);\n\t```\n#### 第四步step4 ,FAQs and advanced extensions:\n\n- 4.1 how to send a request ? to send data\n\t```java\n\tThread.sleep(3*1000);// sleep 3s before,when client or server open connection is async;\n\tChannel  channel =  client.getChannel());\n\tChannel  channel =  server.getChannelsBy(...));\n\tChannelSender sender = ChannelSenderFactory.getInstance().get(channel);\n\tChannelSender sender2 = new ChannelSender(channel,unitId,protocolIdentifier);\n\tsender.readCoils(...)\n\tsender.readDiscreteInputs(...)\n\tsender.writeSingleRegister(...)\n\t```\n- 4.2 how to process request/response? to receive data\n\tsee code in processResponseFrame mothod in  ModbusMasterResponseHandler.java or ModbusMasterResponseProcessor.java\n\n\t```java\n\tpublic void processResponseFrame(Channel channel, int unitId, AbstractFunction reqFunc, ModbusFunction respFunc) {\n\t\t\tif (respFunc instanceof ReadCoilsResponse) {\n\t\t\t\tReadCoilsResponse resp = (ReadCoilsResponse) respFunc;\n\t\t\t\tReadCoilsRequest req = (ReadCoilsRequest) reqFunc;\n\t\t\t\t//process business logic for req/resp\n\t\t\t}\n\t};\n\t```\n-  4.3 how to get response to byteArray for custom decode by yourself?\n\tsee code in processResponseFrame mothod in  ModbusMasterResponseHandler.java or ModbusMasterResponseProcessor.java\n\t\n\t```java\n\tpublic void processResponseFrame(Channel channel, int unitId, AbstractFunction reqFunc, ModbusFunction respFunc) {\n\t\t\tif (respFunc instanceof ReadDiscreteInputsResponse) {\n\t\t\t\tReadDiscreteInputsResponse resp = (ReadDiscreteInputsResponse) respFunc;\n\t\t\t\tbyte[] resutArray = resp.getInputStatus().toByteArray();\n\t\t\t}\n\t};\t\n\t```\n- 4.4 how to show log? \n\tsee ModbusMasterResponseHandler.java in example project.\n\n\t```java\n\tModbusFrameUtil.showFrameLog(logger, channel, frame);\n\t```\n- 4.5 how to custom a client/server advance by yourself?\n\t```java\n\tModbusChannelInitializer modbusChannelInitializer=...;\n\tModbusServerTcpFactory.getInstance().createServer4Master(port,modbusChannelInitializer);\n\t```\n\n#### Example Project Code \n- example1\n[example1](https://github.com/zengfr/easymodbus4j/tree/master/easymodbus4j-example/src/main/java/com/github/zengfr/easymodbus4j/example)\n- example3\n[example3](https://github.com/zengfr/easymodbus4j/tree/master/easymodbus4j-example/src/main/java/com/github/zengfr/easymodbus4j/example3)\n- other example1\n[other example1](https://gitee.com/zengfr/easymodbus4j/tree/master/easymodbus4j-example/src/main/java/com/github/zengfr/easymodbus4j/example)\n- other example3 \n[other example3](https://gitee.com/zengfr/easymodbus4j/tree/master/easymodbus4j-example/src/main/java/com/github/zengfr/easymodbus4j/example3)\n-  client4Master demo:[client4Master demo](\nhttps://gitee.com/zengfr/easymodbus4j/blob/master/easymodbus4j-example/src/main/java/com/github/zengfr/easymodbus4j/example3/Example3.java) [最佳简单快速参考实例][Best simple quick demo]\n- server4Master demo:[server4Master demo](\nhttps://gitee.com/zengfr/easymodbus4j/blob/master/easymodbus4j-example/src/main/java/com/github/zengfr/easymodbus4j/example3/Example4.java)[最佳简单快速参考实例][Best simple quick demo]\n#### Example run startup:\n- 1、unzip file easymodbus4j-example-0.0.5-release.zip.\n- 2、for modbus master mode:open autosend.txt file in dir or autosend.txt rsourcefile in easymodbus4j-example-0.0.5.jar \n- 3、for modbus master mode:edit autosend.txt file\n- 4、start startup.bat.\n- 5、you also can edit *.bat for modbus master/salve mode: .\n#### Example实例说明:\n- 1、解压缩zip文件到文件夹\n- 2、java程序 运行不了 则安装jdk8.\n- 3、解压后8个bat文件  对应TCP/RTU 服务器master,客户端slave,服务器slave,客户端master 8种模式.\n- 4、Master模式 可以设置autosend.txt文件，定时发送读写请求。\n- 5、记事本打开bat文件可以编辑相关参数，如定时延时发送时间以及详细日志开关。\n#### 开发实例系列教程Develop a series of tutorial examples\n[easymodbus4j 开发实例系列教程之1----客户端master模式](https://my.oschina.net/zengfr/blog/4304442)\n\u003cbr/\u003e\n[easymodbus4j 开发实例系列教程之2----服务端master模式](https://my.oschina.net/zengfr/blog/4305723)\n\u003cbr/\u003e\n#### capture demo 运行效果图截屏:\n![easymodbus4j运行效果图截屏1](https://github.com/zengfr/easymodbus4j/blob/master/easymodbus4j-example/src/main/resources/capture.PNG?raw=true)\n![easymodbus4j运行效果图截屏2](https://github.com/zengfr/easymodbus4j/blob/master/easymodbus4j-example/src/main/resources/capture2.PNG?raw=true)\n![easymodbus4j运行效果图截屏3](https://github.com/zengfr/easymodbus4j/blob/master/easymodbus4j-example/src/main/resources/capture3.PNG?raw=true)\n![easymodbus4j运行效果图截屏4](https://github.com/zengfr/easymodbus4j/blob/master/easymodbus4j-example/src/main/resources/capture4.PNG?raw=true)\n\n#### capture demo 运行效果图截屏2:\n![easymodbus4j运行效果图截屏1](https://gitee.com/zengfr/easymodbus4j/raw/master/easymodbus4j-example/src/main/resources/capture.PNG?raw=true)\n![easymodbus4j运行效果图截屏2](https://gitee.com/zengfr/easymodbus4j/raw/master/easymodbus4j-example/src/main/resources/capture2.PNG?raw=true)\n![easymodbus4j运行效果图截屏3](https://gitee.com/zengfr/easymodbus4j/raw/master/easymodbus4j-example/src/main/resources/capture3.PNG?raw=true)\n![easymodbus4j运行效果图截屏4](https://gitee.com/zengfr/easymodbus4j/raw/master/easymodbus4j-example/src/main/resources/capture4.PNG?raw=true)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzengfr%2Feasymodbus4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzengfr%2Feasymodbus4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzengfr%2Feasymodbus4j/lists"}