Writes data into multiple attributes, using array of argument objects as an input.
Syntax
'Declaration
<ElementsNotNullAttribute()>
<NotNullAttribute()>
Function WriteMultiple( _
ByVal As Object _
) As Object()
'Usage
Dim instance As _EasyUAClient
Dim writeArgumentsArray As Object
Dim value() As Object
value = instance.WriteMultiple(writeArgumentsArray)
Parameters
- writeArgumentsArray
- Array of OpcLabs.EasyOpc.UA.OperationModel.UAWriteArguments. Array of argument objects specifying what to write from an OPC-UA server.
Return Value
Array of
OpcLabs.EasyOpc.UA.OperationModel.UAWriteResult. The method returns an array of
OpcLabs.EasyOpc.UA.OperationModel.UAWriteResult objects. The indices of elements in the output array are the same as those in the input arrays.
This is a multiple-operation method. In a properly written program, it does not throw any exceptions. You should therefore not put try/catch statements or similar constructs around calls to this method. The only exceptions thrown by this method are for usage errors, i.e. when your code violates the usage contract of the method, such as passing in invalid arguments or calling the method when the state of the object does not allow it. Any operation-related errors (i.e. errors that depend on external conditions that your code cannot reliably check) are indicated in the result objects returned by the method. For more information, see
Multiple-operation Methods and
Do not catch any exceptions with asynchronous or multiple-operation methods.
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. |
Example
.NET
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 .
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);
}
}
}
# 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 .
# 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.')
' 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 .
Imports System
Imports OpcLabs.BaseLib.OperationModel
Imports OpcLabs.EasyOpc.UA
Imports OpcLabs.EasyOpc.UA.OperationModel
Namespace _EasyUAClient
Friend Class WriteMultiple
Public Shared Sub TestSuccess()
' 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/"
' Instantiate the client object
Dim client = New EasyUAClient()
' Modify data of nodes' attributes
Dim operationResultArray() As OperationResult = client.WriteMultiple(New UAWriteArguments() _
{
New UAWriteArguments(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10221",
New UAAttributeData(23456, UASeverity.GoodOrSuccess, Date.UtcNow)),
New UAWriteArguments(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10226",
New UAAttributeData(2.3456789, UASeverity.GoodOrSuccess, Date.UtcNow)),
New UAWriteArguments(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10227",
New UAAttributeData("ABC", UASeverity.GoodOrSuccess, Date.UtcNow))
}
)
' The target server may not support this, and in such case failures will occur.
For i As Integer = 0 To operationResultArray.Length - 1
If operationResultArray(i).Succeeded Then
Console.WriteLine("Result {0}: success", i)
Else
Console.WriteLine("Result {0}: {1}", i, operationResultArray(i).Exception.GetBaseException().Message)
End If
Next i
End Sub
End Class
End Namespace
// 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 .
$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 s \n", $i, $WriteResult->Exception->GetBaseException()->Message);
}
Rem This example shows how to write data (a value, timestamps and status code) into 3 nodes at once, test for success of each
Rem write and display the exception message in case of failure.
Rem
Rem Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
Option Explicit
Const GoodOrSuccess = 0
' Instantiate the client object
Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient")
Dim StatusCode: Set StatusCode = CreateObject("OpcLabs.EasyOpc.UA.UAStatusCode")
StatusCode.Severity = GoodOrSuccess
Dim WriteArguments1: Set WriteArguments1 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAWriteArguments")
WriteArguments1.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
WriteArguments1.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10221"
Dim AttributeData1: Set AttributeData1 = CreateObject("OpcLabs.EasyOpc.UA.UAAttributeData")
AttributeData1.Value = 23456
AttributeData1.StatusCode = StatusCode
AttributeData1.SourceTimestamp = Now
WriteArguments1.AttributeData = AttributeData1
Dim WriteArguments2: Set WriteArguments2 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAWriteArguments")
WriteArguments2.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
WriteArguments2.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10226"
Dim AttributeData2: Set AttributeData2 = CreateObject("OpcLabs.EasyOpc.UA.UAAttributeData")
AttributeData2.Value = 2.3456789
AttributeData2.StatusCode = StatusCode
AttributeData2.SourceTimestamp = Now
WriteArguments2.AttributeData = AttributeData2
Dim WriteArguments3: Set WriteArguments3 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.UAWriteArguments")
WriteArguments3.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
WriteArguments3.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10227"
Dim AttributeData3: Set AttributeData3 = CreateObject("OpcLabs.EasyOpc.UA.UAAttributeData")
AttributeData3.Value = "ABC"
AttributeData3.StatusCode = StatusCode
AttributeData3.SourceTimestamp = Now
WriteArguments3.AttributeData = AttributeData3
Dim arguments(2)
Set arguments(0) = WriteArguments1
Set arguments(1) = WriteArguments2
Set arguments(2) = WriteArguments3
' Modify data of nodes' attributes
Dim results: results = Client.WriteMultiple(arguments)
' Display results
Dim i: For i = LBound(results) To UBound(results)
Dim WriteResult: Set WriteResult = results(i)
' The target server may not support this, and in such case failures will occur.
If WriteResult.Succeeded Then
WScript.Echo "Result " & i & " success"
Else
WScript.Echo "Result " & i & ": " & WriteResult.Exception.GetBaseException().Message
End If
Next
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