Modbus4J und Modbus4J für Java

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

Modbus4J und Modbus4J für Java

Modbus-Bibliothek im Java - Ökosystem

Java ist in der Server se iten ent wick lung der industri ellen Aut omat isierung weit ver bre itet (SC ADA - Ba ck end , M ES - D at ener fassung , industrielle Daten ver arbeit ungs diens te us w .). modbus.org Z wei Java Mod bus - Bib li oth eken werden emp f oh len : Jam od (über sch rieben) und Mod bus 4 J (über sch rieben), sowie J Lib Mod bus und Mod bus Pal . In diesem Artikel werden die noch nicht ab gede ck ten J Lib Mod bus und die Empfeh lungen zur Aus wa hl zwischen den Java - Bib li oth eken behandelt .

JLibModbus - aktiv entwickelte Java Modbus-Protokollstack

JLibModbus ist eine reine Java-Implementierung von Modbus-Protokoll - Bibliothek, die unter SourceForge gehostet wird:sourceforge.net/projects/jlibmodbus。Im Vergleich zu Jamod ist JLibModbus immer noch ein kontinuierliches Update und Testen und ein "aktiv getestetes und verbessertes" Projekt.

Funktionsmerkmale

  • Unterstützt Modbus RTU und Modbus TCP
  • Serielle Kommunikation mit jSSC (Java Simple Serial Connector) oder RXTX-Bibliothek
  • Unterstützt häufig verwendeten Funktionscode (FC01 - FC06, FC15, FC16, FC23)
  • Master - und Slave-Modus
  • Reine Java-Implementierung ohne lokale Bibliotheksabhängigkeit (außer Serien-Bibliothek)

Projektstatus

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

TCP-Client - Beispiel

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 主站
        ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParams);
        master.connect();
        
        // 读取保持寄存器(从站 1,地址 0,10 个寄存器)
        int[] registers = master.readHoldingRegisters(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.writeSingleRegister(1, 0, 1234);
        
        master.disconnect();
    }
}

Java Modbus-Bibliothek - Vergleich

BibliothekennameProjektstatusÜbertragungsmodusLizenzEmpfohlene Szenarien
JamodStoppt (SourceForge)TCP, RTU, ASCIIBSD-ishLernzweck, keine neuen Projekte empfohlen
Modbus4JStoppt (SourceForge)TCP, UDP, RTU, ASCIIGPLAktive, wenn volle Protokollunterstützung erforderlich ist
JLibModbus(SourceForge)TCP, RTUApache 2.0Neue Projektvorstellungen
ModbusPalStoppTCP, RTUGPLSlave-Stations - Simulationsszenario

Fortgeschrittene Szenarien: Erstellen von Modbus-Datenerfassungsdiensten in Java

Bei großen Industrieprojekten ist üblicherweise ein Hintergrund-Service erforderlich, der Dutzende von Modbus-Slaven kontinuierlich abfragt, Daten in Datenbanken speichert und von übergeordneten Anwendungen abfragt. Hier ein vereinfachtes Framework für Datenerfassungservice basierend auf JLibModbus:

public class ModbusDataCollector {
    
    // 设备配置列表
    static class DeviceConfig {
        String name;
        String ip;
        int slaveId;
        int[][] registerRanges; // {start, count}
    }
    
    public void startCollecting(List<DeviceConfig> devices) {
        ScheduledExecutorService scheduler = 
            Executors.newScheduledThreadPool(devices.size());
        
        for (DeviceConfig dev : devices) {
            scheduler.scheduleAtFixedRate(() -> {
                try {
                    collectDeviceData(dev);
                } catch (Exception e) {
                    System.err.println("采集失败: " + dev.name + " - " + e.getMessage());
                }
            }, 0, 5, TimeUnit.SECONDS); // 每 5 秒采集一次
        }
    }
    
    private void collectDeviceData(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[] data = master.readHoldingRegisters(dev.slaveId, range[0], range[1]);
            saveToDatabase(dev.name, range[0], data);
        }
        
        master.disconnect();
    }
    
    private void saveToDatabase(String device, int startAddr, int[] data) {
        // 写入时序数据库(如 InfluxDB、TDengine)或关系数据库
    }
}

Zusammenfassung

Im Java - Ökosystem ist JLibModbus die derzeit am meisten empfohlene Open-Source - Modbus-Bibliothek - Apache 2.0 - Lizenz (freundlich für kommerzielle Projekte), noch aktiv entwickelt und getestet, mit klarem API-Design. Wenn Sie Modbus-bezogene Datenerfassung, Geräteverwaltung oder SCADA-Backend - Dienste auf einem Java-Technologie - Stack entwickeln, ist JLibModbus die bevorzugte zugrunde liegende Protokollkommunikationsbibliothek.

Relevante Etiketten
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.