使用Jamod写入modbus

当使用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.

我还编写了原始套接字测试器来编写寄存器,据我所知,它可以正常工作.但在两种情况下使用jamod会很好.

有没有人有任何人使用jamod的经验,并且那个人是否善意告诉我做错了什么?这种情况发生在1.1和1.2rc1版本的jamod上.或者这可能是特定于供应商的情况?

解决方法:

最后我写了自己的modbus实现.我只需要支持2个不同的功能代码,因此实现很简单.

虽然后来我发现了另一个用于java的开源modbus库.我有其他人遇到同样的问题,使用modbus4j可能有所帮助.

上一篇:Modbus tcp android应用程序


下一篇:[物联网网关教程]Modbus-RTU通讯驱动