Hi Andreas, It looks like there's a bit of a mismatch between the PLC4X change of state api and the Milo subscription api. When using the change of state subscription that is used in the example a default duration gets used of 1 second it also doesn't look like it reports by exception which I would expect.
Using the sampling subscription PLC4X api you could specify the sampling interval. I can take a look tomorrow if no one looks at it today. Kind Regards Ben On Fri, Mar 5, 2021 at 7:32 AM Andreas Vogler <[email protected]> wrote: > Thx, it works now. > > BUT: I only get values every one second… > > 13:21:54.177 [milo-shared-thread-pool-0] INFO > o.a.p.j.e.h.s.HelloPlc4xSubscription - Field 'value-0' value: > {"value":2.0,"isNullable":false} > 13:21:55.178 [milo-shared-thread-pool-0] INFO > o.a.p.j.e.h.s.HelloPlc4xSubscription - Field 'value-0' value: > {"value":7.0,"isNullable":false} > 13:21:56.178 [milo-shared-thread-pool-0] INFO > o.a.p.j.e.h.s.HelloPlc4xSubscription - Field 'value-0' value: > {"value":12.0,"isNullable":false} > 13:21:57.179 [milo-shared-thread-pool-0] INFO > o.a.p.j.e.h.s.HelloPlc4xSubscription - Field 'value-0' value: > {"value":17.0,"isNullable":false} > 13:21:58.179 [milo-shared-thread-pool-1] INFO > o.a.p.j.e.h.s.HelloPlc4xSubscription - Field 'value-0' value: > {"value":22.0,"isNullable":false} > > The tag increases one by one every 200ms, and here in PLC4X we miss value > changes.. > > Is there a way to adjust the opc ua subscription sampling interval and/or > monitoring options with PLC4X? > > Regards, > Andreas > > > > > On 05.03.2021, at 12:42, Ben Hutcheson <[email protected]> wrote: > > > > Hi Andreas, > > > > That looks like an issue specific to your setup. It seems it's not > finding > > some of the other modules that the opcua driver and the example rely on. > > Can you build the entire project 'mvn clean && mvn install'? > > > > If you could send through some more info, maven logs, etc.. it would be > > helpful. > > > > Kind Regards > > > > Ben > > > > > > On Fri, Mar 5, 2021 at 6:27 AM Andreas Vogler > <[email protected]> > > wrote: > > > >> Hi Ben, > >> > >> with this Branch I get a build error - just opened it in Intellij and > >> tried to run the subscribe example... > >> > >> > /Users/vogler/Workspace/Private/plc4x/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/configuration/AdsConfiguration.java:23:43 > >> java: package org.apache.plc4x.java.ads.readwrite does not exist > >> > >> I see in e.g. OpcuaField.java: Cannot resolve symbol > 'OpcuaIdentifierType' > >> > >> Regards, > >> Andreas > >> > >>> On 05.03.2021, at 11:05, Ben Hutcheson <[email protected]> wrote: > >>> > >>> Hi Andreas, > >>> > >>> I also saw the same issue running the example. I have just pushed a > >> branch > >>> to fix this bug/opcua_subscription. If you can try it out that would be > >>> great. > >>> > >>> Kind Regards > >>> > >>> Ben > >>> > >>> On Wed, Mar 3, 2021 at 3:12 PM Andreas Vogler > >> <[email protected]> > >>> wrote: > >>> > >>>> Hi Matthias, > >>>> > >>>> It’s > >>>> * Java 11.0.9 (Amazon Corretto) > >>>> * Intellij 2020.3.2 > >>>> * git clone https://github.com/apache/plc4x.git < > >>>> https://github.com/apache/plc4x.git> > >>>> > >>>> The attached stack trace was from my project - Kotlin - maybe “app” > >> comes > >>>> from there. > >>>> But you can just use the subscription example from the plc4x.git, it > >>>> throws the same error. > >>>> > >>>> Regards, > >>>> Andreas > >>>> > >>>> > >>>> > >>>>> On 03.03.2021, at 21:04, Matthias Milan Strljic < > >>>> [email protected]> wrote: > >>>>> > >>>>> Hi Andreas, > >>>>> > >>>>> can you give us a bit more information about your scenario and setup? > >>>>> Project config, java version, java jvm, IDE environment, PLC4X > version > >> / > >>>>> Github branch? > >>>>> Because the " are in unnamed module of loader 'app'" confuses me a > bit. > >>>>> > >>>>> Greetings Matthias > >>>>> > >>>>> ------------------------------ > >>>>>> *Von:* Christofer Dutz <[email protected]> > >>>>>> *Gesendet:* Mittwoch, 3. März 2021 20:40 > >>>>>> *An:* [email protected] > >>>>>> *Betreff:* AW: OPC UA Subscribe throws casting error ... > >>>>>> > >>>>>> Hi, > >>>>>> > >>>>>> perhaps Matthias can help you with this one? > >>>>>> > >>>>>> Chris > >>>>>> > >>>>>> > >>>>>> -----Ursprüngliche Nachricht----- > >>>>>> Von: Andreas Vogler <[email protected]> > >>>>>> Gesendet: Mittwoch, 3. März 2021 20:22 > >>>>>> An: [email protected] > >>>>>> Betreff: Re: OPC UA Subscribe throws casting error ... > >>>>>> > >>>>>> Same happens with the plc4j hello-world-plc4x-subscription example > >> from > >>>>>> the GitHub repository. > >>>>>> > >>>>>>> On 03.03.2021, at 18:00, Andreas Vogler > >> <[email protected] > >>>>> > >>>>>> wrote: > >>>>>>> > >>>>>>> Hi, > >>>>>>> > >>>>>>> I have tried to subscribe to an OPC UA node - just took the few > lines > >>>>>> from the subscription example - and I get following stack trace. > >>>>>>> > >>>>>>> I hope someone can tell me what I am doing wrong… :-) > >>>>>>> > >>>>>>> val builder: PlcSubscriptionRequest.Builder = > >>>>>>> plc!!.subscriptionRequestBuilder() > >>>>>>> topics.forEach { > >>>>>>> builder.addChangeOfStateField(it.payload, it.payload) } val request > >>>>>>> = builder.build() val response = request.execute() val > >>>>>>> subscribeResponse = response.get() ==> the exception is thrown here > >>>>>>> > >>>>>>> [2021-03-03 17:52:26][INFO ][opc ] > >>>> Subscribe > >>>>>> nodes [1] > >>>>>>> java.util.concurrent.ExecutionException: > >> java.lang.ClassCastException: > >>>>>> class org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField > >>>> cannot be > >>>>>> cast to class org.apache.plc4x.java.opcua.protocol.OpcuaField > >>>>>> (org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField and > >>>>>> org.apache.plc4x.java.opcua.protocol.OpcuaField are in unnamed > module > >> of > >>>>>> loader 'app') > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999) > >>>>>>> at Plc4xVerticle.subscribeNodes(Plc4xVerticle.kt:84) > >>>>>>> at Plc4xVerticle.subscribeTopics(Plc4xVerticle.kt:66) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase.subscribeTopic(DriverBase.kt:170) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase.subscribeHandler(DriverBase.kt:127) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase.access$subscribeHandler(DriverBase.kt:24) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase$connectHandlers$2.handle(DriverBase.kt:105) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase$connectHandlers$2.handle(DriverBase.kt:24) > >>>>>>> at > >>>>>> io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:52) > >>>>>>> at > >>>>>> > io.vertx.core.impl.DuplicatedContext.emit(DuplicatedContext.java:194) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.MessageConsumerImpl.dispatch(MessageConsumerImpl.java:177) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.HandlerRegistration$InboundDeliveryContext.next(HandlerRegistration.java:163) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.HandlerRegistration$InboundDeliveryContext.dispatch(HandlerRegistration.java:128) > >>>>>>> at > >>>>>> > io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:107) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.HandlerRegistration.dispatch(HandlerRegistration.java:104) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.MessageConsumerImpl.deliver(MessageConsumerImpl.java:183) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.MessageConsumerImpl.doReceive(MessageConsumerImpl.java:168) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.HandlerRegistration.lambda$receive$0(HandlerRegistration.java:54) > >>>>>>> at > >>>>>> > >>>> > >> > io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) > >>>>>>> at > >>>>>> > >>>> > >> > io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) > >>>>>>> at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) > >>>>>>> at > >>>>>> > >>>> > >> > io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) > >>>>>>> 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:829) > >>>>>>> Caused by: java.lang.ClassCastException: class > >>>>>> org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField cannot > be > >>>> cast > >>>>>> to class org.apache.plc4x.java.opcua.protocol.OpcuaField > >>>>>> (org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField and > >>>>>> org.apache.plc4x.java.opcua.protocol.OpcuaField are in unnamed > module > >> of > >>>>>> loader 'app') > >>>>>>> at > >>>>>> > >>>> > >> > org.apache.plc4x.java.opcua.connection.OpcuaTcpPlcConnection.lambda$subscribe$3(OpcuaTcpPlcConnection.java:388) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1692) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) > >>>>>>> at > >>>>>> > >> java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) > >>>>>>> at > >>>>>>> > >> java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorker > >>>>>>> Thread.java:183) > >>>>>>> java.util.concurrent.ExecutionException: > >> java.lang.ClassCastException: > >>>>>> class org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField > >>>> cannot be > >>>>>> cast to class org.apache.plc4x.java.opcua.protocol.OpcuaField > >>>>>> (org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField and > >>>>>> org.apache.plc4x.java.opcua.protocol.OpcuaField are in unnamed > module > >> of > >>>>>> loader 'app') > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999) > >>>>>>> at Plc4xVerticle.subscribeNodes(Plc4xVerticle.kt:84) > >>>>>>> at Plc4xVerticle.subscribeTopics(Plc4xVerticle.kt:66) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase.subscribeTopic(DriverBase.kt:170) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase.subscribeHandler(DriverBase.kt:127) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase.access$subscribeHandler(DriverBase.kt:24) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase$connectHandlers$2.handle(DriverBase.kt:105) > >>>>>>> at > >>>>>> > >>>> > >> > at.rocworks.gateway.core.driver.DriverBase$connectHandlers$2.handle(DriverBase.kt:24) > >>>>>>> at > >>>>>> io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:52) > >>>>>>> at > >>>>>> > io.vertx.core.impl.DuplicatedContext.emit(DuplicatedContext.java:194) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.MessageConsumerImpl.dispatch(MessageConsumerImpl.java:177) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.HandlerRegistration$InboundDeliveryContext.next(HandlerRegistration.java:163) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.HandlerRegistration$InboundDeliveryContext.dispatch(HandlerRegistration.java:128) > >>>>>>> at > >>>>>> > io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:107) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.HandlerRegistration.dispatch(HandlerRegistration.java:104) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.MessageConsumerImpl.deliver(MessageConsumerImpl.java:183) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.MessageConsumerImpl.doReceive(MessageConsumerImpl.java:168) > >>>>>>> at > >>>>>> > >>>> > >> > io.vertx.core.eventbus.impl.HandlerRegistration.lambda$receive$0(HandlerRegistration.java:54) > >>>>>>> at > >>>>>> > >>>> > >> > io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) > >>>>>>> at > >>>>>> > >>>> > >> > io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) > >>>>>>> at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) > >>>>>>> at > >>>>>> > >>>> > >> > io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) > >>>>>>> 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:829) > >>>>>>> Caused by: java.lang.ClassCastException: class > >>>>>> org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField cannot > be > >>>> cast > >>>>>> to class org.apache.plc4x.java.opcua.protocol.OpcuaField > >>>>>> (org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField and > >>>>>> org.apache.plc4x.java.opcua.protocol.OpcuaField are in unnamed > module > >> of > >>>>>> loader 'app') > >>>>>>> at > >>>>>> > >>>> > >> > org.apache.plc4x.java.opcua.connection.OpcuaTcpPlcConnection.lambda$subscribe$3(OpcuaTcpPlcConnection.java:388) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1692) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) > >>>>>>> at > >>>>>> > >> java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) > >>>>>>> at > >>>>>> > >>>> > >> > java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) > >>>>>>> at > >>>>>>> > >> java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorker > >>>>>>> Thread.java:183) > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>> > >>>> > >> > >> > >
