[ 
https://issues.apache.org/jira/browse/PLC4X-272?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17267144#comment-17267144
 ] 

Christofer Dutz commented on PLC4X-272:
---------------------------------------

Thanks for this ... on these captures I can actually see that more is happening.

I guess the major difference is that when reading only 23 items, this fits into 
one single read request without exceeding the max PDU size of 480.

The driver sees that the request would exceed the max PDU size, and splits this 
up into multiple requests ... the first being 476 bytes long (Which is ok) 
However the second request contains 40 instead of 39 items and hereby exceeds 
the max PDU size. This clearly is a bug in the driver. The driver is correctly 
pausing (there should be a 3rd request going out with 21 items after one of the 
first requests have been processed as the PLC has a Max AMQ of 2. So I guess I 
should probably figure out why it's creating the second request contain 40 
items.

For a genuine Siemens device, I would have expected it to respond with an error 
response. It seems the company producing the clone just drop the message and 
don't do any error handling.

 

> S7-Connection terminated by remote
> ----------------------------------
>
>                 Key: PLC4X-272
>                 URL: https://issues.apache.org/jira/browse/PLC4X-272
>             Project: Apache PLC4X
>          Issue Type: Bug
>          Components: Driver-S7
>    Affects Versions: 0.6.0, 0.7.0, 0.8.0
>         Environment: win10-64/jdk11and8/
>            Reporter: liuqiang
>            Priority: Major
>         Attachments: 0.8.0-SNAPSHOT-100-Items-fail.pcapng, 
> 0.8.0-SNAPSHOT-23Items-success.pcapng, fail-information.txt, 
> plc4j-0.7.0-more-than-78-REAL-item-running-information.txt, 
> plc4j-0.7.0-more-than-78-REAL-item.pcapng, 
> plc4j-0.8.0-SNAPSHOT-more-than-78-REAL-item-running-information.txt, 
> plc4j-0.8.0-SNAPSHOT-more-than-78-REAL-item.pcapng
>
>
> [main] INFO org.apache.plc4x.java.PlcDriverManager - Instantiating new PLC 
> Driver Manager with class loader 
> jdk.internal.loader.ClassLoaders$AppClassLoader@1f89ab83[main] INFO 
> org.apache.plc4x.java.PlcDriverManager - Instantiating new PLC Driver Manager 
> with class loader 
> jdk.internal.loader.ClassLoaders$AppClassLoader@1f89ab83[main] INFO 
> org.apache.plc4x.java.PlcDriverManager - Registering available 
> drivers...[main] INFO org.apache.plc4x.java.PlcDriverManager - Registering 
> driver for Protocol opcua (OPC UA (TCP))[main] INFO 
> org.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol s7 
> (Siemens S7 (Basic))[main] INFO cn.cisdi.plc.Application - Starting Thead 
> Pool...[main] INFO cn.cisdi.plc.Application - Registering 
> Config:JobConfiguration\{alias='siemens', kafkaTopic='plc4x', 
> mqttTopic='plc4x', 
> connectionString='s7://10.65.7.220?remote-rack=0&remote-slot=3&pdu-size=1024&controller-type=S7_400',
>  needFetch='true', scrapeRateMs=5000, fieldAdresses={data_1=%DB1.DBD0.0:REAL, 
> data_2=%DB1.DBD4.0:REAL, data_3=%DB1.DBD8.0:REAL, data_4=%DB1.DBD12.0:REAL, 
> data_5=%DB1.DBD16.0:REAL, data_6=%DB1.DBD20.0:REAL, data_7=%DB1.DBD24.0:REAL, 
> data_8=%DB1.DBD28.0:REAL, data_9=%DB1.DBD32.0:REAL, 
> data_10=%DB1.DBD36.0:REAL, data_11=%DB1.DBD40.0:REAL, 
> data_12=%DB1.DBD44.0:REAL, data_13=%DB1.DBD48.0:REAL, 
> data_14=%DB1.DBD52.0:REAL, data_15=%DB1.DBD56.0:REAL, 
> data_16=%DB1.DBD60.0:REAL, data_17=%DB1.DBD64.0:REAL, 
> data_18=%DB1.DBD68.0:REAL, data_19=%DB1.DBD72.0:REAL, 
> data_20=%DB1.DBD76.0:REAL, data_21=%DB1.DBD80.0:REAL, 
> data_22=%DB1.DBD84.0:REAL, data_23=%DB1.DBD88.0:REAL, 
> data_24=%DB1.DBD92.0:REAL, data_25=%DB1.DBD96.0:REAL, 
> data_26=%DB1.DBD100.0:REAL, data_27=%DB1.DBD104.0:REAL, 
> data_28=%DB1.DBD108.0:REAL, data_29=%DB1.DBD112.0:REAL, 
> data_30=%DB1.DBD116.0:REAL, data_31=%DB1.DBD120.0:REAL, 
> data_32=%DB1.DBD124.0:REAL, data_33=%DB1.DBD128.0:REAL, 
> data_34=%DB1.DBD132.0:REAL, data_35=%DB1.DBD136.0:REAL, 
> data_36=%DB1.DBD140.0:REAL, data_37=%DB1.DBD144.0:REAL, 
> data_38=%DB1.DBD148.0:REAL, data_39=%DB1.DBD152.0:REAL, 
> data_40=%DB1.DBD156.0:REAL, data_41=%DB1.DBD160.0:REAL, 
> data_42=%DB1.DBD164.0:REAL, data_43=%DB1.DBD168.0:REAL, 
> data_44=%DB1.DBD172.0:REAL, data_45=%DB1.DBD176.0:REAL, 
> data_46=%DB1.DBD180.0:REAL, data_47=%DB1.DBD184.0:REAL, 
> data_48=%DB1.DBD188.0:REAL, data_49=%DB1.DBD192.0:REAL, 
> data_50=%DB1.DBD196.0:REAL, data_51=%DB1.DBD200.0:REAL, 
> data_52=%DB1.DBD204.0:REAL, data_53=%DB1.DBD208.0:REAL, 
> data_54=%DB1.DBD212.0:REAL, data_55=%DB1.DBD216.0:REAL, 
> data_56=%DB1.DBD220.0:REAL, data_57=%DB1.DBD224.0:REAL, 
> data_58=%DB1.DBD228.0:REAL, data_59=%DB1.DBD232.0:REAL, 
> data_60=%DB1.DBD236.0:REAL, data_61=%DB1.DBD240.0:REAL, 
> data_62=%DB1.DBD244.0:REAL, data_63=%DB1.DBD248.0:REAL, 
> data_64=%DB1.DBD252.0:REAL, data_65=%DB1.DBD256.0:REAL, 
> data_66=%DB1.DBD260.0:REAL, data_67=%DB1.DBD264.0:REAL, 
> data_68=%DB1.DBD268.0:REAL, data_69=%DB1.DBD272.0:REAL, 
> data_70=%DB1.DBD276.0:REAL, data_71=%DB1.DBD280.0:REAL, 
> data_72=%DB1.DBD284.0:REAL, data_73=%DB1.DBD288.0:REAL, 
> data_74=%DB1.DBD292.0:REAL, data_75=%DB1.DBD296.0:REAL, 
> data_76=%DB1.DBD300.0:REAL, data_77=%DB1.DBD304.0:REAL, 
> data_78=%DB1.DBD308.0:REAL, data_244=%DB1.DBD972.0:REAL, 
> data_245=%DB1.DBD976.0:REAL, data_246=%DB1.DBD980.0:REAL, 
> data_247=%DB1.DBD984.0:REAL, data_248=%DB1.DBD988.0:REAL, 
> data_249=%DB1.DBD992.0:REAL, data_250=%DB1.DBD996.0:REAL, 
> data_251=%DB1.DBD1000.0:REAL, data_252=%DB1.DBD1004.0:REAL, 
> data_253=%DB1.DBD1008.0:REAL, data_254=%DB1.DBD1012.0:REAL, 
> data_255=%DB1.DBD1016.0:REAL, data_256=%DB1.DBD1020.0:REAL, 
> data_257=%DB1.DBD1024.0:REAL, data_258=%DB1.DBD1028.0:REAL, 
> data_259=%DB1.DBD1032.0:REAL, data_260=%DB1.DBD1036.0:REAL, 
> data_261=%DB1.DBD1040.0:REAL, data_262=%DB1.DBD1044.0:REAL, 
> data_263=%DB1.DBD1048.0:REAL}}[scrape-thread-1] INFO 
> cn.cisdi.plc.job.JobExecutionPLC - Fetching data for job 
> siemens[scrape-thread-1] INFO 
> org.apache.plc4x.java.transport.tcp.TcpChannelFactory - Configuring Bootstrap 
> with Configuration\{local-rack=1, local-slot=1, remote-rack=0, remot-slot=3, 
> pduSize=1024, maxAmqCaller=8, maxAmqCallee=8, 
> controllerType='S7_400'}[nioEventLoopGroup-2-1] INFO 
> org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic - S7 Driver 
> running in ACTIVE mode.[nioEventLoopGroup-2-1] WARN 
> io.netty.channel.DefaultChannelPipeline - 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: 
> 远程主机强迫关闭了一个现有的连接。 at java.base/sun.nio.ch.SocketDispatcher.read0(Native 
> Method) at 
> java.base/sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43) at 
> java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276) at 
> java.base/sun.nio.ch.IOUtil.read(IOUtil.java:233) at 
> java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223) at 
> java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:358) at 
> io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253) at 
> io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1134) at 
> io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350)
>  at 
> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148)
>  at 
> io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) 
> at 
> io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
>  at 
> io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) 
> at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) at 
> io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
>  at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 
> at 
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>  at java.base/java.lang.Thread.run(Thread.java:834)[scrape-thread-1] WARN 
> cn.cisdi.plc.job.JobExecutionPLC - Unable to scrape from 
> s7://10.65.7.220?remote-rack=0&remote-slot=3&pdu-size=1024&controller-type=S7_400
>  in job siemensorg.apache.plc4x.java.api.exceptions.PlcConnectionException: 
> org.apache.plc4x.java.api.exceptions.PlcConnectionException: 
> java.util.concurrent.ExecutionException: 
> org.apache.plc4x.java.api.exceptions.PlcIoException: Connection terminated by 
> remote at 
> org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager.getConnection(PooledPlcDriverManager.java:121)
>  at 
> org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager.getConnection(PooledPlcDriverManager.java:100)
>  at cn.cisdi.plc.job.JobExecutionPLC.run(JobExecutionPLC.java:42) at 
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
>  at 
> java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) at 
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
>  at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>  at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>  at java.base/java.lang.Thread.run(Thread.java:834)Caused by: 
> org.apache.plc4x.java.api.exceptions.PlcConnectionException: 
> java.util.concurrent.ExecutionException: 
> org.apache.plc4x.java.api.exceptions.PlcIoException: Connection terminated by 
> remote at 
> org.apache.plc4x.java.spi.connection.DefaultNettyPlcConnection.connect(DefaultNettyPlcConnection.java:110)
>  at 
> org.apache.plc4x.java.PlcDriverManager.getConnection(PlcDriverManager.java:74)
>  at 
> org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager.access$201(PooledPlcDriverManager.java:37)
>  at 
> org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager$1.create(PooledPlcDriverManager.java:89)
>  at 
> org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager$1.create(PooledPlcDriverManager.java:82)
>  at 
> org.apache.commons.pool2.BaseKeyedPooledObjectFactory.makeObject(BaseKeyedPooledObjectFactory.java:62)
>  at 
> org.apache.commons.pool2.impl.GenericKeyedObjectPool.create(GenericKeyedObjectPool.java:1073)
>  at 
> org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:348)
>  at 
> org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:271)
>  at 
> org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager.getConnection(PooledPlcDriverManager.java:115)
>  ... 8 moreCaused by: java.util.concurrent.ExecutionException: 
> org.apache.plc4x.java.api.exceptions.PlcIoException: Connection terminated by 
> remote at 
> java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
>  at 
> java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)
>  at 
> org.apache.plc4x.java.spi.connection.DefaultNettyPlcConnection.connect(DefaultNettyPlcConnection.java:101)
>  ... 17 moreCaused by: org.apache.plc4x.java.api.exceptions.PlcIoException: 
> Connection terminated by remote at 
> org.apache.plc4x.java.spi.connection.DefaultNettyPlcConnection.lambda$connect$0(DefaultNettyPlcConnection.java:92)
>  at 
> io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577)
>  at 
> io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:551)
>  at 
> io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490)
>  at 
> io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615) at 
> io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604) 
> at 
> io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104) 
> at 
> io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
>  at 
> io.netty.channel.AbstractChannel$CloseFuture.setClosed(AbstractChannel.java:1158)
>  at 
> io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:760)
>  at 
> io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:736)
>  at 
> io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:607)
>  at 
> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.closeOnRead(AbstractNioByteChannel.java:105)
>  at 
> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.handleReadException(AbstractNioByteChannel.java:127)
>  at 
> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:174)
>  at 
> io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) 
> at 
> io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
>  at 
> io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) 
> at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) at 
> io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
>  at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 
> at 
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>  ... 1 more
> Process finished with exit code -1



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to