Development Models > Imperative Programming Model > Imperative Programming Model for OPC Data (Classic and UA) > Modifying Information (OPC Data) > Writing Attributes of OPC UA Nodes > Writing value, timestamps and status code (OPC UA) |
Some OPC servers allow a combination of value, timestamps, and status code be written into their nodes (or to some nodes only). If you need to do this, call Write or WriteMultiple method.
// This example shows how to write data (a value, timestamps and status code) into a single attribute of a node. using System; using OpcLabs.EasyOpc.UA; using OpcLabs.EasyOpc.UA.OperationModel; namespace UADocExamples._EasyUAClient { class Write { public static void Main1() { 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(); Console.WriteLine("Modifying data of a node's attribute..."); try { client.Write(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10221", new UAAttributeData(12345, UASeverity.GoodOrSuccess, DateTime.UtcNow)); // The target server may not support this, and in such case a failure will occur. } catch (UAException uaException) { Console.WriteLine($"*** Failure: {uaException.GetBaseException().Message}"); return; } Console.WriteLine("Finished."); } } }
# This example shows how to write data (a value, timestamps and status code) into a single attribute of a node. #requires -Version 5.1 using namespace OpcLabs.EasyOpc.UA using namespace OpcLabs.EasyOpc.UA.OperationModel # The path below assumes that the current directory is [ProductDir]/Examples-NET/PowerShell/Windows . Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcUA.dll" Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcUAComponents.dll" [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. $client = New-Object EasyUAClient Write-Host "Modifying data of a node's attribute..." try { $client.Write($endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10221", (New-Object UAAttributeData(12345, [UASeverity]::GoodOrSuccess, [DateTime]::UtcNow))) # The target server may not support this, and in such case a failure will occur. } catch [UAException] { Write-Host "*** Failure: $($PSItem.Exception.GetBaseException().Message)" return } Write-Host "Finished."
# This example shows how to write data (a value, timestamps and status code) into a single attribute of a node. # 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 a node's attribute...") try: IEasyUAClientExtension.Write(client, endpointDescriptor, UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10221'), UAAttributeData(12345, UAStatusCode(UASeverity.GoodOrSuccess), DateTime.UtcNow)) except UAException as uaException: print('*** Failure: ' + uaException.GetBaseException().Message) exit() print('Finished.')
' This example shows how to write data (a value, timestamps and status code) into a single attribute of a node. Imports OpcLabs.EasyOpc.UA Imports OpcLabs.EasyOpc.UA.OperationModel Namespace _EasyUAClient Friend Class Write 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/" ' Instantiate the client object Dim client = New EasyUAClient() Try ' Modify data of a node's attribute client.Write(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10221", New UAAttributeData(12345, UASeverity.GoodOrSuccess, Date.UtcNow)) ' or "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" ' The target server may not support this, and in such case a failure will occur. Catch uaException As UAException Console.WriteLine("*** Failure: {0}", uaException.GetBaseException().Message) End Try End Sub End Class End Namespace
// This example shows how to write data (a value, timestamps and status code) // into a single attribute of a node. class procedure Write.Main; const GoodOrSuccess = 0; var AttributeData: _UAAttributeData; Client: OpcLabs_EasyOpcUA_TLB._EasyUAClient; StatusCode: _UAStatusCode; begin // Instantiate the client object Client := CoEasyUAClient.Create; // Modify data of a node's attribute StatusCode := CoUAStatusCode.Create; StatusCode.Severity := GoodOrSuccess; AttributeData := CoUAAttributeData.Create; AttributeData.Value := 12345; AttributeData.StatusCode := StatusCode; AttributeData.SourceTimestamp := Now; // Perform the operation try Client.Write( //'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', 'nsu=http://test.org/UA/Data/ ;i=10221', AttributeData); // The target server may not support this, and in such case a failure will occur. except on E: EOleException do begin WriteLn(Format('*** Failure: %s', [E.GetBaseException.Message])); Exit; end; end; end;
// This example shows how to write data (a value, timestamps and status code) into a single attribute of a node. $GoodOrSuccess = 0; // Instantiate the client object $Client = new COM("OpcLabs.EasyOpc.UA.EasyUAClient"); // Modify data of a node's attribute $StatusCode = new COM("OpcLabs.EasyOpc.UA.UAStatusCode"); $StatusCode->Severity = $GoodOrSuccess; $AttributeData = new COM("OpcLabs.EasyOpc.UA.UAAttributeData"); $AttributeData->Value = 12345; $AttributeData->StatusCode = $StatusCode; $AttributeData->SourceTimestamp = (time() - 25569)/86400.0; // Perform the operation try { $Client->Write( //"http://opcua.demo-this.com:51211/UA/SampleServer", "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;i=10221", $AttributeData); // The target server may not support this, and in such case a failure will occur. } catch (com_exception $e) { printf("*** Failure: %s\n", $e->getMessage()); }
Rem This example shows how to write data (a value, timestamps and status code) Rem into a single attribute of a node. Public Sub Write_Main_Command_Click() OutputText = "" Const GoodOrSuccess = 0 ' Instantiate the client object Dim Client As New EasyUAClient ' Modify data of a node's attribute Dim StatusCode As New UAStatusCode StatusCode.Severity = GoodOrSuccess Dim AttributeData As New UAAttributeData AttributeData.SetValue 12345 Set AttributeData.StatusCode = StatusCode AttributeData.SourceTimestamp = Now() ' Perform the operation On Error Resume Next Call Client.Write("opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;i=10221", AttributeData) If Err.Number <> 0 Then OutputText = OutputText & "*** Failure: " & Err.Source & ": " & Err.Description & vbCrLf Exit Sub End If On Error GoTo 0 End Sub
Rem This example shows how to write data (a value, timestamps and status code) into a single attribute of a node. Option Explicit Const GoodOrSuccess = 0 ' Instantiate the client object Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient") ' Modify data of a node's attribute Dim StatusCode: Set StatusCode = CreateObject("OpcLabs.EasyOpc.UA.UAStatusCode") StatusCode.Severity = GoodOrSuccess Dim AttributeData: Set AttributeData = CreateObject("OpcLabs.EasyOpc.UA.UAAttributeData") AttributeData.Value = 12345 AttributeData.StatusCode = StatusCode AttributeData.SourceTimestamp = Now ' Perform the operation On Error Resume Next Client.Write "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;i=10221", _ AttributeData ' The target server may not support this, and in such case a failure will occur. If Err.Number <> 0 Then WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description WScript.Quit End If On Error Goto 0
It is more efficient to use the WriteMultiple method, instead of several calls to the Write method.
// 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. 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. # 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. 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. $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); }
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. 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
Copyright © 2004-2023 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base. Technical support: Online Forums, FAQ.