18:07, EET
November 24, 2020
In our projects, we have a OPCUA client (build using OPCUA libs 4.4.2).
We typically connect to PLC’s via KepWare as an OPC(UA) server and all is working fine.
For one project we need to connect to a Siemens Desigo CC system. This system exposes its Siemens.OPC.Server.DA to OPCUA via a generic OPC Foundation OPCUA wrapper (delivered by Siemens).
All goes fine, but as soon as someone changes a config in Desigo we do not receive any tagupdates anymore.
Seems the subscriptions get lost somewhere… in the log we see the subscriptions reconnecting from the client side and succeeding in it… but no more updates from then although the tags change in Disigo CC….
But when we restart our application using the same config (= making a new client connection and new subscriptions) all goes fine again.
We suspect that there is something wrong with housekeeping at the OPCUA wrapper side…
But the customer says… yeah, but if you restart your client it is ok again so it must be at your side 🙁
Too cut a long story short:
Does anyone know of similar issues with an OPC Foundation OPCUA wrapper ?? or Desigo CC…
Any help/ideas are welcom
15:14, EET
April 3, 2012
Hi,
For classic OPC DA OPC UA, we recommend using https://www.prosysopc.com/products/opc-ua-gateway/.
The OPC UA Server must keep track of all MonitoredItems. OPC UA Clients do make the Subscription and items to it, after that they queue up PublishRequests that the server sends back as PublishResponses with the notifications for the items.
The notifications contains IDs assigned by the client. Basically if the server messes up that the client would have to detect that somehow. IF the server keeps however sending so called KeepAlives to it, then it cannot be done (the client cannot know should a variable be changing, at least not withing out-of-baud knowledge i.e. not directly via OPC UA, but you could e.g. “know” that an item should receive a change at least once within 10minutes for example).
If the client does not receive KeepAlives, it is still a server error, but that can be detected, though recovery of those must be handled by the SDK user manually. It is still a problem with the server usually though. Anyway, you must attach a SubscriptionAliveListener to the Subscription and handle that in onTimeout (no KeepAlive when it should have happened, Subscription should still exist on the server) and/or onLifetimeTimeout (no keepalives and the Subscription no longer exist on the server). Note that both are our custom client side time-based detections. Subscription.setAliveDetectionFactor and setTimeoutDetectionFactor can be used to adjust e.g. network latency if it is huge. Both however are an indication that something is wrong on the server.
Where possible, https://www.prosysopc.com/blog/opc-ua-wireshark/ is the best debugging way to know for sure that did the server respond a PublishResponse (and did we send a PublishRequest earlier for which that would have happened). Though you must use None or Sign(only) security modes for that to work.
Additionally, if you could also test with https://www.unified-automation.com/products/development-tools/uaexpert.html that does it too not get the data, if so, it would basically rule our SDK out of the picture and typically if both (UaExpert + our SDK) fails, it typically tends to be a server issue.
Most Users Ever Online: 1919
Currently Online:
34 Guest(s)
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Heikki Tahvanainen: 402
hbrackel: 144
rocket science: 88
pramanj: 86
Francesco Zambon: 83
Ibrahim: 78
Sabari: 62
kapsl: 57
gjevremovic: 49
Xavier: 43
Member Stats:
Guest Posters: 0
Members: 727
Moderators: 7
Admins: 1
Forum Stats:
Groups: 3
Forums: 15
Topics: 1529
Posts: 6471
Newest Members:
kourtneyquisenbe, ellis87832073466, zkxwilliemae, gabriellabachus, Deakin, KTP25Zof, Wojciech Kubala, efrennowell431, wilfredostuart, caitlynfajardoModerators: Jouni Aro: 1026, Pyry: 1, Petri: 0, Bjarne Boström: 1032, Jimmy Ni: 26, Matti Siponen: 349, Lusetti: 0
Administrators: admin: 1