jamod を使用して modbus に書き込むときに、奇妙な状況に遭遇しました。次の読み取りコードは完全に機能します。
public static void main(String[] args) throws Exception {
InetAddress address = InetAddress.getByName("host.somewhere");
TCPMasterConnection connection = new TCPMasterConnection(address);
connection.setPort(502);
connection.connect();
ReadMultipleRegistersRequest request = new ReadMultipleRegistersRequest(0, 1);
ReadMultipleRegistersResponse response = (ReadMultipleRegistersResponse)
executeTransaction(connection, request);
}
private static ModbusResponse executeTransaction(TCPMasterConnection connection,
ModbusRequest request)
throws ModbusIOException, ModbusSlaveException, ModbusException {
ModbusTCPTransaction transaction = new ModbusTCPTransaction(connection);
transaction.setRequest(request);
transaction.execute();
return transaction.getResponse();
}
しかし、同様の方法で書き込もうとすると失敗します (Jamod は 3 回試行し、そのたびに SocketTimeoutException が発生し、最後に ModbusException をスローします)。
public static void main(String[] args) throws Exception {
final InetAddress address = InetAddress.getByName("host.somewhere");
final TCPMasterConnection connection = new TCPMasterConnection(address);
connection.setPort(502);
connection.connect();
Register reg = new SimpleRegister(0);
WriteMultipleRegistersRequest request = new WriteMultipleRegistersRequest(0,
new Register[]{reg});
executeTransaction(connection, request);
}
はい、リクエスト オブジェクトのマルチレジスタ バージョンを使用していることは知っていますが、使用しているデバイスは機能コード 3 と 16 しかサポートしていません。
また、レジスタを書き込むための raw ソケット テスターも作成しました。しかし、両方の状況で jamod を使用すると便利です。
誰かjamodを使用した経験がある人はいますか?私が間違っていることを教えてくれるほど親切でしょうか? これは、jamod の 1.1 および 1.2rc1 バージョンの両方で発生します。それとも、これはおそらくベンダー固有の状況ですか?