Hi Anton,

Yeaaaahhhh ... 

that brings up that I would have to kick off a release of the build tools asap 
as 0.8.0 currently requires changes in there, the recent fixes in 0.8.0 would 
have to be back ported to the 0.7 branch, I think we should instead just kick 
off a regular 0.8.0 release ... guess I'll kick off a discuss on that right 
away ;-)

Chris

Am 06.07.20, 16:18 schrieb "Julian Feinauer" <[email protected]>:

    Hi Anton,

    first, welcome here! : )

    Second, thanks fort he report, this is indeed some kind of "undefined" 
situation you run into (but we should handle it better!).

    What happens ist hat the request takes longer than our predefined internal 
timeout (I think thats 1second or only 500ms) and then the Handler 
"deregisters" and the "request-reply" pattern cannot be finished successfully.
    This also happens if you use some kind of VPN where latency is high.

    We have to come up with a solution fort hat ASAP.
    Would you mind opening an Issue in Jira, then I will try to provide a fix 
ASAP and we can discuss if we want to do a release 0.7.1 with this fix (and 
some others that were reported by the community).

    Best!
    Julian

    Am 06.07.20, 16:02 schrieb "Engman Anton" <[email protected]>:

        Hello everybody,

        I am using PLC4X to poll 29 signals from a Siemens S7-300 device,  all 
the signals are of data type REAL. Every second I send a request to the PLC 
asking for the values and then printing one of the values to the console:

        PlcConnection conn = 
driverManager.getConnection("s7:tcp://<IP>?remote-rack=0&remote-slot=1&controller-type=S7_300");
        PlcReadRequest.Builder builder = conn.readRequestBuilder();
        builder.addItem("value1", "DB.50.DBD0:REAL");
        .
        .
        .
        builder.addItem("value29", "DB.50.DBD116:REAL");
        PlcReadRequest readRequest = builder.build();

        while(true)
        {
                                  PlcReadResponse r = 
readRequest.execute().get();
                                  System.out.println(r.getObject("value1"));

                                  Thread.sleep(1000);
        }

        Everything works fine for some time, but after >50K requests or 8-12 
hours with the current polling rate at 1 second the code waits forever at the 
return value from PlcReadResponse r = readRequest.execute().get() and doesn't 
continue. I enabled Trace logging to see what's happening and every time this 
error occurs I get the following error message:

        12:56:48.107 [nioEventLoopGroup-2-1] TRACE 
o.a.plc4x.java.spi.Plc4xNettyWrapper - Checking handler 
HandlerRegistration#65120 for Object of type TPKTPacket
        12:56:48.107 [nioEventLoopGroup-2-1] TRACE 
o.a.plc4x.java.spi.Plc4xNettyWrapper - Handler HandlerRegistration#65120 has 
right expected type TPKTPacket, checking condition
        12:56:48.107 [nioEventLoopGroup-2-1] TRACE 
o.a.plc4x.java.spi.Plc4xNettyWrapper - Registration HandlerRegistration#65120 
does not match object TPKTPacket (currently wrapped to S7MessageResponseData)
        12:56:48.107 [nioEventLoopGroup-2-1] TRACE 
o.a.plc4x.java.spi.Plc4xNettyWrapper - Checking handler 
HandlerRegistration#65119 for Object of type TPKTPacket
        12:56:48.107 [nioEventLoopGroup-2-1] TRACE 
o.a.plc4x.java.spi.Plc4xNettyWrapper - Handler HandlerRegistration#65119 has 
right expected type TPKTPacket, checking condition
        12:56:48.107 [nioEventLoopGroup-2-1] TRACE 
o.a.plc4x.java.spi.Plc4xNettyWrapper - Registration HandlerRegistration#65119 
does not match object TPKTPacket (currently wrapped to S7MessageResponseData)
        12:56:48.107 [nioEventLoopGroup-2-1] TRACE 
o.a.plc4x.java.spi.Plc4xNettyWrapper - No registered handler found for message 
TPKTPacket[payload=COTPPacketData[parameters={},payload=S7MessageResponseData[tpduReference=0,parameter=S7ParameterReadVarResponse[numItems=19],payload=S7PayloadReadVarResponse[items={S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={66,61,-103,-102}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={66,65,51,51}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={65,-104,0,0}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={65,-120,0,0}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={65,-103,-103,-102}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={65,-127,-103,-102}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={65,-106,102,103}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={65,-96,0,0}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={66,-8,-26,-124}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={63,101,-95,48}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={0,0,0,0}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={63,-101,-114,57}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={68,122,0,0}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={65,-102,102,103}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={-66,109,9,123}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={0,0,0,0}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={-71,-67,-96,0}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={0,0,0,0}],S7VarPayloadDataItem[returnCode=OK,transportSize=REAL,dataLength=4,data={0,0,0,0}]}],errorClass=0,errorCode=0],eot=true,tpduRef=0]],
 using default decode method

        And this error message is the last thing that is printed to my console, 
it's like the code is going into an infinite loop or something.
        I used Wireshark to look at the packets coming from the PLC, I thought 
that maybe there's a malformed packet or something that's causing the error 
message above, but the packet looks exactly the same as the packets which are 
decoded successfully. I have also experimented with the connection string, 
using with and without the controller-type parameter, but without any 
difference.
        I've also tried to increase the polling rate, requesting the values 
every 100ms, and that will cause the above error to appear after 1-2 hours so 
it seems like the error appears based on the number of requests rather than 
some time interval.
        I have also tried to only poll for 1 signal instead of 29 but the same 
error still appears after >50K requests.
        I have a stable connection to my PLC during the entire time using an 
Ethernet cable without any significant delay.

        Anyone has any thoughts on what may cause this error?
        I would be very grateful for any kind of answers since this is causing 
an halt in my work.

        Best regards,
        Anton Engman


Reply via email to