// This example shows how to obtain a data type of all OPC XML-DA items under a branch.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client and subscriber examples in Object Pascal (Delphi) on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-OP .
// 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.
class procedure GetMultiplePropertyValues.DataTypeXml;
var
Arguments: OleVariant;
BrowseParameters: _DABrowseParameters;
Client: OpcLabs_EasyOpcClassic_TLB._EasyDAClient;
Count: Cardinal;
Element: OleVariant;
I: Cardinal;
PropertyArguments: _DAPropertyArguments;
ServerDescriptor: _ServerDescriptor;
NodeDescriptor: _DANodeDescriptor;
// NodeDescriptorArray: Array of DANodeDescriptor;
NodeElement: _DANodeElement;
NodeElementCollection: _DANodeElementCollection;
NodeElementEnumerator: IEnumVariant;
ValueResult: _ValueResult;
ValueResultArray: OleVariant;
VarType: _VarType;
begin
ServerDescriptor := CoServerDescriptor.Create;
ServerDescriptor.UrlString := 'http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx';
NodeDescriptor := CoDANodeDescriptor.Create;
NodeDescriptor.ItemId := 'Static/Analog Types';
BrowseParameters := CoDABrowseParameters.Create;
BrowseParameters.BrowseFilter := DABrowseFilter_Leaves;
// Instantiate the client object
Client := CoEasyDAClient.Create;
// Browse for all leaves under the "Static/Analog Types" branch
NodeElementCollection := Client.BrowseNodes(
ServerDescriptor,
NodeDescriptor,
BrowseParameters);
// Create list of node descriptors, one for aeach leaf obtained
I := 0;
Arguments := VarArrayCreate([0, NodeElementCollection.Count - 1], varVariant);
NodeElementEnumerator := NodeElementCollection.GetEnumerator;
while (NodeElementEnumerator.Next(1, Element, Count) = S_OK) do
begin
NodeElement := IUnknown(Element) as _DANodeElement;
// filter out hint leafs that do not represent real OPC XML-DA items (rare)
if Not NodeElement.IsHint then
begin
PropertyArguments := CoDAPropertyArguments.Create;
PropertyArguments.ServerDescriptor := ServerDescriptor;
PropertyArguments.NodeDescriptor := NodeElement.ToDANodeDescriptor;
PropertyArguments.PropertyDescriptor.PropertyId.InternalValue := DAPropertyIds_DataType;
Arguments[I] := PropertyArguments;
I := I + 1;
end;
end;
// SetLength(Arguments, I);
// Get the value of DataType property; it is a 16-bit signed integer
TVarData(ValueResultArray).VType := varArray or varVariant;
TVarData(ValueResultArray).VArray := PVarArray(
Client.GetMultiplePropertyValues(Arguments));
// Display results
for I := VarArrayLowBound(ValueResultArray, 1) to VarArrayHighBound(ValueResultArray, 1) do
begin
ValueResult := IInterface(ValueResultArray[I]) as _ValueResult;
// Check if there has been an error getting the property value
if ValueResult.Exception <> nil then
begin
WriteLn(Format('s *** Failures', [Arguments[I].NodeDescriptor.NodeId, ValueResult.Exception.Message]));
Continue;
end;
// Convert the data type to VarType
VarType := CoVarType.Create;
VarType.InternalValue := ValueResult.Value;
// Display the obtained data type
WriteLn(Format(' s', [Arguments[I].NodeDescriptor.NodeId, VarType.ToString]));
end;
VarClear(ValueResultArray);
VarClear(Arguments);
end;
// This example shows how to obtain a data type of all OPC XML-DA items under a branch.
//
// 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.
const DABrowseFilter_Leaves = 3;
const DAPropertyIds_DataType = 1;
$ServerDescriptor = new COM("OpcLabs.EasyOpc.ServerDescriptor");
$ServerDescriptor->UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx";
$NodeDescriptor = new COM("OpcLabs.EasyOpc.DataAccess.DANodeDescriptor");
$NodeDescriptor->ItemID = "Static/Analog Types";
$BrowseParameters = new COM("OpcLabs.EasyOpc.DataAccess.DABrowseParameters");
$BrowseParameters->BrowseFilter = DABrowseFilter_Leaves;
$Client = new COM("OpcLabs.EasyOpc.DataAccess.EasyDAClient");
// Browse for all leaves under the "Static/Analog Types" branch
$NodeElementCollection = $Client->BrowseNodes($ServerDescriptor, $NodeDescriptor, $BrowseParameters)->ToList();
$PropertyArgumentArray = array();
for ($i = 0; $i < $NodeElementCollection->Count(); $i++)
{
if (!($NodeElementCollection[$i]->IsHint)) // filter out hint leafs that do not represent real OPC items (rare)
{
$PropertyArguments = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments");
$PropertyArguments->ServerDescriptor = $ServerDescriptor;
$PropertyArguments->NodeDescriptor = $NodeElementCollection[$i]->ToDANodeDescriptor();
$PropertyArguments->PropertyDescriptor->PropertyId->InternalValue = DAPropertyIds_DataType;
$PropertyArgumentArray[] = $PropertyArguments;
}
}
// Get the value of DataType property; it is a 16-bit signed integer
$valueResultArray = $Client->GetMultiplePropertyValues($PropertyArgumentArray);
for ($i = 0; $i < count($valueResultArray); $i++)
{
// Check if there has been an error getting the property value
$valueResult = $valueResultArray[$i];
if (!is_null($valueResult->Exception))
{
printf("[s]: *** Failures\n", $PropertyArgumentArray[$i]->NodeDescriptor->NodeId, $valueResults->Exception->Message);
continue;
}
// Convert the data type to VarType
$VarType = new COM("OpcLabs.BaseLib.ComInterop.VarType");
$VarType->InternalValue = $valueResult->Value;
// Display the obtained data type
printf("[s]s\n", $PropertyArgumentArray[$i]->NodeDescriptor->NodeId, $VarType);
}
Rem This example shows how to obtain a data type of all OPC XML-DA items under a branch.
Rem
REM Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
REM OPC client and subscriber examples in Visual Basic on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VB .
REM Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
REM a commercial license in order to use Online Forums, and we reply to every post.
Private Sub GetMultiplePropertyValues_DataTypeXml_Command_Click()
OutputText = ""
Dim serverDescriptor As New serverDescriptor
serverDescriptor.UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx"
Dim NodeDescriptor As New DANodeDescriptor
NodeDescriptor.ItemId = "Static/Analog Types"
Dim BrowseParameters As New DABrowseParameters
BrowseParameters.BrowseFilter = DABrowseFilter_Leaves
' Instantiate the client object
Dim client As New EasyDAClient
' Browse for all leaves under the "Static/Analog Types" branch
Dim NodeElementCollection As DANodeElementCollection
Set NodeElementCollection = client.BrowseNodes(serverDescriptor, NodeDescriptor, BrowseParameters)
' Create list of node descriptors, one for each leaf obtained
Dim arguments()
ReDim arguments(NodeElementCollection.Count)
Dim i: i = 0
Dim NodeElement: For Each NodeElement In NodeElementCollection
' filter out hint leafs that do not represent real OPC XML-DA items (rare)
If Not NodeElement.IsHint Then
Dim PropertyArguments As New DAPropertyArguments
Set PropertyArguments.serverDescriptor = serverDescriptor
Set PropertyArguments.NodeDescriptor = NodeElement.ToDANodeDescriptor
PropertyArguments.PropertyDescriptor.PropertyId.NumericalValue = DAPropertyIds_DataType
Set arguments(i) = PropertyArguments
Set PropertyArguments = Nothing
i = i + 1
End If
Next
Dim propertyArgumentArray()
ReDim propertyArgumentArray(i - 1)
Dim j: For j = 0 To i - 1
Set propertyArgumentArray(j) = arguments(j)
Next
' Get the value of DataType property; it is a 16-bit signed integer
Dim valueResultArray() As Variant
valueResultArray = client.GetMultiplePropertyValues(propertyArgumentArray)
' Display results
For j = 0 To i - 1
Dim NodeDescriptor2 As DANodeDescriptor
Set NodeDescriptor2 = propertyArgumentArray(j).NodeDescriptor
Dim ValueResult As ValueResult: Set ValueResult = valueResultArray(j)
' Check if there has been an error getting the property value
If Not ValueResult.Exception Is Nothing Then
OutputText = OutputText & NodeDescriptor2.NodeId & " *** Failure: " & ValueResult.Exception.Message & vbCrLf
Else
' Display the obtained data type
Dim VarType As New VarType
VarType.InternalValue = ValueResult.value
OutputText = OutputText & NodeDescriptor2.NodeId & ": " & VarType & vbCrLf
End If
Next
End Sub
Rem This example shows how to obtain a data type of all OPC XML-DA items under a branch.
Rem
Rem Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
Rem OPC client and subscriber examples in VBScript on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBScript .
Rem Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
Rem a commercial license in order to use Online Forums, and we reply to every post.
Option Explicit
Const DABrowseFilter_Leaves = 3
Const DAPropertyIds_DataType = 1
Dim ServerDescriptor: Set ServerDescriptor = CreateObject("OpcLabs.EasyOpc.ServerDescriptor")
ServerDescriptor.UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx"
Dim NodeDescriptor: Set NodeDescriptor = CreateObject("OpcLabs.EasyOpc.DataAccess.DANodeDescriptor")
NodeDescriptor.ItemID = "Static/Analog Types"
Dim BrowseParameters: Set BrowseParameters = CreateObject("OpcLabs.EasyOpc.DataAccess.DABrowseParameters")
BrowseParameters.BrowseFilter = DABrowseFilter_Leaves
Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient")
' Browse for all leaves under the "Static/Analog Types" branch
Dim NodeElementCollection: Set NodeElementCollection = client.BrowseNodes(serverDescriptor, nodeDescriptor, browseParameters)
' Create list of node descriptors, one for each leaf obtained
Dim arguments()
Redim arguments(nodeElementCollection.Count)
Dim i: i = 0
Dim NodeElement: For Each NodeElement In NodeElementCollection
' filter out hint leafs that do not represent real OPC XML-DA items (rare)
If Not NodeElement.IsHint Then
Dim PropertyArguments: Set PropertyArguments = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments")
PropertyArguments.ServerDescriptor = ServerDescriptor
PropertyArguments.NodeDescriptor = NodeElement.ToDANodeDescriptor
PropertyArguments.PropertyDescriptor.PropertyId.InternalValue = DAPropertyIds_DataType
Set arguments(i) = PropertyArguments
i = i + 1
End If
Next
Dim propertyArgumentArray()
ReDim propertyArgumentArray(i - 1)
Dim j: For j = 0 To i - 1
Set propertyArgumentArray(j) = arguments(j)
Next
' Get the value of DataType property; it is a 16-bit signed integer
Dim valueResultArray: valueResultArray = client.GetMultiplePropertyValues(propertyArgumentArray)
For j = 0 To i - 1
Dim NodeDescriptor2: Set NodeDescriptor2 = propertyArgumentArray(j).NodeDescriptor
' Check if there has been an error getting the property value
If Not (valueResultArray(j).Exception Is Nothing) Then
WScript.Echo NodeDescriptor2.NodeId & " *** Failure: " & valueResultArray(j).Exception.Message
Else
' Display the obtained data type
Dim VarType: Set VarType = CreateObject("OpcLabs.BaseLib.ComInterop.VarType")
VarType.InternalValue = valueResultArray(j).Value
WScript.Echo nodeDescriptor2.NodeId & ": " & VarType
End If
Next