JavaエコシステムにおけるModbusライブラリ
Javaは、産業オートメーションのサーバーサイド開発(SCADAバックエンド、MESデータ収集、産業用データ処理サービスなど)で広く使用されています。modbus.orgでは、JLibModbusやModbusPalに加えて、Jamod(カバー済み)とModbus 4 J(カバー済み)の2つのJava Modbusライブラリを推奨している。この記事では、まだカバーしていないJLib ModbusとJavaライブラリ間の選択の推奨事項に焦点を当てます。
JLib Modbus-活発に開発されたJava Modbusプロトコルスタック
JLib Modbusは、SourceForgeでホストされている純粋なJava実装Modbusプロトコルライブラリです。sourceforge.net/projects/jlibmodbus。JLib ModbusはJamodとは対照的に継続的に更新されテストされており、“アクティブにテストされ改善された”プロジェクトである。
機能性の特徴
- Modbus RTUとModbus TCPのサポート
- シリアルインタフェースはjSSC(Java Simple Serial Connector)またはRXTXライブラリで実装されている。
- 常用機能コード(FC01-FC06、FC15、FC16、FC 23)をサポートする
- マスターとスレーブの2種類
- ローカルライブラリ依存のない純粋なJava実装(シリアルライブラリを除く)
Maven依存関係
<!-- JLib ModbusのMaven統合の例-->
<依存関係は>
<groupId com.intelligt.modbus/groupId>
<aractId jlibmod/aractId>
<バージョン1.2.7/バージョン>
</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;
tParams.setHost "192.168.1.100";
tParams.setPort 502;
//TCPマスターの作成
ModbusMaster = 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.f "ロードアドレス%d % d 0x % 04X %n" i registers [i] registers [i];
}
//単一レジスタへの書き込み
master.writeSingleRegister 1 0 1234;
master.disconnect;
}
}Java Modbusライブラリの比較
| クワの名前 | プロジェクトのステータス | トランスポートモード | ライセンスは | おすすめシーン。 |
|---|---|---|---|---|
| Jamod | StopSourceForge | TCP, RTU, ASCII | BSD-ish | 学習目的、新規プロジェクトは推奨しない |
| Modbus4J | StopSourceForge | TCP, UDP, RTU, ASCII | GPL | 完全なサポートが必要な場合 |
| JLibModbus | アクティブSourceForge | TCP, RTU | Apache 2.0 | 新規プロジェクトの優先順位 |
| ModbusPal | もっと止めろ | TCP, RTU | GPL | ステーションからのシミュレーションシーン |
高度なシナリオ:JavaでModbusデータ収集サービスを構築する
大規模な産業プロジェクトでは、バックエンドサービスが数十台のModbusスレーブデバイスを常時ポーリングし、データベースにデータを保存し、上位アプリケーションにクエリを提供する必要があります。JLib Modbusに基づく簡素化されたデータ収集サービスフレームワークを以下に示します。
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)或リレーショナルデータベース
}
}概要まとめ
Javaエコシステムでは、JLib Modbusは現在最も推奨されるオープンソースのModbusライブラリです。Apache 2.0ライセンス(商用プロジェクトに優しい)、活発な開発とテスト、明確なAPI設計です。Modbus関連のデータ収集、デバイス管理、またはJavaスタック上でSCADAバックエンドサービスを開発している場合、JLib Modbusは推奨される基盤プロトコルCommunicationライブラリです。
Leave a Reply