Fundamentals > Identifying Information in OPC UA Client-Server > OPC UA Browse Paths > OPC-UA Browse Path Format |
QuickOPC-UA uses the relative browse path string format recommended by the OPC specification, but extends it by an ability to specify the starting node ID (and therefore introducing the absolute browse paths), and by an ability to specify the namespaces not by an index into a namespace table, but by a namespace URI. The precise syntax of these extensions is beyond the current scope of this document, and the description below is just a close approximation.
An OPC-UA browse path can be represented by a string; in such case, it can express either a relative or absolute browse path (the UABrowsePath object cannot hold relative browse paths).
As mentioned above, the format of the browse path string is such that the individual elements (usually, node names) are separated by delimiters. In OPC-UA, the delimiter actually precedes every element, i.e. there is a delimiter also at the beginning of the relative browse path. Different delimiters are available for specifying various reference types. Following delimiters are available:
Delimiter | Description |
/ | Follow any subtype of HierarchicalReferences (technically, numerical node Id 44 in namespace 0). |
. | Follow any subtype of Aggregates reference type (technically, numerical node Id 33 in namespace 0). This is stricter than '/'. |
<referenceSpecifier> | Follow the specified reference type. A ‘#’ placed in front of the reference type name indicates that subtypes should not be followed. A ‘!’ in front of the reference type name is used to indicate that the inverse reference should be followed. |
If the OPC-UA browse path does not start with any of the above delimiters, it denotes an absolute path that starts from the node specified at the beginning of the string. For example, “[Objects]/Boilers” is an example of such absolute OPC-UA browse path, whereas “/Boilers” in OPC-UA is a relative browse path.
The string form of an OPC-UA browse path is a concept on the client side (QuickOPC), and the browse paths strings are not directly processed by OPC-UA servers.
Because the node names can contain any characters, we need to consider situations in which the node name itself contains a slash (‘/’) or a dot (‘.’). In such case, in the string format of browse paths, these characters are escaped by preceding them with an ampersand (‘&’). An ampersand itself needs to be escaped, too.
Parsing an absolute browse path:
// Parses an absolute OPC-UA browse path and displays its starting node and elements. using System; using OpcLabs.EasyOpc.UA.Navigation; using OpcLabs.EasyOpc.UA.Navigation.Parsing; namespace UADocExamples._UABrowsePathParser { class Parse { public static void Main1() { var browsePathParser = new UABrowsePathParser(); UABrowsePath browsePath; try { browsePath = browsePathParser.Parse("[ObjectsFolder]/Data/Static/UserScalar"); } catch (UABrowsePathFormatException browsePathFormatException) { Console.WriteLine("*** Failure: {0}", browsePathFormatException.GetBaseException().Message); return; } // Display results Console.WriteLine("StartingNodeId: {0}", browsePath.StartingNodeId); foreach (UABrowsePathElement browsePathElement in browsePath.Elements) Console.WriteLine(browsePathElement); // Example output: // StartingNodeId: ObjectsFolder // /Data // /Static // /UserScalar } } }
# Parses an absolute OPC-UA browse path and displays its starting node and elements. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc # Import .NET namespaces. from OpcLabs.EasyOpc.UA import * from OpcLabs.EasyOpc.UA.Navigation import * from OpcLabs.EasyOpc.UA.Navigation.Parsing import * browsePathParser = UABrowsePathParser() try: browsePath = browsePathParser.Parse('[ObjectsFolder]/Data/Static/UserScalar') except UABrowsePathFormatException as browsePathFormatException: print('*** Failure: ' + browsePathFormatException.GetBaseException().Message) exit() # Display results. print('StartingNodeId: ', browsePath.StartingNodeId, sep='') print() for browsePathElement in browsePath.Elements: print(browsePathElement) print() print('Finished.')
' Parses an absolute OPC-UA browse path and displays its starting node and elements. Imports OpcLabs.EasyOpc.UA.Navigation Imports OpcLabs.EasyOpc.UA.Navigation.Parsing Namespace _UABrowsePathParser Friend Class Parse Public Shared Sub Main1() Dim browsePathParser = New UABrowsePathParser() Dim browsePath As UABrowsePath Try browsePath = browsePathParser.Parse("[ObjectsFolder]/Data/Static/UserScalar") Catch browsePathFormatException As UABrowsePathFormatException Console.WriteLine("*** Failure: {0}", browsePathFormatException.GetBaseException.Message) Exit Sub End Try ' Display results Console.WriteLine("StartingNodeId: {0}", browsePath.StartingNodeId) For Each browsePathElement As UABrowsePathElement In browsePath.Elements Console.WriteLine(browsePathElement) Next browsePathElement ' Example output: ' StartingNodeId: ObjectsFolder ' /Data ' /Static ' /UserScalar End Sub End Class End Namespace
// Parses an absolute OPC-UA browse path and displays its starting node and elements. class procedure Parse.Main; var BrowsePath: _UABrowsePath; BrowsePathElement: _UABrowsePathElement; BrowsePathParser: OpcLabs_EasyOpcUA_TLB._UABrowsePathParser; Count: Cardinal; Element: OleVariant; ElementEnumerator: IEnumVariant; begin BrowsePathParser := CoUABrowsePathParser.Create; try BrowsePath := BrowsePathParser.Parse('[ObjectsFolder]/Data/Static/UserScalar'); except on E: EOleException do begin WriteLn(Format('*** Failure: %s', [E.GetBaseException.Message])); Exit; end; end; // Display results WriteLn('StartingNodeId: ', BrowsePath.StartingNodeId.ToString); WriteLn('Elements:'); ElementEnumerator := BrowsePath.Elements.GetEnumerator; while (ElementEnumerator.Next(1, Element, Count) = S_OK) do begin BrowsePathElement := IUnknown(Element) as _UABrowsePathElement; WriteLn(BrowsePathElement.ToString); end; // Example output: // StartingNodeId: ObjectsFolder // Elements: // /Data // /Static // /UserScalar end;
// Parses an absolute OPC-UA browse path and displays its starting node and elements. $BrowsePathParser = new COM("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser"); try { $BrowsePath = $BrowsePathParser->Parse("[ObjectsFolder]/Data/Static/UserScalar"); } catch (com_exception $e) { printf("*** Failure: %s\n", $e->getMessage()); exit(); } // Display results printf("StartingNodeId: %s\n", $BrowsePath->StartingNodeId); printf("Elements:\n"); for ($i = 0; $i < $BrowsePath->Elements->Count; $i++) { printf("%s\n", $BrowsePath->Elements[$i]); } // Example output: // StartingNodeId: ObjectsFolder // Elements: // /Data // /Static // /UserScalar
Rem Parses an absolute OPC-UA browse path and displays its starting node and elements. Private Sub Parse_Main_Command_Click() OutputText = "" Dim BrowsePathParser As New UABrowsePathParser On Error Resume Next Dim browsePath As UABrowsePath Set browsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Static/UserScalar") If Err.Number <> 0 Then OutputText = OutputText & "*** Failure: " & Err.Source & ": " & Err.Description & vbCrLf Exit Sub End If On Error GoTo 0 ' Display results OutputText = OutputText & "StartingNodeId: " & browsePath.StartingNodeId & vbCrLf OutputText = OutputText & "Elements:" & vbCrLf Dim BrowsePathElement: For Each BrowsePathElement In browsePath.Elements OutputText = OutputText & BrowsePathElement & vbCrLf Next ' Example output: 'StartingNodeId: ObjectsFolder 'Elements: '/Data '/Static '/UserScalar End Sub
Rem Parses an absolute OPC-UA browse path and displays its starting node and elements. Option Explicit Dim BrowsePathParser: Set BrowsePathParser = CreateObject("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser") On Error Resume Next Dim BrowsePath: Set BrowsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Static/UserScalar") If Err.Number <> 0 Then WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description WScript.Quit End If On Error Goto 0 ' Display results WScript.Echo "StartingNodeId: " & BrowsePath.StartingNodeId WScript.Echo "Elements:" Dim BrowsePathElement: For Each BrowsePathElement In BrowsePath.Elements WScript.Echo BrowsePathElement Next
Attempting to parse an absolute browse path:
// Attempts to parse an absolute OPC-UA browse path and displays its starting node and elements. using System; using OpcLabs.BaseLib; using OpcLabs.EasyOpc.UA.Navigation; using OpcLabs.EasyOpc.UA.Navigation.Parsing; namespace UADocExamples._UABrowsePathParser { class TryParse { public static void Main1() { var browsePathParser = new UABrowsePathParser(); IStringParsingError stringParsingError = browsePathParser.TryParse( "[ObjectsFolder]/Data/Static/UserScalar", out UABrowsePath browsePath); // Display results if (!(stringParsingError is null)) { Console.WriteLine("*** Error: {0}", stringParsingError); return; } Console.WriteLine("StartingNodeId: {0}", browsePath.StartingNodeId); foreach (UABrowsePathElement browsePathElement in browsePath.Elements) Console.WriteLine(browsePathElement); // Example output: // StartingNodeId: ObjectsFolder // /Data // /Static // /UserScalar } } }
# Attempts to parse an absolute OPC-UA browse path and displays its starting node and elements. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc # Import .NET namespaces. from OpcLabs.EasyOpc.UA import * from OpcLabs.EasyOpc.UA.Navigation import * from OpcLabs.EasyOpc.UA.Navigation.Parsing import * browsePathParser = UABrowsePathParser() stringParsingError, browsePath = browsePathParser.TryParse('[ObjectsFolder]/Data/Static/UserScalar', None) # Display results. if stringParsingError is not None: print('*** Error: ', stringParsingError, sep='') exit() print('StartingNodeId: ', browsePath.StartingNodeId, sep='') print() for browsePathElement in browsePath.Elements: print(browsePathElement) print() print('Finished.')
' Attempts to parses an absolute OPC-UA browse path and displays its starting node and elements. Imports System Imports OpcLabs.BaseLib Imports OpcLabs.EasyOpc.UA.Navigation Imports OpcLabs.EasyOpc.UA.Navigation.Parsing Namespace _UABrowsePathParser Friend Class TryParse Public Shared Sub Main1() Dim browsePathParser = New UABrowsePathParser() Dim browsePath As UABrowsePath = Nothing Dim stringParsingError As IStringParsingError = browsePathParser.TryParse("[ObjectsFolder]/Data/Static/UserScalar", browsePath) ' Display results If Not stringParsingError Is Nothing Then Console.WriteLine("*** Error: {0}", stringParsingError) Exit Sub End If Console.WriteLine("StartingNodeId: {0}", browsePath.StartingNodeId) For Each browsePathElement As UABrowsePathElement In browsePath.Elements Console.WriteLine(browsePathElement) Next browsePathElement ' Example output: ' StartingNodeId: ObjectsFolder ' /Data ' /Static ' /UserScalar End Sub End Class End Namespace
// Attempts to parses an absolute OPC-UA browse path and displays its starting node and elements. class procedure TryParse.Main; var BrowsePath: _UABrowsePath; BrowsePathElement: _UABrowsePathElement; BrowsePathParser: OpcLabs_EasyOpcUA_TLB._UABrowsePathParser; BrowsePathResult: OleVariant; Count: Cardinal; Element: OleVariant; ElementEnumerator: IEnumVariant; StringParsingError: _StringParsingError; begin BrowsePathParser := CoUABrowsePathParser.Create; StringParsingError := BrowsePathParser.TryParse('[ObjectsFolder]/Data/Static/UserScalar', BrowsePathResult); // Display results if StringParsingError <> nil then begin WriteLn('*** Error: ', StringParsingError.ToString); Exit; end; BrowsePath := IUnknown(BrowsePathResult) as _UABrowsePath; WriteLn('StartingNodeId: ', BrowsePath.StartingNodeId.ToString); WriteLn('Elements:'); ElementEnumerator := BrowsePath.Elements.GetEnumerator; while (ElementEnumerator.Next(1, Element, Count) = S_OK) do begin BrowsePathElement := IUnknown(Element) as _UABrowsePathElement; WriteLn(BrowsePathElement.ToString); end; // Example output: // StartingNodeId: ObjectsFolder // Elements: // /Data // /Static // /UserScalar end;
// Attempts to parses an absolute OPC-UA browse path and displays its starting node and elements. $BrowsePath = new COM("OpcLabs.EasyOpc.UA.Navigation.UABrowsePath"); $BrowsePathParser = new COM("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser"); $StringParsingError = $BrowsePathParser->TryParse("[ObjectsFolder]/Data/Static/UserScalar", $BrowsePath); // Display results if (!is_null($StringParsingError)) { printf("*** Error: %s\n", $StringParsingError); exit(); } printf("StartingNodeId: %s\n", $BrowsePath->StartingNodeId); printf("Elements:\n"); for ($i = 0; $i < $BrowsePath->Elements->Count; $i++) { printf("%s\n", $BrowsePath->Elements[$i]); } // Example output: // StartingNodeId: ObjectsFolder // Elements: // /Data // /Static // /UserScalar
Rem Attempts to parses an absolute OPC-UA browse path and displays its starting node and elements. Private Sub TryParse_Main_Command_Click() OutputText = "" Dim BrowsePathParser As New UABrowsePathParser Dim stringParsingError As stringParsingError Dim browsePath As Variant Set stringParsingError = BrowsePathParser.TryParse("[ObjectsFolder]/Data/Static/UserScalar", browsePath) ' Display results If Not stringParsingError Is Nothing Then OutputText = OutputText & "*** Error: " & stringParsingError & vbCrLf Exit Sub End If OutputText = OutputText & "StartingNodeId: " & browsePath.StartingNodeId & vbCrLf OutputText = OutputText & "Elements:" & vbCrLf Dim BrowsePathElement: For Each BrowsePathElement In browsePath.Elements OutputText = OutputText & BrowsePathElement & vbCrLf Next ' Example output: 'StartingNodeId: ObjectsFolder 'Elements: '/Data '/Static '/UserScalar End Sub
Rem Attempts to parses an absolute OPC-UA browse path and displays its starting node and elements. Option Explicit Dim BrowsePathParser: Set BrowsePathParser = CreateObject("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser") Dim BrowsePath Dim StringParsingError: Set StringParsingError = BrowsePathParser.TryParse("[ObjectsFolder]/Data/Static/UserScalar", BrowsePath) ' Display results If Not (StringParsingError Is Nothing) Then WScript.Echo "*** Error: " & StringParsingError WScript.Quit End If WScript.Echo "StartingNodeId: " & BrowsePath.StartingNodeId WScript.Echo "Elements:" Dim BrowsePathElement: For Each BrowsePathElement In BrowsePath.Elements WScript.Echo BrowsePathElement Next
Parsing a relative browse path:
// Parses a relative OPC-UA browse path and displays its elements. using System; using OpcLabs.EasyOpc.UA.Navigation; using OpcLabs.EasyOpc.UA.Navigation.Parsing; namespace UADocExamples._UABrowsePathParser { class ParseRelative { public static void Main1() { var browsePathParser = new UABrowsePathParser(); UABrowsePathElementCollection browsePathElements; try { browsePathElements = browsePathParser.ParseRelative("/Data.Dynamic.Scalar.CycleComplete"); } catch (UABrowsePathFormatException browsePathFormatException) { Console.WriteLine("*** Failure: {0}", browsePathFormatException.GetBaseException().Message); return; } // Display results foreach (UABrowsePathElement browsePathElement in browsePathElements) Console.WriteLine(browsePathElement); // Example output: // /Data // .Dynamic // .Scalar // .CycleComplete } } }
# Parses a relative OPC-UA browse path and displays its elements. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc # Import .NET namespaces. from OpcLabs.EasyOpc.UA import * from OpcLabs.EasyOpc.UA.Navigation import * from OpcLabs.EasyOpc.UA.Navigation.Parsing import * browsePathParser = UABrowsePathParser() try: browsePathElements = browsePathParser.ParseRelative('/Data.Dynamic.Scalar.CycleComplete') except UABrowsePathFormatException as browsePathFormatException: print('*** Failure: ' + browsePathFormatException.GetBaseException().Message) exit() # Display results. for browsePathElement in browsePathElements: print(browsePathElement) print() print('Finished.')
' Parses a relative OPC-UA browse path and displays its elements. Imports OpcLabs.EasyOpc.UA.Navigation Imports OpcLabs.EasyOpc.UA.Navigation.Parsing Namespace _UABrowsePathParser Friend Class ParseRelative Public Shared Sub Main1() Dim browsePathParser = New UABrowsePathParser() Dim browsePathElements As UABrowsePathElementCollection Try browsePathElements = browsePathParser.ParseRelative("/Data.Dynamic.Scalar.CycleComplete") Catch browsePathFormatException As UABrowsePathFormatException Console.WriteLine("*** Failure: {0}", browsePathFormatException.GetBaseException.Message) Exit Sub End Try ' Display results For Each browsePathElement As UABrowsePathElement In browsePathElements Console.WriteLine(browsePathElement) Next browsePathElement ' Example output: ' /Data ' .Dynamic ' .Scalar ' .CycleComplete End Sub End Class End Namespace
// Parses a relative OPC-UA browse path and displays its elements. class procedure ParseRelative.Main; var BrowsePathElement: _UABrowsePathElement; BrowsePathElements: _UABrowsePathElementCollection; BrowsePathParser: OpcLabs_EasyOpcUA_TLB._UABrowsePathParser; Count: Cardinal; Element: OleVariant; ElementEnumerator: IEnumVariant; begin BrowsePathParser := CoUABrowsePathParser.Create; try BrowsePathElements := BrowsePathParser.ParseRelative('/Data.Dynamic.Scalar.CycleComplete'); except on E: EOleException do begin WriteLn(Format('*** Failure: %s', [E.GetBaseException.Message])); Exit; end; end; // Display results ElementEnumerator := BrowsePathElements.GetEnumerator; while (ElementEnumerator.Next(1, Element, Count) = S_OK) do begin BrowsePathElement := IUnknown(Element) as _UABrowsePathElement; WriteLn(BrowsePathElement.ToString); end; // Example output: // /Data // .Dynamic // .Scalar // .CycleComplete end;
// Parses a relative OPC-UA browse path and displays its elements. $BrowsePathParser = new COM("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser"); try { $BrowsePathElements = $BrowsePathParser->ParseRelative("/Data.Dynamic.Scalar.CycleComplete"); } catch (com_exception $e) { printf("*** Failure: %s\n", $e->getMessage()); exit(); } // Display results for ($i = 0; $i < $BrowsePathElements->Count; $i++) { printf("%s\n", $BrowsePathElements[$i]); } // Example output: // /Data // .Dynamic // .Scalar // .CycleComplete
Rem Parses a relative OPC-UA browse path and displays its elements. Private Sub ParseRelative_Main_Command_Click() OutputText = "" Dim BrowsePathParser As New UABrowsePathParser On Error Resume Next Dim BrowsePathElements As UABrowsePathElementCollection Set BrowsePathElements = BrowsePathParser.ParseRelative("/Data.Dynamic.Scalar.CycleComplete") If Err.Number <> 0 Then OutputText = OutputText & "*** Failure: " & Err.Source & ": " & Err.Description & vbCrLf Exit Sub End If On Error GoTo 0 ' Display results Dim BrowsePathElement: For Each BrowsePathElement In BrowsePathElements OutputText = OutputText & BrowsePathElement & vbCrLf Next ' Example output: '/Data '.Dynamic '.Scalar '.CycleComplete End Sub
Rem Parses a relative OPC-UA browse path and displays its elements. Option Explicit Dim BrowsePathParser: Set BrowsePathParser = CreateObject("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser") On Error Resume Next Dim BrowsePathElements: Set BrowsePathElements = BrowsePathParser.ParseRelative("/Data.Dynamic.Scalar.CycleComplete") If Err.Number <> 0 Then WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description WScript.Quit End If On Error Goto 0 ' Display results Dim BrowsePathElement: For Each BrowsePathElement In BrowsePathElements WScript.Echo BrowsePathElement Next
Attempting to parse a relative browse path:
// Attempts to parse a relative OPC-UA browse path and displays its elements. using System; using OpcLabs.BaseLib; using OpcLabs.EasyOpc.UA.Navigation; using OpcLabs.EasyOpc.UA.Navigation.Parsing; namespace UADocExamples._UABrowsePathParser { class TryParseRelative { public static void Main1() { var browsePathElements = new UABrowsePathElementCollection(); var browsePathParser = new UABrowsePathParser(); IStringParsingError stringParsingError = browsePathParser.TryParseRelative("/Data.Dynamic.Scalar.CycleComplete", browsePathElements); // Display results if (!(stringParsingError is null)) { Console.WriteLine("*** Error: {0}", stringParsingError); return; } foreach (UABrowsePathElement browsePathElement in browsePathElements) Console.WriteLine(browsePathElement); // Example output: // /Data // .Dynamic // .Scalar // .CycleComplete } } }
# Attempts to parse a relative OPC-UA browse path and displays its elements. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc # Import .NET namespaces. from OpcLabs.EasyOpc.UA import * from OpcLabs.EasyOpc.UA.Navigation import * from OpcLabs.EasyOpc.UA.Navigation.Parsing import * browsePathElements = UABrowsePathElementCollection() browsePathParser = UABrowsePathParser() stringParsingError = browsePathParser.TryParseRelative('/Data.Dynamic.Scalar.CycleComplete', browsePathElements) # Display results. if stringParsingError is not None: print('*** Error: ', stringParsingError, sep='') exit() for browsePathElement in browsePathElements: print(browsePathElement) print() print('Finished.')
' Attempts to parse a relative OPC-UA browse path and displays its elements. Imports System Imports OpcLabs.BaseLib Imports OpcLabs.EasyOpc.UA.Navigation Imports OpcLabs.EasyOpc.UA.Navigation.Parsing Namespace _UABrowsePathParser Friend Class TryParseRelative Public Shared Sub Main1() Dim browsePathElements = New UABrowsePathElementCollection() Dim browsePathParser = New UABrowsePathParser() Dim stringParsingError As IStringParsingError = browsePathParser.TryParseRelative("/Data.Dynamic.Scalar.CycleComplete", browsePathElements) ' Display results If Not stringParsingError Is Nothing Then Console.WriteLine("*** Error: {0}", stringParsingError) Exit Sub End If For Each browsePathElement As UABrowsePathElement In browsePathElements Console.WriteLine(browsePathElement) Next browsePathElement ' Example output: ' /Data ' .Dynamic ' .Scalar ' .CycleComplete End Sub End Class End Namespace
// Attempts to parse a relative OPC-UA browse path and displays its elements. class procedure TryParseRelative.Main; var BrowsePathElement: _UABrowsePathElement; BrowsePathElements: _UABrowsePathElementCollection; BrowsePathParser: OpcLabs_EasyOpcUA_TLB._UABrowsePathParser; Count: Cardinal; Element: OleVariant; ElementEnumerator: IEnumVariant; StringParsingError: _StringParsingError; begin BrowsePathElements := CoUABrowsePathElementCollection.Create; BrowsePathParser := CoUABrowsePathParser.Create; StringParsingError := BrowsePathParser.TryParseRelative('/Data.Dynamic.Scalar.CycleComplete', BrowsePathElements); // Display results if StringParsingError <> nil then begin WriteLn('*** Error: ', StringParsingError.ToString); Exit; end; ElementEnumerator := BrowsePathElements.GetEnumerator; while (ElementEnumerator.Next(1, Element, Count) = S_OK) do begin BrowsePathElement := IUnknown(Element) as _UABrowsePathElement; WriteLn(BrowsePathElement.ToString); end; // Example output: // /Data // .Dynamic // .Scalar // .CycleComplete end;
// Attempts to parse a relative OPC-UA browse path and displays its elements. $BrowsePathElements = new COM("OpcLabs.EasyOpc.UA.Navigation.UABrowsePathElementCollection"); $BrowsePathParser = new COM("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser"); $StringParsingError = $BrowsePathParser->TryParseRelative("/Data.Dynamic.Scalar.CycleComplete", $BrowsePathElements); // Display results if (!is_null($StringParsingError)) { printf("*** Error: %s\n", $StringParsingError); exit(); } printf("StartingNodeId: %s\n", $BrowsePath->StartingNodeId); printf("Elements:\n"); for ($i = 0; $i < $BrowsePathElements->Count; $i++) { printf("%s\n", $BrowsePathElements[$i]); } // Example output: // /Data // .Dynamic // .Scalar // .CycleComplete
Rem Attempts to parse a relative OPC-UA browse path and displays its elements. Private Sub TryParseRelative_Main_Command_Click() OutputText = "" Dim BrowsePathElements As New UABrowsePathElementCollection Dim BrowsePathParser As New UABrowsePathParser Dim stringParsingError As stringParsingError Set stringParsingError = BrowsePathParser.TryParseRelative("/Data.Dynamic.Scalar.CycleComplete", BrowsePathElements) ' Display results If Not stringParsingError Is Nothing Then OutputText = OutputText & "*** Error: " & stringParsingError & vbCrLf Exit Sub End If Dim BrowsePathElement: For Each BrowsePathElement In BrowsePathElements OutputText = OutputText & BrowsePathElement & vbCrLf Next ' Example output: '/Data '.Dynamic '.Scalar '.CycleComplete End Sub
Rem Attempts to parse a relative OPC-UA browse path and displays its elements. Option Explicit Dim BrowsePathElements: Set BrowsePathElements = CreateObject("OpcLabs.EasyOpc.UA.Navigation.UABrowsePathElementCollection") Dim BrowsePathParser: Set BrowsePathParser = CreateObject("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser") Dim StringParsingError: Set StringParsingError = BrowsePathParser.TryParseRelative("/Data.Dynamic.Scalar.CycleComplete", BrowsePathElements) ' Display results If Not (StringParsingError Is Nothing) Then WScript.Echo "*** Error: " & StringParsingError WScript.Quit End If Dim BrowsePathElement: For Each BrowsePathElement In BrowsePathElements WScript.Echo BrowsePathElement Next
Copyright © 2004-2023 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base. Technical support: Online Forums, FAQ.