// Shows how to configure the OPC UA Complex Data plug-in to use a shared data type model provider. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System; using System.Diagnostics; using OpcLabs.EasyOpc.UA; using OpcLabs.EasyOpc.UA.OperationModel; using OpcLabs.EasyOpc.UA.Plugins.ComplexData; namespace UADocExamples.ComplexData._UAComplexDataClientPluginParameters { class IsolatedDataTypeModelProvider { public static void Main1() { // Define which server and node we will work with. 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/" UANodeDescriptor nodeDescriptor = "nsu=http://test.org/UA/Data/ ;i=10239"; // [ObjectsFolder]/Data.Static.Scalar.StructureValue // We will create two instances of EasyUAClient class, and configure each of them to use the shared data type // model provider. // Configure the first client object. var client1 = new EasyUAClient(); UAComplexDataClientPluginParameters complexDataClientPluginParameters1 = client1.InstanceParameters.PluginConfigurations.Find<UAComplexDataClientPluginParameters>(); Debug.Assert(complexDataClientPluginParameters1 != null); complexDataClientPluginParameters1.IsolatedDataTypeModelProvider = false; // Configure the second client object. var client2 = new EasyUAClient(); UAComplexDataClientPluginParameters complexDataClientPluginParameters2 = client2.InstanceParameters.PluginConfigurations.Find<UAComplexDataClientPluginParameters>(); Debug.Assert(complexDataClientPluginParameters2 != null); complexDataClientPluginParameters2.IsolatedDataTypeModelProvider = false; // We will now read the same complex data node using the two client objects. // // There is no noticeable difference in the results from the default state in which the client objects are // set to use per-instance data type model provider. But, with the shared data type model provider, the metadata // obtained during the read on the first client object and cached inside the data type model provider are reused // during the read on the second client object, making this and the subsequent operations more efficient. // Read the complex data node using the first client. object value1; try { value1 = client1.ReadValue(endpointDescriptor, nodeDescriptor); } catch (UAException uaException) { Console.WriteLine("*** Failure: {0}", uaException.GetBaseException().Message); return; } Console.WriteLine(value1); // Read the complex data node using the second client. object value2; try { value2 = client2.ReadValue(endpointDescriptor, nodeDescriptor); } catch (UAException uaException) { Console.WriteLine("*** Failure: {0}", uaException.GetBaseException().Message); return; } Console.WriteLine(value2); } } }
# Shows how to configure the OPC UA Complex Data plug-in to use a shared data type model provider. # # 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 * from OpcLabs.EasyOpc.UA.Plugins.ComplexData 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/' # [ObjectsFolder]/Data.Static.Scalar.StructureValue nodeDescriptor = UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10239') # We will create two instances of EasyUAClient class, and configure each of them to use the shared data type # model provider. # Configure the first client object. client1 = EasyUAClient() complexDataClientPluginParameters1 = ( client1.InstanceParameters.PluginConfigurations.Find[UAComplexDataClientPluginParameters]()) assert complexDataClientPluginParameters1 is not None complexDataClientPluginParameters1.IsolatedDataTypeModelProvider = False # Configure the second client object. client2 = EasyUAClient() complexDataClientPluginParameters2 = ( client1.InstanceParameters.PluginConfigurations.Find[UAComplexDataClientPluginParameters]()) assert complexDataClientPluginParameters2 is not None complexDataClientPluginParameters1.IsolatedDataTypeModelProvider = False # We will now read the same complex data node using the two client objects. # # There is no noticeable difference in the results from the default state in which the client objects are # set to use per-instance data type model provider. But, with the shared data type model provider, the metadata # obtained during the read on the first client object and cached inside the data type model provider are reused # during the read on the second client object, making this and the subsequent operations more efficient. # Read the complex data node using the first client. try: value1 = IEasyUAClientExtension.ReadValue(client1, endpointDescriptor, nodeDescriptor) except UAException as uaException: print('*** Failure: ' + uaException.GetBaseException().Message) exit() print(value1) # Read the complex data node using the second client. try: value2 = IEasyUAClientExtension.ReadValue(client2, endpointDescriptor, nodeDescriptor) except UAException as uaException: print('*** Failure: ' + uaException.GetBaseException().Message) exit() print(value1) print() print('Finished.')
' Shows how to configure the OPC UA Complex Data plug-in to use a shared data type model provider. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports System Imports OpcLabs.EasyOpc.UA Imports OpcLabs.EasyOpc.UA.OperationModel Imports OpcLabs.EasyOpc.UA.Plugins.ComplexData Namespace ComplexData._UAComplexDataClientPluginParameters Friend Class IsolatedDataTypeModelProvider 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/" ' Define which node we will work with. Dim nodeDescriptor As UANodeDescriptor = "nsu=http://test.org/UA/Data/ ;i=10239" ' [ObjectsFolder]/Data.Static.Scalar.StructureValue ' We will create two instances of EasyUAClient class, and configure each of them to use the shared data type ' model provider. ' Configure the first client object. Dim client1 = New EasyUAClient Dim complexDataClientPluginParameters1 As UAComplexDataClientPluginParameters = client1.InstanceParameters.PluginConfigurations.Find(Of UAComplexDataClientPluginParameters)() Debug.Assert(complexDataClientPluginParameters1 IsNot Nothing) complexDataClientPluginParameters1.IsolatedDataTypeModelProvider = False ' Configure the second client object. Dim client2 = New EasyUAClient Dim complexDataClientPluginParameters2 As UAComplexDataClientPluginParameters = client2.InstanceParameters.PluginConfigurations.Find(Of UAComplexDataClientPluginParameters)() Debug.Assert(complexDataClientPluginParameters2 IsNot Nothing) complexDataClientPluginParameters2.IsolatedDataTypeModelProvider = False ' We will now read the same complex data node using the two client objects. ' ' There is no noticeable difference in the results from the default state in which the client objects are ' set to use per-instance data type model provider. But, with the shared data type model provider, the metadata ' obtained during the read on the first client object and cached inside the data type model provider are reused ' during the read on the second client object, making this and the subsequent operations more efficient. ' Read the complex data node using the first client. Dim value1 As Object Try value1 = client1.ReadValue(endpointDescriptor, nodeDescriptor) Catch uaException As UAException Console.WriteLine("*** Failure: {0}", uaException.GetBaseException.Message) Exit Sub End Try Console.WriteLine(value1) ' Read the complex data node using the second client. Dim value2 As Object Try value2 = client2.ReadValue(endpointDescriptor, nodeDescriptor) Catch uaException As UAException Console.WriteLine("*** Failure: {0}", uaException.GetBaseException.Message) Exit Sub End Try Console.WriteLine(value2) End Sub End Class End Namespace
// Shows how to configure the OPC UA Complex Data plug-in to use a shared data type model provider. // // Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . class procedure IsolatedDataTypeModelProvider.Main; var Client1, Client2: _EasyUAClient; ComplexDataClientPluginParameters1, ComplexDataClientPluginParameters2: OpcLabs_EasyOpcUA_TLB._UAComplexDataClientPluginParameters; EndpointDescriptor: string; NodeDescriptor: string; Value1, Value2: OleVariant; begin // Define which server and node we will work with. EndpointDescriptor := //'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'; NodeDescriptor := 'nsu=http://test.org/UA/Data/ ;i=10239'; // [ObjectsFolder]/Data.Static.Scalar.StructureValue // We will create two instances of EasyUAClient class, and configure each of them to use the shared data type // model provider. // Configure the first client object. Client1 := CoEasyUAClient.Create; ComplexDataClientPluginParameters1 := IUnknown(Client1.InstanceParameters.PluginConfigurations.Find('OpcLabs.EasyOpc.UA.Plugins.ComplexData.UAComplexDataClientPluginParameters')) as OpcLabs_EasyOpcUA_TLB._UAComplexDataClientPluginParameters; ComplexDataClientPluginParameters1.IsolatedDataTypeModelProvider := false; // Configure the second client object. Client2 := CoEasyUAClient.Create; ComplexDataClientPluginParameters2 := IUnknown(Client2.InstanceParameters.PluginConfigurations.Find('OpcLabs.EasyOpc.UA.Plugins.ComplexData.UAComplexDataClientPluginParameters')) as OpcLabs_EasyOpcUA_TLB._UAComplexDataClientPluginParameters; ComplexDataClientPluginParameters2.IsolatedDataTypeModelProvider := false; // We will now read the same complex data node using the two client objects. // // There is no noticeable difference in the results from the default state in which the client objects are // set to use per-instance data type model provider. But, with the shared data type model provider, the metadata // obtained during the read on the first client object and cached inside the data type model provider are reused // during the read on the second client object, making this and the subsequent operations more efficient. // Read the complex data node using the first client. try Value1 := Client1.ReadValue(EndpointDescriptor, NodeDescriptor); except on E: EOleException do begin WriteLn(Format('*** Failure: %s', [E.GetBaseException.Message])); Exit; end; end; WriteLn(Value1); // Read the complex data node using the second client. try Value2 := Client2.ReadValue(EndpointDescriptor, NodeDescriptor); except on E: EOleException do begin WriteLn(Format('*** Failure: %s', [E.GetBaseException.Message])); Exit; end; end; WriteLn(Value2); end;
Rem Shows how to configure the OPC UA Complex Data plug-in to use a shared data type model provider. Rem Rem Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Option Explicit ' Define which server and node we will work with. Dim endpointDescriptor: endpointDescriptor = _ "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" '"http://opcua.demo-this.com:51211/UA/SampleServer" '"https://opcua.demo-this.com:51212/UA/SampleServer/" Dim nodeDescriptor: nodeDescriptor = _ "nsu=http://test.org/UA/Data/ ;i=10239" ' [ObjectsFolder]/Data.Static.Scalar.StructureValue ' We will create two instances of EasyUAClient class, and configure each of them to use the shared data type ' model provider. ' Configure the first client object. Dim Client1: Set Client1 = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient") Dim ComplexDataClientPluginParameters1: Set ComplexDataClientPluginParameters1 = Client1.InstanceParameters.PluginConfigurations.Find( _ "OpcLabs.EasyOpc.UA.Plugins.ComplexData.UAComplexDataClientPluginParameters") ComplexDataClientPluginParameters1.IsolatedDataTypeModelProvider = False ' Configure the second client object. Dim Client2: Set Client2 = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient") Dim ComplexDataClientPluginParameters2: Set ComplexDataClientPluginParameters2 = Client2.InstanceParameters.PluginConfigurations.Find( _ "OpcLabs.EasyOpc.UA.Plugins.ComplexData.UAComplexDataClientPluginParameters") ComplexDataClientPluginParameters2.IsolatedDataTypeModelProvider = False ' We will now read the same complex data node using the two client objects. ' ' There is no noticeable difference in the results from the default state in which the client objects are ' set to use per-instance data type model provider. But, with the shared data type model provider, the metadata ' obtained during the read on the first client object and cached inside the data type model provider are reused ' during the read on the second client object, making this and the subsequent operations more efficient. ' Read the complex data node using the first client. On Error Resume Next Dim Value1: Set Value1 = Client1.ReadValue(endpointDescriptor, nodeDescriptor) If Err.Number <> 0 Then WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description WScript.Quit End If On Error Goto 0 WScript.Echo Value1 ' Read the complex data node using the second client. On Error Resume Next Dim Value2: Set Value2 = Client2.ReadValue(endpointDescriptor, nodeDescriptor) If Err.Number <> 0 Then WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description WScript.Quit End If On Error Goto 0 WScript.Echo Value2
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.