Hi Chris,
thanks for your answer. I tried you suggestion, but then I got the following
message in the logs:
16:27:58.368 [main] DEBUG org.apache.plc4x.java.s7.connection.S7PlcConnection -
Unknown parameter controllerType with value S7_400
I assume you mean the parameter "controller-type" but adding this parameter
unfortunately causes no changes. Still the same error:
16:28:00.018 [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: Eine vorhandene Verbindung wurde vom Remotehost geschlossen
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:247)
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1140)
at
io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347)
at
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148)
at
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:697)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
at
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
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.base.connection.NettyPlcConnection.connect(NettyPlcConnection.java:88)
at
org.apache.plc4x.java.PlcDriverManager.getConnection(PlcDriverManager.java:73)
at test.ReadValue.main(ReadValue.java:22)
Caused by: java.util.concurrent.ExecutionException:
org.apache.plc4x.java.api.exceptions.PlcIoException: Connection terminated by
remote
at
java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
at
java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
at
org.apache.plc4x.java.base.connection.NettyPlcConnection.connect(NettyPlcConnection.java:79)
... 2 more
Caused by: org.apache.plc4x.java.api.exceptions.PlcIoException: Connection
terminated by remote
at
org.apache.plc4x.java.base.connection.NettyPlcConnection.lambda$connect$0(NettyPlcConnection.java:70)
at
io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:500)
at
io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:474)
at
io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:413)
at
io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:538)
at
io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:527)
at
io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:98)
at
io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
at
io.netty.channel.AbstractChannel$CloseFuture.setClosed(AbstractChannel.java:1156)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:758)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:734)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:605)
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:697)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
at
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
The code is very straight forward and copied from the getting started section:
public static void main(final String[] args)
{
String connectionString =
"s7://192.168.3.166/0/3?controller-type=S7_400";
try (PlcConnection plcConnection = new
PlcDriverManager().getConnection(connectionString))
{
Builder readRequest = plcConnection.readRequestBuilder();
readRequest.addItem("v1", "%DB.DB5031.0:INT");
readRequest.build().execute().whenComplete((response, throwable) ->
{
System.out.println("Value1: " + response.getInteger("v1"));
});
}
catch(PlcConnectionException e)
{
e.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
It seems the error is directly from the getConnection() method. Maybe a
wireshark helps in this case?
Freundliche Grüße aus Dingolfing
Florian Probst
SW Engineering & Development
Project Manager
DE software & control GmbH
Mengkofener Str. 21, D-84130 Dingolfing
Fon: +49 8731 3797-0; Fax: +49 8731 3797-29
Mobil: +49 176 16263624
http://www.de-gmbh.com/
Geschäftsführung:
Friedrich Steininger, Heino Migge, Onur Mubariz
Amtsgericht Landshut, HRB 4478
-----Ursprüngliche Nachricht-----
Von: Christofer Dutz [mailto:[email protected]]
Gesendet: Mittwoch, 26. Februar 2020 13:32
An: [email protected]
Betreff: Re: [S7] Connection terminated
Hi Florian,
from the log PLC4X is a little disappointed that the PLC just hangs up without
any notice.
I've had this problem with Siemens LOGO "PLC"s ... there the identification
step was causing problems.
Could you please append the following to your connection string?
?controllerType=S7_400
This will make the driver not ask the PLC what type it is ... I think this had
caused problems in the past.
If this is the same problem with your setup, then we definitely have to at
least output some helpful information.
Chris
Am 26.02.20, 10:14 schrieb "Probst, Florian"
<[email protected]<mailto:[email protected]>>:
Hello all,
we're trying to replace our old style native INAT library by using a pure
Java PLC library.
I'm trying to connect to our S7-400 PLC but the PLC terminates the
connection after the first message sent.
As URL I've used the following:
s7://192.168.3.166/0/3
Earlier we used the TSAP 0x0303 for connecting to the PLC by using a native
library. Here is the Log output:
07:54:09.976 [main] INFO org.apache.plc4x.java.PlcDriverManager -
Instantiating new PLC Driver Manager with class loader
sun.misc.Launcher$AppClassLoader@73d16e93<mailto:sun.misc.Launcher$AppClassLoader@73d16e93>
07:54:09.992 [main] INFO org.apache.plc4x.java.PlcDriverManager -
Registering available drivers...
07:54:09.992 [main] INFO org.apache.plc4x.java.PlcDriverManager -
Registering driver for Protocol s7 (Siemens S7 (Basic))
07:54:10.026 [main] DEBUG
io.netty.util.internal.logging.InternalLoggerFactory - Using SLF4J as the
default logging framework
07:54:10.032 [main] DEBUG io.netty.util.ResourceLeakDetector -
-Dio.netty.leakDetection.level: simple
07:54:10.032 [main] DEBUG io.netty.util.ResourceLeakDetector -
-Dio.netty.leakDetection.targetRecords: 4
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent -
Platform: Windows
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent0 -
-Dio.netty.noUnsafe: false
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent0 - Java
version: 8
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent0 -
sun.misc.Unsafe.theUnsafe: available
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent0 -
sun.misc.Unsafe.copyMemory: available
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent0 -
java.nio.Buffer.address: available
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent0 -
direct buffer constructor: available
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent0 -
java.nio.Bits.unaligned: available, true
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent0 -
jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to
Java9
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent0 -
java.nio.DirectByteBuffer.<init>(long, int): available
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent -
sun.misc.Unsafe: available
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent -
-Dio.netty.tmpdir: C:\Users\fp\AppData\Local\Temp (java.io.tmpdir)
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent -
-Dio.netty.bitMode: 64 (sun.arch.data.model)
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent -
-Dio.netty.maxDirectMemory: 3784310784 bytes
07:54:10.042 [main] DEBUG io.netty.util.internal.PlatformDependent -
-Dio.netty.uninitializedArrayAllocationThreshold: -1
07:54:10.058 [main] DEBUG io.netty.util.internal.CleanerJava6 -
java.nio.ByteBuffer.cleaner(): available
07:54:10.058 [main] DEBUG io.netty.util.internal.PlatformDependent -
-Dio.netty.noPreferDirect: false
07:54:10.059 [main] DEBUG io.netty.util.ResourceLeakDetectorFactory -
Loaded default ResourceLeakDetector:
io.netty.util.ResourceLeakDetector@136432db<mailto:io.netty.util.ResourceLeakDetector@136432db>
07:54:10.059 [main] DEBUG io.netty.util.internal.PlatformDependent -
org.jctools-core.MpscChunkedArrayQueue: available
07:54:10.143 [main] INFO
org.apache.plc4x.java.s7.connection.S7PlcConnection - Setting up S7 Connection
with: host-name 192.168.3.166, rack 0, slot 0, pdu-size 1024, max-amq-caller 8,
max-amq-callee 8
07:54:10.159 [main] DEBUG io.netty.channel.MultithreadEventLoopGroup -
-Dio.netty.eventLoopThreads: 16
07:54:10.176 [main] DEBUG io.netty.util.internal.InternalThreadLocalMap -
-Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
07:54:10.176 [main] DEBUG io.netty.util.internal.InternalThreadLocalMap -
-Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
07:54:10.193 [main] DEBUG io.netty.channel.nio.NioEventLoop -
-Dio.netty.noKeySetOptimization: false
07:54:10.193 [main] DEBUG io.netty.channel.nio.NioEventLoop -
-Dio.netty.selectorAutoRebuildThreshold: 512
07:54:10.275 [main] DEBUG io.netty.channel.DefaultChannelId -
-Dio.netty.processId: 9024 (auto-detected)
07:54:10.276 [main] DEBUG io.netty.util.NetUtil -
-Djava.net.preferIPv4Stack: false
07:54:10.276 [main] DEBUG io.netty.util.NetUtil -
-Djava.net.preferIPv6Addresses: false
07:54:10.933 [main] DEBUG io.netty.util.NetUtil - Loopback interface: lo
(Software Loopback Interface 1, 127.0.0.1)
07:54:10.936 [main] DEBUG io.netty.util.NetUtil - Failed to get SOMAXCONN
from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
07:54:11.609 [main] DEBUG io.netty.channel.DefaultChannelId -
-Dio.netty.machineId: 00:50:b6:ff:fe:26:ae:1f (auto-detected)
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.numHeapArenas: 16
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.numDirectArenas: 16
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.pageSize: 8192
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.maxOrder: 11
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.chunkSize: 16777216
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.tinyCacheSize: 512
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.smallCacheSize: 256
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.normalCacheSize: 64
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.maxCachedBufferCapacity: 32768
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.cacheTrimInterval: 8192
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.cacheTrimIntervalMillis: 0
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.useCacheForAllThreads: true
07:54:11.634 [main] DEBUG io.netty.buffer.PooledByteBufAllocator -
-Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
07:54:11.634 [main] DEBUG io.netty.buffer.ByteBufUtil -
-Dio.netty.allocator.type: pooled
07:54:11.634 [main] DEBUG io.netty.buffer.ByteBufUtil -
-Dio.netty.threadLocalDirectBufferSize: 0
07:54:11.634 [main] DEBUG io.netty.buffer.ByteBufUtil -
-Dio.netty.maxThreadLocalCharBufferSize: 16384
07:54:11.676 [nioEventLoopGroup-2-1] DEBUG
org.apache.plc4x.java.isotp.protocol.IsoTPProtocol - ISO Transport Protocol
Sending Connection Request
07:54:11.693 [nioEventLoopGroup-2-1] DEBUG io.netty.buffer.AbstractByteBuf
- -Dio.netty.buffer.checkAccessible: true
07:54:11.693 [nioEventLoopGroup-2-1] DEBUG io.netty.buffer.AbstractByteBuf
- -Dio.netty.buffer.checkBounds: true
07:54:11.693 [nioEventLoopGroup-2-1] DEBUG
io.netty.util.ResourceLeakDetectorFactory - Loaded default
ResourceLeakDetector:
io.netty.util.ResourceLeakDetector@68818334<mailto:io.netty.util.ResourceLeakDetector@68818334>
07:54:11.693 [nioEventLoopGroup-2-1] DEBUG io.netty.util.Recycler -
-Dio.netty.recycler.maxCapacityPerThread: 4096
07:54:11.693 [nioEventLoopGroup-2-1] DEBUG io.netty.util.Recycler -
-Dio.netty.recycler.maxSharedCapacityFactor: 2
07:54:11.693 [nioEventLoopGroup-2-1] DEBUG io.netty.util.Recycler -
-Dio.netty.recycler.linkCapacity: 16
07:54:11.693 [nioEventLoopGroup-2-1] DEBUG io.netty.util.Recycler -
-Dio.netty.recycler.ratio: 8
07:54:11.693 [nioEventLoopGroup-2-1] DEBUG
org.apache.plc4x.java.isoontcp.protocol.IsoOnTcpProtocol - ISO on TCP Message
sent
07:54:11.708 [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: Eine vorhandene Verbindung wurde vom Remotehost
geschlossen
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:247)
at
io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1140)
at
io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347)
at
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148)
at
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:697)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
at
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
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.base.connection.NettyPlcConnection.connect(NettyPlcConnection.java:88)
at
org.apache.plc4x.java.PlcDriverManager.getConnection(PlcDriverManager.java:73)
at test.ReadValue.main(ReadValue.java:22)
Caused by: java.util.concurrent.ExecutionException:
org.apache.plc4x.java.api.exceptions.PlcIoException: Connection terminated by
remote
at
java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
at
java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
at
org.apache.plc4x.java.base.connection.NettyPlcConnection.connect(NettyPlcConnection.java:79)
... 2 more
Caused by: org.apache.plc4x.java.api.exceptions.PlcIoException: Connection
terminated by remote
at
org.apache.plc4x.java.base.connection.NettyPlcConnection.lambda$connect$0(NettyPlcConnection.java:70)
at
io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:500)
at
io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:474)
at
io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:413)
at
io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:538)
at
io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:527)
at
io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:98)
at
io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
at
io.netty.channel.AbstractChannel$CloseFuture.setClosed(AbstractChannel.java:1156)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:758)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:734)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:605)
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:697)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
at
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
Any ideas why this does not work? What options can I try to make this work?
May be the rack/slot be is wrong?
Looking forward for your help!
Kind regards,
Florian