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";

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

[image: image.png]

[image: image.png]
-- 
Luiz Carlos d´Oleron

Reply via email to