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.
- Forum
- Discussions
- QuickOPC-Classic in .NET
- Browsing, Browse Dialogs and Controls
- Failure Timeout browsing nodes.
Failure Timeout browsing nodes.
I must say that I do not quite understand what precisely you are doing with all these changes. Also, I do not understand what you mean by saying that the timeout error does not come from BrowseNodes method - because, it it does not, it would not be our problem. But the error message is "ours". So you must be confusing something in this respect.
Would it be possible that you put together a "minimalistic" project that shows the problem, and send it to me? I suppose I can get the demo of the server and run it in some simulation mode too?
Regards
Please Log in or Create an account to join the conversation.
Start of browsing:
2022-04-06 15:35:39 RecursiveWithRead Browsing and reading values... with filer E1,CNT
2022-04-06 15:35:39 BrowseAndReadFromNode Börjar scanna pID Timestamp 4
2022-04-06 15:35:39 BrowseAndReadFromNode Browsat OPC pID Timestamp 706
2022-04-06 15:35:39 BrowseAndReadFromNode Börjar scanna pID 1713_04 Timestamp 707
2022-04-06 15:35:39 BrowseAndReadFromNode Browsat OPC pID 1713_04 Timestamp 710
.....
2022-04-06 15:40:59 BrowseAndReadFromNode Börjar scanna pID 6974_01.C_AS1_ELM1 Timestamp 320193
2022-04-06 15:40:59 BrowseAndReadFromNode Browsat OPC pID 6974_01.C_AS1_ELM1 Timestamp 320195
2022-04-06 15:40:59 BrowseAndReadFromNode Prenumererar på 6974_01.C_AS1_ELM1.E1 Stopwatch 320198 Antal 2
2022-04-06 15:40:59 BrowseAndReadFromNode Börjar scanna pID 6974_01.D_5201_VM2 Timestamp 320199
2022-04-06 15:40:59 BrowseAndReadFromNode Browsat OPC pID 6974_01.D_5201_VM2 Timestamp 320200
2022-04-06 15:40:59 BrowseAndReadFromNode Prenumererar på 6974_01.D_5201_VM2.CNT Stopwatch 320695 Antal 2
2022-04-06 15:40:59 BrowseAndReadFromNode Börjar scanna pID 6974_01.D_5201_VM3 Timestamp 320696
2022-04-06 15:40:59 BrowseAndReadFromNode Browsat OPC pID 6974_01.D_5201_VM3 Timestamp 320698
Hris is the part where i added the readitemvalue function...
Dim newSymbol As DataRow = DataCashe.Tables("tblPiigabData").NewRow()
newSymbol("sNode") = nodeElement.ItemId
Try
newSymbol("rValue") = Client.ReadItemValue("", ServerClass, nodeElement.ItemId).ToString.Replace(",", ".")
newSymbol("iStatus") = 1
Catch ex As Exception
newSymbol("rValue") = 0
newSymbol("iStatus") = -1
End Try
DataCashe.Tables("tblPiigabdata").Rows.Add(newSymbol)
iCount += 1
Client.SubscribeItem("", ServerClass, nodeElement.ItemId, 180000)
WriteLogFile("BrowseAndReadFromNode Prenumererar på " & nodeElement.ItemId & " Stopwatch " & Stopwatch.ElapsedMilliseconds & " Antal " & iCount.ToString)
Please Log in or Create an account to join the conversation.
Yes it appears so But the thing is the error happens in the calling function not in the browsing function "BrowseAndReadFromNode" where the Browse method is called. But the timing is still not near any timeout values urrently set at 120000 ms butit stops at 1700 ms, but the timeout varies from time to time, i tried now and it timedout at 600ms...
This is the calling function where the error happens:
Sub RecursiveWithRead(Optional ByVal sFilter As String = "")
Stopwatch.Start()
WriteLogFile("RecursiveWithRead Browsing and reading values... with filer " & sFilter)
' Set timeout to only wait 1 second - default would be 1 minute to wait for good quality that may never come.
Client.InstanceParameters.Timeouts.ReadItem = 120000
Client.InstanceParameters.Timeouts.BrowseNodes = 120000
Dim eventHandler = New EasyDAItemChangedEventHandler(AddressOf client_ItemChanged)
AddHandler Client.ItemChanged, eventHandler
' Do the actual browsing and reading, starting from root of OPC address space (denoted by empty string for itemId)
Try
BrowseAndReadFromNode("", sFilter)
Catch opcException As OpcException
WriteLogFile("RecursiveWithRead Failure " & opcException.GetBaseException().Message)
End Try
Stopwatch.Stop()
End Sub
And this is the browsing function with my modifications, the function puts all found nodes in a internal dataset and starts a subscrition on it, then the canged event updates the values in the table when it changes :
Private Sub BrowseAndReadFromNode(parentItemId As String, sFilter As String)
WriteLogFile("BrowseAndReadFromNode Börjar scanna pID " & parentItemId & " Timestamp " & Stopwatch.ElapsedMilliseconds)
Dim bReadValue As Boolean = False
Dim sFilterArr() As String
sFilterArr = sFilter.Split(",")
Dim iCount As Integer = 1
' Obtain all node elements under parentItemId
Dim browseParameters = New DABrowseParameters() ' no filtering whatsoever
Dim nodeElementCollection As DANodeElementCollection = Client.BrowseNodes("", ServerClass, parentItemId, browseParameters)
' Remark: that BrowseNodes(...) may also throw OpcException; a production code should contain handling for it, here
' omitted for brevity.
WriteLogFile("BrowseAndReadFromNode Browsat OPC pID " & parentItemId & " Timestamp " & Stopwatch.ElapsedMilliseconds)
For Each nodeElement As DANodeElement In nodeElementCollection
'Debug.Assert(nodeElement IsNot Nothing)
' If the node is a leaf, it might be possible to read from it
If nodeElement.IsLeaf Then
' Determine what the display - either the value read, or exception message in case of failure.
For i = 0 To sFilterArr.Count - 1
If nodeElement.ItemId.EndsWith(sFilterArr(i)) Then
bReadValue = True
End If
Next
If bReadValue = True Then
Try
'Dim value As Object = Client.ReadItemValue("", ServerClass, nodeElement.ItemId)
'Client.SubscribeItem("", ServerClass, nodeElement.ItemId, 1000)
'Form1.ListBox1.Items.Add(nodeElement.ItemId)
'sNodes.Add(nodeElement.ItemId)
Dim newSymbol As DataRow = DataCashe.Tables("tblPiigabData").NewRow()
newSymbol("sNode") = nodeElement.ItemId
newSymbol("rValue") = 0
newSymbol("iStatus") = -1
DataCashe.Tables("tblPiigabdata").Rows.Add(newSymbol)
iCount += 1
Client.SubscribeItem("", ServerClass, nodeElement.ItemId, 180000)
WriteLogFile("BrowseAndReadFromNode Prenumererar på " & nodeElement.ItemId & " Stopwatch " & Stopwatch.ElapsedMilliseconds & " Antal " & iCount.ToString)
Catch exception As OpcException
WriteLogFile("BrowseAndReadFromNode error " & nodeElement.ItemId)
End Try
bReadValue = False
End If
' If the node is not a leaf, just display its itemId
Else
End If
' If the node is a branch, browse recursively into it.
If nodeElement.IsBranch AndAlso (nodeElement.ItemId <> "SimulateEvents") Then ' this branch is too big for the purpose of this example
BrowseAndReadFromNode(nodeElement.ItemId, sFilter)
End If
Next nodeElement
End Sub
Please Log in or Create an account to join the conversation.
thank you for the details.
Do I understand it correctly, that - from the following two entries - you can actually get timeout error with a method that does not really seem to "wait" and returns almost immediately?:
2022-04-05 15:07:34 BrowseAndReadFromNode Börjar scanna pID 1695_A_AS3.A_5201_VM1 Timestamp 1421 Start browsing new parent
2022-04-05 15:07:34 RecursiveWithRead Failure Timeout browsing nodes. Error
+ The client method called (or event/callback invoked) was 'BrowseNodes'.
Please Log in or Create an account to join the conversation.
1. Its the same type of setup for browsing the opcserver, ive used the example browse/read values but instead of reading values i add a subscription.
2. Its the Piigab M-Bus OPC server (latest version)
3. The OPC server has about 1000 nodes ith about 2200 subnodes and on them there are 18000 items, but i use a filter and try to browse about 4400 items (values). So there are some branches to scan trough but its only 2 nodes that needs to be returned.
4. When ' Obtain all node elements under parentItemId
Dim browseParameters = New DABrowseParameters() ' no filtering whatsoever
Dim nodeElementCollection As DANodeElementCollection = Client.BrowseNodes("", ServerClass, parentItemId, browseParameters) is executed, it takes maximum 10 ms complete. the whole timeframe for one example from first brovse is executed looks like:
Start of browsing...
2022-04-05 15:07:33 RecursiveWithRead Browsing and reading values... with filer E1,CNT
2022-04-05 15:07:33 BrowseAndReadFromNode Börjar scanna pID Timestamp 3
2022-04-05 15:07:34 BrowseAndReadFromNode Browsat OPC pID Timestamp 707 Finished first scan top node
....
2022-04-05 15:07:34 BrowseAndReadFromNode Börjar scanna pID 1695_A_AS3.A_AS3_ELM1Timestamp 1419 Begin scan new node
2022-04-05 15:07:34 BrowseAndReadFromNode Browsat OPC pID 1695_A_AS3.A_AS3_ELM1 Timestamp 1420 Begin scan browse completed
2022-04-05 15:07:34 BrowseAndReadFromNode Prenumererar på 1695_A_AS3.A_AS3_ELM1.E1 Stopwatch 1421 Antal 2 Found 2 nodes, added for subscription
2022-04-05 15:07:34 BrowseAndReadFromNode Börjar scanna pID 1695_A_AS3.A_5201_VM1 Timestamp 1421 Start browsing new parent
2022-04-05 15:07:34 RecursiveWithRead Failure Timeout browsing nodes. Error
+ The client method called (or event/callback invoked) was 'BrowseNodes'.
5. Currently .Net 4.8 and VS 2022 ,NET VB.
Please Log in or Create an account to join the conversation.
I have some questions:
1. When you say "pretty much with the method described i the documentation", do you mean that it also happens with our simulation server (as in the example), or do you mean that the example is almost identical, but the server is changed to yours?
2. Which OPC server are you connecting to, if not the simulation server delivered with QuickOPC?
3. Are there many nodes in the server? What I mean is the number of nodes under each particular branch, *not* a "total" i nthe server. I.e. the number of nodes that needs to be returned from one Browse call. How many, roughly? 10, 100, 1000, ... per branch?
4. When you wrote "...the actual brovsingtimes and its not near the timeouts set?", what are the observed timeouts? Are they longer or shorter than the timeout set?
5. Which .NET runtime are you running in? Is it .NET Framework 4.7.x/4.8, .NET Core, or .NET 5/6?
Thank you
Please Log in or Create an account to join the conversation.
2022-04-05 11:17:54 RecursiveWithRead Failure Timeout browsing nodes.
+ The client method called (or event/callback invoked) was 'BrowseNodes'.
Ive tried to increase the timeouts, but it dosent seem to help much.
Client.InstanceParameters.Timeouts.ReadItem = 60000
Client.InstanceParameters.Timeouts.BrowseNodes = 60000
The strange thing is that the number of succeeded browses differ from time to time without any other factors that i can see would affect this. Also ive put some stopwatches to see the actual brovsingtimes and its not near the timeouts set? What affects this error and how could i work around it? Currently i run version 2022.1.
//Fredric
Please Log in or Create an account to join the conversation.
- Forum
- Discussions
- QuickOPC-Classic in .NET
- Browsing, Browse Dialogs and Controls
- Failure Timeout browsing nodes.