Hey Cesar,
I modified my code to use CachedPlcConnectionManager but the problem
persists: the program gets stuck on the getConnection call.
This is my code now:
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 {
CachedPlcConnectionManager connectionManager = CachedPlcConnectionManager.
getBuilder(new DefaultPlcDriverManager()).build();
plcConnection = connectionManager.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 exception trace is:
[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@345965f2
[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 -
15:11:46.130938260 userEventTriggered: Multiplexor Event:
org.apache.plc4x.java.spi.events.ConnectEvent@139982de
[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@53d1d4d1(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)
[nioEventLoopGroup-2-1] INFO
org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl - Unregistered of
channel: PRIMARY
[nioEventLoopGroup-2-1] INFO
org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl -
io.netty.channel.embedded.EmbeddedEventLoop@476a35e8
[plc4x-s7ha-thread-1] INFO
org.apache.plc4x.java.s7.readwrite.protocol.S7HPlcConnection - Creating
prymary connection.
[plc4x-s7ha-thread-1] INFO
org.apache.plc4x.java.transport.tcp.TcpChannelFactory - Configuring
Bootstrap with
org.apache.plc4x.java.s7.readwrite.configuration.S7TcpTransportConfiguration@345965f2
[plc4x-s7ha-thread-1] INFO
org.apache.plc4x.java.s7.readwrite.protocol.S7HPlcConnection - Reconnecting
primary channel.
[nioEventLoopGroup-3-1] INFO
org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl - Unregistered of
channel: PRIMARY
[nioEventLoopGroup-3-1] INFO
org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl -
io.netty.channel.embedded.EmbeddedEventLoop@476a35e8
[plc4x-s7ha-thread-1] INFO
org.apache.plc4x.java.s7.readwrite.protocol.S7HPlcConnection - Creating
prymary connection.
[plc4x-s7ha-thread-1] INFO
org.apache.plc4x.java.transport.tcp.TcpChannelFactory - Configuring
Bootstrap with
org.apache.plc4x.java.s7.readwrite.configuration.S7TcpTransportConfiguration@345965f2
[plc4x-s7ha-thread-1] INFO
org.apache.plc4x.java.s7.readwrite.protocol.S7HPlcConnection - Reconnecting
primary channel.
[nioEventLoopGroup-4-1] INFO
org.apache.plc4x.java.s7.readwrite.protocol.S7HMuxImpl - Unregistered of
channel: PRIMARY
...