'Usage
Dim instance As _DAVtqResult Dim state As Object instance.SetState(state)
Parameters
- state
// Shows how to obtain object describing the data type of complex data node with OPC UA Complex Data plug-in. using System; using Microsoft.Extensions.DependencyInjection; using OpcLabs.BaseLib.DataTypeModel; using OpcLabs.BaseLib.OperationModel.Generic; using OpcLabs.EasyOpc.UA; using OpcLabs.EasyOpc.UA.AddressSpace; using OpcLabs.EasyOpc.UA.AddressSpace.Standard; using OpcLabs.EasyOpc.UA.InformationModel; using OpcLabs.EasyOpc.UA.Plugins.ComplexData; namespace UADocExamples.ComplexData._IEasyUAClientComplexData { class ResolveDataType { public static void Main1() { // Define which server we will work with. UAEndpointDescriptor endpointDescriptor = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"; // or "http://opcua.demo-this.com:51211/UA/SampleServer" (not in .NET Standard) // or "https://opcua.demo-this.com:51212/UA/SampleServer/" // Instantiate the client object. var client = new EasyUAClient(); // Obtain the data type ID. // // In many cases, you would be able to obtain the data type ID of a particular node by reading its DataType // attribute, or easier, by calling the extension method ReadDataType on the IEasyUAClient interface. // The sample server, however, shows a more advanced approach in which the data type ID refers to an abstract // data type, and the actual values are then sub-types of this base data type. This abstract data type does not // have any encodings associated with it and it is therefore not possible to extract its description from the // server. We therefore use a hard-coded data type ID for one of the sub-types in this example. // // The code to obtain the data type ID for given node would normally look like this: // UANodeId dataTypeId = client.ReadDataType( // endpointDescriptor, // "nsu=http://test.org/UA/Data/ ;i=10239"); // [ObjectsFolder]/Data.Static.Scalar.StructureValue // UANodeId dataTypeId = "nsu=http://test.org/UA/Data/ ;i=9440"; // ScalarValueDataType // Get the IEasyUAClientComplexData service from the client. This is needed for advanced complex data // operations. IEasyUAClientComplexData complexData = client.GetService<IEasyUAClientComplexData>(); // Resolve the data type ID to the data type object, containing description of the data type. ValueResult<DataType> dataTypeResult = complexData.ResolveDataType( new UAModelNodeDescriptor(endpointDescriptor, dataTypeId), UABrowseNames.DefaultBinary); // Check if the operation succeeded. Use the ThrowIfFailed method instead if you want exception be thrown. if (!dataTypeResult.Succeeded) { Console.WriteLine("*** Failure: {0}", dataTypeResult.ErrorMessageBrief); return; } // The actual data type is in the Value property. // Display basic information about what we have obtained. Console.WriteLine(dataTypeResult.Value); // If we want to see the whole hierarchy of the received data type, we can format it with the "V" (verbose) // specifier. In the debugger, you can view the same by displaying the private DebugView property. Console.WriteLine(); Console.WriteLine("{0:V}", dataTypeResult.Value); // For processing the internals of the data type, refer to examples for GenericData class. // Example output (truncated): // //ScalarValueDataType = structured // //ScalarValueDataType = structured // [BooleanValue] Boolean = primitive(System.Boolean) // [ByteStringValue] ByteString = primitive(System.Byte[]) // [ByteValue] Byte = primitive(System.Byte) // [DateTimeValue] DateTime = primitive(System.DateTime) // [DoubleValue] Double = primitive(System.Double) // [EnumerationValue] Int32 = primitive(System.Int32) // [ExpandedNodeIdValue] ExpandedNodeId = structured // [ByteString] optional ByteStringNodeId = structured // [Identifier] ByteString = primitive(System.Byte[]) // [NamespaceIndex] UInt16 = primitive(System.UInt16) // [FourByte] optional FourByteNodeId = structured // [Identifier] UInt16 = primitive(System.UInt16) // [NamespaceIndex] Byte = primitive(System.Byte) // [Guid] optional GuidNodeId = structured // [Identifier] Guid = primitive(System.Guid) // [NamespaceIndex] UInt16 = primitive(System.UInt16) // [NamespaceURI] optional CharArray = primitive(System.String) // [NamespaceURISpecified] switch Bit = primitive(System.Boolean) // [NodeIdType] switch NodeIdType = enumeration(6) // TwoByte = 0 // FourByte = 1 // Numeric = 2 // String = 3 // Guid = 4 // ByteString = 5 // [Numeric] optional NumericNodeId = structured // [Identifier] UInt32 = primitive(System.UInt32) // [NamespaceIndex] UInt16 = primitive(System.UInt16) // [ServerIndex] optional UInt32 = primitive(System.UInt32) // [ServerIndexSpecified] switch Bit = primitive(System.Boolean) // [String] optional StringNodeId = structured // [Identifier] CharArray = primitive(System.String) // [NamespaceIndex] UInt16 = primitive(System.UInt16) // [TwoByte] optional TwoByteNodeId = structured // [Identifier] Byte = primitive(System.Byte) // [FloatValue] Float = primitive(System.Single) // [GuidValue] Guid = primitive(System.Guid) // [Int16Value] Int16 = primitive(System.Int16) // [Int32Value] Int32 = primitive(System.Int32) // [Int64Value] Int64 = primitive(System.Int64) // [Integer] Variant = structured // [ArrayDimensions] optional sequence[*] of Int32 = primitive(System.Int32) // [ArrayDimensionsSpecified] switch sequence[1] of Bit = primitive(System.Boolean) // [ArrayLength] length optional Int32 = primitive(System.Int32) // [ArrayLengthSpecified] switch sequence[1] of Bit = primitive(System.Boolean) // [Boolean] optional sequence[*] of Boolean = primitive(System.Boolean) // [Byte] optional sequence[*] of Byte = primitive(System.Byte) } } }
// Shows how to obtain object describing the data type of complex data node with OPC UA Complex Data plug-in. class procedure ResolveDataType.Main; var Client: _EasyUAClient; ComplexData: _EasyUAClientComplexData; DataType: _DataType; DataTypeId: string; DataTypeResult: _ValueResult; EncodingName: _UAQualifiedName; EndpointDescriptor: string; ModelNodeDescriptor: _UAModelNodeDescriptor; begin // Define which server and node we will work with. EndpointDescriptor := 'http://opcua.demo-this.com:51211/UA/SampleServer'; //or 'https://opcua.demo-this.com:51212/UA/SampleServer/'; //or 'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer'; // Instantiate the client object Client := CoEasyUAClient.Create; // Obtain the data type ID. // // In many cases, you would be able to obtain the data type ID of a particular node by reading its DataType // attribute. // The sample server, however, shows a more advanced approach in which the data type ID refers to an abstract data type, and // the actual values are then sub-types of this base data type. This abstract data type does not have any encodings // associated with it and it is therefore not possible to extract its description from the server. We therefore use // a hard-coded data type ID for one of the sub-types in this example. DataTypeId := 'nsu=http://test.org/UA/Data/ ;i=9440'; // ScalarValueDataType // Get the IEasyUAClientComplexData service from the client. This is needed for advanced complex data // operations. ComplexData := IInterface(Client.GetServiceByName('OpcLabs.EasyOpc.UA.Plugins.ComplexData.IEasyUAClientComplexData, OpcLabs.EasyOpcUA')) as _EasyUAClientComplexData; // Resolve the data type ID to the data type object, containing description of the data type. ModelNodeDescriptor := CoUAModelNodeDescriptor.Create; ModelNodeDescriptor.EndpointDescriptor.UrlString := EndpointDescriptor; ModelNodeDescriptor.NodeDescriptor.NodeId.ExpandedText := DataTypeId; EncodingName := CoUAQualifiedName.Create; EncodingName.StandardName := 'DefaultBinary'; DataTypeResult := ComplexData.ResolveDataType(ModelNodeDescriptor, EncodingName); if not DataTypeResult.Succeeded then begin WriteLn(Format('*** Failure: %s', [DataTypeResult.ErrorMessageBrief])); Exit; end; // The actual data type is in the Value property. DataType := IUnknown(DataTypeResult.Value) as _DataType; // Display basic information about what we have obtained. WriteLn(DataType.ToString); // If we want to see the whole hierarchy of the received data type, we can format it with the "V" (verbose) // specifier. Writeln; Writeln(DataType.ToString_2['V', nil]); // For processing the internals of the data type, refer to examples for GenericData class. // Example output (truncated): // //ScalarValueDataType = structured // //ScalarValueDataType = structured // [BooleanValue] Boolean = primitive(System.Boolean) // [ByteStringValue] ByteString = primitive(System.Byte[]) // [ByteValue] Byte = primitive(System.Byte) // [DateTimeValue] DateTime = primitive(System.DateTime) // [DoubleValue] Double = primitive(System.Double) // [EnumerationValue] Int32 = primitive(System.Int32) // [ExpandedNodeIdValue] ExpandedNodeId = structured // [ByteString] optional ByteStringNodeId = structured // [Identifier] ByteString = primitive(System.Byte[]) // [NamespaceIndex] UInt16 = primitive(System.UInt16) // [FourByte] optional FourByteNodeId = structured // [Identifier] UInt16 = primitive(System.UInt16) // [NamespaceIndex] Byte = primitive(System.Byte) // [Guid] optional GuidNodeId = structured // [Identifier] Guid = primitive(System.Guid) // [NamespaceIndex] UInt16 = primitive(System.UInt16) // [NamespaceURI] optional CharArray = primitive(System.String) // [NamespaceURISpecified] switch Bit = primitive(System.Boolean) // [NodeIdType] switch NodeIdType = enumeration(6) // TwoByte = 0 // FourByte = 1 // Numeric = 2 // String = 3 // Guid = 4 // ByteString = 5 // [Numeric] optional NumericNodeId = structured // [Identifier] UInt32 = primitive(System.UInt32) // [NamespaceIndex] UInt16 = primitive(System.UInt16) // [ServerIndex] optional UInt32 = primitive(System.UInt32) // [ServerIndexSpecified] switch Bit = primitive(System.Boolean) // [String] optional StringNodeId = structured // [Identifier] CharArray = primitive(System.String) // [NamespaceIndex] UInt16 = primitive(System.UInt16) // [TwoByte] optional TwoByteNodeId = structured // [Identifier] Byte = primitive(System.Byte) // [FloatValue] Float = primitive(System.Single) // [GuidValue] Guid = primitive(System.Guid) // [Int16Value] Int16 = primitive(System.Int16) // [Int32Value] Int32 = primitive(System.Int32) // [Int64Value] Int64 = primitive(System.Int64) // [Integer] Variant = structured // [ArrayDimensions] optional sequence[*] of Int32 = primitive(System.Int32) // [ArrayDimensionsSpecified] switch sequence[1] of Bit = primitive(System.Boolean) // [ArrayLength] length optional Int32 = primitive(System.Int32) // [ArrayLengthSpecified] switch sequence[1] of Bit = primitive(System.Boolean) // [Boolean] optional sequence[*] of Boolean = primitive(System.Boolean) // [Byte] optional sequence[*] of Byte = primitive(System.Byte) end;
' Shows how to obtain object describing the data type of complex data node with OPC UA Complex Data plug-in. Imports System Imports Microsoft.Extensions.DependencyInjection Imports OpcLabs.BaseLib.DataTypeModel Imports OpcLabs.BaseLib.OperationModel.Generic Imports OpcLabs.EasyOpc.UA Imports OpcLabs.EasyOpc.UA.AddressSpace Imports OpcLabs.EasyOpc.UA.AddressSpace.Standard Imports OpcLabs.EasyOpc.UA.InformationModel Imports OpcLabs.EasyOpc.UA.Plugins.ComplexData Namespace UADocExamples.ComplexData._IEasyUAClientComplexData Friend Class ResolveDataType Public Shared Sub Main1() ' Define which server we will work with. Dim endpointDescriptor As UAEndpointDescriptor = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" ' or "http://opcua.demo-this.com:51211/UA/SampleServer" (not in .NET Standard) ' or "https://opcua.demo-this.com:51212/UA/SampleServer/" ' Instantiate the client object. Dim client = New EasyUAClient ' Obtain the data type ID. ' ' In many cases, you would be able to obtain the data type ID of a particular node by reading its DataType ' attribute, or easier, by calling the extension method ReadDataType on the IEasyUAClient interface. The sample ' server, however, shows a more advanced approach in which the data type ID refers to an abstract data type, ' and the actual values are then sub-types of this base data type. This abstract data type does not have any ' encodings associated with it and it is therefore not possible to extract its description from the server. ' We therefore use a hard-coded data type ID for one of the sub-types in this example. ' ' The code to obtain the data type ID for given node would normally look like this: ' UANodeId dataTypeId = client.ReadDataType( ' endpointDescriptor, ' "nsu=http://test.org/UA/Data/ ;i=10239"); // [ObjectsFolder]/Data.Static.Scalar.StructureValue ' Dim dataTypeId As UANodeId = "nsu=http://test.org/UA/Data/ ;i=9440" ' ScalarValueDataType ' Get the IEasyUAClientComplexData service from the client. This is needed for advanced complex data ' operations. Dim complexData As IEasyUAClientComplexData = client.GetService(Of IEasyUAClientComplexData)() ' Resolve the data type ID to the data type object, containing description of the data type. Dim dataTypeResult As ValueResult(Of DataType) = complexData.ResolveDataType( _ New UAModelNodeDescriptor(endpointDescriptor, dataTypeId), _ UABrowseNames.DefaultBinary) ' Check if the operation succeeded. Use the ThrowIfFailed method instead if you want exception be thrown. If Not dataTypeResult.Succeeded Then Console.WriteLine("*** Failure: {0}", dataTypeResult.ErrorMessageBrief) Exit Sub End If ' The actual data type is in the Value property. ' Display basic information about what we have obtained. Console.WriteLine(dataTypeResult.Value) ' If we want to see the whole hierarchy of the received data type, we can format it with the "V" (verbose) ' specifier. In the debugger, you can view the same by displaying the private DebugView property. Console.WriteLine() Console.WriteLine("{0:V}", dataTypeResult.Value) ' For processing the internals of the data type, refer to examples for GenericData class. ' Example output (truncated): ' 'ScalarValueDataType = structured ' 'ScalarValueDataType = structured ' [BooleanValue] Boolean = primitive(System.Boolean) ' [ByteStringValue] ByteString = primitive(System.Byte[]) ' [ByteValue] Byte = primitive(System.Byte) ' [DateTimeValue] DateTime = primitive(System.DateTime) ' [DoubleValue] Double = primitive(System.Double) ' [EnumerationValue] Int32 = primitive(System.Int32) ' [ExpandedNodeIdValue] ExpandedNodeId = structured ' [ByteString] optional ByteStringNodeId = structured ' [Identifier] ByteString = primitive(System.Byte[]) ' [NamespaceIndex] UInt16 = primitive(System.UInt16) ' [FourByte] optional FourByteNodeId = structured ' [Identifier] UInt16 = primitive(System.UInt16) ' [NamespaceIndex] Byte = primitive(System.Byte) ' [Guid] optional GuidNodeId = structured ' [Identifier] Guid = primitive(System.Guid) ' [NamespaceIndex] UInt16 = primitive(System.UInt16) ' [NamespaceURI] optional CharArray = primitive(System.String) ' [NamespaceURISpecified] switch Bit = primitive(System.Boolean) ' [NodeIdType] switch NodeIdType = enumeration(6) ' TwoByte = 0 ' FourByte = 1 ' Numeric = 2 ' String = 3 ' Guid = 4 ' ByteString = 5 ' [Numeric] optional NumericNodeId = structured ' [Identifier] UInt32 = primitive(System.UInt32) ' [NamespaceIndex] UInt16 = primitive(System.UInt16) ' [ServerIndex] optional UInt32 = primitive(System.UInt32) ' [ServerIndexSpecified] switch Bit = primitive(System.Boolean) ' [String] optional StringNodeId = structured ' [Identifier] CharArray = primitive(System.String) ' [NamespaceIndex] UInt16 = primitive(System.UInt16) ' [TwoByte] optional TwoByteNodeId = structured ' [Identifier] Byte = primitive(System.Byte) ' [FloatValue] Float = primitive(System.Single) ' [GuidValue] Guid = primitive(System.Guid) ' [Int16Value] Int16 = primitive(System.Int16) ' [Int32Value] Int32 = primitive(System.Int32) ' [Int64Value] Int64 = primitive(System.Int64) ' [Integer] Variant = structured ' [ArrayDimensions] optional sequence[*] of Int32 = primitive(System.Int32) ' [ArrayDimensionsSpecified] switch sequence[1] of Bit = primitive(System.Boolean) ' [ArrayLength] length optional Int32 = primitive(System.Int32) ' [ArrayLengthSpecified] switch sequence[1] of Bit = primitive(System.Boolean) ' [Boolean] optional sequence[*] of Boolean = primitive(System.Boolean) ' [Byte] optional sequence[*] of Byte = primitive(System.Byte) End Sub End Class End Namespace
Rem Shows how to obtain object describing the data type of complex data node with OPC UA Complex Data plug-in. Option Explicit ' Define which server we will work with. Dim endpointDescriptor: endpointDescriptor = _ "http://opcua.demo-this.com:51211/UA/SampleServer" 'or "https://opcua.demo-this.com:51212/UA/SampleServer/" 'or "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" ' Instantiate the client object. Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient") ' Obtain the data type ID. ' ' In many cases, you would be able to obtain the data type ID of a particular node by reading its DataType ' attribute. ' The sample server, however, shows a more advanced approach in which the data type ID refers to an abstract data type, and ' the actual values are then sub-types of this base data type. This abstract data type does not have any encodings ' associated with it and it is therefore not possible to extract its description from the server. We therefore use ' a hard-coded data type ID for one of the sub-types in this example. Dim dataTypeId: dataTypeId = "nsu=http://test.org/UA/Data/ ;i=9440" ' ScalarValueDataType ' Get the IEasyUAClientComplexData service from the client. This is needed for advanced complex data ' operations. Dim ComplexData: Set ComplexData = _ Client.GetServiceByName("OpcLabs.EasyOpc.UA.Plugins.ComplexData.IEasyUAClientComplexData, OpcLabs.EasyOpcUA") ' Resolve the data type ID to the data type object, containing description of the data type. Dim ModelNodeDescriptor: Set ModelNodeDescriptor = CreateObject("OpcLabs.EasyOpc.UA.InformationModel.UAModelNodeDescriptor") ModelNodeDescriptor.EndpointDescriptor.UrlString = endpointDescriptor ModelNodeDescriptor.NodeDescriptor.NodeId.ExpandedText = dataTypeId Dim EncodingName: Set EncodingName = CreateObject("OpcLabs.EasyOpc.UA.AddressSpace.UAQualifiedName") EncodingName.StandardName = "DefaultBinary" Dim DataTypeResult: Set DataTypeResult = ComplexData.ResolveDataType(ModelNodeDescriptor, EncodingName) If Not DataTypeResult.Succeeded Then WScript.Echo "*** Failure: " & DataTypeResult.Exception.GetBaseException().Message WScript.Quit End If ' The actual data type is in the Value property. Dim DataType: Set DataType = DataTypeResult.Value ' Display basic information about what we have obtained. WScript.Echo DataType ' If we want to see the whole hierarchy of the received data type, we can format it with the "V" (verbose) ' specifier. WScript.Echo WScript.Echo DataType.ToString_2("V", Nothing) ' For processing the internals of the data type, refer to examples for GenericData class. ' Example output (truncated): ' 'ScalarValueDataType = structured ' 'ScalarValueDataType = structured ' [BooleanValue] Boolean = primitive(System.Boolean) ' [ByteStringValue] ByteString = primitive(System.Byte[]) ' [ByteValue] Byte = primitive(System.Byte) ' [DateTimeValue] DateTime = primitive(System.DateTime) ' [DoubleValue] Double = primitive(System.Double) ' [EnumerationValue] Int32 = primitive(System.Int32) ' [ExpandedNodeIdValue] ExpandedNodeId = structured ' [ByteString] optional ByteStringNodeId = structured ' [Identifier] ByteString = primitive(System.Byte[]) ' [NamespaceIndex] UInt16 = primitive(System.UInt16) ' [FourByte] optional FourByteNodeId = structured ' [Identifier] UInt16 = primitive(System.UInt16) ' [NamespaceIndex] Byte = primitive(System.Byte) ' [Guid] optional GuidNodeId = structured ' [Identifier] Guid = primitive(System.Guid) ' [NamespaceIndex] UInt16 = primitive(System.UInt16) ' [NamespaceURI] optional CharArray = primitive(System.String) ' [NamespaceURISpecified] switch Bit = primitive(System.Boolean) ' [NodeIdType] switch NodeIdType = enumeration(6) ' TwoByte = 0 ' FourByte = 1 ' Numeric = 2 ' String = 3 ' Guid = 4 ' ByteString = 5 ' [Numeric] optional NumericNodeId = structured ' [Identifier] UInt32 = primitive(System.UInt32) ' [NamespaceIndex] UInt16 = primitive(System.UInt16) ' [ServerIndex] optional UInt32 = primitive(System.UInt32) ' [ServerIndexSpecified] switch Bit = primitive(System.Boolean) ' [String] optional StringNodeId = structured ' [Identifier] CharArray = primitive(System.String) ' [NamespaceIndex] UInt16 = primitive(System.UInt16) ' [TwoByte] optional TwoByteNodeId = structured ' [Identifier] Byte = primitive(System.Byte) ' [FloatValue] Float = primitive(System.Single) ' [GuidValue] Guid = primitive(System.Guid) ' [Int16Value] Int16 = primitive(System.Int16) ' [Int32Value] Int32 = primitive(System.Int32) ' [Int64Value] Int64 = primitive(System.Int64) ' [Integer] Variant = structured ' [ArrayDimensions] optional sequence[*] of Int32 = primitive(System.Int32) ' [ArrayDimensionsSpecified] switch sequence[1] of Bit = primitive(System.Boolean) ' [ArrayLength] length optional Int32 = primitive(System.Int32) ' [ArrayLengthSpecified] switch sequence[1] of Bit = primitive(System.Boolean) ' [Boolean] optional sequence[*] of Boolean = primitive(System.Boolean) ' [Byte] optional sequence[*] of Byte = primitive(System.Byte)
Target Platforms: .NET Framework: Windows 10 (selected versions), Windows 11 (selected versions), Windows Server 2012, Windows Server 2016; .NET Core, .NET 5, .NET 6: Linux, macOS, Microsoft Windows