現在、Schneider Power Logic の電気デバイスを使用しています。デバイスからデータを読み取り、システムに値を表示したいと考えています。これまでのところ、J2mod、Jamod、および Modbus4Java ライブラリを発見しました。すべての modbus4java を使用して接続し、デバイスのデータを取得しました。
実際、Master 側と Slave 側のどちらを作成するか、いまだに迷っています。私の理解に基づいて、デバイスはスレーブになり、私のシステムはマスターになります(最初の質問)。
以下はAT MY DEVICEの設定です。スレーブ モードのデバイスとそのプロトコルが Modbus RTU であることを示します。それで、ModbusRTUプロトコルを使用しているマスターアプリと通信するためのマスターアプリを作成する必要がありますか? (2問目)
- モード: スレーブ
- プロトコル: Modbus RTU
- 住所(1
- ボーレート: 38400
- パリティ: なし
以下は、マスターとして機能し、ModbusRTU プロトコルを使用する私のアプリのコードです。
public static void main(String[] args) throws ModbusTransportException, ErrorResponseException {
ModbusFactory factory = new ModbusFactory();
SerialParameters params = new SerialParameters();
params.setCommPortId("COM6");
params.setBaudRate(9600);
params.setDataBits(8);
params.setStopBits(1);
params.setParity(0);
ModbusMaster master = factory.createRtuMaster(params);
master.setTimeout(1000);
master.setRetries(0);
long start = System.currentTimeMillis();
try {
master.init();
} catch (Exception e) {
System.out.println( "Modbus Master Init Error: " + e.getMessage());
return;
}
try {
System.out.println("Reg. 1001 Value:" + master.getValue(1, RegisterRange.HOLDING_REGISTER, 3110, DataType.FOUR_BYTE_FLOAT_SWAPPED));
}
finally {
master.destroy();
}
System.out.println("Time elapsed: " + (System.currentTimeMillis() - start) + "ms");
}
これは、Modbus4Java ページで提供されているサンプル コードから取得したコードです。私が気になるもう1つのparams.setCommPortId("COM6");
ことは、そこに置くことができる「COM6」以外の値です。基本的に文字列値を受け取るためです。それで、任意の文字列値をそれに入れることができますか? そして、この特定の setCommPortID の機能は何ですか。(3問目)
Modbus4Javaのページで提供されているサンプルコードを見ると、デバイスのIPアドレスが記載されていません。しかし、私の場合、私のデバイスは IP アドレスを取得しました。また、IP アドレスはスレーブ アプリでのみ使用されます。システムはどのようにデバイスの IP アドレスを認識する必要がありますか? (4番目の質問)。
このコード スニペットを実行した後、エラーが発生しました。
安定したライブラリ
ネイティブ ライブラリ バージョン = RXTX-2.1-7
Java lib バージョン = RXTX-2.1-7
Modbus マスター初期化エラー: com.serotonin.io.serial.SerialPortException: gnu.io.NoSuchPortException
どうか、どうか、どうか私を助けてください。私はこれでほぼ1か月立ち往生しています。誰かが私を助けてくれることを本当に願っています。あらゆる種類のヘルプと提案を事前にありがとうございます。