I came across a curious situation when using jamod to write to modbus. The following reading code works fine:
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(); }
But an attempt to write a similar method does not work (Jamod tries 3 times, each time it encounters a SocketTimeoutException and finally throws a 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); }
Yes, I know that I use multi-disk versions of request objects, but the device I'm working with only supports function codes 3 and 16.
I also wrote a raw-socket tester to write registers, and as far as I can see, it works correctly. But it would be nice to use jamod in both situations.
Does anyone have experience using jamod and will he be kind enough to say what I'm doing wrong? This happens with jamod versions 1.1 and 1.2rc1. Or is it, perhaps, a specific situation with the seller?
source share