OPC Studio User's Guide and Reference
ReadMultiple Method (_EasyUAClient)
Example 



View with Navigation Tools
OpcLabs.EasyOpcUA Assembly > OpcLabs.EasyOpc.UA.ComTypes Namespace > _EasyUAClient Interface : ReadMultiple Method
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).

Reads multiple attributes, using array of argument objects as an input.
Syntax
'Declaration
 
<JetBrains.Annotations.ItemNotNullAttribute()>
<JetBrains.Annotations.NotNullAttribute()>
Function ReadMultiple( _
   ByVal readArgumentsArray 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, readArgumentsArray.

This method never returns null (Nothing in Visual Basic).

The individual elements of the returned value are never null (Nothing in Visual Basic).

Exceptions
ExceptionDescription

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.

An operation was performed on a disposed object.
Remarks

The size of the input array will become the size of the output array. The element positions (indices) in the output array are the same as in the input array.

Each element in the input array corresponds to a separate logical read operation (although the operations may and will be executed together, if possible). The method returns an array of results, where each result corresponds to the read operation at the same index in the input array.

This member or type is for use from COM. It is not meant to be used from .NET or Python. Refer to the corresponding .NET member or type instead, if you are developing in .NET or Python.

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 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 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