Socket jamod WriteMultipleRegistersRequest ist keine ModBus/TCP Nachricht

TheBohne

Aktives Mitglied
Hallo ihr,
ich hoffe man kann mir hier weiterhelfen.
Ich habe schon länger gesucht konnte jedoch keine Antwort finden.
Ich möchte mittels ModBus/TCP mehrere Register beschreiben.
Dazu nutze ich jamod. Beim Ausführen meines Codes bekomme ich jedoch keine Antwort (Read Time Out) meiner Gegenstelle. Das liegt daran, dass jamod meine Nachricht als TCP schickt und nicht als Modbus/TCP.
Hier die ganze Fehlermeldung (Fehler kommt bei transaction.execute();):
Code:
java.net.SocketTimeoutException: Read timed out
   at java.net.SocketInputStream.socketRead0(Native Method)
   at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
   at java.net.SocketInputStream.read(SocketInputStream.java:170)
   at java.net.SocketInputStream.read(SocketInputStream.java:141)
   at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
   at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
   at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
   at java.io.DataInputStream.read(DataInputStream.java:149)
   at net.wimpi.modbus.io.ModbusTCPTransport.readResponse(ModbusTCPTransport.java:189)
   at net.wimpi.modbus.io.ModbusTCPTransaction.execute(ModbusTCPTransaction.java:192)

Hier Bilder von Wireshark wie es momentan aussieht:
upload_2016-7-5_13-21-20.png

Und hier ein Bild wie die Nachricht eigentlich aussehen sollte:
upload_2016-7-5_13-22-28.png

Und hier Codeschnipsel:
Code:
WriteMultipleRegistersRequest multipleRegistersRequest = new WriteMultipleRegistersRequest(startAdresse,
             register);

  ModbusResponse response = starteTransaction(multipleRegistersRequest);
Code:
private synchronized ModbusResponse starteTransaction(ModbusRequest modbusRequest) {
     modbusRequest.setUnitID(1);

     ModbusTCPTransaction transaction = new ModbusTCPTransaction();
     transaction.setConnection(this.tcpVerbindung);
     transaction.setRequest(modbusRequest);
     try {
       transaction.execute();
     } catch (ModbusException e) {
       e.printStackTrace();
     }
     return transaction.getResponse();
   }

Fehlen mir irgend welche Flags die ich erst setzen muss?
Oder was mache ich falsch...

Danke schon mal für eure Mithilfe.
 

TheBohne

Aktives Mitglied
Da leider keine Antwort kam, bin ich auf die Lib Modbus4J umgestiegen.
Hier funktioniert nun alles. Die Daten kommen zwar erst nach 200ms an aber eventuell finde ich dafür noch eine Lösung.
 

Ähnliche Java Themen

Neue Themen


Oben