Another result is this: - run number 12 of 100 using order: %DB4:70:DATE, %DB4:17:USINT, %DB4:396:WSTRING(10), %DB4:140:STRING(10), %DB4:914:RAW_BYTE_ARRAY[11], %DB4:2:WORD, %DB4:16:SINT, %DB4:58:TIME, %DB4:1:BYTE, %DB4:138:WCHAR, %DB4:908:CHAR[5], %DB4:0.0:BOOL, %DB4:20:UINT, %DB4:72:TIME_OF_DAY, %DB4:50:LREAL, %DB4:18:INT, %DB4:26:UDINT, %DB4:136:CHAR, %DB4:46:REAL, %DB4:22:DINT, %DB4:4:DWORD, - Read OK (48 ms) 21:27:21.342 [plc4x-tm-thread-3] ERROR o.a.p.j.s.c.DefaultNettyPlcConnection - unknown error, close the connection java.lang.NullPointerException: Cannot invoke "io.netty.channel.ChannelPromise.setUncancellable()" because "entry.promise" is null at io.netty.channel.ChannelOutboundBuffer.addFlush(ChannelOutboundBuffer.java:160) at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:892) at io.netty.channel.embedded.EmbeddedChannel$EmbeddedUnsafe$1.flush(EmbeddedChannel.java:1158) at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1319) at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:935) at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921) at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907) at io.netty.channel.ChannelDuplexHandler.flush(ChannelDuplexHandler.java:127) at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:937) at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:957) at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:982) at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:950) at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:1000) at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:974) at org.apache.plc4x.java.spi.Plc4xNettyWrapper$1.sendToWire(Plc4xNettyWrapper.java:100) at org.apache.plc4x.java.spi.internal.DefaultSendRequestContext.handle(DefaultSendRequestContext.java:108) at org.apache.plc4x.java.spi.internal.DefaultSendRequestContext.handle(DefaultSendRequestContext.java:1) at org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic.lambda$42(S7ProtocolLogic.java:1533) at org.apache.plc4x.java.spi.transaction.RequestTransactionManager$TransactionOperation.run(RequestTransactionManager.java:225) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) 21:27:21.347 [plc4x-tm-thread-3] WARN i.n.c.AbstractChannelHandlerContext - Failed to mark a promise as failure because it has succeeded already: DefaultChannelPromise@1161d65(success) java.lang.NullPointerException: Cannot invoke "io.netty.util.concurrent.Promise.tryFailure(java.lang.Throwable)" because "p" is null at io.netty.util.internal.PromiseNotificationUtil.tryFailure(PromiseNotificationUtil.java:64) at io.netty.channel.ChannelOutboundBuffer.safeFail(ChannelOutboundBuffer.java:754) at io.netty.channel.ChannelOutboundBuffer.remove0(ChannelOutboundBuffer.java:339) at io.netty.channel.ChannelOutboundBuffer.failFlushed(ChannelOutboundBuffer.java:691) at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:733) at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:619) at io.netty.channel.embedded.EmbeddedChannel$EmbeddedUnsafe$1.close(EmbeddedChannel.java:1103) at io.netty.channel.DefaultChannelPipeline$HeadContext.close(DefaultChannelPipeline.java:1299) at io.netty.channel.AbstractChannelHandlerContext.invokeClose(AbstractChannelHandlerContext.java:755) at io.netty.channel.AbstractChannelHandlerContext.close(AbstractChannelHandlerContext.java:733) at io.netty.channel.ChannelDuplexHandler.close(ChannelDuplexHandler.java:79) at org.apache.plc4x.java.spi.Plc4xNettyWrapper.close(Plc4xNettyWrapper.java:139) at io.netty.channel.AbstractChannelHandlerContext.invokeClose(AbstractChannelHandlerContext.java:757) at io.netty.channel.AbstractChannelHandlerContext.close(AbstractChannelHandlerContext.java:733) at io.netty.channel.DefaultChannelPipeline.close(DefaultChannelPipeline.java:943) at io.netty.channel.AbstractChannel.close(AbstractChannel.java:279) at io.netty.channel.embedded.EmbeddedChannel.close(EmbeddedChannel.java:608) at io.netty.channel.embedded.EmbeddedChannel.close(EmbeddedChannel.java:592) at org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic.onDisconnect(S7ProtocolLogic.java:267) at org.apache.plc4x.java.spi.Plc4xNettyWrapper.userEventTriggered(Plc4xNettyWrapper.java:220) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:398) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:376) at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:368) at io.netty.channel.ChannelInboundHandlerAdapter.userEventTriggered(ChannelInboundHandlerAdapter.java:117) at org.apache.plc4x.java.spi.connection.DefaultNettyPlcConnection$1$1.userEventTriggered(DefaultNettyPlcConnection.java:258) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:398) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:376) at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:368) at io.netty.channel.ChannelInboundHandlerAdapter.userEventTriggered(ChannelInboundHandlerAdapter.java:117) at org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl.userEventTriggered(S7HMuxImpl.java:208) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:398) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:376) at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:368) at io.netty.channel.DefaultChannelPipeline$HeadContext.userEventTriggered(DefaultChannelPipeline.java:1375) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:396) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:376) at io.netty.channel.DefaultChannelPipeline.fireUserEventTriggered(DefaultChannelPipeline.java:862) at org.apache.plc4x.java.s7.readwrite.protocol.S7HPlcConnection.close(S7HPlcConnection.java:245) at org.apache.plc4x.java.spi.connection.DefaultNettyPlcConnection$1$2.exceptionCaught(DefaultNettyPlcConnection.java:268) at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:346) at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:325) at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:317) at io.netty.channel.ChannelInboundHandlerAdapter.exceptionCaught(ChannelInboundHandlerAdapter.java:143) at org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl.exceptionCaught(S7HMuxImpl.java:156) at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:346) at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:325) at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:317) at io.netty.channel.DefaultChannelPipeline$HeadContext.exceptionCaught(DefaultChannelPipeline.java:1324) at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:346) at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:944) at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921) at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907) at io.netty.channel.ChannelDuplexHandler.flush(ChannelDuplexHandler.java:127) at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:937) at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:957) at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:982) at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:950) at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:1000) at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:974) at org.apache.plc4x.java.spi.Plc4xNettyWrapper$1.sendToWire(Plc4xNettyWrapper.java:100) at org.apache.plc4x.java.spi.internal.DefaultSendRequestContext.handle(DefaultSendRequestContext.java:108) at org.apache.plc4x.java.spi.internal.DefaultSendRequestContext.handle(DefaultSendRequestContext.java:1) at org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic.lambda$42(S7ProtocolLogic.java:1533) at org.apache.plc4x.java.spi.transaction.RequestTransactionManager$TransactionOperation.run(RequestTransactionManager.java:225) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583)
Von: Christofer Dutz <christofer.d...@c-ware.de> Datum: Donnerstag, 22. Mai 2025 um 21:25 An: dev@plc4x.apache.org <dev@plc4x.apache.org> Betreff: AW: [DISCUSS] Should we switch the names of the S7 drivers? Also running the ManualS71200DriverTest with s7 instead of s7-light results in the following after several rounds: - run number 88 of 100 using order: %DB4:908:CHAR[5], %DB4:20:UINT, %DB4:2:WORD, %DB4:22:DINT, %DB4:914:RAW_BYTE_ARRAY[11], %DB4:72:TIME_OF_DAY, %DB4:4:DWORD, %DB4:26:UDINT, %DB4:140:STRING(10), %DB4:70:DATE, %DB4:16:SINT, %DB4:17:USINT, %DB4:138:WCHAR, %DB4:0.0:BOOL, %DB4:396:WSTRING, %DB4:136:CHAR, %DB4:50:LREAL, %DB4:58:TIME, %DB4:18:INT, %DB4:1:BYTE, %DB4:396:WSTRING(10), %DB4:140:STRING, %DB4:46:REAL, Exception in thread "main" org.opentest4j.AssertionFailedError at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:46) at org.junit.jupiter.api.Assertions.fail(Assertions.java:161) at org.apache.plc4x.test.manual.ManualTest.run(ManualTest.java:245) at org.apache.plc4x.java.s7.readwrite.ManualS71200DriverTest.main(ManualS71200DriverTest.java:114) Caused by: java.util.concurrent.ExecutionException: org.apache.plc4x.java.api.exceptions.PlcProtocolException: Error reading at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396) at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2073) at org.apache.plc4x.test.manual.ManualTest.run(ManualTest.java:193) ... 1 more Caused by: org.apache.plc4x.java.api.exceptions.PlcProtocolException: Error reading at org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic.lambda$17(S7ProtocolLogic.java:332) at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) at org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic.lambda$38(S7ProtocolLogic.java:1339) at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2194) at org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic$TransactionErrorCallback.accept(S7ProtocolLogic.java:2348) at org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic$TransactionErrorCallback.accept(S7ProtocolLogic.java:1) at org.apache.plc4x.java.spi.Plc4xNettyWrapper.lambda$8(Plc4xNettyWrapper.java:273) at org.apache.plc4x.java.spi.netty.NettyHashTimerTimeoutManager.lambda$0(NettyHashTimerTimeoutManager.java:55) at io.netty.util.HashedWheelTimer$HashedWheelTimeout.run(HashedWheelTimer.java:713) at io.netty.util.concurrent.ImmediateExecutor.execute(ImmediateExecutor.java:34) at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:701) at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:788) at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:501) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: java.util.concurrent.TimeoutException at org.apache.plc4x.java.spi.netty.NettyHashTimerTimeoutManager.lambda$0(NettyHashTimerTimeoutManager.java:54) ... 6 more Von: Christofer Dutz <christofer.d...@c-ware.de> Datum: Donnerstag, 22. Mai 2025 um 20:50 An: dev@plc4x.apache.org <dev@plc4x.apache.org> Betreff: AW: [DISCUSS] Should we switch the names of the S7 drivers? Hi Cesar, so I just changed my test connection string in ManualS71200DriverWithBlockOptimizerTest from s7-light to s7, and it constantly fails on the first request. Reading all items together in random order - run number 0 of 100 using order: %DB4:914:RAW_BYTE_ARRAY[11], %DB4:58:TIME, %DB4:46:REAL, %DB4:17:USINT, %DB4:138:WCHAR, %DB4:70:DATE, %DB4:4:DWORD, %DB4:140:STRING(200), %DB4:908:CHAR[5], %DB4:136:CHAR, %DB4:1:BYTE, %DB4:0.0:BOOL, %DB4:16:SINT, %DB4:72:TIME_OF_DAY, %DB4:2:WORD, %DB4:50:LREAL, %DB4:18:INT, %DB4:396:WSTRING(100), %DB4:26:UDINT, %DB4:20:UINT, %DB4:22:DINT, 20:48:24.259 [plc4x-app-thread-2] WARN o.a.p.j.s.r.protocol.S7ProtocolLogic - Got an error response from the PLC. This particular response code usually indicates that we sent a too large packet or would be receiving a too large one. Please report this, as this is most probably a bug. Exception in thread "main" org.opentest4j.AssertionFailedError: Tag: %DB4:914:RAW_BYTE_ARRAY[11] ==> expected: <OK> but was: <ACCESS_DENIED> at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182) at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1156) at org.apache.plc4x.test.manual.ManualTest.run(ManualTest.java:200) at org.apache.plc4x.java.s7.readwrite.ManualS71200DriverWithBlockOptimizerTest.main(ManualS71200DriverWithBlockOptimizerTest.java:114) So I guess I’ll not quite remove the light version just yet. Chris Von: Cesar Garcia <cesar.gar...@ceos.com.ve> Datum: Donnerstag, 22. Mai 2025 um 19:21 An: dev@plc4x.apache.org <dev@plc4x.apache.org> Betreff: Re: [DISCUSS] Should we switch the names of the S7 drivers? Hi Chris, You did an excellent job with the optimizer. We'll be testing it out. I'll keep you posted with any details. Thank you very much, El jue, 22 may 2025 a las 11:28, Christofer Dutz (<christofer.d...@c-ware.de>) escribió: > Hi Cesar, > > well I guess we’ll leave them both in for now and not do any renaming ... > the main difference, I guess is also the different default optimizer. > > You can currently run the S7 with the new optimizer, but you have to > explicitly tell it to do so, and the S7-Light will use the new optimizer > and you can make it use the old one, via config option. > We should probably let both run for a while and I’ll inspect if I am > seeing improvements with the full version. Right now I am hesitant to drop > the s7-light as it was such a hastle to get things runnig smoothly. > > Chris > > > Von: Cesar Garcia <cesar.gar...@ceos.com.ve> > Datum: Donnerstag, 22. Mai 2025 um 16:57 > An: dev@plc4x.apache.org <dev@plc4x.apache.org> > Betreff: Re: [DISCUSS] Should we switch the names of the S7 drivers? > Hi Chris, > > I've already tested the S7 versions and fixed a bug it was experiencing. > > I've compared both drivers (S7 and S7-light) and the failure rate is > currently the same. > Identifying the bug is quite difficult in both cases due to their > architecture and the randomness of the occurrence. > I can tell you that the bug is outside the S7Mux, so the problem isn't with > the driver's pub/sub capabilities. > > In my particular use case, a name change would affect computers that are > currently running 24/7 at a high transfer rate, so I'm very attentive to > the details. > > There are many hours of testing, and more to go, so I need to focus on one > problem, not two. > > Sorry, but -1, > > Best regards, > > El mié, 21 may 2025 a las 3:22, Christofer Dutz (< > christofer.d...@c-ware.de>) > escribió: > > > Hi all, > > > > as some of you might know, I recently introduced a „s7-light“ driver in > > the S7 which is basically a stripped down version of our normal s7 > driver. > > I did that, as I found many issues in combination with the parts that > were > > intended for the pub/sub stuff for some of the S7 300 models. > > This resolved all of my remaining issues and seems to have resolved all > > problems people I was in direct contect with and just now also the ones > > with the NiFi bug. > > > > So my question here is: Should re rename the „s7-light“ to „s7“ and > rename > > the „s7“ to something „s7-pubsub“ or alike? The reason is, that I think > > most people will try the normal „s7“ as this seems to be the place to go > > instead of the „light“ version. This could cause many people to run into > > problems. With all S7 400, 1200, 1500 and Logo models, the s7-light > > currently has all you need and all you can use. Also can you use it with > > the 300 models. Only if you want to use this pub/sub mechanism, that only > > works on S7-300 does it make a difference (feature-wise) to use the „s7“. > > > > What do you think? > > > > Chris > > > > > > -- > *CEOS Automatización, C.A.* > *GALPON SERVICIO INDUSTRIALES Y NAVALES FA, C.A.,* > *PISO 1, OFICINA 2, AV. RAUL LEONI, SECTOR GUAMACHITO,* > > *FRENTE A LA ASOCIACION DE GANADEROS,BARCELONA,EDO. ANZOATEGUI* > *Ing. César García* > > *Cel: +58 414-760.98.95* > > *Hotline Técnica SIEMENS: 0800 1005080* > > *Email: support.aan.automat...@siemens.com > <support.aan.automat...@siemens.com>* > -- *CEOS Automatización, C.A.* *GALPON SERVICIO INDUSTRIALES Y NAVALES FA, C.A.,* *PISO 1, OFICINA 2, AV. RAUL LEONI, SECTOR GUAMACHITO,* *FRENTE A LA ASOCIACION DE GANADEROS,BARCELONA,EDO. ANZOATEGUI* *Ing. César García* *Cel: +58 414-760.98.95* *Hotline Técnica SIEMENS: 0800 1005080* *Email: support.aan.automat...@siemens.com <support.aan.automat...@siemens.com>*