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.

Keep-Alive and inactive subscriptions

More
28 Sep 2019 06:12 #7766 by support
We have looked deeper into this. Sadly, we are not going to implement this change. The reasons are below.

#1. The underlying software we are using (.NET stack&SDK from OPC Foundation) does not offer a way to hook into the places where the necessary message processing is done. Similarly to what you see in QuickOPC API, it is only capable of giving us information when the keep-alive mechanism fails - but not when it succeeds. In theory we (or somebody) could change the SDK and make a pull request, but that's not the business we are in.

#2: there are also some design issues with it. I They have to do with how the keep-alive mechanism works and how that could be "projected" into QuickOPC API. In short, the way it would behave would be - in some cases - quite unexpected (and ineffective). I could go into details, but given #1, it is irrelevant at this time.

The second point is not a total show stopper, but the first is.
I'd also like to note that the fact that it is not just "us", who has designed the library in such way , reinforces my feeling that doing this is somehow not right.

Best regards

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

More
03 Sep 2019 15:13 #7697 by kriskazmar
Since we are trying to build the most robust/reliable industrial alarm notification system we can, your consideration of this feature is most appreciated. Thank you!

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

More
31 Aug 2019 06:51 #7689 by support
Thank you for explanation.

We introduce new features or API changes only in new versions, not in updated builds of the same version (that is reserved for bug fixes). We should be releasing a new version (2019.1) in the 2nd half of September, and it is too late to put this in. We already know very well (and have parts finished) what will go into the subsequent version, which may be out towards end of 2019 or in the beginning of 2020. So, after 2019.1 is released, we can review the plan for the subsequent version and consider this one change to be added (= this decision is to be made probably in early October).

I cannot foresee whether we will include it or not. It needs to be prioritized with other things, and also assessed in terms of feasibility, and "design fit". Specifically, there is an design concept in QuickOPC which says that the physical aspects of the communication should stay hidden from the normal user (the commonly used interfaces). Violating this concept might be dangerous because it opens the door for further similar changes. But I am not saying either way yet.

Best regards

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

More
29 Aug 2019 22:31 #7686 by kriskazmar
In order to be 100% certain that all the monitored items/nodes of an OPC UA Server are working/updating correctly, we would have to keep updating all the data at the server on a periodic basis. Since the data is large, is from hundreds of identical OPC UA Servers (industrial controllers), and is ultimately pushed to the cloud upon updates, it would be taxing to the infrastructure and costly for cloud transfers for this level of certainty.

However, since we had problems with subscriptions/monitored items in the recent past, we would like more certainty and feel capturing the keep-alive events on each monitored item would add certainty. We would like a feature enhancement as soon as possible to be able to optionally capture the keep-alive event for each monitored item in the same way error exceptions are received by users of QuickOPC. Is this possible? We prefer receiving an event notification for each keep-alive received rather than polling a keep-alive "last received" status.

We trust the component, but would like to verify the keep-alive event coming from the OPC UA Servers. We know this methodology will not indicate 100% certainty the monitored item data is updating correctly, but believe it's being the most certain we can be short of the overhead and expense of frequent/large data updates from hundreds of OPC UA Servers.

We don't believe monitoring a single guaranteed changing node is sufficient, and we cannot change the filter on any of the monitored nodes because the OPC UA Server cannot update the timestamp without updating the data.

Can we get this feature?

Thank you!

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

More
29 Aug 2019 11:57 #7681 by support
Hello,
do not worry, these are all valid and very good questions.

1. Is there a max value for subscription inactivity?
No.

2. Is it possible for 1 of the subscriptions to disconnect or "go bad" while the other subscriptions remain active and functioning as normal?
It is not that common, but it can happen. QuickOPC hides the existence of subscriptions in the API. Instead, each monitored item is treated individually, and if there is a problem related to a subscription, all monitored items that exist on that subscription receive an error.

3. Is there a way to determine when the last keep-alive was received from the server for a given subscription?
No in QuickOPC. But there is a negative indication – if the keep-alives are not as they should, you will receive an error notification. See below.

4. Once a subscription has been created, is there any status available on the subscription that can be obtained? Like when the last time a message was received or when the last week-alive was received?
In QuickOPC, the status of the subscription is delivered to you by the change notification. The current status equals the last status received (i.e. whether the Exception property in the event arguments was null or not). A status change to a success is indicated by a new data coming in with Exception == null. A status change to a failure is indicated by a notification with Exception != null. So even though you cannot “obtain” the status, you always *know* the status.

You probably feel uncomfortable relying on the state is delivered to you like this. You may think “ there can be bug in the component, and we would not know about the failure”. That’s right. But the reasoning should go as follows: Either you do trust the component for giving you the right status, or you don’t.

If you trust the component, just use the above described approach and you are all set.

If you do not trust the component, and want to obtain some “certainty” about whether the subscription truly works, you need to find some other way. But having a way to obtain the status by a method call to the component itself, or reading the keep-alive time from the component, wouldn’t give you a certainty either. There can be a bug causing these indications to misbehave as well. So if you do not trust the component for status delivery, you need to subscribe to some item that is guaranteed to change values on the server. Alternatively, at least in some scenarios, you can change the filter (on one or more monitored items) so that data is not delivered not just when the value or status change, but also when its timestamp changes. If the server is periodically getting new data, you will be receiving it every time, even if the value itself has not changed. Obviously this results in (much) more data being transferred.

The bottom line is, no matter whether you “trust” the component or not, there is no need for other methods to obtain the status or keep-alive time: The current design should be sufficient.

Best regards

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

More
29 Aug 2019 03:33 #7668 by sjscheider
In our system, we have 3 subscriptions. The data on 1 of the subscriptions changes relatively often, at least every 5 minutes per device. (Typically it is every few seconds, but we've seen instances of ideal devices going for about 5 minutes without data changes.

But for two of the subscription, it is not uncommon for an event not to fire for hours or days. During our testing, we've simulated no events firing for 5+ days and the data change event fired without issue. This is great, but our team has some concerns, so I'm hoping you can answer the following questions for us.
  1. Is there a max value for subscription inactivity?
  2. Is it possible for 1 of the subscriptions to disconnect or "go bad" while the other subscriptions remain active and functioning as normal?
  3. Is there a way to determine when the last keep-alive was received from the server for a given subscription?
  4. Once a subscription has been created, is there any status available on the subscription that can be obtained? Like when the last time a message was received or when the last week-alive was received?
Sorry if you've answered this before. I search the posts and the docs and couldn't find the information.

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

Moderators: support
Time to create page: 0.054 seconds