Reads multiple attributes, using array of argument objects as an input.
Syntax
[JetBrains.Annotations.ItemNotNull()]
[JetBrains.Annotations.NotNull()]
object[] ReadMultiple(
object
)
[JetBrains.Annotations.ItemNotNull()]
[JetBrains.Annotations.NotNull()]
array<Object^>^ ReadMultiple(
Object^
)
'Declaration
<JetBrains.Annotations.ItemNotNullAttribute()>
<JetBrains.Annotations.NotNullAttribute()>
Function ReadMultiple( _
ByVal As Object _
) As Object()
'Usage
Dim instance As _EasyUAClient
Dim readArgumentsArray As Object
Dim value() As Object
value = instance.ReadMultiple(readArgumentsArray)
Parameters
- readArgumentsArray
- Array of OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments. Array of argument objects specifying what to read from an OPC-UA server.
The value of this parameter cannot be null
(Nothing
in Visual Basic).
The individual elements of the parameter value cannot be null
(Nothing
in Visual Basic).
Return Value
Array of
OpcLabs.EasyOpc.UA.OperationModel.UAAttributeDataResult. Returns an array of attribute data objects. Each object stores the value of an attribute, together with status code and timestamps. The indices of elements in the output array are the same as those in the input array, .
This method never returns null
(Nothing
in Visual Basic).
The individual elements of the returned value are never null
(Nothing
in Visual Basic).
Exceptions
Exception | Description |
System.ArgumentNullException |
A null reference (Nothing in Visual Basic) is passed to a method that does not accept it as a valid argument.
This is a usage error, i.e. it will never occur (the exception will not be thrown) in a correctly written program. Your code should not catch this exception. |
System.ObjectDisposedException | An operation was performed on a disposed object. |
Example
COM
COM
COM
// This example shows how to read the attributes of 4 OPC-UA nodes at once, and display the results.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// 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.
#include "stdafx.h" // Includes "QuickOpc.h", and other commonly used files
#include <atlsafe.h>
#include "ReadMultiple.h"
namespace _EasyUAClient
{
void ReadMultiple::Main()
{
// Initialize the COM library
CoInitializeEx(NULL, COINIT_MULTITHREADED);
{
_UAReadArgumentsPtr ReadArguments1Ptr(_uuidof(UAReadArguments));
ReadArguments1Ptr->EndpointDescriptor->UrlString =
//L"http://opcua.demo-this.com:51211/UA/SampleServer";
L"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
ReadArguments1Ptr->NodeDescriptor->NodeId->ExpandedText = L"nsu=http://test.org/UA/Data/ ;i=10853";
_UAReadArgumentsPtr ReadArguments2Ptr(_uuidof(UAReadArguments));
ReadArguments2Ptr->EndpointDescriptor->UrlString =
//L"http://opcua.demo-this.com:51211/UA/SampleServer";
L"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
ReadArguments2Ptr->NodeDescriptor->NodeId->ExpandedText = L"nsu=http://test.org/UA/Data/ ;i=10845";
_UAReadArgumentsPtr ReadArguments3Ptr(_uuidof(UAReadArguments));
ReadArguments3Ptr->EndpointDescriptor->UrlString =
//L"http://opcua.demo-this.com:51211/UA/SampleServer";
L"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
ReadArguments3Ptr->NodeDescriptor->NodeId->ExpandedText = L"nsu=http://test.org/UA/Data/ ;i=10304";
_UAReadArgumentsPtr ReadArguments4Ptr(_uuidof(UAReadArguments));
ReadArguments4Ptr->EndpointDescriptor->UrlString =
//L"http://opcua.demo-this.com:51211/UA/SampleServer";
L"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
ReadArguments4Ptr->NodeDescriptor->NodeId->ExpandedText = L"nsu=http://test.org/UA/Data/ ;i=10389";
CComSafeArray<VARIANT> arguments(4);
arguments.SetAt(0, _variant_t((IDispatch*)ReadArguments1Ptr));
arguments.SetAt(1, _variant_t((IDispatch*)ReadArguments2Ptr));
arguments.SetAt(2, _variant_t((IDispatch*)ReadArguments3Ptr));
arguments.SetAt(3, _variant_t((IDispatch*)ReadArguments4Ptr));
CComVariant vArguments(arguments);
// Instantiate the client object
_EasyUAClientPtr ClientPtr(__uuidof(EasyUAClient));
// Obtain values. By default, the Value attributes of the nodes will be read.
CComSafeArray<VARIANT> results;
results.Attach(ClientPtr->ReadMultiple(&vArguments));
// Display results
for (int i = results.GetLowerBound(); i <= results.GetUpperBound(); i++)
{
_UAAttributeDataResultPtr ResultPtr = results[i];
_variant_t vString;
vString.ChangeType(VT_BSTR, &_variant_t((IDispatch*)ResultPtr->AttributeData));
_tprintf(_T("results(d).AttributeDatas\n"), i, (LPCTSTR)CW2CT((_bstr_t)vString));
}
}
// Release all interface pointers BEFORE calling CoUninitialize()
CoUninitialize();
}
}
// This example shows how to read the attributes of 4 OPC-UA nodes at once, and
// display the results.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// 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 ReadMultiple.Main;
var
Arguments: OleVariant;
Client: EasyUAClient;
I: Cardinal;
ReadArguments1, ReadArguments2, ReadArguments3, ReadArguments4: _UAReadArguments;
Result: _UAAttributeDataResult;
Results: OleVariant;
begin
ReadArguments1 := CoUAReadArguments.Create;
ReadArguments1.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
ReadArguments1.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10853';
ReadArguments2 := CoUAReadArguments.Create;
ReadArguments2.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
ReadArguments2.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10845';
ReadArguments3 := CoUAReadArguments.Create;
ReadArguments3.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
ReadArguments3.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10304';
ReadArguments4 := CoUAReadArguments.Create;
ReadArguments4.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
ReadArguments4.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10389';
Arguments := VarArrayCreate([0, 3], varVariant);
Arguments[0] := ReadArguments1;
Arguments[1] := ReadArguments2;
Arguments[2] := ReadArguments3;
Arguments[3] := ReadArguments4;
// Instantiate the client object
Client := CoEasyUAClient.Create;
// Perform the operation
TVarData(Results).VType := varArray or varVariant;
TVarData(Results).VArray := PVarArray(Client.ReadMultiple(
PSafeArray(TVarData(Arguments).VArray)));
// Display results
for I := VarArrayLowBound(Results, 1) to VarArrayHighBound(Results, 1) do
begin
Result := IInterface(Results[I]) as _UAAttributeDataResult;
WriteLn('results(', I, ').AttributeData: ', Result.AttributeData.ToString);
end;
end;
// This example shows how to read the attributes of 4 OPC-UA nodes at once, and
// display the results.
//
// 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 ReadMultiple.Main;
var
Arguments: OleVariant;
Client: OpcLabs_EasyOpcUA_TLB._EasyUAClient;
I: Cardinal;
ReadArguments1, ReadArguments2, ReadArguments3, ReadArguments4: _UAReadArguments;
Result: _UAAttributeDataResult;
Results: OleVariant;
begin
ReadArguments1 := CoUAReadArguments.Create;
ReadArguments1.EndpointDescriptor.UrlString :=
//'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';
ReadArguments1.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10853';
ReadArguments2 := CoUAReadArguments.Create;
ReadArguments2.EndpointDescriptor.UrlString :=
//'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';
ReadArguments2.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10845';
ReadArguments3 := CoUAReadArguments.Create;
ReadArguments3.EndpointDescriptor.UrlString :=
//'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';
ReadArguments3.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10304';
ReadArguments4 := CoUAReadArguments.Create;
ReadArguments4.EndpointDescriptor.UrlString :=
//'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';
ReadArguments4.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10389';
Arguments := VarArrayCreate([0, 3], varVariant);
Arguments[0] := ReadArguments1;
Arguments[1] := ReadArguments2;
Arguments[2] := ReadArguments3;
Arguments[3] := ReadArguments4;
// Instantiate the client object
Client := CoEasyUAClient.Create;
// Perform the operation
TVarData(Results).VType := varArray or varVariant;
TVarData(Results).VArray := PVarArray(Client.ReadMultiple(Arguments));
// Display results
for I := VarArrayLowBound(Results, 1) to VarArrayHighBound(Results, 1) do
begin
Result := IInterface(Results[I]) as _UAAttributeDataResult;
if Result.Succeeded then
WriteLn('results(', I, ').AttributeData: ', Result.AttributeData.ToString)
else
WriteLn('results(', I, ') *** Failure: ', Result.ErrorMessageBrief);
end;
VarClear(Results);
VarClear(Arguments);
end;
// This example shows how to read the attributes of 4 OPC-UA nodes at once, and display the results.
//
// 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.
$ReadArguments1 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments1->EndpointDescriptor->UrlString =
//"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";
$ReadArguments1->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10853";
$ReadArguments2 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments2->EndpointDescriptor->UrlString =
//"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";
$ReadArguments2->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10845";
$ReadArguments3 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments3->EndpointDescriptor->UrlString =
//"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";
$ReadArguments3->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10304";
$ReadArguments4 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments4->EndpointDescriptor->UrlString =
//"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";
$ReadArguments4->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10389";
$arguments[0] = $ReadArguments1;
$arguments[1] = $ReadArguments2;
$arguments[2] = $ReadArguments3;
$arguments[3] = $ReadArguments4;
// Instantiate the client object
$Client = new COM("OpcLabs.EasyOpc.UA.EasyUAClient");
// Perform the operation
$results = $Client->ReadMultiple($arguments);
// Display results
for ($i = 0; $i < count($results); $i++)
{
$attributeDataResult = $results[$i];
if ($attributeDataResult->Succeeded)
printf("results[d].AttributeDatas\n", $i, $attributeDataResult->AttributeData);
else
printf("results[d]: *** Failures\n", $i, $attributeDataResult->ErrorMessageBrief);
}
REM This example shows how to read the attributes of 4 OPC-UA nodes at once, and
REM display the results.
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 Visual Basic on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VB .
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.
Public Sub ReadMultiple_Main_Command_Click()
OutputText = ""
Dim readArguments1 As New UAReadArguments
readArguments1.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
readArguments1.nodeDescriptor.NodeId.expandedText = "nsu=http://test.org/UA/Data/ ;i=10853"
Dim ReadArguments2 As New UAReadArguments
ReadArguments2.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
ReadArguments2.nodeDescriptor.NodeId.expandedText = "nsu=http://test.org/UA/Data/ ;i=10845"
Dim ReadArguments3 As New UAReadArguments
ReadArguments3.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
ReadArguments3.nodeDescriptor.NodeId.expandedText = "nsu=http://test.org/UA/Data/ ;i=10304"
Dim ReadArguments4 As New UAReadArguments
ReadArguments4.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
ReadArguments4.nodeDescriptor.NodeId.expandedText = "nsu=http://test.org/UA/Data/ ;i=10389"
Dim arguments(3) As Variant
Set arguments(0) = readArguments1
Set arguments(1) = ReadArguments2
Set arguments(2) = ReadArguments3
Set arguments(3) = ReadArguments4
' Instantiate the client object
Dim Client As New EasyUAClient
' Obtain values. By default, the Value attributes of the nodes will be read.
Dim results() As Variant
results = Client.ReadMultiple(arguments)
' Display results
Dim i: For i = LBound(results) To UBound(results)
Dim Result As UAAttributeDataResult: Set Result = results(i)
If Result.Succeeded Then
OutputText = OutputText & "results(" & i & ").AttributeData: " & Result.AttributeData & vbCrLf
Else
OutputText = OutputText & "results(" & i & ") *** Failure: " & Result.ErrorMessageBrief & vbCrLf
End If
Next
End Sub
Rem This example shows how to read the attributes of 4 OPC-UA nodes at once, and display the results.
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
Dim ReadArguments1: Set ReadArguments1 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments")
ReadArguments1.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
ReadArguments1.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10853"
Dim ReadArguments2: Set ReadArguments2 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments")
ReadArguments2.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
ReadArguments2.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10845"
Dim ReadArguments3: Set ReadArguments3 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments")
ReadArguments3.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
ReadArguments3.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10304"
Dim ReadArguments4: Set ReadArguments4 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments")
ReadArguments4.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
ReadArguments4.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10389"
Dim arguments(3)
Set arguments(0) = ReadArguments1
Set arguments(1) = ReadArguments2
Set arguments(2) = ReadArguments3
Set arguments(3) = ReadArguments4
' Instantiate the client object
Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient")
' Perform the operation
Dim results: results = Client.ReadMultiple(arguments)
' Display results
Dim i: For i = LBound(results) To UBound(results)
Dim AttributeDataResult: Set AttributeDataResult = results(i)
If AttributeDataResult.Succeeded Then
WScript.Echo "results(" & i & ").AttributeData: " & AttributeDataResult.AttributeData
Else
WScript.Echo "results(" & i & ") *** Failure: " & AttributeDataResult.ErrorMessageBrief
End If
Next
// This example shows how to read the attributes of 4 OPC-UA nodes specified by browse paths at once, and display the results.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// 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.
#include "stdafx.h" // Includes "QuickOpc.h", and other commonly used files
#include <atlsafe.h>
#include "ReadMultiple.h"
namespace _EasyUAClient
{
void ReadMultiple::BrowsePath()
{
// Initialize the COM library
CoInitializeEx(NULL, COINIT_MULTITHREADED);
{
_UABrowsePathParserPtr BrowsePathParserPtr(_uuidof(UABrowsePathParser));
BrowsePathParserPtr->DefaultNamespaceUriString = L"http://test.org/UA/Data/";
_UAReadArgumentsPtr ReadArguments1Ptr(_uuidof(UAReadArguments));
ReadArguments1Ptr->EndpointDescriptor->UrlString =
//L"http://opcua.demo-this.com:51211/UA/SampleServer";
L"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
ReadArguments1Ptr->NodeDescriptor->BrowsePath =
BrowsePathParserPtr->Parse(L"[ObjectsFolder]/Data/Dynamic/Scalar/FloatValue");
_UAReadArgumentsPtr ReadArguments2Ptr(_uuidof(UAReadArguments));
ReadArguments2Ptr->EndpointDescriptor->UrlString =
//L"http://opcua.demo-this.com:51211/UA/SampleServer";
L"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
ReadArguments2Ptr->NodeDescriptor->BrowsePath =
BrowsePathParserPtr->Parse(L"[ObjectsFolder]/Data/Dynamic/Scalar/SByteValue");
_UAReadArgumentsPtr ReadArguments3Ptr(_uuidof(UAReadArguments));
ReadArguments3Ptr->EndpointDescriptor->UrlString =
//L"http://opcua.demo-this.com:51211/UA/SampleServer";
L"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
ReadArguments3Ptr->NodeDescriptor->BrowsePath =
BrowsePathParserPtr->Parse(L"[ObjectsFolder]/Data/Static/Array/UInt16Value");
_UAReadArgumentsPtr ReadArguments4Ptr(_uuidof(UAReadArguments));
ReadArguments4Ptr->EndpointDescriptor->UrlString =
//L"http://opcua.demo-this.com:51211/UA/SampleServer";
L"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
ReadArguments4Ptr->NodeDescriptor->BrowsePath =
BrowsePathParserPtr->Parse(L"[ObjectsFolder]/Data/Static/UserScalar/Int32Value");
CComSafeArray<VARIANT> arguments(4);
arguments.SetAt(0, _variant_t((IDispatch*)ReadArguments1Ptr));
arguments.SetAt(1, _variant_t((IDispatch*)ReadArguments2Ptr));
arguments.SetAt(2, _variant_t((IDispatch*)ReadArguments3Ptr));
arguments.SetAt(3, _variant_t((IDispatch*)ReadArguments4Ptr));
CComVariant vArguments(arguments);
// Instantiate the client object
_EasyUAClientPtr ClientPtr(__uuidof(EasyUAClient));
// Obtain values. By default, the Value attributes of the nodes will be read.
CComSafeArray<VARIANT> results;
results.Attach(ClientPtr->ReadMultiple(&vArguments));
// Display results
for (int i = results.GetLowerBound(); i <= results.GetUpperBound(); i++)
{
_UAAttributeDataResultPtr ResultPtr = results[i];
_variant_t vString;
vString.ChangeType(VT_BSTR, &_variant_t((IDispatch*)ResultPtr->AttributeData));
_tprintf(_T("results(d).AttributeDatas\n"), i, (LPCTSTR)CW2CT((_bstr_t)vString));
}
}
// Release all interface pointers BEFORE calling CoUninitialize()
CoUninitialize();
}
}
// This example shows how to read the attributes of 4 OPC-UA nodes specified
// by browse paths at once, and display the results.
//
// 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 ReadMultiple.BrowsePath;
var
Arguments: OleVariant;
BrowsePathParser: _UABrowsePathParser;
Client: OpcLabs_EasyOpcUA_TLB._EasyUAClient;
I: Cardinal;
ReadArguments1, ReadArguments2, ReadArguments3, ReadArguments4: _UAReadArguments;
Result: _UAAttributeDataResult;
Results: OleVariant;
begin
BrowsePathParser := CoUABrowsePathParser.Create;
BrowsePathParser.DefaultNamespaceUriString := 'http://test.org/UA/Data/';
ReadArguments1 := CoUAReadArguments.Create;
ReadArguments1.EndpointDescriptor.UrlString :=
//'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';
// Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
ReadArguments1.NodeDescriptor.BrowsePath := BrowsePathParser.Parse('[ObjectsFolder]/Data/Dynamic/Scalar/FloatValue');
ReadArguments2 := CoUAReadArguments.Create;
ReadArguments2.EndpointDescriptor.UrlString :=
//'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';
// Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
ReadArguments2.NodeDescriptor.BrowsePath := BrowsePathParser.Parse('[ObjectsFolder]/Data/Dynamic/Scalar/SByteValue');
ReadArguments3 := CoUAReadArguments.Create;
ReadArguments3.EndpointDescriptor.UrlString :=
//'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';
// Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
ReadArguments3.NodeDescriptor.BrowsePath := BrowsePathParser.Parse('[ObjectsFolder]/Data/Static/Array/UInt16Value');
ReadArguments4 := CoUAReadArguments.Create;
ReadArguments4.EndpointDescriptor.UrlString :=
//'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';
// Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
ReadArguments4.NodeDescriptor.BrowsePath := BrowsePathParser.Parse('[ObjectsFolder]/Data/Static/UserScalar/Int32Value');
Arguments := VarArrayCreate([0, 3], varVariant);
Arguments[0] := ReadArguments1;
Arguments[1] := ReadArguments2;
Arguments[2] := ReadArguments3;
Arguments[3] := ReadArguments4;
// Instantiate the client object
Client := CoEasyUAClient.Create;
// Perform the operation
TVarData(Results).VType := varArray or varVariant;
TVarData(Results).VArray := PVarArray(Client.ReadMultiple(Arguments));
// Display results
for I := VarArrayLowBound(Results, 1) to VarArrayHighBound(Results, 1) do
begin
Result := IInterface(Results[I]) as _UAAttributeDataResult;
if Result.Succeeded then
WriteLn('results[', I, '].AttributeData: ', Result.AttributeData.ToString)
else
WriteLn('results[', I, '] *** Failure: ', Result.ErrorMessageBrief);
end;
VarClear(Results);
VarClear(Arguments);
// Example output:
//results[0].AttributeData: 4.187603E+21 {System.Single} @2019-11-09T14:05:46.268 @@2019-11-09T14:05:46.268; Good
//results[1].AttributeData: -98 {System.Int16} @2019-11-09T14:05:46.268 @@2019-11-09T14:05:46.268; Good
//results[2].AttributeData: [58] {38240, 11129, 64397, 22845, 30525, ...} {System.Int32[]} @2019-11-09T14:00:07.543 @@2019-11-09T14:05:46.268; Good
//results[3].AttributeData: 1280120396 {System.Int32} @2019-11-09T14:00:07.590 @@2019-11-09T14:05:46.268; Good
end;
// This example shows how to read the attributes of 4 OPC-UA nodes specified by browse paths at once, and display the results.
//
// 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.
$BrowsePathParser = new COM("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser");
$BrowsePathParser->DefaultNamespaceUriString = "http://test.org/UA/Data/";
$ReadArguments1 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments1->EndpointDescriptor->UrlString =
//"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";
$ReadArguments1->NodeDescriptor->BrowsePath = $BrowsePathParser->Parse("[ObjectsFolder]/Data/Dynamic/Scalar/FloatValue");
$ReadArguments2 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments2->EndpointDescriptor->UrlString =
//"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";
$ReadArguments2->NodeDescriptor->BrowsePath = $BrowsePathParser->Parse("[ObjectsFolder]/Data/Dynamic/Scalar/SByteValue");
$ReadArguments3 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments3->EndpointDescriptor->UrlString =
//"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";
$ReadArguments3->NodeDescriptor->BrowsePath = $BrowsePathParser->Parse("[ObjectsFolder]/Data/Static/Array/UInt16Value");
$ReadArguments4 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments4->EndpointDescriptor->UrlString =
//"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";
$ReadArguments4->NodeDescriptor->BrowsePath = $BrowsePathParser->Parse("[ObjectsFolder]/Data/Static/UserScalar/Int32Value");
$arguments[0] = $ReadArguments1;
$arguments[1] = $ReadArguments2;
$arguments[2] = $ReadArguments3;
$arguments[3] = $ReadArguments4;
// Instantiate the client object
$Client = new COM("OpcLabs.EasyOpc.UA.EasyUAClient");
// Perform the operation
$results = $Client->ReadMultiple($arguments);
// Display results
for ($i = 0; $i < count($results); $i++)
{
$attributeDataResult = $results[$i];
if ($attributeDataResult->Succeeded)
printf("results[d].AttributeDatas\n", $i, $attributeDataResult->AttributeData);
else
printf("results[d]: *** Failures\n", $i, $attributeDataResult->ErrorMessageBrief);
}
REM This example shows how to read the attributes of 4 OPC-UA nodes specified
REM by browse paths at once, and display the results.
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 Visual Basic on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VB .
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.
Public Sub ReadMultiple_BrowsePath_Command_Click()
OutputText = ""
Dim BrowsePathParser As New UABrowsePathParser
BrowsePathParser.DefaultNamespaceUriString = "http://test.org/UA/Data/"
Dim readArguments1 As New UAReadArguments
readArguments1.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
' Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
Set readArguments1.nodeDescriptor.browsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Dynamic/Scalar/FloatValue")
Dim ReadArguments2 As New UAReadArguments
ReadArguments2.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
' Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
Set ReadArguments2.nodeDescriptor.browsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Dynamic/Scalar/SByteValue")
Dim ReadArguments3 As New UAReadArguments
ReadArguments3.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
' Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
Set ReadArguments3.nodeDescriptor.browsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Static/Array/UInt16Value")
Dim ReadArguments4 As New UAReadArguments
ReadArguments4.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
' Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
Set ReadArguments4.nodeDescriptor.browsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Static/UserScalar/Int32Value")
Dim arguments(3) As Variant
Set arguments(0) = readArguments1
Set arguments(1) = ReadArguments2
Set arguments(2) = ReadArguments3
Set arguments(3) = ReadArguments4
' Instantiate the client object
Dim Client As New EasyUAClient
' Obtain values. By default, the Value attributes of the nodes will be read.
Dim results() As Variant
results = Client.ReadMultiple(arguments)
' Display results
Dim i: For i = LBound(results) To UBound(results)
Dim Result As UAAttributeDataResult: Set Result = results(i)
If Result.Succeeded Then
OutputText = OutputText & "results(" & i & ").AttributeData: " & Result.AttributeData & vbCrLf
Else
OutputText = OutputText & "results(" & i & ") *** Failure: " & Result.ErrorMessageBrief & vbCrLf
End If
Next
' Example output:
'results(0).AttributeData: 4.187603E+21 {System.Single} @2019-11-09T14:05:46.268 @@2019-11-09T14:05:46.268; Good
'results(1).AttributeData: -98 {System.Int16} @2019-11-09T14:05:46.268 @@2019-11-09T14:05:46.268; Good
'results(2).AttributeData: [58] {38240, 11129, 64397, 22845, 30525, ...} {System.Int32[]} @2019-11-09T14:00:07.543 @@2019-11-09T14:05:46.268; Good
'results(3).AttributeData: 1280120396 {System.Int32} @2019-11-09T14:00:07.590 @@2019-11-09T14:05:46.268; Good
End Sub
Rem This example shows how to read the attributes of 4 OPC-UA nodes specified by browse paths at once, and display the
Rem results.
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
Dim BrowsePathParser: Set BrowsePathParser = CreateObject("OpcLabs.EasyOpc.UA.Navigation.Parsing.UABrowsePathParser")
BrowsePathParser.DefaultNamespaceUriString = "http://test.org/UA/Data/"
Dim ReadArguments1: Set ReadArguments1 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments")
ReadArguments1.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
' Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
ReadArguments1.NodeDescriptor.BrowsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Dynamic/Scalar/FloatValue")
Dim ReadArguments2: Set ReadArguments2 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments")
ReadArguments2.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
' Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
ReadArguments2.NodeDescriptor.BrowsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Dynamic/Scalar/SByteValue")
Dim ReadArguments3: Set ReadArguments3 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments")
ReadArguments3.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
' Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
ReadArguments3.NodeDescriptor.BrowsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Static/Array/UInt16Value")
Dim ReadArguments4: Set ReadArguments4 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments")
ReadArguments4.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
' Note: Add error handling around the following statement if the browse path is not guaranteed to be syntactically valid.
ReadArguments4.NodeDescriptor.BrowsePath = BrowsePathParser.Parse("[ObjectsFolder]/Data/Static/UserScalar/Int32Value")
Dim arguments(3)
Set arguments(0) = ReadArguments1
Set arguments(1) = ReadArguments2
Set arguments(2) = ReadArguments3
Set arguments(3) = ReadArguments4
' Instantiate the client object
Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient")
' Perform the operation
Dim results: results = Client.ReadMultiple(arguments)
' Display results
Dim i: For i = LBound(results) To UBound(results)
Dim AttributeDataResult: Set AttributeDataResult = results(i)
If AttributeDataResult.Succeeded Then
WScript.Echo "results[" & i & "].AttributeData: " & AttributeDataResult.AttributeData
Else
WScript.Echo "results[" & i & "] *** Failure: " & AttributeDataResult.ErrorMessageBrief
End If
Next
' Example output:
'results[0].AttributeData: 4.187603E+21 {System.Single} @2019-11-09T14:05:46.268 @@2019-11-09T14:05:46.268; Good
'results[1].AttributeData: -98 {System.Int16} @2019-11-09T14:05:46.268 @@2019-11-09T14:05:46.268; Good
'results[2].AttributeData: [58] {38240, 11129, 64397, 22845, 30525, ...} {System.Int32[]} @2019-11-09T14:00:07.543 @@2019-11-09T14:05:46.268; Good
'results[3].AttributeData: 1280120396 {System.Int32} @2019-11-09T14:00:07.590 @@2019-11-09T14:05:46.268; Good
<!-- This example shows how to read the attributes of 4 OPC-UA nodes at once, and display the results. -->
<!---->
<!-- 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.-->
<html>
<body>
<?php
$ReadArguments1 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments1->EndpointDescriptor->UrlString =
//"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";
$ReadArguments1->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10853";
$ReadArguments2 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments2->EndpointDescriptor->UrlString =
//"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";
$ReadArguments2->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10845";
$ReadArguments3 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments3->EndpointDescriptor->UrlString =
//"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";
$ReadArguments3->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10304";
$ReadArguments4 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAReadArguments");
$ReadArguments4->EndpointDescriptor->UrlString =
//"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";
$ReadArguments4->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10389";
$arguments[0] = $ReadArguments1;
$arguments[1] = $ReadArguments2;
$arguments[2] = $ReadArguments3;
$arguments[3] = $ReadArguments4;
// Instantiate the client object
$Client = new COM("OpcLabs.EasyOpc.UA.EasyUAClient");
// Perform the operation
$results = $Client->ReadMultiple($arguments);
// Display results
for ($i = 0; $i < count($results); $i++)
{
printf("results[d].AttributeDatas<br>", $i, $results[$i]->AttributeData);
}
?>
</body>
</html>
Requirements
Target Platforms: .NET Framework: Windows 10 (selected versions), Windows 11 (selected versions), Windows Server 2016, Windows Server 2022; .NET: Linux, macOS, Microsoft Windows
See Also