Professional OPC
Development Tools

logos

Online Forums

Technical support is provided through Support Forums below. Anybody can view them; you need to Register/Login to our site (see links in upper right corner) in order to Post questions. You do not have to be a licensed user of our product.

Please read Rules for forum posts before reporting your issue or asking a question. OPC Labs team is actively monitoring the forums, and replies as soon as possible. Various technical information can also be found in our Knowledge Base. For your convenience, we have also assembled a Frequently Asked Questions page.

Do not use the Contact page for technical issues.

Get All Data Changes

More
03 Nov 2017 10:44 - 03 Nov 2017 10:55 #5637 by support
Replied by support on topic Get All Data Changes
This question has more to do with the server implementation, and OPC UA specifications, rather than with QuickOPC, or the specific programming model(s) you choose to access your data.

First, the server must be able to do what you are asking for. No physical system can provide data in an infinite speed - there will always be limitations. Consult the server documentation or contact the vendor to see how fast the data can be obtained. The SamplingInterval should be set accordingly.

Second, it would be good if you have a look at OPC UA specs for details on how the data change notifications are transferred from the server to the client. It is a large topic, so I cannot describe it all here. You can start with Part 4 of the spec (Services), and have a look at the introductory parts to the "MonitoredItem Service Set". Concepts like sampling, filters, queues are described there. But I think one crucial element to consider is to set a non-zero QueueSize in the MonitoringParameters. This way, the server could queue the changes for some time, even if they are not sent to the client. And the client will then be able receive a bunch of changes in one message, and notify you about them sequentially.

Settings of parameters like MonitoringParameters.QueueSize is available in all the models we have (Procedural Coding/Live Mapping/Live Binding/Reactive Programming). In this sense, it does not matter which one you pick - if one can do it, others can do as well, and vice versa.

By OPC UA events, you probably mean OPC Alarms and Conditions (Part 9 of the spec). I do not think that can help here, because a) there will have to be a server-side support fore them, and b) they have different purpose anyway.

Also, I would expect the PublishingInterval be shorter than the SamplingInterval. When it is longer, and the QueueSize is 0 or 1, it is no wonder that some collected data get lost.

Best regards
Last edit: 03 Nov 2017 10:55 by support.

Please Log in or Create an account to join the conversation.

More
02 Nov 2017 16:39 #5636 by Captain_Dash
Hello,

we used to do our data binding via live mapping in this manner
        [UANode(BrowsePath = ".Data"), UAData(Operations = UADataMappingOperations.All, Kind = UADataMappingKind.Value), UAMonitoring(SamplingInterval = 250),
         UASubscription(PublishingInterval = 500)]
        public byte[] Data
        {
            get { return data; }
            set
            {
                SetProperty(ref data, value);
            }
        }

The issue with this live mapping for some of our variables is, that they can change really, really fast and due to the sampling, some of the data could possibly get lost. But we need to get to know every value that have changed. Is there a way with live mapping opc ua to really get every data change?

We saw that there are events in OPC UA, could we use the events and send the data with the event argument?

Or how about the OPC Reactive Extensions (Rx/OPC) and StreamInsight?

Maybe you can point us in the right direction.

best regards

Please Log in or Create an account to join the conversation.

Moderators: support
Time to create page: 0.064 seconds