Hi,
I am reading and writing OPC tags from/to a Wave Rocker OPC server in DeltaV control module through OPC mirror. How can I read the quality and timestamp values for these tags in DeltaV?
Do I need to create parameters as Floating point with Status or Boolean with Status in DeltaV in order to read quality? Does the OPC mirror pass though the current value with quality (good or bad) or does it pass only good quality from cache (last good quality value)?
Thanks,
Darshana
In reply to AdrianOffield:
In reply to Darshana:
Per the OPC Mirror help file:
"OPC Mirror will not write a value to the destination if the source has not changed or if the source value does not have a good quality. Therefore, when a value in the destination has not changed for a long while, either the source value has not changed or it has a bad quality associated with it."
If the source OPC Tag quality is bad, then you will not know it is bad because it will not be transferred.
If you can identify the tag's quality in the source system as another tag (whose quality should not be in question), then you can map that separate tag to the status of the DeltaV destination tag, but again you have to make sure the quality mapping is done appropriately.
Alternatively, you can have logic in DeltaV destination module set the quality bad on a time basis equal to 2X the Pipe's automatic refresh interval. That way, the pipe will always reset the value and quality, (unless the quality is bad). I would test this idea, first.
Generally, a heartbeat or watchdog from the source system can be monitored by the DeltaV system and take action (set local quality bad) if it fails (i.e. communication or OPC Server failure), but this will not give you granularity of the OPC value quality on a tag by tag basis.
In reply to Youssef.El-Bahtimy:
See the attached image of a proposed solution.
The problem is we need to identify that a source value is bad (i.e. the OPC tag has not been written recently; but that could also be the case if the value doesn't change by more than 0.01 or the OPC Mirror Client, or source OPC Server is unresponsive)
In the proposed solution, we overwrite the input OPC destination value with a nonsense value (-99999 if that truly is not a sensible value for the tag) at the end of every scan. Before that, we check if the OPC Value is not -99999 (i.e. OPC Mirror sucessfully wrote a meaningful value to it) and transfer that value and the input tag quality (should be good) to the evaluated ANALOG_IN.
If the OPC Value is -99999, a condition block QUALITY_TIMER starts the TIMER. Once the TIMER exceeds the 120 second limit and the OPC input is still -99999, then we set the ANALOG_IN to a bad status.
Why 120 seconds? Consider if a tag rarely changes. OPC Mirror won't write a new value unless you force it to by configuring an automatic refresh interval on the pipe of 1 minute (the lowest setting). If everything is working properly, worst case a new value will be written every 60 seconds, regardless of exception. I add another full scan in (just in case) but now that I think about it, we could probably set this for 70 seconds and catch problems sooner, without creating false alarms.
I would expect the local contol system (i.e. the wave rocker) would take first level action when it's own I/O signals have questionable quality. This should include setting an alarm bit, or other fail-safing activities that can be detected by DeltaV acting as the SCADA. I would research this with the OEM vendor.
Every OPC integration I've seen uses a watchdog/heartbeat mechanism for detecting comm loss, and always includes a timeout of between 30 and 120 seconds before the supervisory system (DeltaV) takes action to prevent false positive failures when the comms go down momentarily (which they frequently do) . By the same token, taking action for a momentary quality change could create a lot of unneccessary reaction by the supervisory system.