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
| Bibliothekenname | Projektstatus | Übertragungsmodus | Lizenz | Empfohlene Szenarien |
|---|---|---|---|---|
| Jamod | Stoppt (SourceForge) | TCP, RTU, ASCII | BSD-ish | Lernzweck, keine neuen Projekte empfohlen |
| Modbus4J | Stoppt (SourceForge) | TCP, UDP, RTU, ASCII | GPL | Aktive, wenn volle Protokollunterstützung erforderlich ist |
| JLibModbus | (SourceForge) | TCP, RTU | Apache 2.0 | Neue Projektvorstellungen |
| ModbusPal | Stopp | TCP, RTU | GPL | Slave-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.
Antwort veröffentlichen