Hi, thanks for the fast reply, here's a link to the dump (was polling every 5s) https://drive.google.com/file/d/14d21onEG_D8-dPCgAu6RBL3dzZMN8oqN/view?usp=sharing
Etienne On 2020/02/21 14:53:26, Christofer Dutz <[email protected]> wrote: > Hi Etienne, > > that error is coming from the S7 optimizer which takes care of splitting up > large plc4x requests into smaller ones, depending on the PDU size negotiated > with the PLC. > > Could you please do a wireshark dump of the communication and send that to me > (this list doesn't accept attachments) ... or you upload it to some file > sharing service and post a link here. > > Chris > > > > Am 21.02.20, 15:30 schrieb "Etienne Robinet" <[email protected]>: > > Hi, > > after getting these results on reading fom the PLC, I tried writing. > After some test I managed to send a write request but here's what I am > getting as error: > > java.util.concurrent.ExecutionException: > java.lang.ArrayIndexOutOfBoundsException: arraycopy: last source index 1 out > of bounds for byte[0] > at > java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395) > ~[?:?] > at > java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999) ~[?:?] > at > org.apache.plc4x.camel.Plc4XProducer.process(Plc4XProducer.java:68) ~[?:?] > at > org.apache.plc4x.camel.Plc4XProducer.process(Plc4XProducer.java:86) ~[?:?] > at > org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148) > ~[!/:2.24.2] > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) > [!/:2.24.2] > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) > [!/:2.24.2] > at org.apache.camel.processor.Pipeline.process(Pipeline.java:138) > [!/:2.24.2] > at org.apache.camel.processor.Pipeline.process(Pipeline.java:101) > [!/:2.24.2] > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) > [!/:2.24.2] > at > org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:197) > [!/:2.24.2] > at > org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:79) > [!/:2.24.2] > at java.util.TimerThread.mainLoop(Timer.java:556) [?:?] > at java.util.TimerThread.run(Timer.java:506) [?:?] > Caused by: java.lang.ArrayIndexOutOfBoundsException: arraycopy: last > source index 1 out of bounds for byte[0] > at java.lang.System.arraycopy(Native Method) ~[?:?] > at > org.apache.plc4x.java.s7.netty.strategies.DefaultS7MessageProcessor.processNonBooleanWriteVarParameter(DefaultS7MessageProcessor.java:309) > ~[?:?] > at > org.apache.plc4x.java.s7.netty.strategies.DefaultS7MessageProcessor.processWriteVarParameter(DefaultS7MessageProcessor.java:226) > ~[?:?] > at > org.apache.plc4x.java.s7.netty.strategies.DefaultS7MessageProcessor.processRequest(DefaultS7MessageProcessor.java:98) > ~[?:?] > at > org.apache.plc4x.java.s7.netty.S7Protocol.write(S7Protocol.java:178) ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:716) > ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:708) > ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:791) > ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:701) > ~[?:?] > at > io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:112) > ~[?:?] > at > io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) > ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:716) > ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:708) > ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext.access$1700(AbstractChannelHandlerContext.java:56) > ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.write(AbstractChannelHandlerContext.java:1102) > ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask.write(AbstractChannelHandlerContext.java:1149) > ~[?:?] > at > io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.run(AbstractChannelHandlerContext.java:1073) > ~[?:?] > at > io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) > ~[?:?] > at > io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:416) > ~[?:?] > at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:515) > ~[?:?] > 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:834) ~[?:?] > > Any ideas on that? > Here is the route I built: > > <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" > default-activation="lazy"> > <camelContext id="S7-PLC-Context" > xmlns="http://camel.apache.org/schema/blueprint" streamCache="true" > > <route> > <from uri="timer://foo?fixedRate=true&period=5000" /> > <setHeader headerName="fieldName"> > <constant>default</constant> > </setHeader> > <setHeader headerName="fieldQuery"> > <constant>%DB1:4.0:STRING</constant> > </setHeader> > <setBody > > <simple>Hello</simple> > </setBody> > <log message=" Sending to PLC: ${body} at > ${date:now:HH:mm:ss}" loggingLevel="INFO" /> > <to uri="plc4x:s7://192.168.178.10/0/1" /> > </route> > </camelContext> > </blueprint> > > > Etienne > On 2020/02/20 07:50:39, Julian Feinauer <[email protected]> > wrote: > > Thank you Etienne, I will try to reproduce the issue and have a look. > > But dont know when I will find the time as I'm currently travelling : / > > > > Julian > > > > Am 19.02.20, 14:06 schrieb "Etienne Robinet" <[email protected]>: > > > > Hi, > > I started the Jira issue: > https://issues.apache.org/jira/browse/PLC4X-177 > > Using this XML: > > > > <route> > > <from uri="timer://foo?fixedRate=true&period=1000"/> > > <pollEnrich> > > > <constant>plc4x:s7://192.168.178.10/0/1?address=%MW102:INT</constant> > > </pollEnrich> > > <log message=" Sending ${body}" loggingLevel="INFO" /> > > <to uri="mock:test?retainLast=10" /> > > > > > > > > </route> > > > > it creates a PollingConsumer and reads every 1s. The problem is > after every read, I get this warning > > > > 14:01:12.850 WARN [nioEventLoopGroup-2523-1] 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: An existing connection was forcibly closed by > the remote host > > 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:276) > ~[?:?] > > at sun.nio.ch.IOUtil.read(IOUtil.java:233) ~[?:?] > > at sun.nio.ch.IOUtil.read(IOUtil.java:223) ~[?:?] > > at > sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:358) ~[?:?] > > at > io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:247) > ~[!/:4.1.39.Final] > > at > io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1140) > ~[!/:4.1.39.Final] > > at > io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347) > ~[!/:4.1.39.Final] > > at > io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148) > [!/:4.1.39.Final] > > at > io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:697) > [!/:4.1.39.Final] > > at > io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632) > [!/:4.1.39.Final] > > at > io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549) > [!/:4.1.39.Final] > > at > io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511) [!/:4.1.39.Final] > > at > io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918) > [!/:4.1.39.Final] > > at > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) > [!/:4.1.39.Final] > > at > io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) > [!/:4.1.39.Final] > > at java.lang.Thread.run(Thread.java:834) [?:?] > > > > Seems like the connection is closed then opened again every time? > Here you can see that I manage to get the data tho: > https://i.imgur.com/K6TTwxA.png > > > > Etienne > > On 2020/02/19 12:20:40, Julian Feinauer > <[email protected]> wrote: > > > Hi Etienne, > > > > > > thanks fort he update. > > > I think the Camel integration was never really used, so it could > be a bit unhandy, so to say : ) > > > Probably you create an Issue in Jira > https://issues.apache.org/jira/projects/PLC4X/issues where we track all > activites and can help you with improvements. > > > > > > Best > > > Julian > > > > > > Am 19.02.20, 12:50 schrieb "Etienne Robinet" <[email protected]>: > > > > > > Hi all, > > > quick update, it worked on Camel inside Karaf with Julian's > code. I managed to read from output, memento and datablock wit hthe correct > adress input: > > > > > > <from > uri="plc4x:s7://192.168.178.10/0/1?address=%25DB1:4.0:STRING"/> > > > -"%25" gets encoded as "%" in XML > > > -I fetch in the DB1 at byte 4 starting at his bit 0 and the > data I want is a STRING. > > > -To read a memento, this also worked: address+%25MW102:INT > > > > > > Now I am going to investigate the polling consumer, as I want > to fetch the data from the PLC at a polling interval. > > > > > > Etienne > > > On 2020/02/18 16:49:31, Etienne Robinet <[email protected]> > wrote: > > > > I managed to get the tool working. By that I mean I got to > to a read on my PLC, but seems like the connection is crashing afterwards. > > > > 17:46:56.556 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Instantiating new PLC Driver Manager > with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@78308db1 > > > > 17:46:56.563 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering available drivers... > > > > 17:46:56.579 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol s7 > (Siemens S7 (Basic)) > > > > 17:46:56.588 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol ab-eth > (Allen Bradley ETH) > > > > 17:46:56.628 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol ads > (Beckhoff Twincat ADS) > > > > 17:46:56.638 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol eip > (EtherNet/IP (TCP)) > > > > 17:46:56.655 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol modbus > (Modbus (TCP / Serial)) > > > > 17:46:56.723 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol opcua > (OPC UA (TCP)) > > > > 17:46:56.736 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol test > (PLC4X Test Protocol) > > > > 17:46:57.059 [main] INFO > o.a.p.j.s.connection.S7PlcConnection - Setting up S7 Connection with: > host-name 192.168.178.10, rack 0, slot 1, pdu-size 1024, max-amq-caller 8, > max-amq-callee 8 > > > > 17:46:58.758 [nioEventLoopGroup-2-1] INFO > o.a.plc4x.java.s7.netty.S7Protocol - S7Connection established pdu-size 960, > max-amq-caller 3, max-amq-callee 3 > > > > 17:46:58.776 [nioEventLoopGroup-2-1] INFO > o.a.plc4x.java.s7.netty.S7Protocol - Successfully connected to S7: S7_1500 > wit PDU 960 > > > > 17:46:58.800 [main] INFO o.a.p.j.e.helloplc4x.HelloPlc4x - > Synchronous request ... > > > > 17:46:58.836 [main] INFO o.a.p.j.e.helloplc4x.HelloPlc4x - > Value[value-0]: true > > > > 17:46:58.836 [main] INFO o.a.p.j.e.helloplc4x.HelloPlc4x - > Asynchronous request ... > > > > 17:46:58.838 [nioEventLoopGroup-2-1] INFO > o.a.p.j.e.helloplc4x.HelloPlc4x - Value[value-0]: true > > > > 17:46:58.844 [nioEventLoopGroup-2-1] WARN > i.n.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: An existing connection was forcibly > closed by the remote host > > > > at java.base/sun.nio.ch.SocketDispatcher.read0(Native > Method) > > > > at > java.base/sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43) > > > > at > java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276) > > > > at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:233) > > > > at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223) > > > > at > java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:358) > > > > 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.base/java.lang.Thread.run(Thread.java:834) > > > > Disconnected from the target VM, address: > '127.0.0.1:61672', transport: 'socket' > > > > > > > > Process finished with exit code 0 > > > > > > > > This did the trick: I had o also enable PUT/GET on my PLC > (via TIA Portal). > > > > Etienne > > > > On 2020/02/18 14:08:11, Etienne Robinet <[email protected]> > wrote: > > > > > Hi, I tried the HelloPLC4X Tool, but it seems like he > gets stuck. I'm still not sure about the arguments I am passing, here's the > log > > > > > > > > > > 15:05:42.838 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Instantiating new PLC Driver Manager > with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@78308db1 > > > > > 15:05:42.874 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering available drivers... > > > > > 15:05:42.892 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol s7 > (Siemens S7 (Basic)) > > > > > 15:05:42.899 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol ab-eth > (Allen Bradley ETH) > > > > > 15:05:42.933 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol ads > (Beckhoff Twincat ADS) > > > > > 15:05:42.941 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol eip > (EtherNet/IP (TCP)) > > > > > 15:05:42.956 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol modbus > (Modbus (TCP / Serial)) > > > > > 15:05:42.980 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol opcua > (OPC UA (TCP)) > > > > > 15:05:43.018 [main] INFO > o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol test > (PLC4X Test Protocol) > > > > > 15:05:43.553 [main] INFO > o.a.p.j.s.connection.S7PlcConnection - Setting up S7 Connection with: > host-name 192.168.178.10, rack 0, slot 1, pdu-size 1024, max-amq-caller 8, > max-amq-callee 8 > > > > > 15:05:45.281 [nioEventLoopGroup-2-1] INFO > o.a.plc4x.java.s7.netty.S7Protocol - S7Connection established pdu-size 960, > max-amq-caller 3, max-amq-callee 3 > > > > > 15:05:45.299 [nioEventLoopGroup-2-1] INFO > o.a.plc4x.java.s7.netty.S7Protocol - Successfully connected to S7: S7_1500 > wit PDU 960 > > > > > 15:05:45.321 [main] INFO o.a.p.j.e.helloplc4x.HelloPlc4x > - Synchronous request ... <-----STUCKED > > > > > > > > > > > > > > > And here are the arguments I am passing: > > > > > --connection-string s7://192.168.178.10/0/1 > --field-addresses %DB2:1.0:INT[1] > > > > > > > > > > I also subscribed to the list ;-) > > > > > > > > > > On 2020/02/18 13:28:24, Julian Feinauer > <[email protected]> wrote: > > > > > > Hi Etienne, > > > > > > > > > > > > first, you should try to just access it with the > HelloPlc4X Tool, just to check that everything works. > > > > > > And Second, please subscribe to the mailing list, > otherwise all your mails have to go through moderation : ) > > > > > > > > > > > > Julian > > > > > > > > > > > > Am 18.02.20, 14:22 schrieb "Etienne Robinet" > <[email protected]>: > > > > > > > > > > > > Hi Julian, thanks for the fast reply! > > > > > > > > > > > > The route seems to be started, but I try to put the > body in log (to check) but with no sucess. Here is what I get with your code > > > > > > > > > > > > https://i.imgur.com/biB9ZpW.png > > > > > > > > > > > > After checking the code a bit, I tried to adapt my > route. I am trying to access a DB (number 2) on my PLC which has a > String(Hello) and an Int(5). I then try to show the body of the component on > the log to verify. Maybe my syntax of uri is again not correct? > > > > > > > > > > > > <from > uri="plc4x:s7://192.168.178.10/0/1?address=%25DB2:2.0:STRING[1]&dataType=java.lang.String"/> > > > > > > <log message=" Sending ${body}" > loggingLevel="INFO" /> > > > > > > <to uri="mock:test?retainLast=10" /> > > > > > > > > > > > > On 2020/02/18 12:28:53, Julian Feinauer > <[email protected]> wrote: > > > > > > > Hi Etienne, > > > > > > > > > > > > > > fort he sake of easiness... could you do a short > test if it works, when you Replace the Content of PLC4XConsumer.java with the > following: > > > > > > > > > > > > > > ``` > > > > > > > /* > > > > > > > Licensed to the Apache Software Foundation (ASF) > under one > > > > > > > or more contributor license agreements. See the > NOTICE file > > > > > > > distributed with this work for additional > information > > > > > > > regarding copyright ownership. The ASF licenses > this file > > > > > > > to you under the Apache License, Version 2.0 (the > > > > > > > "License"); you may not use this file except in > compliance > > > > > > > with the License. You may obtain a copy of the > License at > > > > > > > > > > > > > > http://www.apache.org/licenses/LICENSE-2.0 > > > > > > > > > > > > > > Unless required by applicable law or agreed to > in writing, > > > > > > > software distributed under the License is > distributed on an > > > > > > > "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS > OF ANY > > > > > > > KIND, either express or implied. See the > License for the > > > > > > > specific language governing permissions and > limitations > > > > > > > under the License. > > > > > > > */ > > > > > > > package org.apache.plc4x.camel; > > > > > > > > > > > > > > import org.apache.camel.*; > > > > > > > import org.apache.camel.spi.ExceptionHandler; > > > > > > > import > org.apache.camel.support.LoggingExceptionHandler; > > > > > > > import org.apache.camel.support.ServiceSupport; > > > > > > > import > org.apache.camel.util.AsyncProcessorConverterHelper; > > > > > > > import org.apache.plc4x.java.api.PlcConnection; > > > > > > > import > org.apache.plc4x.java.api.exceptions.PlcException; > > > > > > > import > org.apache.plc4x.java.api.messages.PlcSubscriptionResponse; > > > > > > > import > org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest; > > > > > > > import > org.apache.plc4x.java.api.messages.PlcUnsubscriptionResponse; > > > > > > > import org.slf4j.Logger; > > > > > > > import org.slf4j.LoggerFactory; > > > > > > > > > > > > > > import java.util.Collection; > > > > > > > import java.util.concurrent.*; > > > > > > > > > > > > > > public class Plc4XConsumer extends ServiceSupport > implements Consumer { > > > > > > > private static final Logger LOGGER = > LoggerFactory.getLogger(Plc4XConsumer.class); > > > > > > > > > > > > > > private Plc4XEndpoint endpoint; > > > > > > > private AsyncProcessor processor; > > > > > > > private ExceptionHandler exceptionHandler; > > > > > > > private PlcConnection plcConnection; > > > > > > > private String fieldQuery; > > > > > > > private Class<?> dataType; > > > > > > > private PlcSubscriptionResponse > subscriptionResponse; > > > > > > > > > > > > > > private ScheduledExecutorService > executorService = Executors.newSingleThreadScheduledExecutor(); > > > > > > > private ScheduledFuture<?> future; > > > > > > > > > > > > > > public Plc4XConsumer(Plc4XEndpoint endpoint, > Processor processor) throws PlcException { > > > > > > > this.endpoint = endpoint; > > > > > > > this.dataType = endpoint.getDataType(); > > > > > > > this.processor = > AsyncProcessorConverterHelper.convert(processor); > > > > > > > this.exceptionHandler = new > LoggingExceptionHandler(endpoint.getCamelContext(), getClass()); > > > > > > > String plc4xURI = > endpoint.getEndpointUri().replaceFirst("plc4x:/?/?", ""); > > > > > > > this.plcConnection = > endpoint.getPlcDriverManager().getConnection(plc4xURI); > > > > > > > this.fieldQuery = endpoint.getAddress(); > > > > > > > } > > > > > > > > > > > > > > @Override > > > > > > > public String toString() { > > > > > > > return "Plc4XConsumer[" + endpoint + "]"; > > > > > > > } > > > > > > > > > > > > > > @Override > > > > > > > public Endpoint getEndpoint() { > > > > > > > return endpoint; > > > > > > > } > > > > > > > > > > > > > > public ExceptionHandler getExceptionHandler() > { > > > > > > > return exceptionHandler; > > > > > > > } > > > > > > > > > > > > > > public void > setExceptionHandler(ExceptionHandler exceptionHandler) { > > > > > > > this.exceptionHandler = exceptionHandler; > > > > > > > } > > > > > > > > > > > > > > @Override > > > > > > > protected void doStart() throws > InterruptedException, ExecutionException { > > > > > > > // TODO: Is it correct to only support > one field? > > > > > > > future = executorService.schedule(() -> { > > > > > > > plcConnection.readRequestBuilder() > > > > > > > .addItem("default", fieldQuery) > > > > > > > .build() > > > > > > > .execute() > > > > > > > .thenAccept(response -> { > > > > > > > LOGGER.debug("Received {}", > response); > > > > > > > try { > > > > > > > Exchange exchange = > endpoint.createExchange(); > > > > > > > > exchange.getIn().setBody(unwrapIfSingle(response.getAllObjects("default"))); > > > > > > > > processor.process(exchange); > > > > > > > } catch (Exception e) { > > > > > > > > exceptionHandler.handleException(e); > > > > > > > } > > > > > > > }); > > > > > > > }, 3, TimeUnit.SECONDS); > > > > > > > } > > > > > > > > > > > > > > @Override > > > > > > > protected void doStop() throws > InterruptedException, ExecutionException, TimeoutException { > > > > > > > // First stop the polling process > > > > > > > if (future != null) { > > > > > > > future.cancel(true); > > > > > > > } > > > > > > > // TODO: Handle the response ... > > > > > > > try { > > > > > > > plcConnection.close(); > > > > > > > } catch (Exception e) { > > > > > > > LOGGER.error("Error closing > connection", e); > > > > > > > } > > > > > > > } > > > > > > > > > > > > > > private Object unwrapIfSingle(Collection > collection) { > > > > > > > if (collection.isEmpty()) { > > > > > > > return null; > > > > > > > } > > > > > > > if (collection.size() == 1) { > > > > > > > return collection.iterator().next(); > > > > > > > } > > > > > > > return collection; > > > > > > > } > > > > > > > > > > > > > > } > > > > > > > ``` > > > > > > > > > > > > > > Julian > > > > > > > > > > > > > > > > > > > > > Am 18.02.20, 13:22 schrieb "Julian Feinauer" > <[email protected]>: > > > > > > > > > > > > > > Hi Etienne, > > > > > > > > > > > > > > oh, sorry, indeed. The Code in the Camel > module is right, but does not work for Siemens S7. > > > > > > > Let me try to write you an updated version in > another branch ASAP then you can check it. > > > > > > > > > > > > > > Sorry! > > > > > > > Julian > > > > > > > > > > > > > > Am 18.02.20, 12:56 schrieb "Etienne Robinet" > <[email protected]>: > > > > > > > > > > > > > > I just cloned the rel/0.6 branch from > git, until now I didn't change anything. > > > > > > > Regards,, > > > > > > > Etienne > > > > > > > > > > > > > > On 2020/02/18 11:10:39, Julian Feinauer > <[email protected]> wrote: > > > > > > > > Did you post your code somewhere? I > cant find it.. just post it somewhere and I will have a look! > > > > > > > > > > > > > > > > Julian > > > > > > > > > > > > > > > > Am 18.02.20, 11:28 schrieb "Etienne > Robinet" <[email protected]>: > > > > > > > > > > > > > > > > Hi Julian, > > > > > > > > thanks for the advice, but where > should I change the code to apply your modification? Is it in the doStart() > methode of de PLC4XConsumer? > > > > > > > > Regards, > > > > > > > > > > > > > > > > Etienne > > > > > > > > > > > > > > > > On 2020/02/18 08:55:22, Julian > Feinauer <[email protected]> wrote: > > > > > > > > > Hi Etienne, > > > > > > > > > > > > > > > > > > thank you for your investigation. > > > > > > > > > I just locked at your log and it > seems that connection works fine and some messages are exchanged BUT you try > to subscribe to a Value which is currently not supported. > > > > > > > > > Try to just use the > "readRequestBuilder().addItem("", "").build().execute().get()" approach to > send a single request, that should work. > > > > > > > > > > > > > > > > > > Best > > > > > > > > > Julian > > > > > > > > > > > > > > > > > > Am 18.02.20, 09:39 schrieb > "Etienne Robinet" <[email protected]>: > > > > > > > > > > > > > > > > > > Hello, > > > > > > > > > with the help of some > colleague we managed to find how to fix the issue so that the DriverManager > can find the actual s7 protocol. > > > > > > > > > All I had to do is to create > a maven project (karaf-blueprint) archetype and do as follow: > > > > > > > > > > > > > > > > > > 1. Inside the pom, add the > S7PlcDriver under "imports" > > > > > > > > > 2. create a service under > main/java/resources/META-INF/services/xxx.xxx.PlcDriver containing the > implementation (S7PlcDriver) and license > > > > > > > > > 3. Create a simple XML > blueprint (with a real address this time connected to a real PLC) > > > > > > > > > <blueprint > xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy"> > > > > > > > > > > > > > > > > > > <camelContext > id="PLC-Context" xmlns="http://camel.apache.org/schema/blueprint" > streamCache="true"> > > > > > > > > > > > > > > > > > > > > > > > > > > > <route id="Route1"> > > > > > > > > > > > > > > > > > > <from > uri="plc4x:s7://192.168.178.10/1/1"/> > > > > > > > > > <log message=" > Sending ${body}" loggingLevel="INFO" /> > > > > > > > > > <to > uri="mock:test?retainLast=10" /> > > > > > > > > > > > > > > > > > > </route> > > > > > > > > > > > > > > > > > > </camelContext> > > > > > > > > > > > > > > > > > > </blueprint> > > > > > > > > > > > > > > > > > > So now I have the next issue, > I can see from the log that a connection is established but it tells me that > the connection doesn't support connection. Am I missing a parameter or what > could be the issue? > > > > > > > > > > > > > > > > > > Here the log: > > > > > > > > > > > > > > > > > > > https://i.imgur.com/KgWz8DF.png > > > > > > > > > > > > > > > > > > On 2020/02/17 12:11:56, > Christofer Dutz <[email protected]> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > > > > > > > > > > > having a more detailed look > at the log-trace, it seems the DriverManager isn't able to find the S7 driver > at all ... > > > > > > > > > > But I guess if it even was > available, as Cesar pointed out, the field address is that of the mock driver > and not of the S7 so this will not work. > > > > > > > > > > Also are you connecting to > localhost, which is also probably not what you want. Unless you are running a > S7 simulator on your machine. > > > > > > > > > > > > > > > > > > > > Depending of if you're > using a released version of the s7 driver the connection URL is correct, > however if you switch to the new S7 driver it would look like this: s7://{ip > or host} > > > > > > > > > > Not the "/1/1" are now > missing. > > > > > > > > > > > > > > > > > > > > Chris > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Am 17.02.20, 13:04 schrieb > "Cesar Garcia" <[email protected]>: > > > > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > > > The PLC address does > not look correct, can you confirm that it really > > > > > > > > > > points to a real PLC or > an S7 simulator? > > > > > > > > > > > > > > > > > > > > <from > uri="plc4x:s7:localhost/1/1"/> > > > > > > > > > > > > > > > > > > > > Best regards, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > El vie., 14 feb. 2020 a > las 18:34, Etienne Robinet (<[email protected]>) > > > > > > > > > > escribió: > > > > > > > > > > > > > > > > > > > > > Hello everyone, > > > > > > > > > > > I've spent some days > trying to figure out how to make PLC4X work inside a > > > > > > > > > > > karaf container in > combination with camel blueprints for routing. > > > > > > > > > > > I've downloaded the > latest release (0.5.0) and built it with maven. I then > > > > > > > > > > > installed the > driver-s7-feature and plc4j-apache-camel bundle into my > > > > > > > > > > > container and got > following bundles running: > > > > > > > > > > > > > > > > > > > > > > >PLC4J: API > > > > > > > > > > > >PLC4J: Driver: S7 > > > > > > > > > > > >PLC4J: Protocol: > Driver-Base: Base > > > > > > > > > > > >PLC4J: Protocol: > Driver-Base: TCP > > > > > > > > > > > >PLC4J: Protocol: ISO > on TCP > > > > > > > > > > > >PLC4J: Protocol: ISO > TP > > > > > > > > > > > >PLC4J: Protocol: S7 > > > > > > > > > > > >PLC4j: Utils: Driver > Base: Java > > > > > > > > > > > >PLC4J: Integrations: > Apache Camel > > > > > > > > > > > > > > > > > > > > > > After trying a simple > route with this consumer component: > > > > > > > > > > > <from > uri="plc4x:s7:localhost/1/1"/> (the address is for testing purpose) > > > > > > > > > > > I get the following > error: > > > > > > > > > > > Error occurred during > starting CamelContext: PLC-Context > > > > > > > > > > > > org.apache.camel.FailedToCreateRouteException: Failed to create route > > > > > > > > > > > Route1: > Route(Route1)[[From[plc4x:s7:localhost/1/1]] -> [To[mock:tes... > > > > > > > > > > > because of Unable to > find driver for protocol 's7' > > > > > > > > > > > > > > > > > > > > > > I've tested numerous > version of PLC4X and got the same results, so I think > > > > > > > > > > > I might be close to > fix it! > > > > > > > > > > > Any help would be > appreciated! > > > > > > > > > > > > > > > > > > > > > > Here the full log > > > > > > > > > > > > > > > > > > > > > > 16:30:45.578 INFO > [Blueprint Event Dispatcher: 1] Attempting to start > > > > > > > > > > > CamelContext: > PLC-Context > > > > > > > > > > > 16:30:45.579 INFO > [Blueprint Event Dispatcher: 1] Apache Camel 2.24.2 > > > > > > > > > > > (CamelContext: > PLC-Context) is starting > > > > > > > > > > > 16:30:45.580 INFO > [Blueprint Event Dispatcher: 1] StreamCaching is enabled > > > > > > > > > > > on CamelContext: > PLC-Context > > > > > > > > > > > 16:30:45.580 INFO > [Blueprint Event Dispatcher: 1] JMX is enabled > > > > > > > > > > > 16:30:45.600 INFO > [Blueprint Event Dispatcher: 1] Instantiating new PLC > > > > > > > > > > > Driver Manager with > class loader > > > > > > > > > > > > BundleDelegatingClassLoader(plc4j-route.xml [67]) > > > > > > > > > > > 16:30:45.600 INFO > [Blueprint Event Dispatcher: 1] Registering available > > > > > > > > > > > drivers... > > > > > > > > > > > 16:30:45.601 TRACE > [Blueprint Event Dispatcher: 1] FindResource: > > > > > > > > > > > > META-INF/services/org.apache.plc4x.java.spi.PlcDriver > > > > > > > > > > > 16:30:45.627 INFO > [Blueprint Event Dispatcher: 1] StreamCaching in use > > > > > > > > > > > with spool directory: > > > > > > > > > > > > C:\karaf\bin\..\data\tmp\camel\camel-tmp-00f849ac-0ccf-4b12-822d-dda62267eb6c > > > > > > > > > > > and rules: [Spool > > 128K body size] > > > > > > > > > > > 16:30:45.629 INFO > [Blueprint Event Dispatcher: 1] Apache Camel 2.24.2 > > > > > > > > > > > (CamelContext: > PLC-Context) is shutting down > > > > > > > > > > > 16:30:45.639 INFO > [Blueprint Event Dispatcher: 1] Apache Camel 2.24.2 > > > > > > > > > > > (CamelContext: > PLC-Context) uptime 0.060 seconds > > > > > > > > > > > 16:30:45.640 INFO > [Blueprint Event Dispatcher: 1] Apache Camel 2.24.2 > > > > > > > > > > > (CamelContext: > PLC-Context) is shutdown in 0.011 seconds > > > > > > > > > > > 16:30:45.640 WARN > [Blueprint Event Dispatcher: 1] Changing Camel state for > > > > > > > > > > > bundle 67 to Failure > > > > > > > > > > > 16:30:45.641 ERROR > [Blueprint Event Dispatcher: 1] Error occurred during > > > > > > > > > > > starting > CamelContext: PLC-Context > > > > > > > > > > > > org.apache.camel.FailedToCreateRouteException: Failed to create route > > > > > > > > > > > Route1: > Route(Route1)[[From[plc4x:s7:localhost/1/1]] -> [To[mock:tes... > > > > > > > > > > > because of Unable to > find driver for protocol 's7' > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.RouteService.warmUp(RouteService.java:147) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:3954) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3861) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3647) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3488) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultCamelContext$4.call(DefaultCamelContext.java:3247) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultCamelContext$4.call(DefaultCamelContext.java:3243) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3266) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3243) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:72) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:3159) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.blueprint.BlueprintCamelContext.start(BlueprintCamelContext.java:255) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:297) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.blueprint.BlueprintCamelContext.blueprintEvent(BlueprintCamelContext.java:188) > > > > > > > > > > > [!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.aries.blueprint.container.BlueprintEventDispatcher$3.call(BlueprintEventDispatcher.java:190) > > > > > > > > > > > [!/:1.10.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.aries.blueprint.container.BlueprintEventDispatcher$3.call(BlueprintEventDispatcher.java:188) > > > > > > > > > > > [!/:1.10.2] > > > > > > > > > > > at > java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?] > > > > > > > > > > > at > > > > > > > > > > > > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) > > > > > > > > > > > [?:?] > > > > > > > > > > > at > java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?] > > > > > > > > > > > at > > > > > > > > > > > > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) > > > > > > > > > > > [?:?] > > > > > > > > > > > at > java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?] > > > > > > > > > > > at > > > > > > > > > > > > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) > > > > > > > > > > > [?:?] > > > > > > > > > > > at > > > > > > > > > > > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > > > > > > > > > > > [?:?] > > > > > > > > > > > at > > > > > > > > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > > > > > > > > > > > [?:?] > > > > > > > > > > > at > java.lang.Thread.run(Thread.java:834) [?:?] > > > > > > > > > > > Caused by: > org.apache.plc4x.java.api.exceptions.PlcConnectionException: > > > > > > > > > > > Unable to find driver > for protocol 's7' > > > > > > > > > > > at > > > > > > > > > > > > org.apache.plc4x.java.PlcDriverManager.getDriver(PlcDriverManager.java:98) > > > > > > > > > > > ~[?:?] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.plc4x.java.PlcDriverManager.getConnection(PlcDriverManager.java:71) > > > > > > > > > > > ~[?:?] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.plc4x.camel.Plc4XConsumer.<init>(Plc4XConsumer.java:57) ~[?:?] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.plc4x.camel.Plc4XEndpoint.createConsumer(Plc4XEndpoint.java:72) > > > > > > > > > > > ~[?:?] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.EventDrivenConsumerRoute.addServices(EventDrivenConsumerRoute.java:69) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.DefaultRoute.onStartingServices(DefaultRoute.java:107) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.RouteService.doWarmUp(RouteService.java:172) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > at > > > > > > > > > > > > org.apache.camel.impl.RouteService.warmUp(RouteService.java:145) > > > > > > > > > > > ~[!/:2.24.2] > > > > > > > > > > > ... 24 more > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > *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: 0416-681.03.99* > > > > > > > > > > > > > > > > > > > > *Cel: 0414-760.98.95* > > > > > > > > > > > > > > > > > > > > *Hotline Técnica > SIEMENS: 0800 1005080* > > > > > > > > > > > > > > > > > > > > *Email: > [email protected] > > > > > > > > > > > <[email protected]>* > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
