// Shows how to read complex data with OPC UA Complex Data plug-in.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-CSharp .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.
using System;
using OpcLabs.BaseLib.DataTypeModel;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.ComplexData;
using OpcLabs.EasyOpc.UA.OperationModel;
namespace UADocExamples.ComplexData._EasyUAClient
{
class ReadValue
{
public static void Main1()
{
// Define which server and node we will work with.
UAEndpointDescriptor endpointDescriptor =
"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
// or "http://opcua.demo-this.com:51211/UA/SampleServer" (currently not supported)
// or "https://opcua.demo-this.com:51212/UA/SampleServer/"
UANodeDescriptor nodeDescriptor =
"nsu=http://test.org/UA/Data/ ;i=10239"; // [ObjectsFolder]/Data.Static.Scalar.StructureValue
// Instantiate the client object.
var client = new EasyUAClient();
// Read a node which returns complex data. This is done in the same way as regular reads - just the data
// returned is different.
object value;
try
{
value = client.ReadValue(endpointDescriptor, nodeDescriptor);
}
catch (UAException uaException)
{
Console.WriteLine("*** Failure: {0}", uaException.GetBaseException().Message);
return;
}
// Display basic information about what we have read.
Console.WriteLine(value);
// We know that this node returns complex data, so we can type cast to UAGenericObject.
var genericObject = (UAGenericObject) value;
// The actual data is in the GenericData property of the UAGenericObject.
//
// If we want to see the whole hierarchy of the received complex data, 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}", genericObject.GenericData);
// For processing the internals of the data, refer to examples for GenericData and DataType classes.
// .Int32Value
var int32Value = ((genericObject.GenericData as StructuredData)
?.FieldData["Int32Value"] as PrimitiveData)
?.Value as int?;
Console.WriteLine();
Console.WriteLine($"Int32Value: {int32Value}");
// Example output (truncated):
//
//(ScalarValueDataType) structured
//
//(ScalarValueDataType) structured
// [BooleanValue] (Boolean) primitive; True {System.Boolean}
// [ByteStringValue] (ByteString) primitive; System.Byte[] {System.Byte[]}
// [ByteValue] (Byte) primitive; 153 {System.Byte}
// [DateTimeValue] (DateTime) primitive; 5/11/2013 4:32:00 PM {System.DateTime}
// [DoubleValue] (Double) primitive; -8.93178007363702E+27 {System.Double}
// [EnumerationValue] (Int32) primitive; 0 {System.Int32}
// [ExpandedNodeIdValue] (ExpandedNodeId) structured
// [NamespaceURI] (CharArray) primitive; "http://samples.org/UA/memorybuffer/Instance" {System.String}
// [NamespaceURISpecified] (Bit) primitive; True {System.Boolean}
// [NodeIdType] (NodeIdType) enumeration; 3 (String)
// [ServerIndexSpecified] (Bit) primitive; False {System.Boolean}
// [String] (StringNodeId) structured
// [Identifier] (CharArray) primitive; "????" {System.String}
// [NamespaceIndex] (UInt16) primitive; 0 {System.UInt16}
// [FloatValue] (Float) primitive; 78.37176 {System.Single}
// [GuidValue] (Guid) primitive; 8129cdaf-24d9-8140-64f2-3a6d7a957fd7 {System.Guid}
// [Int16Value] (Int16) primitive; 2793 {System.Int16}
// [Int32Value] (Int32) primitive; 1133391074 {System.Int32}
// [Int64Value] (Int64) primitive; -1039109760798965779 {System.Int64}
// [Integer] (Variant) structured
// [ArrayDimensionsSpecified] sequence[1]
// [0] (Bit) primitive; False {System.Boolean}
// [ArrayLengthSpecified] sequence[1]
// [0] (Bit) primitive; False {System.Boolean}
// [Int64] sequence[1]
// [0] (Int64) primitive; 0 {System.Int64}
// [VariantType] sequence[6]
// [0] (Bit) primitive; False {System.Boolean}
// [1] (Bit) primitive; False {System.Boolean}
// [2] (Bit) primitive; False {System.Boolean}
// [3] (Bit) primitive; True {System.Boolean}
// [4] (Bit) primitive; False {System.Boolean}
// [5] (Bit) primitive; False {System.Boolean}
// [LocalizedTextValue] (LocalizedText) structured
// [Locale] (CharArray) primitive; "ko" {System.String}
// [LocaleSpecified] (Bit) primitive; True {System.Boolean}
// [Reserved1] sequence[6]
// [0] (Bit) primitive; False {System.Boolean}
// [1] (Bit) primitive; False {System.Boolean}
// [2] (Bit) primitive; False {System.Boolean}
// [3] (Bit) primitive; False {System.Boolean}
// [4] (Bit) primitive; False {System.Boolean}
// [5] (Bit) primitive; False {System.Boolean}
// [Text] (CharArray) primitive; "? ?? ??+ ??? ??) ?: ???? ?! ?!" {System.String}
// [TextSpecified] (Bit) primitive; True {System.Boolean}
// [NodeIdValue] (NodeId) structured
}
}
}
' Shows how to read complex data with OPC UA Complex Data plug-in.
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET .
' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
' a commercial license in order to use Online Forums, and we reply to every post.
Imports OpcLabs.EasyOpc.UA
Imports OpcLabs.EasyOpc.UA.ComplexData
Imports OpcLabs.EasyOpc.UA.OperationModel
Namespace ComplexData._EasyUAClient
Friend Class ReadValue
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" (currently not supported)
' or "https://opcua.demo-this.com:51212/UA/SampleServer/"
' Define which node we will work with.
Dim nodeDescriptor As UANodeDescriptor = _
"nsu=http://test.org/UA/Data/ ;i=10239" ' [ObjectsFolder]/Data.Static.Scalar.StructureValue
' Instantiate the client object.
Dim client = New EasyUAClient
' Read a node which returns complex data. This is done in the same way as regular reads - just the data
' returned is different.
Dim value As Object
Try
value = client.ReadValue(endpointDescriptor, nodeDescriptor)
Catch uaException As UAException
Console.WriteLine("*** Failure: {0}", uaException.GetBaseException.Message)
Exit Sub
End Try
' Display basic information about what we have read.
Console.WriteLine(value)
' We know that this node returns complex data, so we can type cast to UAGenericObject.
Dim genericObject = CType(value, UAGenericObject)
' The actual data is in the GenericData property of the UAGenericObject.
'
' If we want to see the whole hierarchy of the received complex data, 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}", genericObject.GenericData)
' For processing the internals of the data, refer to examples for GenericData and DataType classes.
' Example output (truncated):
'
'(ScalarValueDataType) structured
'
'(ScalarValueDataType) structured
' [BooleanValue] (Boolean) primitive; True {System.Boolean}
' [ByteStringValue] (ByteString) primitive; System.Byte[] {System.Byte[]}
' [ByteValue] (Byte) primitive; 153 {System.Byte}
' [DateTimeValue] (DateTime) primitive; 5/11/2013 4:32:00 PM {System.DateTime}
' [DoubleValue] (Double) primitive; -8.93178007363702E+27 {System.Double}
' [EnumerationValue] (Int32) primitive; 0 {System.Int32}
' [ExpandedNodeIdValue] (ExpandedNodeId) structured
' [NamespaceURI] (CharArray) primitive; "http://samples.org/UA/memorybuffer/Instance" {System.String}
' [NamespaceURISpecified] (Bit) primitive; True {System.Boolean}
' [NodeIdType] (NodeIdType) enumeration; 3 (String)
' [ServerIndexSpecified] (Bit) primitive; False {System.Boolean}
' [String] (StringNodeId) structured
' [Identifier] (CharArray) primitive; "????" {System.String}
' [NamespaceIndex] (UInt16) primitive; 0 {System.UInt16}
' [FloatValue] (Float) primitive; 78.37176 {System.Single}
' [GuidValue] (Guid) primitive; 8129cdaf-24d9-8140-64f2-3a6d7a957fd7 {System.Guid}
' [Int16Value] (Int16) primitive; 2793 {System.Int16}
' [Int32Value] (Int32) primitive; 1133391074 {System.Int32}
' [Int64Value] (Int64) primitive; -1039109760798965779 {System.Int64}
' [Integer] (Variant) structured
' [ArrayDimensionsSpecified] sequence[1]
' [0] (Bit) primitive; False {System.Boolean}
' [ArrayLengthSpecified] sequence[1]
' [0] (Bit) primitive; False {System.Boolean}
' [Int64] sequence[1]
' [0] (Int64) primitive; 0 {System.Int64}
' [VariantType] sequence[6]
' [0] (Bit) primitive; False {System.Boolean}
' [1] (Bit) primitive; False {System.Boolean}
' [2] (Bit) primitive; False {System.Boolean}
' [3] (Bit) primitive; True {System.Boolean}
' [4] (Bit) primitive; False {System.Boolean}
' [5] (Bit) primitive; False {System.Boolean}
' [LocalizedTextValue] (LocalizedText) structured
' [Locale] (CharArray) primitive; "ko" {System.String}
' [LocaleSpecified] (Bit) primitive; True {System.Boolean}
' [Reserved1] sequence[6]
' [0] (Bit) primitive; False {System.Boolean}
' [1] (Bit) primitive; False {System.Boolean}
' [2] (Bit) primitive; False {System.Boolean}
' [3] (Bit) primitive; False {System.Boolean}
' [4] (Bit) primitive; False {System.Boolean}
' [5] (Bit) primitive; False {System.Boolean}
' [Text] (CharArray) primitive; "? ?? ??+ ??? ??) ?: ???? ?! ?!" {System.String}
' [TextSpecified] (Bit) primitive; True {System.Boolean}
' [NodeIdValue] (NodeId) structured
End Sub
End Class
End Namespace
// Shows how to read complex data with OPC UA Complex Data plug-in.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client and subscriber examples in Object Pascal (Delphi) on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-OP .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.
class procedure ReadValue.Main;
var
Client: _EasyUAClient;
EndpointDescriptor: string;
GenericObject: _UAGenericObject;
NodeDescriptor: string;
Value: OleVariant;
begin
// Define which server and node we will work with.
EndpointDescriptor :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
//'https://opcua.demo-this.com:51212/UA/SampleServer/';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
NodeDescriptor := 'nsu=http://test.org/UA/Data/ ;i=10239'; // [ObjectsFolder]/Data.Static.Scalar.StructureValue
// Instantiate the client object
Client := CoEasyUAClient.Create;
// Read a node which returns complex data. This is done in the same way as regular reads - just the data
// returned is different.
try
Value := Client.ReadValue(EndpointDescriptor, NodeDescriptor);
except
on E: EOleException do
begin
WriteLn(Format('*** Failure: %s', [E.GetBaseException.Message]));
Exit;
end;
end;
// Display basic information about what we have read.
WriteLn('value: ', Value);
// We know that this node returns complex data, so it is a UAGenericObject.
GenericObject := IUnknown(Value) as _UAGenericObject;
// The actual data is in the GenericData property of the UAGenericObject.
//
// If we want to see the whole hierarchy of the received complex data, we can format it with the "V" (verbose)
// specifier. In the debugger, you can view the same by displaying the private DebugView property.
WriteLn;
WriteLn(GenericObject.GenericData.ToString_2['V', nil]);
// For processing the internals of the data, refer to examples for GenericData and DataType classes.
// Example output (truncated):
//
//(ScalarValueDataType) structured
//
//(ScalarValueDataType) structured
// [BooleanValue] (Boolean) primitive; True {System.Boolean}
// [ByteStringValue] (ByteString) primitive; System.Byte[] {System.Byte[]}
// [ByteValue] (Byte) primitive; 153 {System.Byte}
// [DateTimeValue] (DateTime) primitive; 5/11/2013 4:32:00 PM {System.DateTime}
// [DoubleValue] (Double) primitive; -8.93178007363702E+27 {System.Double}
// [EnumerationValue] (Int32) primitive; 0 {System.Int32}
// [ExpandedNodeIdValue] (ExpandedNodeId) structured
// [NamespaceURI] (CharArray) primitive; "http://samples.org/UA/memorybuffer/Instance" {System.String}
// [NamespaceURISpecified] (Bit) primitive; True {System.Boolean}
// [NodeIdType] (NodeIdType) enumeration; 3 (String)
// [ServerIndexSpecified] (Bit) primitive; False {System.Boolean}
// [String] (StringNodeId) structured
// [Identifier] (CharArray) primitive; "????" {System.String}
// [NamespaceIndex] (UInt16) primitive; 0 {System.UInt16}
// [FloatValue] (Float) primitive; 78.37176 {System.Single}
// [GuidValue] (Guid) primitive; 8129cdaf-24d9-8140-64f2-3a6d7a957fd7 {System.Guid}
// [Int16Value] (Int16) primitive; 2793 {System.Int16}
// [Int32Value] (Int32) primitive; 1133391074 {System.Int32}
// [Int64Value] (Int64) primitive; -1039109760798965779 {System.Int64}
// [Integer] (Variant) structured
// [ArrayDimensionsSpecified] sequence[1]
// [0] (Bit) primitive; False {System.Boolean}
// [ArrayLengthSpecified] sequence[1]
// [0] (Bit) primitive; False {System.Boolean}
// [Int64] sequence[1]
// [0] (Int64) primitive; 0 {System.Int64}
// [VariantType] sequence[6]
// [0] (Bit) primitive; False {System.Boolean}
// [1] (Bit) primitive; False {System.Boolean}
// [2] (Bit) primitive; False {System.Boolean}
// [3] (Bit) primitive; True {System.Boolean}
// [4] (Bit) primitive; False {System.Boolean}
// [5] (Bit) primitive; False {System.Boolean}
// [LocalizedTextValue] (LocalizedText) structured
// [Locale] (CharArray) primitive; "ko" {System.String}
// [LocaleSpecified] (Bit) primitive; True {System.Boolean}
// [Reserved1] sequence[6]
// [0] (Bit) primitive; False {System.Boolean}
// [1] (Bit) primitive; False {System.Boolean}
// [2] (Bit) primitive; False {System.Boolean}
// [3] (Bit) primitive; False {System.Boolean}
// [4] (Bit) primitive; False {System.Boolean}
// [5] (Bit) primitive; False {System.Boolean}
// [Text] (CharArray) primitive; "? ?? ??+ ??? ??) ?: ???? ?! ?!" {System.String}
// [TextSpecified] (Bit) primitive; True {System.Boolean}
// [NodeIdValue] (NodeId) structured
end;
// Shows how to read complex data with OPC UA Complex Data plug-in.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client and subscriber examples in PHP on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-PHP .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.
// Define which server and node we will work with.
$EndpointDescriptor =
//"http://opcua.demo-this.com:51211/UA/SampleServer";
//"https://opcua.demo-this.com:51212/UA/SampleServer/";
"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
$NodeDescriptor = "nsu=http://test.org/UA/Data/ ;i=10239"; // [ObjectsFolder]/Data.Static.Scalar.StructureValue
// Instantiate the client object
$Client = new COM("OpcLabs.EasyOpc.UA.EasyUAClient");
// Read a node which returns complex data. This is done in the same way as regular reads - just the data
// returned is different.
try
{
$Value = $Client->ReadValue($EndpointDescriptor, $NodeDescriptor);
}
catch (com_exception $e)
{
printf("*** Failure: %s\n", $e->getMessage());
Exit();
}
// Display basic information about what we have read.
printf("Value: %s\n", $Value);
// We know that this node returns complex data, so it is a UAGenericObject.
$GenericObject = $Value;
// The actual data is in the GenericData property of the UAGenericObject.
//
// If we want to see the whole hierarchy of the received complex data, we can format it with the "V" (verbose)
// specifier. In the debugger, you can view the same by displaying the private DebugView property.
printf("\n");
printf("%s\n", $GenericObject->GenericData->ToString_3("V"));
// For processing the internals of the data, refer to examples for GenericData and DataType classes.
// Example output (truncated):
//
//(ScalarValueDataType) structured
//
//(ScalarValueDataType) structured
// [BooleanValue] (Boolean) primitive; True {System.Boolean}
// [ByteStringValue] (ByteString) primitive; System.Byte[] {System.Byte[]}
// [ByteValue] (Byte) primitive; 153 {System.Byte}
// [DateTimeValue] (DateTime) primitive; 5/11/2013 4:32:00 PM {System.DateTime}
// [DoubleValue] (Double) primitive; -8.93178007363702E+27 {System.Double}
// [EnumerationValue] (Int32) primitive; 0 {System.Int32}
// [ExpandedNodeIdValue] (ExpandedNodeId) structured
// [NamespaceURI] (CharArray) primitive; "http://samples.org/UA/memorybuffer/Instance" {System.String}
// [NamespaceURISpecified] (Bit) primitive; True {System.Boolean}
// [NodeIdType] (NodeIdType) enumeration; 3 (String)
// [ServerIndexSpecified] (Bit) primitive; False {System.Boolean}
// [String] (StringNodeId) structured
// [Identifier] (CharArray) primitive; "????" {System.String}
// [NamespaceIndex] (UInt16) primitive; 0 {System.UInt16}
// [FloatValue] (Float) primitive; 78.37176 {System.Single}
// [GuidValue] (Guid) primitive; 8129cdaf-24d9-8140-64f2-3a6d7a957fd7 {System.Guid}
// [Int16Value] (Int16) primitive; 2793 {System.Int16}
// [Int32Value] (Int32) primitive; 1133391074 {System.Int32}
// [Int64Value] (Int64) primitive; -1039109760798965779 {System.Int64}
// [Integer] (Variant) structured
// [ArrayDimensionsSpecified] sequence[1]
// [0] (Bit) primitive; False {System.Boolean}
// [ArrayLengthSpecified] sequence[1]
// [0] (Bit) primitive; False {System.Boolean}
// [Int64] sequence[1]
// [0] (Int64) primitive; 0 {System.Int64}
// [VariantType] sequence[6]
// [0] (Bit) primitive; False {System.Boolean}
// [1] (Bit) primitive; False {System.Boolean}
// [2] (Bit) primitive; False {System.Boolean}
// [3] (Bit) primitive; True {System.Boolean}
// [4] (Bit) primitive; False {System.Boolean}
// [5] (Bit) primitive; False {System.Boolean}
// [LocalizedTextValue] (LocalizedText) structured
// [Locale] (CharArray) primitive; "ko" {System.String}
// [LocaleSpecified] (Bit) primitive; True {System.Boolean}
// [Reserved1] sequence[6]
// [0] (Bit) primitive; False {System.Boolean}
// [1] (Bit) primitive; False {System.Boolean}
// [2] (Bit) primitive; False {System.Boolean}
// [3] (Bit) primitive; False {System.Boolean}
// [4] (Bit) primitive; False {System.Boolean}
// [5] (Bit) primitive; False {System.Boolean}
// [Text] (CharArray) primitive; "? ?? ??+ ??? ??) ?: ???? ?! ?!" {System.String}
// [TextSpecified] (Bit) primitive; True {System.Boolean}
// [NodeIdValue] (NodeId) structured
Rem This example shows how to read and display data of an attribute (value, timestamps, and status code).
Rem
Rem Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
Rem OPC client and subscriber examples in VBScript on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBScript .
Rem Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
Rem a commercial license in order to use Online Forums, and we reply to every post.
Option Explicit
' Define which server and node we will work with.
Dim endpointDescriptor: endpointDescriptor = _
"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
'"http://opcua.demo-this.com:51211/UA/SampleServer"
'"https://opcua.demo-this.com:51212/UA/SampleServer/"
Dim nodeDescriptor: nodeDescriptor = _
"nsu=http://test.org/UA/Data/ ;i=10239" ' [ObjectsFolder]/Data.Static.Scalar.StructureValue
' Instantiate the client object.
Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient")
' Read a node which returns complex data. This is done in the same way as regular reads - just the data
' returned is different.
On Error Resume Next
Dim Value: Set Value = Client.ReadValue(endpointDescriptor, nodeDescriptor)
If Err.Number <> 0 Then
WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description
WScript.Quit
End If
On Error Goto 0
' Display basic information about what we have read.
WScript.Echo Value
' We know that this node returns complex data, so it is a UAGenericObject.
Dim GenericObject: Set GenericObject = Value
' The actual data is in the GenericData property of the UAGenericObject.
'
' If we want to see the whole hierarchy of the received complex data, we can format it with the "V" (verbose)
' specifier. In the debugger, you can view the same by displaying the private DebugView property.
WScript.Echo
WScript.Echo GenericObject.GenericData.ToString_2("V", Nothing)
' For processing the internals of the data, refer to examples for GenericData and DataType classes.
' Example output (truncated):
'
'(ScalarValueDataType) structured
'
'(ScalarValueDataType) structured
' [BooleanValue] (Boolean) primitive; True {System.Boolean}
' [ByteStringValue] (ByteString) primitive; System.Byte[] {System.Byte[]}
' [ByteValue] (Byte) primitive; 153 {System.Byte}
' [DateTimeValue] (DateTime) primitive; 5/11/2013 4:32:00 PM {System.DateTime}
' [DoubleValue] (Double) primitive; -8.93178007363702E+27 {System.Double}
' [EnumerationValue] (Int32) primitive; 0 {System.Int32}
' [ExpandedNodeIdValue] (ExpandedNodeId) structured
' [NamespaceURI] (CharArray) primitive; "http://samples.org/UA/memorybuffer/Instance" {System.String}
' [NamespaceURISpecified] (Bit) primitive; True {System.Boolean}
' [NodeIdType] (NodeIdType) enumeration; 3 (String)
' [ServerIndexSpecified] (Bit) primitive; False {System.Boolean}
' [String] (StringNodeId) structured
' [Identifier] (CharArray) primitive; "????" {System.String}
' [NamespaceIndex] (UInt16) primitive; 0 {System.UInt16}
' [FloatValue] (Float) primitive; 78.37176 {System.Single}
' [GuidValue] (Guid) primitive; 8129cdaf-24d9-8140-64f2-3a6d7a957fd7 {System.Guid}
' [Int16Value] (Int16) primitive; 2793 {System.Int16}
' [Int32Value] (Int32) primitive; 1133391074 {System.Int32}
' [Int64Value] (Int64) primitive; -1039109760798965779 {System.Int64}
' [Integer] (Variant) structured
' [ArrayDimensionsSpecified] sequence[1]
' [0] (Bit) primitive; False {System.Boolean}
' [ArrayLengthSpecified] sequence[1]
' [0] (Bit) primitive; False {System.Boolean}
' [Int64] sequence[1]
' [0] (Int64) primitive; 0 {System.Int64}
' [VariantType] sequence[6]
' [0] (Bit) primitive; False {System.Boolean}
' [1] (Bit) primitive; False {System.Boolean}
' [2] (Bit) primitive; False {System.Boolean}
' [3] (Bit) primitive; True {System.Boolean}
' [4] (Bit) primitive; False {System.Boolean}
' [5] (Bit) primitive; False {System.Boolean}
' [LocalizedTextValue] (LocalizedText) structured
' [Locale] (CharArray) primitive; "ko" {System.String}
' [LocaleSpecified] (Bit) primitive; True {System.Boolean}
' [Reserved1] sequence[6]
' [0] (Bit) primitive; False {System.Boolean}
' [1] (Bit) primitive; False {System.Boolean}
' [2] (Bit) primitive; False {System.Boolean}
' [3] (Bit) primitive; False {System.Boolean}
' [4] (Bit) primitive; False {System.Boolean}
' [5] (Bit) primitive; False {System.Boolean}
' [Text] (CharArray) primitive; "? ?? ??+ ??? ??) ?: ???? ?! ?!" {System.String}
' [TextSpecified] (Bit) primitive; True {System.Boolean}
' [NodeIdValue] (NodeId) structured
# Shows how to read complex data with OPC UA Complex Data plug-in.
#
# Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
# OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python .
# Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
# a commercial license in order to use Online Forums, and we reply to every post.
# The QuickOPC package is needed. Install it using "pip install opclabs_quickopc".
import opclabs_quickopc
# Import .NET namespaces.
from System import *
from OpcLabs.BaseLib.DataTypeModel import *
from OpcLabs.EasyOpc.UA import *
from OpcLabs.EasyOpc.UA.OperationModel import *
endpointDescriptor = UAEndpointDescriptor('opc.tcp://opcua.demo-this.com:51210/UA/SampleServer')
# or 'http://opcua.demo-this.com:51211/UA/SampleServer' (currently not supported)
# or 'https://opcua.demo-this.com:51212/UA/SampleServer/'
# [ObjectsFolder]/Data.Static.Scalar.StructureValue
nodeDescriptor = UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10239')
# Instantiate the client object.
client = EasyUAClient()
# Read a node which returns complex data. This is done in the same way as regular reads - just the data
# returned is different.
try:
value = IEasyUAClientExtension.ReadValue(client, endpointDescriptor, nodeDescriptor)
except UAException as uaException:
print('*** Failure: ' + uaException.GetBaseException().Message)
exit()
# Display basic information about what we have read.
print(value)
# We know that this node returns complex data, so we can type cast to UAGenericObject.
genericObject = value
# The actual data is in the GenericData property of the UAGenericObject.
#
# If we want to see the whole hierarchy of the received complex data, we can format it with the "V" (verbose)
# specifier. In the debugger, you can view the same by displaying the private DebugView property.
print()
print(String.Format('{0:V}', genericObject.GenericData))
# For processing the internals of the data, refer to examples for GenericData and DataType classes.
# .Int32Value
structuredData = genericObject.GenericData if isinstance(genericObject.GenericData, StructuredData) else None
fieldData = None if structuredData is None else structuredData.FieldData
fieldValue = None if fieldData is None else fieldData.get_Item('Int32Value')
primitiveData = fieldValue if isinstance(fieldValue, PrimitiveData) else None
int32Value = None if primitiveData is None else primitiveData.Value
print()
print('Int32Value: ', int32Value, sep='')
print()
print('Finished.')