- 1. Java 生态中的 Modbus 库
- 2. JLibModbus —— 活跃开发的 Java Das Modbus-Protokoll栈
- 3. FunktionEigenschaften
- 4. Maven 依赖
- 5. TCP 客户端Beispiel
- 6. Java Modbus 库对比
- 7. 进阶Szene:用 Java 构建 Modbus Datenerfassung服务
- 8. 总结
Java 生态中的 Modbus 库
Java 在Industrielle AutomatisierungDer Server端开发中有着广泛的应用(SCADA 后端、MES Datenerfassung、工业Daten处理服务等)。modbus.org 推荐了两个 Java Modbus 库——Jamod(已覆盖)和 Modbus4J(已覆盖),此外还有 JLibModbus 和 ModbusPal 等。本文重点介绍尚未覆盖的 JLibModbus 以及各 Java 库之间的Empfehlungen wählen。
JLibModbus —— 活跃开发的 Java Das Modbus-Protokoll栈
JLibModbus 是一个纯 Java 实现的 Das Modbus-Protokoll库,托管在 SourceForge:sourceforge.net/projects/jlibmodbus。与 Jamod 相比,JLibModbus 仍在持续更新和测试,是一个”actively tested and improved”的项目。
FunktionEigenschaften
- 支持 Modbus RTU 和 Modbus TCP
- Serielle Kommunikation用 jSSC(Java Simple Serial Connector)或 RXTX 库实现
- 支持常用Funktionscode(FC01-FC06、FC15、FC16、FC23)
- Master 和 Slave 两种模式
- 纯 Java 实现,无本地库依赖(Die Serie库除外)
Maven 依赖
<!-- JLibModbus 的 Maven 集成Beispiel -->
<dependency>
<groupId>com.intelligt.modbus</groupId>
<artifactId>jlibmodbus</artifactId>
<version>1.2.9.7</version>
</dependency>
TCP 客户端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 Parameter
TcpParameters tcpParams = new TcpParameters();
tcpParams.setHost("192.168.1.100");
tcpParams.setPort(502);
// 创建 TCP Hauptstation
ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParams);
master.connect();
// Lesen und halten Register(Von der Station 1,Adresse 0,10 ein Register.)
int[] registers = master.readHoldingRegisters(1, 0, 10);
System.out.println("LesenErgebnis:");
for (int i = 0; i < registers.length; i++) {
System.out.printf(" Adresse %d: %d (0x%04X)%n", i, registers[i], registers[i]);
}
// 写入单Register.
master.writeSingleRegister(1, 0, 1234);
master.disconnect();
}
}
Java Modbus 库对比
| 库名 | 项目Status | 传输模式 | Lizenz | 推荐Szene |
|---|---|---|---|---|
| Jamod | 停更(SourceForge) | TCP, RTU, ASCII | BSD-ish | 学习用途,不建议新项目 |
| Modbus4J | 停更(SourceForge) | TCP, UDP, RTU, ASCII | GPL | 需要全Vereinbarung支持时 |
| JLibModbus | 活跃(SourceForge) | TCP, RTU | Apache 2.0 | 新项目首选 |
| ModbusPal | 停更 | TCP, RTU | GPL | Von der Station模拟Szene |
进阶Szene:用 Java 构建 Modbus Datenerfassung服务
在大型工业项目中,通常需要一个后台服务持续轮询数十个 Modbus Von der StationAusrüstung,将Daten存入Daten库并供上层应用查询。以下是一个基于 JLibModbus 的简化Datenerfassung服务框架:
public class ModbusDataCollector {
// Ausrüstung配置列表
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) {
// 写入时序Daten库(如 InfluxDB、TDengine)或关系Daten库
}
}
总结
在 Java 生态中,JLibModbus 是gegenwärtig最值得推荐的开源 Modbus 库——Apache 2.0 Lizenz(友好于商业项目)、仍在活跃开发和测试、API 设计清晰。如果你正在 Java Techniken栈上开发 Modbus Related的Datenerfassung、Ausrüstung管理或 SCADA 后端服务,JLibModbus 是首选的底层VereinbarungKommunikation库。
Antwort veröffentlichen