// This example shows how to get value of multiple OPC properties, and handle errors. // // Note that some properties may not have a useful value initially (e.g. until the item is activated in a group), which also the // case with Timestamp property as implemented by the demo server. This behavior is server-dependent, and normal. You can run // IEasyDAClient.ReadMultipleItemValues.Main.vbs shortly before this example, in order to obtain better property values. Your // code may also subscribe to the items in order to assure that they remain active. // // 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; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.DataAccess.OperationModel; namespace DocExamples.DataAccess._EasyDAClient { partial class GetMultiplePropertyValues { public static void Main1() { // Instantiate the client object. var client = new EasyDAClient(); ServerDescriptor serverDescriptor = "OPCLabs.KitServer.2"; // Get the values of Timestamp and AccessRights properties of two items. ValueResult[] results = client.GetMultiplePropertyValues(new[] { new DAPropertyArguments(serverDescriptor, "Simulation.Random", DAPropertyDescriptor.Timestamp), new DAPropertyArguments(serverDescriptor, "Simulation.Random", DAPropertyDescriptor.AccessRights), new DAPropertyArguments(serverDescriptor, "Trends.Ramp (1 min)", DAPropertyDescriptor.Timestamp), new DAPropertyArguments(serverDescriptor, "Trends.Ramp (1 min)", DAPropertyDescriptor.AccessRights) }); for (int i = 0; i < results.Length; i++) { ValueResult valueResult = results[i]; if (valueResult.Exception is null) Console.WriteLine($"results({i}).Value: {valueResult.Value}"); else Console.WriteLine($"results({i}).Exception.Message: {valueResult.Exception.Message}"); } } } }
# This example shows how to get value of multiple OPC properties, and handle errors. # # Note that some properties may not have a useful value initially (e.g. until the item is activated in a group), which also the # case with Timestamp property as implemented by the demo server. This behavior is server-dependent, and normal. You can run # IEasyDAClient.ReadItemValue.Main.vbs shortly before this example, in order to obtain better property values. Your code may # also subscribe to the item in order to assure that it remains active. # # 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 OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.DataAccess.OperationModel import * from OpcLabs.EasyOpc.OperationModel import * serverDescriptor = ServerDescriptor('OPCLabs.KitServer.2') # Instantiate the client object. client = EasyDAClient() # Get the values of Timestamp and AccessRights properties of two items. resultArray = client.GetMultiplePropertyValues([ DAPropertyArguments(serverDescriptor, DAItemDescriptor('Simulation.Random'), DAPropertyDescriptor.Timestamp), DAPropertyArguments(serverDescriptor, DAItemDescriptor('Simulation.Random'), DAPropertyDescriptor.AccessRights), DAPropertyArguments(serverDescriptor, DAItemDescriptor('Trends.Ramp (1 min)'), DAPropertyDescriptor.Timestamp), DAPropertyArguments(serverDescriptor, DAItemDescriptor('Trends.Ramp (1 min)'), DAPropertyDescriptor.AccessRights), ]) # Display results for i, valueResult in enumerate(resultArray): valueResult = resultArray[i] if valueResult.Exception is None: print('resultArray[', i, '].Value: ', valueResult.Value, sep='') else: print('resultArray[', i, '].Exception.Message: ', valueResult.Exception.Message, sep='')
# This example shows how to get value of multiple OPC properties, and handle errors. # # Note that some properties may not have a useful value initially (e.g. until the item is activated in a group), which also the # case with Timestamp property as implemented by the demo server. This behavior is server-dependent, and normal. You can run # IEasyDAClient.ReadMultipleItemValues.Main.vbs shortly before this example, in order to obtain better property values. Your # code may also subscribe to the items in order to assure that they remain active. # # Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . #requires -Version 5.1 using namespace OpcLabs.EasyOpc.OperationModel using namespace OpcLabs.EasyOpc using namespace OpcLabs.EasyOpc.DataAccess using namespace OpcLabs.EasyOpc.DataAccess.OperationModel # 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("OPCLabs.KitServer.2") # Get the values of Timestamp and AccessRights properties of two items. $results = $client.GetMultiplePropertyValues(@( (New-Object DAPropertyArguments($serverDescriptor, "Simulation.Random", [DAPropertyDescriptor]::Timestamp)), (New-Object DAPropertyArguments($serverDescriptor, "Simulation.Random", [DAPropertyDescriptor]::AccessRights)), (New-Object DAPropertyArguments($serverDescriptor, "Trends.Ramp (1 min)", [DAPropertyDescriptor]::Timestamp)), (New-Object DAPropertyArguments($serverDescriptor, "Trends.Ramp (1 min)", [DAPropertyDescriptor]::AccessRights)) )) for ($i = 0; $i -lt $results.Length; $i++) { $valueResult = $results[$i] if ($valueResult.Exception -eq $null) { Write-Host "results($($i)).Value: $($valueResult.Value)" } else { Write-Host "results($($i)).Exception.Message: $($valueResult.Exception.Message)" } }
' This example shows how to get value of multiple OPC properties, and handle errors. ' ' Note that some properties may not have a useful value initially (e.g. until the item Is activated in a group), which also the ' case with Timestamp property as implemented by the demo server. This behavior is server-dependent, and normal. You can run ' IEasyDAClient.ReadMultipleItemValues.Main.vbs shortly before this example, in order to obtain better property values. Your ' code may also subscribe to the items in order to assure that they remain active. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports OpcLabs.BaseLib.OperationModel Imports OpcLabs.EasyOpc Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.DataAccess.OperationModel Namespace DataAccess._EasyDAClient Partial Friend Class GetMultiplePropertyValues Shared Sub Main1() ' Instantiate the client object. Dim client = New EasyDAClient() Dim serverDescriptor As ServerDescriptor = "OPCLabs.KitServer.2" ' Get the values of Timestamp and AccessRights properties of two items. Dim results() As ValueResult = client.GetMultiplePropertyValues(New DAPropertyArguments() { New DAPropertyArguments(serverDescriptor, "Simulation.Random", DAPropertyDescriptor.Timestamp), New DAPropertyArguments(serverDescriptor, "Simulation.Random", DAPropertyDescriptor.AccessRights), New DAPropertyArguments(serverDescriptor, "Trends.Ramp (1 min)", DAPropertyDescriptor.Timestamp), New DAPropertyArguments(serverDescriptor, "Trends.Ramp (1 min)", DAPropertyDescriptor.AccessRights) }) For i = 0 To results.Length - 1 Dim valueResult As ValueResult = results(i) If valueResult.Exception Is Nothing Then Console.WriteLine($"results({i}).Value: {valueResult.Value}") Else Console.WriteLine($"results({i}).Exception.Message: {valueResult.Exception.Message}") End If Next i End Sub End Class End Namespace
// This example shows how to get value of multiple OPC properties. // // Note that some properties may not have a useful value initially (e.g. until the item is activated in a group), which also the // case with Timestamp property as implemented by the demo server. This behavior is server-dependent, and normal. You can run // IEasyDAClient.ReadMultipleItemValues.Main.vbs shortly before this example, in order to obtain better property values. Your // code may also subscribe to the items in order to assure that they remain active. // // Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . class procedure GetMultiplePropertyValues.Main; var Arguments: OleVariant; Client: OpcLabs_EasyOpcClassic_TLB._EasyDAClient; I: Cardinal; PropertyArguments1: _DAPropertyArguments; PropertyArguments2: _DAPropertyArguments; PropertyArguments3: _DAPropertyArguments; PropertyArguments4: _DAPropertyArguments; ValueResult: _ValueResult; Results: OleVariant; begin // Get the values of Timestamp and AccessRights properties of two items. PropertyArguments1 := CoDAPropertyArguments.Create; PropertyArguments1.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; PropertyArguments1.NodeDescriptor.ItemID := 'Simulation.Random'; PropertyArguments1.PropertyDescriptor.PropertyId.NumericalValue := DAPropertyIds_Timestamp; PropertyArguments2 := CoDAPropertyArguments.Create; PropertyArguments2.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; PropertyArguments2.NodeDescriptor.ItemID := 'Simulation.Random'; PropertyArguments2.PropertyDescriptor.PropertyId.NumericalValue := DAPropertyIds_AccessRights; PropertyArguments3 := CoDAPropertyArguments.Create; PropertyArguments3.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; PropertyArguments3.NodeDescriptor.ItemID := 'Trends.Ramp (1 min)'; PropertyArguments3.PropertyDescriptor.PropertyId.NumericalValue := DAPropertyIds_Timestamp; PropertyArguments4 := CoDAPropertyArguments.Create; PropertyArguments4.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; PropertyArguments4.NodeDescriptor.ItemID := 'Trends.Ramp (1 min)'; PropertyArguments4.PropertyDescriptor.PropertyId.NumericalValue := DAPropertyIds_AccessRights; Arguments := VarArrayCreate([0, 3], varVariant); Arguments[0] := PropertyArguments1; Arguments[1] := PropertyArguments2; Arguments[2] := PropertyArguments3; Arguments[3] := PropertyArguments4; // Instantiate the client object Client := CoEasyDAClient.Create; TVarData(Results).VType := varArray or varVariant; TVarData(Results).VArray := PVarArray( Client.GetMultiplePropertyValues(Arguments)); // Display results for I := VarArrayLowBound(Results, 1) to VarArrayHighBound(Results, 1) do begin ValueResult := IInterface(Results[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; WriteLn('results(', i, ').Value: ', ValueResult.Value); end; VarClear(Results); VarClear(Arguments); end;
// This example shows how to get value of multiple OPC properties, and handle errors. // // Note that some properties may not have a useful value initially (e.g. until the item is activated in a group), which also the // case with Timestamp property as implemented by the demo server. This behavior is server-dependent, and normal. You can run // IEasyDAClient.ReadMultipleItemValues.Main.vbs shortly before this example, in order to obtain better property values. Your // code may also subscribe to the items in order to assure that they remain active. // // Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . const Timestamp = 4; const AccessRights = 5; // Get the values of Timestamp and AccessRights properties of two items. $PropertyArguments1 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments"); $PropertyArguments1->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $PropertyArguments1->NodeDescriptor->ItemID = "Simulation.Random"; $PropertyArguments1->PropertyDescriptor->PropertyID->NumericalValue = Timestamp; $PropertyArguments2 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments"); $PropertyArguments2->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $PropertyArguments2->NodeDescriptor->ItemID = "Simulation.Random"; $PropertyArguments2->PropertyDescriptor->PropertyID->NumericalValue = AccessRights; $PropertyArguments3 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments"); $PropertyArguments3->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $PropertyArguments3->NodeDescriptor->ItemID = "Trends.Ramp (1 min)"; $PropertyArguments3->PropertyDescriptor->PropertyID->NumericalValue = Timestamp; $PropertyArguments4 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments"); $PropertyArguments4->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $PropertyArguments4->NodeDescriptor->ItemID = "Trends.Ramp (1 min)"; $PropertyArguments4->PropertyDescriptor->PropertyID->NumericalValue = AccessRights; $arguments[0] = $PropertyArguments1; $arguments[1] = $PropertyArguments2; $arguments[2] = $PropertyArguments3; $arguments[3] = $PropertyArguments4; $Client = new COM("OpcLabs.EasyOpc.DataAccess.EasyDAClient"); $results = $Client->GetMultiplePropertyValues($arguments); for ($i = 0; $i < count($results); $i++) { $attributeDataResult = $results[$i]; if ($results[$i]->Succeeded) printf("results[d].Values\n", $i, $results[$i]->Value); else printf("results[d]: *** Failures\n", $i, $results[$i]->ErrorMessageBrief); }
REM This example shows how to get value of multiple OPC properties. REM REM Note that some properties may not have a useful value initially (e.g. until the item is activated in a group), which also the REM case with Timestamp property as implemented by the demo server. This behavior is server-dependent, and normal. You can run REM IEasyDAClient.ReadMultipleItemValues.Main.vbs shortly before this example, in order to obtain better property values. Your REM code may also subscribe to the items in order to assure that they remain active. REM REM Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Private Sub GetMultiplePropertyValues_Main_Command_Click() OutputText = "" ' Get the values of Timestamp and AccessRights properties of two items. Dim propertyArguments1 As New DAPropertyArguments propertyArguments1.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" propertyArguments1.nodeDescriptor.itemId = "Simulation.Random" propertyArguments1.PropertyDescriptor.propertyId.NumericalValue = DAPropertyIds_Timestamp Dim propertyArguments2 As New DAPropertyArguments propertyArguments2.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" propertyArguments2.nodeDescriptor.itemId = "Simulation.Random" propertyArguments2.PropertyDescriptor.propertyId.NumericalValue = DAPropertyIds_AccessRights Dim propertyArguments3 As New DAPropertyArguments propertyArguments3.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" propertyArguments3.nodeDescriptor.itemId = "Trends.Ramp (1 min)" propertyArguments3.PropertyDescriptor.propertyId.NumericalValue = DAPropertyIds_Timestamp Dim propertyArguments4 As New DAPropertyArguments propertyArguments4.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" propertyArguments4.nodeDescriptor.itemId = "Trends.Ramp (1 min)" propertyArguments4.PropertyDescriptor.propertyId.NumericalValue = DAPropertyIds_AccessRights Dim arguments(3) As Variant Set arguments(0) = propertyArguments1 Set arguments(1) = propertyArguments2 Set arguments(2) = propertyArguments3 Set arguments(3) = propertyArguments4 ' Instantiate the client object Dim client As New EasyDAClient ' Obtain values. By default, the Value attributes of the nodes will be read. Dim results() As Variant results = client.GetMultiplePropertyValues(arguments) ' Display results Dim i: For i = LBound(results) To UBound(results) Dim valueResult As valueResult: Set valueResult = results(i) ' Check if there has been an error getting the property value If Not valueResult.Exception Is Nothing Then OutputText = OutputText & arguments(i).nodeDescriptor.NodeId & " *** Failure: " & valueResult.Exception.Message & vbCrLf Else OutputText = OutputText & "results(" & i & ").Value: " & valueResult.value & vbCrLf End If Next End Sub
Rem This example shows how to get value of multiple OPC properties, and handle errors. Rem Rem Note that some properties may not have a useful value initially (e.g. until the item is activated in a group), which also the Rem case with Timestamp property as implemented by the demo server. This behavior is server-dependent, and normal. You can run Rem IEasyDAClient.ReadMultipleItemValues.Main.vbs shortly before this example, in order to obtain better property values. Your Rem code may also subscribe to the items in order to assure that they remain active. Rem Rem Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Option Explicit Const Timestamp = 4 Const AccessRights = 5 ' Get the values of Timestamp and AccessRights properties of two items. Dim PropertyArguments1: Set PropertyArguments1 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments") PropertyArguments1.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" PropertyArguments1.NodeDescriptor.ItemID = "Simulation.Random" PropertyArguments1.PropertyDescriptor.PropertyID.NumericalValue = Timestamp Dim PropertyArguments2: Set PropertyArguments2 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments") PropertyArguments2.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" PropertyArguments2.NodeDescriptor.ItemID = "Simulation.Random" PropertyArguments2.PropertyDescriptor.PropertyID.NumericalValue = AccessRights Dim PropertyArguments3: Set PropertyArguments3 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments") PropertyArguments3.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" PropertyArguments3.NodeDescriptor.ItemID = "Trends.Ramp (1 min)" PropertyArguments3.PropertyDescriptor.PropertyID.NumericalValue = Timestamp Dim PropertyArguments4: Set PropertyArguments4 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments") PropertyArguments4.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" PropertyArguments4.NodeDescriptor.ItemID = "Trends.Ramp (1 min)" PropertyArguments4.PropertyDescriptor.PropertyID.NumericalValue = AccessRights Dim arguments(3) Set arguments(0) = PropertyArguments1 Set arguments(1) = PropertyArguments2 Set arguments(2) = PropertyArguments3 Set arguments(3) = PropertyArguments4 Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient") Dim results: results = Client.GetMultiplePropertyValues(arguments) Dim i: For i = LBound(results) To UBound(results) If results(i).Exception Is Nothing Then WScript.Echo "results(" & i & ").Value: " & results(i).Value Else WScript.Echo "results(" & i & ").Exception.Message: " & results(i).Exception.Message End If Next
Rem This example measures the time needed to get values of all OPC properties of a single OPC item all at once. Rem This example shows how to get value of multiple OPC properties. Rem Rem Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Option Explicit Dim ServerDescriptor: Set ServerDescriptor = CreateObject("OpcLabs.EasyOpc.ServerDescriptor") ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" Dim NodeDescriptor: Set NodeDescriptor = CreateObject("OpcLabs.EasyOpc.DataAccess.DANodeDescriptor") NodeDescriptor.ItemID = "Simulation.ReadValue_I4" Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient") Dim PropertyElementCollection On Error Resume Next Set PropertyElementCollection = Client.BrowseProperties(ServerDescriptor, NodeDescriptor) If Err.Number <> 0 Then WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description WScript.Quit End If On Error Goto 0 Dim count: count = PropertyElementCollection.Count Dim arguments(): Redim arguments(count - 1) Dim i: i = 0 Dim PropertyElement: For Each PropertyElement In PropertyElementCollection Dim PropertyArguments: Set PropertyArguments = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAPropertyArguments") PropertyArguments.ServerDescriptor = ServerDescriptor PropertyArguments.NodeDescriptor = NodeDescriptor PropertyArguments.PropertyDescriptor.PropertyID = PropertyElement.PropertyId Set arguments(i) = PropertyArguments i = i + 1 Next 'EasyDAClient.ReadItemValue "", "OPCLabs.KitServer.2", "Simulation.ReadValue_I4" Dim startTime: startTime = Timer Dim results: results = Client.GetMultiplePropertyValues(arguments) WScript.Echo "Time taken (milliseconds): " & (Timer - startTime)*1000 'For i = LBound(results) To UBound(results) ' If results(i).Exception Is Nothing Then ' WScript.Echo "results(" & i & ").Value: " & results(i).Value ' Else ' WScript.Echo "results(" & i & ").Exception.Message: " & results(i).Exception.Message ' End If ''Next
The example below is a bit more complex, and combines the ability to browse for items with getting the data type property for each of the items obtained.
// This example shows how to obtain a data type of all OPC items under a branch. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System; using System.Linq; using OpcLabs.BaseLib.ComInterop; using OpcLabs.BaseLib.OperationModel; using OpcLabs.EasyOpc; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.DataAccess.AddressSpace; namespace DocExamples.DataAccess._EasyDAClient { partial class GetMultiplePropertyValues { public static void DataType() { // Instantiate the client object. var client = new EasyDAClient(); ServerDescriptor serverDescriptor = "OPCLabs.KitServer.2"; // Browse for all leaves under the "Simulation" branch DANodeElementCollection nodeElementCollection = client.BrowseLeaves(serverDescriptor, "Simulation"); // Create list of node descriptors, one for each leaf obtained DANodeDescriptor[] nodeDescriptorArray = nodeElementCollection .Where(element => !element.IsHint) // filter out hint leafs that do not represent real OPC items (rare) .Select(element => new DANodeDescriptor(element)) .ToArray(); // Get the value of DataType property; it is a 16-bit signed integer ValueResult[] valueResultArray = client.GetMultiplePropertyValues(serverDescriptor, nodeDescriptorArray, DAPropertyIds.DataType); for (int i = 0; i < valueResultArray.Length; i++) { DANodeDescriptor nodeDescriptor = nodeDescriptorArray[i]; // Check if there has been an error getting the property value ValueResult valueResult = valueResultArray[i]; if (!(valueResult.Exception is null)) { Console.WriteLine("{0} *** Failure: {1}", nodeDescriptor.NodeId, valueResult.Exception.Message); continue; } // Convert the data type to VarType var varType = (VarType)(short)valueResult.Value; // Display the obtained data type Console.WriteLine("{0}: {1}", nodeDescriptor.ItemId, varType); } } } }
# This example shows how to obtain a data type of all OPC 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 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 OpcLabs.BaseLib.ComInterop import * from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.DataAccess.OperationModel import * from OpcLabs.EasyOpc.OperationModel import * serverDescriptor = ServerDescriptor('OPCLabs.KitServer.2') # Instantiate the client object. client = EasyDAClient() # Browse for all leaves under the "Simulation" branch. try: nodeElementCollection = IEasyDAClientExtension.BrowseLeaves(client, serverDescriptor, DANodeDescriptor('Simulation')) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message) exit() # Create list of node descriptors, one for each leaf obtained. filteredNodeElements = filter(lambda element: not element.IsHint, nodeElementCollection) nodeDescriptorArray = list(map(lambda element: DANodeDescriptor(element), filteredNodeElements)) # Get the value of DataType property; it is a 16-bit signed integer. resultArray = IEasyDAClientExtension.GetMultiplePropertyValues(client, serverDescriptor, nodeDescriptorArray, DAPropertyDescriptor.FromInt64(DAPropertyIds.DataType)) # Display results for i, valueResult in enumerate(resultArray): nodeDescriptor = nodeDescriptorArray[i] # Check if there has been an error getting the property value. if valueResult.Exception is None: # Convert the data type to VarType. varType = VarType(valueResult.Value) # Display the obtained data type. print(nodeDescriptor.ItemId, ': ', varType, sep='') else: print(nodeDescriptor.ItemId, ' *** Failure: ', valueResult.Exception.Message)
' This example shows how to obtain a data type of all OPC items under a branch. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports OpcLabs.BaseLib.ComInterop Imports OpcLabs.BaseLib.OperationModel Imports OpcLabs.EasyOpc Imports OpcLabs.EasyOpc.DataAccess Namespace DataAccess._EasyDAClient Friend Class GetMultiplePropertyValues Public Shared Sub DataType() Dim client = New EasyDAClient() Dim serverDescriptor As ServerDescriptor = "OPCLabs.KitServer.2" ' Browse for all leaves under the "Simulation" branch Dim nodeElementCollection = client.BrowseLeaves(serverDescriptor, "Simulation") ' Create list of node descriptors, one for each leaf obtained ' filter out hint leafs that do not represent real OPC items (rare) Dim nodeDescriptorArray() As DANodeDescriptor = nodeElementCollection _ .Where(Function(element) Not element.IsHint) _ .Select(Function(element) New DANodeDescriptor(element)) _ .ToArray() ' Get the value of DataType property; it is a 16-bit signed integer Dim valueResultArray() As ValueResult = client.GetMultiplePropertyValues(serverDescriptor, nodeDescriptorArray, DAPropertyIds.DataType) For i = 0 To valueResultArray.Length - 1 Dim nodeDescriptor = nodeDescriptorArray(i) ' Check if there has been an error getting the property value Dim valueResult As ValueResult = valueResultArray(i) If valueResult.Exception IsNot Nothing Then Console.WriteLine("{0} *** Failure: {1}", nodeDescriptor.NodeId, valueResult.Exception.Message) Continue For End If ' Convert the data type to VarType Dim varType = CType(CShort(valueResult.Value), VarType) ' Display the obtained data type Console.WriteLine("{0}: {1}", nodeDescriptor.ItemId, varType) Next i End Sub End Class End Namespace
Copyright © 2004-2024 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base, Product Downloads. Technical support: Online Forums, FAQ.Missing some example? Ask us for it on our Online Forums! You do not have to own a commercial license in order to use Online Forums, and we reply to every post.