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.

Compatibility and Functionality Issues with QuickOPC at DeltaV Sites

More
13 Oct 2024 13:13 #13218 by support
Hello.

A. I would like to get some clarifications, and more information please.

1. Are you targeting .NET Framework (4.7.x, 4.8.x), or .NET 6+ ?
2. What do you mean by "…cause connectivity problems"? What precisely happens? Is it the
"Specified method is not supported", or is that a separate issue? Why would you call it a connection problem if it happens only with some items?
3. Please provide and precise error message for "Specified method is not supported". We do not have such error anywhere in our software, so it either comes from the server and must be enclosed in some text of our own, or it is not the precise and full error you are getting.


B. Info for you to know from our side.

1. DeltaV software, in OPC terms (both Classic and UA), is problematic.
2. When the write operation succeeds in QuickOPC, it means that the server has reported to QuickOPC that it had succeeded. I can tell with certainty that this is not QuickOPC problem. The fact that it works through other OPC client may be due to valid client-side differences. The are multiple methods to do the Write (such as sync/async), so if one works and one is buggy in the server, and we happened to use the buggy one, you would see this difference. We can try to use OPC Analyzer (capture the communication) to figure out more, if you are willing/able to do that.
3. We can also try to use OPC Analyzer to troubleshoot the connection issues.
4. However, using OPC Analyzer sometimes fails because 1) it only supports a subset of OPC specifications, and 2) putting it in the middle sometimes changes the behavior.
5. The only efficient way to tackle this would be if we had a reproducible scenario on our side.
6. I am also not aware of a specific code change that could explain the difference in behavior between the two QuickOPC versions. But this is not to say that there cannot be some.

Best regards

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

More
12 Oct 2024 12:04 #13217 by FAnsariCMC
Dear QuickOPC Support Team,

We're experiencing several issues with QuickOPC, particularly in DeltaV environments. Here's a summary of our observations and concerns:

1. Version Compatibility:
- Versions beyond 5.63.246 cause connectivity problems, specifically at DeltaV sites.
- The last tested version (5.80.293) refuses to connect/browse DeltaV servers.
- Error message with 5.80.293: "Specified method is not supported" for tags like 'ItemId="FIC701-2/PID1/PV.CV"'.

2. Current Workaround:
- Reverted to QuickOPC 5.63.246 for our latest release.
- Implemented a direct poll legacy mode to handle connectivity issues using a quartz schedular to poll on a specified interval.
- Version 5.63.246 works as expected with our workaround for reading tags.

3. Tag Writing Issues:
- With version 5.63.246, writing tags doesn't work at all (on DeltaV sites only, no issues with other sites).
- Write operations appear to complete successfully on our side with no error messages.
- However, the OPC Server tags never get updated with these values.
- In contrast, writing through Kepware's OPC Quick client successfully updates the tags.
- We haven't tested tag writing with newer versions due to the connection issues.

4. Ongoing Concerns:
- Direct polling encountering errors with versions above 5.63.246.
- Unable to establish subscriptions at these DeltaV sites. (not a huge concern as our workaround seems to be working well)
- Our workaround for reading tags functions correctly with 5.63.246 but fails with newer versions.

5. Security Considerations:
- Using an older version means missing out on latest security updates and features.

For reference here are some relevant snippets from our communication driver:
public override void Initialize()
{
    base.Initialize();
 
    // [Initialization of _daServerMgtWrappers and other non-QuickOPC specific setup]
 
    foreach (var group in /* [Group setup] */)
    {
        // [Setup of readTags, writeTags, etc.]
 
        var daServerMgtWrapper = new QuickOPC_DaServerMgtWrapper()
        {
            MachineName = group.FirstOrDefault().MachineName,
            OpcServerName = group.FirstOrDefault().OpcServerName,
            Url = url,
            ReadTags = readTags,
            ReadTags_Identifiers = readTagIdentifiers,
            WriteTags = writeTags,
            _revisedUpdateRate = int.Parse(this._driverSettings["Subscription Update Rate"].Value),
            _percentDeadband = float.Parse(this._driverSettings["Subscription Deadband"].Value)
        };
 
        Task.Run(
            () =>
            {
                if (daServerMgtWrapper.TryBrowse() && daServerMgtWrapper.TrySubscribe())
                {
                    daServerMgtWrapper._daServerMgt.ItemChanged += OnDataChanged;
                    // [LicenseCheck call]
                }
                else
                {
                    // [Error handling for connection failure]
                }
            }
        );
        this._daServerMgtWrappers.Add(daServerMgtWrapper);
    }
 
    // [Error logging]
}
 
public QuickOPC_DaServerMgtWrapper()
{
    //Addresses DCOM hardening changes by Microsoft CVE-2021-26414
    ComManagement.Instance.Configuration.SecurityParameters.EnsureDataIntegrity = true;
    ComManagement.Instance.AssureSecurityInitialization();
 
    _daServerMgt = new EasyDAClient();
    //Increase timeout for connections
    _daServerMgt.InstanceParameters.Timeouts.WriteItem = 6000;
    _daServerMgt.InstanceParameters.Timeouts.ReadItem = 6000;
    _daServerMgt.InstanceParameters.HoldPeriods.TopicRead = 200;
    _daServerMgt.InstanceParameters.HoldPeriods.TopicWrite = 200;
 
    //This line was recommended to force usage of their underlying rewrite for the DA Client
    _daServerMgt.InstanceParameters.EnableNativeClient = false;
 
    _daServerMgt.ItemChanged += ServerStateChanged;
}
 
public bool TryBrowse()
{
    ServerElementCollection serverElements;
    ProblematicTagsCount = new List<string>();
 
    try
    {
        serverElements = _daServerMgt.BrowseServers(MachineName);
        //check if OPC Server Exists in the specified machine and return false if not
        for (int i = 0; i < serverElements.Count; i++)
        {
            if (serverElements[i].ProgId.Contains(OpcServerName))
            {
                // [Setup for tag verification]
 
                DAVtqResult[] vtqResults = _daServerMgt.ReadMultipleItems(OpcServerName, tagNames);
 
                // [Checking for problematic tags and logging]
 
                HasConnection = true;
                return true;
            }
        }
 
        Logger.Log(LoggingLevel.Error, $"Specified OPC Server: {OpcServerName} does not exist on the Machine: {MachineName}");
        HasConnection = false;
        return false;
    }
    catch (OpcException opcException)
    {
        HasConnection = false;
        Logger.Log(LoggingLevel.Error, opcException.GetBaseException().Message + $": {MachineName}");
        return false;
    }
}
 
public DAVtqResult[] Read()
{
    DAVtqResult[] vtqReadResults = _daServerMgt.ReadMultipleItems(OpcServerName, ReadTags_Identifiers);
    List<string> errorMessages = new List<string>();
 
    for (int i = 0; i < vtqReadResults.Length; i++)
    {
        if (!vtqReadResults[i].Succeeded)
        {
            string errorMessage = $"Tag '{ReadTags_Identifiers[i]}': {vtqReadResults[i].ErrorMessageBrief}";
            errorMessages.Add(errorMessage);
            Console.WriteLine($"{OpcServerName}: vtqResults[{i}] *** Failure: {vtqReadResults[i].ErrorMessageBrief}");
        }
    }
    return vtqReadResults;
}

We'd appreciate your insights on:
1. Why are these compatibility issues occurring with newer versions, particularly in DeltaV environments?
2. What could be causing the tag writing problem with version 5.63.246, and how can we resolve it?
I have tried scouring through the change log for most versions above 5.63.246 but cannot find any significant changes made to how the connection logic works for DA.
3. Are there any plans to address these DeltaV-specific issues in future releases?
4. Can you provide any recommendations for upgrading while maintaining compatibility and full functionality with DeltaV systems?

Thank you for your assistance in resolving these critical issues.

Best regards,
Fahad

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

Moderators: support
Time to create page: 0.052 seconds