Ok, thanks for the fast reply, I will check the documentation and I will let you know.
Regards, S. On 21/07/2020 19:21, Christofer Dutz wrote: > Hi Stefano, > > First of all, welcome on our list... We'll do our best to help you. > > Have you tried using our connection pool? Cause this should handle the > connection state if the connection is disturbed. Also the scraper is a tool > for collecting data periodically. This in combination with the connection > pool should be what you are looking for. > > Please find the documentation to using both on our website. > > Hope that helps, > Chris > ________________________________ > Von: Stefano Bossi <stefano.bo...@gmail.com> > Gesendet: Dienstag, 21. Juli 2020 15:56 > An: Apache PLC4X <dev@plc4x.apache.org> > Betreff: Connection died after disconnection > > > Dear forum, > > I am trying to develop a simple poller for my S7 PLC ST_1200. > I need just a simple thread in java which read a value and report it, anyway > this must be robust to any problem on the network. > I mean I would like to cope with these situation: > > * PLC not responding; > * network issues; > > The software should normally read a value from the plc in 200 ms and if > something bad happen, wait for 5 second and retry to read in a normal way. > > I wrote some code but when I found a problem. > This is my code: > > public void run() { > ConfigurationDataProvider configurationDataProvider = > ConfigurationDataProvider.getInstance(); > try { > PlcConnection plcConnection = new > Client().getClient(configurationDataProvider.getPlcConnectionString()).getPlcConnection(); > PlcReadRequest.Builder requestBuilder = > plcConnection.readRequestBuilder(); > requestBuilder.addItem("pollingVariable", > configurationDataProvider.getPlcPollingVariable()); > PlcReadRequest readRequest = requestBuilder.build(); > while (true){ > if (plcConnection.isConnected()){ > try { > PlcReadResponse response = > readRequest.execute().get(CONNECTION_TIME_OUT, TimeUnit.MILLISECONDS); > if (response != null ){ > logger.debug("Polling variable: {}", > response.getPlcValue("pollingVariable")); > } else { > logger.error("No response from PLC in reading > polling variable"); > break; > } > } catch (TimeoutException timeoutException){ > logger.error("Time out Exception in polling PLC", > timeoutException); > Thread.sleep(5000); > } > > Thread.sleep(configurationDataProvider.getPollingInterval()); > } > } > > } catch (Exception e) { > logger.error("Interrupted Exception", e); > } > } > > > When I try to disconnect the cable, netty comply with an internal error and > my application dies without a way to recover. > Here are the logs: > > [ERROR] 15:33:38.830 it.fox.plcreader.Poller.run() - Time out Exception in > polling PLC > java.util.concurrent.TimeoutException: null > at java.util.concurrent.CompletableFuture.timedGet(Unknown Source) ~[?:?] > at java.util.concurrent.CompletableFuture.get(Unknown Source) ~[?:?] > at it.fox.plcreader.Poller.run(Poller.java:34) [main/:?] > Poller.java:34 > at java.lang.Thread.run(Unknown Source) [?:?] > [ERROR] 15:33:49.333 it.fox.plcreader.Poller.run() - Time out Exception in > polling PLC > java.util.concurrent.TimeoutException: null > at java.util.concurrent.CompletableFuture.timedGet(Unknown Source) ~[?:?] > at java.util.concurrent.CompletableFuture.get(Unknown Source) ~[?:?] > at it.fox.plcreader.Poller.run(Poller.java:34) [main/:?] > Poller.java:34 > at java.lang.Thread.run(Unknown Source) [?:?] > [WARN ] 15:33:54.308 > io.netty.channel.DefaultChannelPipeline.onUnhandledInboundException() - An > exceptionCaught() event was fired, and it reached at the tail of the > pipeline. It usually means the last handler in the pipeline did not handle > the exception. > java.io.IOException: Operation timed out > at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[?:?] > at sun.nio.ch.SocketDispatcher.read(Unknown Source) ~[?:?] > at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) ~[?:?] > at sun.nio.ch.IOUtil.read(Unknown Source) ~[?:?] > at sun.nio.ch.IOUtil.read(Unknown Source) ~[?:?] > at sun.nio.ch.SocketChannelImpl.read(Unknown Source) ~[?:?] > at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253) > ~[netty-buffer-4.1.47.Final.jar:4.1.47.Final] > PooledByteBuf.java:253 > at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1133) > ~[netty-buffer-4.1.47.Final.jar:4.1.47.Final] > AbstractByteBuf.java:1133 > at > io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) > ~[netty-transport-4.1.47.Final.jar:4.1.47.Final] > NioSocketChannel.java:350 > at > io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148) > [netty-transport-4.1.47.Final.jar:4.1.47.Final] > AbstractNioByteChannel.java:148 > at > io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) > [netty-transport-4.1.47.Final.jar:4.1.47.Final] > NioEventLoop.java:714 > at > io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) > [netty-transport-4.1.47.Final.jar:4.1.47.Final] > NioEventLoop.java:650 > at > io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) > [netty-transport-4.1.47.Final.jar:4.1.47.Final] > NioEventLoop.java:576 > at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) > [netty-transport-4.1.47.Final.jar:4.1.47.Final] > NioEventLoop.java:493 > at > io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) > [netty-common-4.1.47.Final.jar:4.1.47.Final] > SingleThreadEventExecutor.java:989 > at > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) > [netty-common-4.1.47.Final.jar:4.1.47.Final] > ThreadExecutorMap.java:74 > at > io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) > [netty-common-4.1.47.Final.jar:4.1.47.Final] > FastThreadLocalRunnable.java:30 > at java.lang.Thread.run(Unknown Source) [?:?] > > > Googling I found this Stack > Overflow<https://stackoverflow.com/questions/40370114/netty-an-exceptioncaught-event-was-fired-and-it-reached-at-the-tail-of-the> > thread which seems to talk about this kind of error but is too far for my > java knowledge. > > How could I let my code to never stop retrying ? > > Thanks for your wonderful work. > > Regards, > Stefano > >
signature.asc
Description: OpenPGP digital signature