Professional OPC
Development Tools

logos

Cannot browse OPC servers in remote computer

More
14 Aug 2019 09:49 #7624 by support
Hello,

thank you for all the additional information, it is very helpful. All in all, it looks like that there is an issue with the "callback channel", i.e. when the server reports back to the client either for asynchronous method calls, or for subscriptions. Error 0x80040202 is for CONNECT_E_CANNOTCONNECT, and has to do with precisely this.

1. You are using version 5.50 (QuickOPC 2017.1). It would be wise to upgrade to the current version, even though I am not aware of any specific fix/change that can affect the observed behavior.

2. The observation you made with BrowseFromRegistry is very good. It may be unrelated to the main problem, but it adds to the overall issue. Keep it at 'false' if that helps.

3. Check the DCOM configuration.

4. If you were always running the program in the debugger, try it *outside* of the debugger. We have recently seen weird behavior of the Visual Debugger regarding the DCOM identity, and the error you have noticed in the Windows Event Log seem to point in that direction too.

5. A workaround might be to force QuickOPC to use synchronous calls only (this won't help with subscriptions, though, but it is worth trying). In your code, that would be something like
CL.InstanceParameters.Mode.AllowAsynchronousMethod = False

6. Please try different combinations of QuickOPC security parameters, as mentioned here: www.opclabs.com/forum/connections-reconnections-com-dcom/124...ng-to-remote-machines-via-code - that is, (C#)
EasyDAClient.SharedParameters.ClientParameters.UseCustomSecurity = <True or False>
EasyDAClient.SharedParameters.ClientParameters.TurnOffActivationSecurity  = <True or False>
EasyDAClient.SharedParameters.ClientParameters.TurnOffCallSecurity = <True or False>
(TurnOffCallSecurity only has any influence when UseCustomSecurity == true)
Unfortunately, these can only be done inside the process, at the very beginning - there is no way you can write a code to test multiple combinations in one run.,

Best regards

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

More
12 Aug 2019 07:20 #7618 by SZL
Ok, of cource. Good rest!

Additional info 3:
The System Administrator of the production servers make some tests over the network:

- The DCOM error attached in the "Additional info 2" posts is solved, but the communication still does not work.
- If we set a tag name that not exists in the OPC server, then the error message changes: *** Failure -1073479673 (0xC0040007): The item is no longer available in the server address space.
So the request is sent to the server successfully.
- If we set an existing tag, there are timeout error.

Packet lifecycle:
- MSRPC binding ok.
- The request is sent to the Kepware server successfully.
- The DCOM start here -> Packet sent -> Keepalive packets going -> Timeout.
- OPCENUM: DCOM remote access right is enabled (in OPC Server side too)
- ARP communication is ok.
- There are a Symactec DCSSA security on OPC Server's server computer, but it was tempolary disabled.
- There are an another (older) Kepware OPC Server (4.x) installed on the same cumputer, than the Kepware OPC Server V5.

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

More
12 Aug 2019 06:39 #7616 by admin
I apologize for delay, it is vacation period. Will reply during the remainder of the week.

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

More
09 Aug 2019 07:06 #7613 by SZL
Additional information 2:

I try with this simple code:
Dim j = EasyDAClient.SharedInstance.ReadItemValue("172.25.118.1", "Kepware.KEPServerEX.V5", "Siem.VERXEMS08.FQ_GV12")
MsgBox(j)

The error message is the same:
See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.
 
************** Exception Text **************
OpcLabs.EasyOpc.OperationModel.OpcException: An OPC operation failure with error code -1073430509 (0xC004C013) occurred, originating from 'OpcLabs.EasyOpcRaw.DataAccess.RawEasyDAClient'. The inner exception contains details about the problem. ---> System.Runtime.InteropServices.COMException: Read not completed. This error indicates that it could not be verified that the requested read operation was completed during the timeout period. It is possible that the read operation will actually succeed or fail, but later. Increase the timeout period if you want to obtain positive or negative indication of the operation outcome. Other reason for this error may be that under  heavy loads, topic request or response queue is overflowing. Check the event log for queue overflow errors (if event logging is supported by the product and enabled). 
   --- End of inner exception stack trace ---
   at OpcLabs.EasyOpc.Internal.EasyUtilities.CheckSuccess(OperationResult operationResult)
   at OpcLabs.EasyOpc.DataAccess.IEasyDAClientExtension.ReadItemValue(IEasyDAClient client, ServerDescriptor serverDescriptor, DAItemDescriptor itemDescriptor, DAReadParameters readParameters)
   at OpcLabs.EasyOpc.DataAccess.IEasyDAClientExtension.ReadItemValue(IEasyDAClient client, ServerDescriptor serverDescriptor, DAItemDescriptor itemDescriptor)
   at OpcLabs.EasyOpc.DataAccess.IEasyDAClientExtension.ReadItemValue(IEasyDAClient client, String machineName, String serverClass, String itemId, VarType dataType)
   at OpcLabs.EasyOpc.DataAccess.IEasyDAClientExtension.ReadItemValue(IEasyDAClient client, String machineName, String serverClass, String itemId)
   at OPCReadTester.withSimpleRead.Button1_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
 
 
************** Loaded Assemblies **************
mscorlib
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3416.0 built by: NET472REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
OPCReadTester
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///D:/_Install/OPC%20Read%20Tester/OpcReadTester/OPCReadTester.exe
----------------------------------------
Microsoft.VisualBasic
    Assembly Version: 10.0.0.0
    Win32 Version: 14.7.3062.0 built by: NET472REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3416.0 built by: NET472REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3362.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3324.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3062.0 built by: NET472REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3324.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3062.0 built by: NET472REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Runtime.Remoting
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3062.0 built by: NET472REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
OpcLabs.EasyOpcClassic
    Assembly Version: 5.50.405.1
    Win32 Version: 5.50.405.1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/OpcLabs.EasyOpcClassic/v4.0_5.50.405.1__6faddca41dacb409/OpcLabs.EasyOpcClassic.dll
----------------------------------------
OpcLabs.BaseLib
    Assembly Version: 5.50.405.1
    Win32 Version: 5.50.405.1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/OpcLabs.BaseLib/v4.0_5.50.405.1__6faddca41dacb409/OpcLabs.BaseLib.dll
----------------------------------------
System.ServiceModel
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3324.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.ServiceModel/v4.0_4.0.0.0__b77a5c561934e089/System.ServiceModel.dll
----------------------------------------
System.Runtime.Serialization
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3324.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Serialization/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll
----------------------------------------
SMDiagnostics
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3324.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/SMDiagnostics/v4.0_4.0.0.0__b77a5c561934e089/SMDiagnostics.dll
----------------------------------------
System.ServiceModel.Internals
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3324.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.ServiceModel.Internals/v4.0_4.0.0.0__31bf3856ad364e35/System.ServiceModel.Internals.dll
----------------------------------------
System.Xaml
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3362.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xaml/v4.0_4.0.0.0__b77a5c561934e089/System.Xaml.dll
----------------------------------------
BoxedAppSDK.Managed
    Assembly Version: 3.3.14.0
    Win32 Version: 5.50.405.1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/OpcLabs.BaseLib/v4.0_5.50.405.1__6faddca41dacb409/OpcLabs.BaseLib.dll
----------------------------------------
App_Web_OpcLabs.EasyOpcClassicRaw.x86
    Assembly Version: 5.50.405.1
    Win32 Version: 5.50.405.1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/App_Web_OpcLabs.EasyOpcClassicRaw.x86/v4.0_5.50.405.1__6faddca41dacb409/App_Web_OpcLabs.EasyOpcClassicRaw.x86.dll
----------------------------------------
OpcNetApi
    Assembly Version: 2.1.105.1
    Win32 Version: 5.50.405.1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/OpcLabs.BaseLib/v4.0_5.50.405.1__6faddca41dacb409/OpcLabs.BaseLib.dll
----------------------------------------
Accessibility
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3062.0 built by: NET472REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
 
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
 
For example:
 
<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>
 
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

I check the Windows EventLog after this and I see the following error message:


The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID 
{D63B10C5-BB46-4990-A94F-E40B9D520160}
 and APPID 
{9CA88EE3-ACB7-47C8-AFC4-AB702511C276}
 to the user PHARMA\E0417130 SID (S-1-5-21-299502267-1645522239-682003330-1077462486) from address LocalHost (Using LRPC) running in the application container Unavailable SID (Unavailable). This security permission can be modified using the Component Services administrative tool.

Thank you!
Attachments:

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

More
08 Aug 2019 08:28 #7611 by SZL
Additional informations:

I read some other posts and find this: www.opclabs.com/forum/browsing/1449-extreemly-slow-in-browsing-opc-servers-on-a-machine

When I integrate this code to my project:
EasyDAClient.SharedParameters.MachineParameters.BrowseFromRegistry = False

after execution the following error message appear, but much faster than in the previous case (1-5 seconds with the above code, ~ 1 minute without the above code).



I think this is not a timeout error, but I cannot see detailed error message. About the error code do you know what is this?

Thank you!
Attachments:

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

More
07 Aug 2019 10:52 #7610 by SZL
Hello,

Sorry for the delay, I create my new test application with subscription. Before I send my answers to your questions:

Notes:
- I move the InstanceParameters to New()
- We use Try..Catch for every external module. We already found unhandled exceptions in another 3rd party vendor's API. So it is only a new security layer.
- I increase the HoldPeriod to 80000.

Ad 1. Yes, the client is on a different computer. Network problem: I think there are no network related problem because the Kepware and Matrikon clients read the data inside seconds, and refresh it every 1 sec:



The app at right bottom is my new test app with subscription. The full code of the test app:
Imports OpcLabs.BaseLib.Collections.Generic.Extensions
Imports OpcLabs.EasyOpc.DataAccess
Imports OpcLabs.EasyOpc.DataAccess.OperationModel
 
Public Class withSubscription
 
    Private client As New EasyDAClient
 
    Public Sub New()
        InitializeComponent()
 
        client.InstanceParameters.HoldPeriods.TopicRead = 80000
        client.InstanceParameters.Mode.AllowAsynchronousMethod = True
        client.InstanceParameters.Mode.AllowSynchronousMethod = True
        client.InstanceParameters.Timeouts.ReadItem = 58000
        client.InstanceParameters.Timeouts.BrowseServers = 50000
    End Sub
 
    Private Sub BtnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
        AddHandler client.ItemChanged, Sub(senderCL As Object, eCL As EasyDAItemChangedEventArgs)
                                           If eCL.Succeeded Then
                                               TextBox1.Text &= String.Format("{0}: {1}", eCL.Arguments.ItemDescriptor.ItemId, eCL.Vtq.Value) & vbCrLf
                                           Else
                                               TextBox1.Text &= String.Format("{0} *** Failure: {1}", eCL.Arguments.ItemDescriptor.ItemId, eCL.ErrorMessageBrief) & vbCrLf
                                           End If
                                       End Sub
 
        Dim tags As New List(Of DAItemGroupArguments)
#If DEBUG Then
        tags.Add(New DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Random", 5000, Nothing))
        tags.Add(New DAItemGroupArguments("", "OPCLabs.KitServer.2", "Trends.Ramp (1 min)", 5000, Nothing))
        tags.Add(New DAItemGroupArguments("", "OPCLabs.KitServer.2", "Trends.Sine (1 min)", 5000, Nothing))
        tags.Add(New DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 5000, Nothing))
#Else
        tags.Add(New DAItemGroupArguments("172.25.118.1", "Kepware.KEPServerEX.V5", "Siem.VERXEMS08.FQ_GV12", 5000, Nothing))
        tags.Add(New DAItemGroupArguments("172.25.118.1", "Kepware.KEPServerEX.V5", "Siem.VERXEMS08.FT_GV12", 5000, Nothing))
        tags.Add(New DAItemGroupArguments("172.25.118.1", "Kepware.KEPServerEX.V5", "Siem.VERXEMS08.FQ_GV13", 5000, Nothing))
        tags.Add(New DAItemGroupArguments("172.25.118.1", "Kepware.KEPServerEX.V5", "Siem.VERXEMS08.FT_GV13", 5000, Nothing))
#End If
 
        client.SubscribeMultipleItems(tags.ToArray())
    End Sub
 
End Class

You can see the response error in the image. The Kepware and Matrikon clients running on the same computer than my test app.

I dont understand why my client not work and other clients works.

Thank you for help!
Attachments:

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

More
03 Aug 2019 07:12 #7605 by support
Hello.

First, some small notes to your code - they do not have influence on the outcome, but I want to let you know:
- I would move the settings of InstanceParameters from ReadTagValuesFromOPC)_ to the New(). Parameters on EasyDAClient are meant to be set just once, before a first operation is invoked.
- The Try/Catch does nothing, because (except for usage and .NET execution errors), ReadMultipleItems never throws. This is the case with all methods that have "Multiple" in their name. They report errors through the .Exception property in the result objects.
- I would increase the HoldPeriod.TopicRead to be higher than the timeout.

Now to the real stuff.

Ad 1. I also do not understand this yet. Questions: Since you are entering an IP address, I suppose the client is on a different computer form the server, am I right? If so, aren't the delays somehow caused by the network? When you were using the Kepware Quick Client, have you been running it on the same computer as the server, or on the same computer where you do tests with QuickOPC?

Ad 2. Besides the minor notes above, your code looks right and it should work. So we need to look for reasons elsewhere.

Ad 3. Info about subscriptions, and examples:
- opclabs.doc-that.com/files/onlinedocs/QuickOpc/Latest/User%2...o%20OPC%20Classic%20Items.html
- the EasyOpcNetDemo project in the examples solution
- the HmiScreen project in the examples solution
- the SubscribeToMany project in the examples solution
- and many others in the Examples section of the documentation, and in the examples solution

Ad 4. The intent of modifying the HoldPeriod was to prevent disconnections *after* some previous operation. In this sense, it is no surprise that it does not help with the first call. Keep it there for now anyway.

Best regards

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

More
02 Aug 2019 11:13 #7600 by SZL
Hello,

Thank you!

No.1. OK. In this case I dont understand why can I read from property and why cannot from normal read.

No.2. I create a new test with value age 80000, but the result is timeout again. I send my full code and GUI settings:
Imports System.Globalization
Imports OpcLabs.EasyOpc.DataAccess
Imports OpcLabs.EasyOpc.DataAccess.Generic
Imports OpcLabs.EasyOpc.DataAccess.OperationModel
Imports OpcLabs.EasyOpc.OperationModel
 
Public Class withSimpleRead
 
    Public CL_GLOBAL As New EasyDAClient()
 
    Public Sub New()
        InitializeComponent()
 
        CL_GLOBAL.InstanceParameters.HoldPeriods.TopicRead = 80000
    End Sub
 
    Private Sub BtnRead_Click(sender As Object, e As EventArgs) Handles btnRead.Click
        btnRead.Enabled = False
        txtLog.Text &= "------------------------------------------------------------------" & vbCrLf
 
        Try
            Dim item As New DAReadItemArguments(txtServer.Text, txtProgId.Text, txtTag.Text, CInt(txtValueAge.Text))
            Dim res = ReadTagValuesFromOPC(item)
 
            For Each i In res
                txtLog.Text &= "Result: " & i.ToString() & vbCrLf
            Next
        Catch ex As Exception
            txtLog.Text &= "Error during read OPC tag values: " & ex.Message & vbCrLf
            If ex.InnerException IsNot Nothing Then
                txtLog.Text &= "InnerException: " & ex.InnerException.Message & vbCrLf
            End If
        Finally
            btnRead.Enabled = True
        End Try
    End Sub
 
    Public Function ReadTagValuesFromOPC(ByVal tagData As DAReadItemArguments) As DAVtqResult()
        CL_GLOBAL.InstanceParameters.Mode.AllowAsynchronousMethod = True
        CL_GLOBAL.InstanceParameters.Mode.AllowSynchronousMethod = True
        CL_GLOBAL.InstanceParameters.HoldPeriods.TopicRead = 59000
        CL_GLOBAL.InstanceParameters.Timeouts.ReadItem = 58000
        CL_GLOBAL.InstanceParameters.Timeouts.BrowseServers = 50000
 
        Return CL_GLOBAL.ReadMultipleItems(New DAReadItemArguments() {tagData})
    End Function
 
    Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
        My.Settings.Save()
    End Sub
 
End Class



You can see the errors in the image (at right side).
(the Property Id in GUI has no effect for anything).

No.3. Yes, I see the subsription is much faster. Do you have source code example how can I implement this in the easiest way? I need read the tag values every minute (the actual value). Thank you!

No.4. I modify the value for client object, but has no effect. I think because the first try throws timeout error.

In my code I move the client object from local object to global object and I not use the "Using" directive.

Thanks!
Attachments:

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

More
02 Aug 2019 09:50 #7598 by support
Hello.

Ad 1. In OPC Classic, "reading" is quite different from "getting properties". The fact that you can also get the value using properties should not lead to you to think that is the way to do it. It will never work efficiently with larger number of items, so discussing details of it (even though it works) is kind of a moot point. Properties with low numbers are those defined/reserved by OPC, 2 is for the value. Number like 5005 are then vendor-specific.

Ad 2. You yourself has sent this piece of code:
Dim item As New DAReadItemArguments(txtServer.Text, txtProgId.Text, txtTag.Text, CInt(txtValueAge.Text))
So apparently, you are passing in some age, in the last argument to the constructor. I have asked what is the value you are passing in.

Ad 3. "But after I see the tags in the right panel (so after the tree is loaded), all values updating in 1 sec repeatly." Apparently, you are observing how fast OPC *subscriptions* work. Subscriptions are the preferred way to get the data, over the reads. If you want to get updated data in the same way as the Quick Client is doing it, forget about "get properties", forget about "read", and have a look at subscriptions. You cannot compare different concept in different clients and expect them to give comparable resultst.

Ad 4. The "TopicRead" property is OK, but a) the value is in milliseconds, it should be 80000 instead, and b) I have already explained that you you must not set anything in OpcLabs.EasyOpc.DataAccess.Engine.EasyDAClientHoldPeriods.Default . For a proper way of doing it, see opclabs.doc-that.com/files/onlinedocs/QuickOpc/Latest/User's...kOPC/Setting%20Parameters.html .

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

More
02 Aug 2019 08:26 #7596 by SZL
Thank you for the answers, I send my comments to your suggestions:

1. Only this method produces a value. I am not an OPC expert, so possibly I'am on the wrong way. But I see that in this OPC Server the property id: 2 contains the value. In other systems I think the 5005 is the default property id for value. So I thought, that the ReadMultipleItems method use the default propertyid to read the value (perhaps I am wrong) and therefore it is not success. So in my test project I can only read value when I use GetPropertyValue and I manually set the property id to 2.

2. I check the Object Browser but I not find MaximumAge property for DA. I found it for UA, but currently I have a DA server. Or do you mean for ValueAge?

3. Yes I know what you mean. With Quick Client building the tree is slow too. But after I see the tags in the right panel (so after the tree is loaded), all values updating in 1 sec repeatly.

4. The subsription to a value unfortunatelly will not work, because we use the Quartz scheduler to start reading in every minute and the subscription works with other logic. I will try the 'hold period' suggestion. Do you mean for this?
OpcLabs.EasyOpc.DataAccess.Engine.EasyDAClientHoldPeriods.Default.TopicRead = 80 ' I need set seconds here?

It is not problem when the first reading is slow, if the second and later request are fast.

Thank you!

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

Moderators: support
Time to create page: 0.255 seconds

      

 Recommend this on Google