Quick update,
I managed to fix this issue, it was really a problem with the
tpudReference. The tpud was generated as Integer but later casted to short.
So the app send a request with tpudRef=65536 but got a response with
tpudRef=0 and couldn't handle it. I added this quick fix in the S7 protocol
and it has worked for over 100k exchanges, will do a long time test soon:
https://i.imgur.com/mOIu3hN.png

As I have a quite modified version from 0.7.0-SNAPSHOT, how is the
procedure to submit my work any time soon to you so you can review it and
maybe use the things you need for merging ?

BR,

Etienne

Le ven. 28 févr. 2020 à 13:59, Robinet, Etienne <[email protected]> a
écrit :

> Good afternoon,
> this is the version I am using.
> I noticed that the application blocks when the tpduReference is back to 0
> (going over the limit of Short). Do you know by any chance if this could be
> the reason?
> Was the library already designed to fetch such a number of data in a
> single run? By browsing a code I saw that this tpduRef is given by the
> AtomicIntegerwith initial value 10.
>
>
> Here the last correctly handled response:
>
>
> TPKTPacket[payload=COTPPacketData[parameters={},payload=S7MessageResponseData[tpduReference=65534,parameter=S7ParameterReadVarResponse[numItems=1],payload=S7PayloadReadVarResponse[items={S7VarPayloadDataItem[returnCode=OK,transportSize=BYTE_WORD_DWORD,dataLength=16,data={0,-61}]}],errorClass=0,errorCode=0],eot=true,tpduRef=0]]
>
> And here the response that blocks:
>
>
> TPKTPacket[payload=COTPPacketData[parameters={},payload=S7MessageResponseData[tpduReference=0,parameter=S7ParameterReadVarResponse[numItems=1],payload=S7PayloadReadVarResponse[items={S7VarPayloadDataItem[returnCode=OK,transportSize=BYTE_WORD_DWORD,dataLength=16,data={0,-61}]}],errorClass=0,errorCode=0],eot=true,tpduRef=0]]
>
>
>
>
> Le ven. 28 févr. 2020 à 13:42, Christofer Dutz <[email protected]>
> a écrit :
>
>> Exactly
>>
>> Am 28.02.20, 10:37 schrieb "Robinet, Etienne" <[email protected]>:
>>
>>     By new driver do you mean the ones from the /develop branch
>>     (0.7.0-SNAPSHOT) ?
>>
>>     Etienne
>>
>>     Le ven. 28 févr. 2020 à 10:32, Christofer Dutz <
>> [email protected]>
>>     a écrit :
>>
>>     > H Etienne,
>>     >
>>     > the old drivers were unfortunately blocking ones ... with the new
>> drivers
>>     > all requests have timeouts and will get cancelled if no responses
>> come in
>>     > in a given timeframe.
>>     >
>>     > Chris
>>     >
>>     > Am 28.02.20, 10:12 schrieb "Robinet, Etienne" <[email protected]>:
>>     >
>>     >     Well, after 1 hour it froze again. The thing is that this time
>> it does
>>     > not
>>     >     seem to be any memory leakage nor network overloading. The
>> program just
>>     >     stops, and the camel context tells me, when I shut it down,
>> that there
>>     > is 1
>>     >     inflight exchange. The programm froze at the same point as the
>> IDE app:
>>     >     when the PollingConsumer created an PlcReadRequest and waits
>> for the
>>     >     response. It is known that the receive() method of the
>> PollingConsumer
>>     > is
>>     >     blocking if no message is coming.
>>     >
>>     >     Etienne
>>     >
>>     >     Le ven. 28 févr. 2020 à 09:34, Etienne Robinet <
>> [email protected]> a
>>     > écrit :
>>     >
>>     >     > Hi there,
>>     >     >
>>     >     > I am currently testing some fix/workaround. I tried a simple
>> test
>>     > case
>>     >     > like the previous one but I moved the connection to the PLC
>> outside
>>     > the
>>     >     > while loop and only connecting again if the connection drops.
>>     >     > Without temp, I don't get memory leaks (it seems) but the IDE
>> froze
>>     > after
>>     >     > +- 60k MessageHandles.
>>     >     > But with a 100ms sleep, I managed to get some decent result.
>> I am
>>     >     > currently testing my route again, and TCP ports/ Memory seem
>> not
>>     > getting
>>     >     > overloaded/leaking!
>>     >     >
>>     >     > I changed the Camel integration by putting the PlcConnection
>> in the
>>     >     > Endpoint class with a getter that can be used by
>> Consumer/Producer
>>     > to send
>>     >     > requests. Idk if this is the correct way to do it, but it
>> seems it
>>     > kinda
>>     >     > fixed/patched for a while my problem.
>>     >     >
>>     >     > Cheers,
>>     >     >
>>     >     > Etienne
>>     >     >
>>     >     >
>>     >     >
>>     >
>>     >
>>     >
>>
>>
>>

Reply via email to