JLibModbus和Modbus4J Java版Modbus库对比与实践

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

JLibModbus和Modbus4J Java版Modbus库对比与实践

Java 生态中的 Modbus 库

Java 在工业自动化服务器端开发中有着广泛的应用(SCADA 后端、MES 데이터 Acquisition、工业数据处理服务等)。modbus.org 推荐了两个 Java Modbus 库——Jamod(已覆盖)和 Modbus4J(已覆盖),此外还有 JLibModbus 和 ModbusPal 等。本文重点介绍尚未覆盖的 JLibModbus 以及各 Java 库之间的选择建议。

JLibModbus —— 活跃开发的 Java Modbus protocol栈

JLibModbus 是一个纯 Java 实现的 Modbus protocol库,托管在 SourceForge:sourceforge.net/projects/jlibmodbus。与 Jamod 相比,JLibModbus 仍在持续更新和测试,是一个"actively tested and improved"的项目。

功能特性

  • 支持 Modbus RTU 和 Modbus TCP
  • 串口通信用 jSSC(Java Simple Serial Connector)或 RXTX 库实现
  • 支持常用功能码(FC01-FC06、FC15、FC16、FC23)
  • Master 和 Slave 两种模式
  • 纯 Java 实现,无本地库依赖(串口库除外)

Maven 依赖

<!-- JLibModbus 的 Maven 集成示例 -->
<dependency>
    <groupId>com.intelligt.modbus</groupId>
    <artifactId>jlibmodbus</artifactId>
    <version>1.2.9.7</version>
</dependency>

TCP 客户端示例

import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;

public class ModbusReader {
    public static void main(String[] args) throws Exception {
        // 配置 TCP 파라미터
        TcpParameters tcpParams = new TcpParameters();
        tcpParams.setHost("192.168.1.100");
        tcpParams.setPort(502);
        
        // 创建 TCP master
        ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParams);
        master.connect();
        
        // Read and hold register(slave 1,주소 0,10 레지스터s)
        int[] registers = master.readHolding회원가입s(1, 0, 10);
        
        System.out.println("读取结果:");
        for (int i = 0; i < registers.length; i++) {
            System.out.printf("  주소 %d: %d (0x%04X)%n", i, registers[i], registers[i]);
        }
        
        // 写入单寄存器
        master.writeSingle회원가입(1, 0, 1234);
        
        master.disconnect();
    }
}

Java Modbus 库对比

库名项目状态传输模式License推荐场景
Jamod停更(SourceForge)TCP, RTU, ASCIIBSD-ish学习用途,不建议新项目
Modbus4J停更(SourceForge)TCP, UDP, RTU, ASCIIGPL需要全协议支持时
JLibModbus活跃(SourceForge)TCP, RTUApache 2.0新项目首选
ModbusPal停更TCP, RTUGPL从站模拟场景

进阶场景:用 Java 构建 Modbus 数据采集服务

在大型工业项目中,通常需要一个后台服务持续轮询数十个 Modbus 从站设备,将数据存入数据库并供上层应用查询。以下是一个基于 JLibModbus 的简化数据采集服务框架:

public class Modbus데이터Collector {
    
    // 设备配置列表
    static class DeviceConfig {
        String name;
        String ip;
        int slaveId;
        int[][] registerRanges; // {시작, count}
    }
    
    public void 시작Collecting(List<DeviceConfig> devices) {
        ScheduledExecutorService scheduler = 
            Executors.newScheduledThreadPool(devices.size());
        
        for (DeviceConfig dev : devices) {
            scheduler.scheduleAtFixedRate(() -> {
                try {
                    collectDevice데이터(dev);
                } catch (Exception e) {
                    System.err.println("采集失败: " + dev.name + " - " + e.getMessage());
                }
            }, 0, 5, TimeUnit.SECONDS); // 每 5 秒采集一次
        }
    }
    
    private void collectDevice데이터(DeviceConfig dev) throws Exception {
        TcpParameters params = new TcpParameters();
        params.setHost(dev.ip);
        params.setPort(502);
        
        ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(params);
        master.connect();
        
        for (int[] range : dev.registerRanges) {
            int[] 데이터 = master.readHolding회원가입s(dev.slaveId, range[0], range[1]);
            saveTo데이터base(dev.name, range[0], 데이터);
        }
        
        master.disconnect();
    }
    
    private void saveTo데이터base(String device, int 시작Addr, int[] 데이터) {
        // 写入时序数据库(如 InfluxDB、TDengine)或关系数据库
    }
}

总结

在 Java 生态中,JLibModbus 是当前最值得推荐的开源 Modbus 库——Apache 2.0 License(友好于商业项目)、仍在活跃开发和测试、API 设计清晰。如果你正在 Java 技术栈上开发 Modbus 相关的数据采集、设备管理或 SCADA 后端服务,JLibModbus 是首选的底层协议通信库。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC 검증 and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email 주소 will not be published. Required fields are marked *.