In OPC XML-DA, reading or writing is in principle no different from COM-based OPC. You just need to specify the OPC server using its URL instead of the ProgID or CLSID, and obey the rules for identificaton of the items (which are server-dependent). Sometimes, you may need an additional piece of information to identify nodes in OPC XML-DA address space; for more information see Identifying information in OPC XML.
QuickOPC supports OPC XML-DA also on Linux and macOS.
// This example shows how to read 4 items from an OPC XML-DA server at once, and display their values, timestamps
// and qualities.
using System;
using System.Diagnostics;
using OpcLabs.EasyOpc;
using OpcLabs.EasyOpc.DataAccess;
using OpcLabs.EasyOpc.DataAccess.OperationModel;
namespace DocExamples.DataAccess.Xml
{
class ReadMultipleItems
{
public static void Main1Xml()
{
// Instantiate the client object.
var client = new EasyDAClient();
DAVtqResult[] vtqResults = client.ReadMultipleItems(
new ServerDescriptor { UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx" },
new DAItemDescriptor[]
{
"Dynamic/Analog Types/Double",
"Dynamic/Analog Types/Double[]",
"Dynamic/Analog Types/Int",
"SomeUnknownItem"
});
for (int i = 0; i < vtqResults.Length; i++)
{
Debug.Assert(vtqResults[i] != null);
if (!(vtqResults[i].Exception is null))
{
Console.WriteLine($"vtqResults[{i}] *** Failure: {vtqResults[i].ErrorMessageBrief}");
continue;
}
Console.WriteLine($"vtqResults[{i}].Vtq: {vtqResults[i].Vtq}");
}
}
}
}
# This example shows how to read 4 items from an OPC XML-DA server at once, and display their values, timestamps
# and qualities.
#requires -Version 5.1
using namespace OpcLabs.EasyOpc
using namespace OpcLabs.EasyOpc.DataAccess
# The path below assumes that the current directory is [ProductDir]/Examples-NET/PowerShell/Windows .
Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassicCore.dll"
Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassic.dll"
Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassicComponents.dll"
# Instantiate the client object.
$client = New-Object EasyDAClient
$serverDescriptor = New-Object ServerDescriptor -Property @{
UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx"
}
$vtqResults = [IEasyDAClientExtension]::ReadMultipleItems($client,
$serverDescriptor,
@(
(New-Object DAItemDescriptor("Dynamic/Analog Types/Double")),
(New-Object DAItemDescriptor("Dynamic/Analog Types/Double[]")),
(New-Object DAItemDescriptor("Dynamic/Analog Types/Int")),
(New-Object DAItemDescriptor("SomeUnknownItem"))
))
for ($i = 0; $i -lt $vtqResults.Length; $i++) {
$vtqResult = $vtqResults[$i]
if ($vtqResult.Succeeded) {
Write-Host "vtqResults[$($i)].Vtq: $($vtqResult.Vtq)"
}
else {
Write-Host "vtqResults[$($i)] *** Failure: $($vtqResult.ErrorMessageBrief)"
}
}
# This example shows how to read 4 items from an OPC XML-DA server at once, and display their values, timestamps
# and qualities.
# The QuickOPC package is needed. Install it using "pip install opclabs_quickopc".
import opclabs_quickopc
# Import .NET namespaces.
from OpcLabs.EasyOpc import *
from OpcLabs.EasyOpc.DataAccess import *
from OpcLabs.EasyOpc.DataAccess.OperationModel import *
from OpcLabs.EasyOpc.OperationModel import *
# Instantiate the client object.
client = EasyDAClient()
#
vtqResultArray = IEasyDAClientExtension.ReadMultipleItems(client,
ServerDescriptor('http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx'),
[
DAItemDescriptor('Dynamic/Analog Types/Double'),
DAItemDescriptor('Dynamic/Analog Types/Double[]'),
DAItemDescriptor('Dynamic/Analog Types/Int'),
DAItemDescriptor('SomeUnknownItem')
])
for i, vtqResult in enumerate(vtqResultArray):
assert vtqResult is not None
if vtqResult.Succeeded:
print('vtqResultArray[', i, '].Vtq: ', vtqResult.Vtq, sep='')
else:
print('vtqResultArray[', i, '] *** Failure: ', vtqResult.ErrorMessageBrief, sep='')
print()
print('Finished.')
' This example shows how to read 4 items from an OPC XML-DA server at once, and display their values, timestamps
' and qualities.
Imports OpcLabs.EasyOpc
Imports OpcLabs.EasyOpc.DataAccess
Imports OpcLabs.EasyOpc.DataAccess.OperationModel
Namespace DataAccess.Xml
Partial Friend Class ReadMultipleItems
Public Shared Sub Main1Xml()
Dim client = New EasyDAClient()
Dim vtqResults() As DAVtqResult = client.ReadMultipleItems(
New ServerDescriptor() With {.UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx"},
New DAItemDescriptor() _
{ _
"Dynamic/Analog Types/Double",
"Dynamic/Analog Types/Double[]",
"Dynamic/Analog Types/Int",
"SomeUnknownItem"
})
For i = 0 To vtqResults.Length - 1
Debug.Assert(vtqResults(i) IsNot Nothing)
If vtqResults(i).Exception IsNot Nothing Then
Console.WriteLine("vtqResult[{0}] *** Failure: {1}", i, vtqResults(i).ErrorMessageBrief)
Continue For
End If
Console.WriteLine("vtqResult[{0}].Vtq: {1}", i, vtqResults(i).Vtq)
Next i
End Sub
End Class
End Namespace
QuickOPC supports OPC XML-DA also on Linux and macOS.
See Also
Installed Examples - WindowsForms