OPC Studio User's Guide and Reference
Examples - OPC Unified Architecture - Write multiple values, timestamps and status codes
View with Navigation Tools

.NET

// This example shows how to write data (a value, timestamps and status code) into 3 nodes at once, test for success of each 
// write and display the exception message in case of failure.
//
// 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.OperationModel;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.OperationModel;

namespace UADocExamples._EasyUAClient
{
    class WriteMultiple
    {
        public static void TestSuccess()
        {
            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/"

            // Instantiate the client object
            var client = new EasyUAClient();

            // Modify data of nodes' attributes
            OperationResult[] operationResultArray = client.WriteMultiple(new[]
                {
                    new UAWriteArguments(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10221", 
                        new UAAttributeData(23456, UASeverity.GoodOrSuccess, DateTime.UtcNow)),
                    new UAWriteArguments(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10226", 
                        new UAAttributeData(2.34567890, UASeverity.GoodOrSuccess, DateTime.UtcNow)),
                    new UAWriteArguments(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10227", 
                        new UAAttributeData("ABC", UASeverity.GoodOrSuccess, DateTime.UtcNow))
                });

            // The target server may not support this, and in such case failures will occur.

            for (int i = 0; i < operationResultArray.Length; i++)
                if (operationResultArray[i].Succeeded)
                    Console.WriteLine("Result {0}: success", i);
                else
                    Console.WriteLine("Result {0}: {1}", i, operationResultArray[i].Exception.GetBaseException().Message);
        }
    }
}

COM

// This example shows how to write data (a value, timestamps and status code) into 3 nodes at once, test for success of each 
// write and display the exception message in case of failure.
//
// 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.

$GoodOrSuccess = 0;

// Instantiate the client object
$Client = new COM("OpcLabs.EasyOpc.UA.EasyUAClient");

$StatusCode = new COM("OpcLabs.EasyOpc.UA.UAStatusCode");
$StatusCode->Severity = $GoodOrSuccess;

$WriteArguments1 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAWriteArguments");
$WriteArguments1->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";
$WriteArguments1->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10221";
$AttributeData1 = new COM("OpcLabs.EasyOpc.UA.UAAttributeData");
$AttributeData1->Value = 23456;
$AttributeData1->StatusCode = $StatusCode;
$AttributeData1->SourceTimestamp = (time() - 25569)/86400.0;    // works in PHP v5.6, does not work in PHP 7.3.10
$WriteArguments1->AttributeData = $AttributeData1;

$WriteArguments2 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAWriteArguments");
$WriteArguments2->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";
$WriteArguments2->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10226";
$AttributeData2 = new COM("OpcLabs.EasyOpc.UA.UAAttributeData");
$AttributeData2->Value = 2.3456789;
$AttributeData2->StatusCode = $StatusCode;
$AttributeData2->SourceTimestamp = (time() - 25569)/86400.0;    // works in PHP v5.6, does not work in PHP 7.3.10
$WriteArguments2->AttributeData = $AttributeData2;

$WriteArguments3 = new COM("OpcLabs.EasyOpc.UA.OperationModel.UAWriteArguments");
$WriteArguments3->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";
$WriteArguments3->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10227";
$AttributeData3 = new COM("OpcLabs.EasyOpc.UA.UAAttributeData");
$AttributeData3->Value = "ABC";
$AttributeData3->StatusCode = $StatusCode;
$AttributeData3->SourceTimestamp = (time() - 25569)/86400.0;    // works in PHP v5.6, does not work in PHP 7.3.10
$WriteArguments3->AttributeData = $AttributeData3;

$arguments[0] = $WriteArguments1;
$arguments[1] = $WriteArguments2;
$arguments[2] = $WriteArguments3;

// Modify data of nodes' attributes
$results = $Client->WriteMultiple($arguments);

// Display results
for ($i = 0; $i < count($results); $i++)
{
    $WriteResult = $results[$i];
    // The target server may not support this, and in such case failures will occur.
    if ($WriteResult->Succeeded)
        printf("Result %d success\n", $i);
    else
        printf("Result d: s \n", $i, $WriteResult->Exception->GetBaseException()->Message);
}

Python

# This example shows how to write data (a value, timestamps and status code) into 3 nodes at once, test for success of
# each write and display the exception message in case of failure.
#
# 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.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/'

# Instantiate the client object
client = EasyUAClient()

print("Modifying data of nodes' attributes...")
writeResultArray = client.WriteMultiple([
    UAWriteArguments(endpointDescriptor, UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10221'),
                     UAAttributeData(23456, UAStatusCode(UASeverity.GoodOrSuccess), DateTime.UtcNow)),
    UAWriteArguments(endpointDescriptor, UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10226'),
                     UAAttributeData(2.34567890, UAStatusCode(UASeverity.GoodOrSuccess), DateTime.UtcNow)),
    UAWriteArguments(endpointDescriptor, UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10227'),
                     UAAttributeData('ABC', UAStatusCode(UASeverity.GoodOrSuccess), DateTime.UtcNow)),
    ])

# The target server may not support this, and in such case failures will occur.
for i, writeResult in enumerate(writeResultArray):
    if writeResult.Succeeded:
        print('writeResultArray[', i, ']: success', sep='')
    else:
        print('writeResultArray[', i, '] *** Failure: ', writeResult.Exception.GetBaseException().Message, sep='')

print()
print('Finished.')

 

See Also

Concepts

Examples - Client OPC Data Access