Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
0.9.0
-
None
-
None
-
Windows 10; jdk1.8 32bit
Description
Note: The version is 0.9.1.
1. The document (here)https://plc4x.apache.org/users/protocols/modbus.html seems wrong. It tells me the connection string format is: "modbus-tcp:tcp://127.0.0.1:502", but my test code throws exception saying no driver until I change it to "modbus://127.0.0.1".
2. My test code writes (or reads) some value via modbus tcp every 1 second, using short tcp connection (open and close every time). The memory increases every second until out-of-memory. In process monitor I find the thread count increases 1 every time the connection opens, but never releases, althought I consider the `try-block` shall closes it automatically. In fact, I see it calls `connection.close` after the `try-block`.
Test code:
while (true) { String connectionString = "modbus://127.0.0.1"; try (PlcConnection plcConnection = new PlcDriverManager().getConnection(connectionString)) { PlcWriteRequest.Builder builder = plcConnection.writeRequestBuilder(); builder.addItem("value-1", "holding-register:1:DINT", 30000); builder.addItem("value-2", "holding-register:3:REAL", 3.14); PlcWriteRequest writeRequest = builder.build(); PlcWriteResponse response = writeRequest.execute().get(); for (String fieldName : response.getFieldNames()) { if(response.getResponseCode(fieldName) == PlcResponseCode.OK) { System.out.println("Value[" + fieldName + "]: updated"); } // Something went wrong, to output an error message instead. else { System.out.println("Error[" + fieldName + "]: " + response.getResponseCode(fieldName).name()); } } System.out.println("done"); } Thread.sleep(1000); }
It shows the connection is not cleaned properly.
I see it's more efficient to do this using long tcp connection (reuse 1 connection or use a pool). But short tcp connection should also work.