Hi Luiz,

just some time ago someone reported this and I just recently found the 
root-cause of it.
https://github.com/apache/plc4x/issues/1593
Right now, I would simply ignore this message … it shouldn’t influence the 
functionality of the driver itself.

Does it work in general?

Chris


Von: Luiz doleron <dole...@gmail.com>
Datum: Freitag, 12. Juli 2024 um 17:09
An: dev@plc4x.apache.org <dev@plc4x.apache.org>
Betreff: RE: Re: PLC4J, Siemens S7-300 and MPI communication
Hi Cesar and everyone,

I'm trying to get the ODOT gateway to work with PLC4X, however, I'm getting a 
timeout WARN and the program stuck in the getConnection call.

1 - after plugging the gateway in the S7-300, I followed the instructions 
here<https://www.odotautomation.com/uploads/S7MPI-V2.0-user-manual.pdf> and set 
the IP using the NET-LINK app.
2 - The S7-300/ODOT gateway successfully replied to ping
3 - I was able to read data from the PLC using Kepware using S7/ethernet driver

However, when I tried PLC4J, I got a timeout. Any idea what I'm doing wrong?

My test code:


public static void main(String[] args) {

// System.setProperty(SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "Error");

Logger logger = LoggerFactory.getLogger(TestConnection.class);

String connectionString = 
"s7://10.10.26.88?controller-type:S7_300<http://10.10.26.88?controller-type:S7_300>";

PlcConnection plcConnection = null;

try {

plcConnection = PlcDriverManager.getDefault().getConnectionManager()

.getConnection(connectionString);



if (!plcConnection.getMetadata().isReadSupported()) {

logger.error("This connection doesn't support reading.");

return;

}

System.out.println("Success");

} catch (Exception e) {

e.printStackTrace();

} finally {

if (plcConnection != null) {

try {

plcConnection.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}



}

The log:


[main] INFO org.apache.plc4x.java.DefaultPlcDriverManager - Instantiating new 
PLC Driver Manager with class loader 
jdk.internal.loader.ClassLoaders$AppClassLoader@2cdf8d8a

[main] INFO org.apache.plc4x.java.DefaultPlcDriverManager - Registering 
available drivers...

[main] INFO org.apache.plc4x.java.DefaultPlcDriverManager - Registering driver 
for Protocol s7 (Siemens S7 (Basic))

[main] INFO org.apache.plc4x.java.transport.tcp.TcpChannelFactory - Configuring 
Bootstrap with 
org.apache.plc4x.java.s7.readwrite.configuration.S7TcpTransportConfiguration@709ba3fb

[main] INFO org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic - S7 
Driver running in ACTIVE mode.

[main] INFO org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl - 
12:01:12.590558651 userEventTriggered: Multiplexor Event: 
org.apache.plc4x.java.spi.events.ConnectEvent@5542c4ed

[nioEventLoopGroup-2-1] WARN io.netty.channel.embedded.EmbeddedChannel - More 
than one exception was raised. Will report only the first one and log others.

io.netty.handler.codec.DecoderException: 
io.netty.handler.codec.EncoderException: MessageToMessageCodec$1 must produce 
at least one message.

at 
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98)

at 
io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)

at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)

at 
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)

at 
io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)

at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)

at 
io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)

at 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)

at 
io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)

at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)

at io.netty.handler.logging.LoggingHandler.channelRead(LoggingHandler.java:280)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)

at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)

at 
org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl.decode(S7HMuxImpl.java:145)

at 
org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl.decode(S7HMuxImpl.java:1)

at 
io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81)

at 
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)

at 
io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)

at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)

at 
io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)

at 
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)

at 
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)

at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)

at 
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)

at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)

at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)

at 
io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)

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:840)

Caused by: io.netty.handler.codec.EncoderException: MessageToMessageCodec$1 
must produce at least one message.

at 
io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:99)

at 
io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:891)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:875)

at 
io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:984)

at 
io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:868)

at io.netty.handler.logging.LoggingHandler.write(LoggingHandler.java:288)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:891)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:875)

at 
io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:984)

at 
io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:868)

at 
io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:113)

at io.netty.handler.codec.ByteToMessageCodec.write(ByteToMessageCodec.java:108)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:891)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:875)

at 
io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:984)

at 
io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:868)

at 
io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:113)

at 
io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:891)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:875)

at 
io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:984)

at 
io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:868)

at 
io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:113)

at 
io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:891)

at 
io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:956)

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:1025)

at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:306)

at 
org.apache.plc4x.java.spi.internal.DefaultConversationContext.sendToWire(DefaultConversationContext.java:70)

at 
org.apache.plc4x.java.spi.internal.DefaultSendRequestContext.handle(DefaultSendRequestContext.java:107)

at 
org.apache.plc4x.java.spi.internal.DefaultSendRequestContext.handle(DefaultSendRequestContext.java:1)

at 
org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic.lambda$3(S7ProtocolLogic.java:194)

at java.base/java.util.function.Consumer.lambda$andThen$0(Consumer.java:65)

at 
org.apache.plc4x.java.spi.Plc4xNettyWrapper.decode(Plc4xNettyWrapper.java:183)

at 
io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81)

at 
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)

... 40 more

[pool-6-thread-1] WARN 
org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic - Timeout during 
Connection establishing, closing channel...

[pool-6-thread-1] INFO org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl - 
Unregistered of channel: PRIMARY

[pool-6-thread-1] WARN io.netty.channel.AbstractChannelHandlerContext - Failed 
to mark a promise as failure because it has succeeded already: 
DefaultChannelPromise@31ec571e(success)

java.lang.IllegalStateException: HashedWheelTimer.stop() cannot be called from 
TimerTask

at io.netty.util.HashedWheelTimer.stop(HashedWheelTimer.java:393)

at 
org.apache.plc4x.java.spi.netty.NettyHashTimerTimeoutManager.stop(NettyHashTimerTimeoutManager.java:63)

at org.apache.plc4x.java.spi.Plc4xNettyWrapper.close(Plc4xNettyWrapper.java:130)

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:994)

at io.netty.channel.AbstractChannel.close(AbstractChannel.java:280)

at io.netty.channel.embedded.EmbeddedChannel.close(EmbeddedChannel.java:569)

at io.netty.channel.embedded.EmbeddedChannel.close(EmbeddedChannel.java:556)

at 
org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic.lambda$4(S7ProtocolLogic.java:185)

at 
org.apache.plc4x.java.spi.Plc4xNettyWrapper.lambda$8(Plc4xNettyWrapper.java:253)

at 
org.apache.plc4x.java.spi.netty.NettyHashTimerTimeoutManager.lambda$0(NettyHashTimerTimeoutManager.java:55)

at 
io.netty.util.HashedWheelTimer$HashedWheelTimeout.run(HashedWheelTimer.java:715)

at io.netty.util.concurrent.ImmediateExecutor.execute(ImmediateExecutor.java:34)

at 
io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:703)

at 
io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:790)

at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:503)

at java.base/java.lang.Thread.run(Thread.java:840)

OS: Ubuntu 22.04
JDK: /usr/lib/jvm/java-1.17.0-openjdk-amd64

[cid:ii_lyiu0d1z0]

[cid:ii_lyiu1f6a1]
--
Luiz Carlos d´Oleron

Reply via email to