// This example shows how to subscribe to all dataset messages with specific publisher Id, on an OPC-UA PubSub connection // with UDP UADP mapping. // // In order to produce network messages for this example, run the UADemoPublisher tool. For documentation, see // https://kb.opclabs.com/UADemoPublisher_Basics . In some cases, you may have to specify the interface name to be used. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System; using System.Collections.Generic; using System.Threading; using OpcLabs.EasyOpc.UA.PubSub; using OpcLabs.EasyOpc.UA.PubSub.OperationModel; namespace UADocExamples.PubSub._EasyUASubscriber { partial class SubscribeDataSet { public static void PublisherId() { // Define the PubSub connection we will work with. Uses implicit conversion from a string. UAPubSubConnectionDescriptor pubSubConnectionDescriptor = "opc.udp://239.0.0.1"; // In some cases you may have to set the interface (network adapter) name that needs to be used, similarly to // the statement below. Your actual interface name may differ, of course. //pubSubConnectionDescriptor.ResourceAddress.InterfaceName = "Ethernet"; // Define the arguments for subscribing to the dataset, where the filter is (unsigned 64-bit) publisher Id 31. var subscribeDataSetArguments = new UASubscribeDataSetArguments( pubSubConnectionDescriptor, UAPublisherId.CreateUInt64(31)); // Instantiate the subscriber object and hook events. var subscriber = new EasyUASubscriber(); subscriber.DataSetMessage += subscriber_DataSetMessage_PublisherId; Console.WriteLine("Subscribing..."); subscriber.SubscribeDataSet(subscribeDataSetArguments); Console.WriteLine("Processing dataset message events for 20 seconds..."); Thread.Sleep(20 * 1000); Console.WriteLine("Unsubscribing..."); subscriber.UnsubscribeAllDataSets(); Console.WriteLine("Waiting for 1 second..."); // Unsubscribe operation is asynchronous, messages may still come for a short while. Thread.Sleep(1 * 1000); Console.WriteLine("Finished."); } static void subscriber_DataSetMessage_PublisherId(object sender, EasyUADataSetMessageEventArgs e) { // Display the dataset. if (e.Succeeded) { // An event with null DataSetData just indicates a successful connection. if (!(e.DataSetData is null)) { Console.WriteLine(); Console.WriteLine($"Dataset data: {e.DataSetData}"); foreach (KeyValuePair<string, UADataSetFieldData> pair in e.DataSetData.FieldDataDictionary) Console.WriteLine(pair); } } else { Console.WriteLine(); Console.WriteLine($"*** Failure: {e.ErrorMessageBrief}"); } } // Example output: // //Subscribing... //Processing dataset message events for 20 seconds... // //Dataset data: Good; Event; publisher=(UInt64)31, writer=51, fields: 4 //[#0, True {System.Boolean}; Good] //[#1, 1237 {System.Int32}; Good] //[#2, 2514 {System.Int32}; Good] //[#3, 10/1/2019 9:03:59 AM {System.DateTime}; Good] // //Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 //[#0, False {System.Boolean}; Good] //[#1, 1239 {System.Int32}; Good] //[#2, 2703 {System.Int32}; Good] //[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] // //Dataset data: Good; Data; publisher=(UInt64)31, writer=4, fields: 16 //[#0, False {System.Boolean}; Good] //[#1, 215 {System.Byte}; Good] //[#2, 1239 {System.Int16}; Good] //[#3, 1239 {System.Int32}; Good] //[#4, 1239 {System.Int64}; Good] //[#5, 87 {System.Int16}; Good] //[#6, 1239 {System.Int32}; Good] //[#7, 1239 {System.Int64}; Good] //[#8, 1239 {System.Decimal}; Good] //[#9, 1239 {System.Single}; Good] //[#10, 1239 {System.Double}; Good] //[#11, Romeo {System.String}; Good] //[#12, [20] {175, 186, 248, 246, 215, ...} {System.Byte[]}; Good] //[#13, d4492ca8-35c8-4b98-8edf-6ffa5ca041ca {System.Guid}; Good] //[#14, 10/1/2019 9:04:01 AM {System.DateTime}; Good] //[#15, [10] {1239, 1240, 1241, 1242, 1243, ...} {System.Int64[]}; Good] // //Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 //[#2, 2722 {System.Int32}; Good] //[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] //[#0, False {System.Boolean}; Good] //[#1, 1239 {System.Int32}; Good] // //Dataset data: Good; Data; publisher=(UInt64)31, writer=3, fields: 100 //[#0, 39 {System.Int64}; Good] //[#1, 139 {System.Int64}; Good] //[#2, 239 {System.Int64}; Good] //[#3, 339 {System.Int64}; Good] //[#4, 439 {System.Int64}; Good] //[#5, 539 {System.Int64}; Good] //[#6, 639 {System.Int64}; Good] //[#7, 739 {System.Int64}; Good] //[#8, 839 {System.Int64}; Good] //[#9, 939 {System.Int64}; Good] //[#10, 1039 {System.Int64}; Good] //... } }
# This example shows how to subscribe to all dataset messages with specific publisher Id, on an OPC-UA PubSub connection # with UDP UADP mapping. # # In order to produce network messages for this example, run the UADemoPublisher tool. For documentation, see # https://kb.opclabs.com/UADemoPublisher_Basics . In some cases, you may have to specify the interface name to be used. # # 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 time # Import .NET namespaces. from System import * from OpcLabs.EasyOpc.UA.PubSub import * from OpcLabs.EasyOpc.UA.PubSub.Configuration import * from OpcLabs.EasyOpc.UA.PubSub.OperationModel import * def dataSetMessage(sender, e): # Display the dataset. if e.Succeeded: # An event with null DataSetData just indicates a successful connection. if e.DataSetData is not None: print('') print('Dataset data: ', e.DataSetData, sep='') for pair in e.DataSetData.FieldDataDictionary: print(pair) else: print('') print('*** Failure: ', e.ErrorMessageBrief, sep='') # Define the PubSub connection we will work with. Uses implicit conversion from a string. pubSubConnectionDescriptor = UAPubSubConnectionDescriptor.op_Implicit('opc.udp://239.0.0.1') # In some cases you may have to set the interface (network adapter) name that needs to be used, similarly to # the statement below. Your actual interface name may differ, of course. #pubSubConnectionDescriptor.ResourceAddress.InterfaceName = 'Ethernet' # Define the arguments for subscribing to the dataset, where the filter is (unsigned 64-bit) publisher Id 31. subscribeDataSetArguments = UASubscribeDataSetArguments( pubSubConnectionDescriptor, UASubscribeDataSetFilter(UAPublisherId.CreateUInt64(Decimal(31)))) # Instantiate the subscriber object and hook events. subscriber = EasyUASubscriber() subscriber.DataSetMessage += dataSetMessage print('Subscribing...') IEasyUASubscriberExtension.SubscribeDataSet(subscriber, subscribeDataSetArguments) print('Processing dataset message events for 20 seconds...') time.sleep(20) print('Unsubscribing...') subscriber.UnsubscribeAllDataSets() print('Waiting for 1 second...') # Unsubscribe operation is asynchronous, messages may still come for a short while. time.sleep(1) subscriber.DataSetMessage -= dataSetMessage print('Finished.')
' This example shows how to subscribe to all dataset messages with specific publisher Id, on an OPC-UA PubSub connection ' with UDP UADP mapping. ' ' In order to produce network messages for this example, run the UADemoPublisher tool. For documentation, see ' https://kb.opclabs.com/UADemoPublisher_Basics . In some cases, you may have to specify the interface name to be used. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports OpcLabs.EasyOpc.UA.PubSub Imports OpcLabs.EasyOpc.UA.PubSub.OperationModel Namespace PubSub._EasyUASubscriber Partial Friend Class SubscribeDataSet Public Shared Sub PublisherId() ' Define the PubSub connection we will work with. Uses implicit conversion from a string. Dim pubSubConnectionDescriptor As UAPubSubConnectionDescriptor = "opc.udp://239.0.0.1" ' In some cases you may have to set the interface (network adapter) name that needs to be used, similarly to ' the statement below. Your actual interface name may differ, of course. ' pubSubConnectionDescriptor.ResourceAddress.InterfaceName = "Ethernet" ' Define the arguments for subscribing to the dataset, where the filter is (unsigned 64-bit) publisher Id 31. Dim subscribeDataSetArguments = New UASubscribeDataSetArguments( pubSubConnectionDescriptor, UAPublisherId.CreateUInt64(31)) ' Instantiate the subscriber object and hook events. Dim subscriber = New EasyUASubscriber() AddHandler subscriber.DataSetMessage, AddressOf subscriber_DataSetMessage_PublisherId Console.WriteLine("Subscribing...") subscriber.SubscribeDataSet(subscribeDataSetArguments) Console.WriteLine("Processing dataset message events for 20 seconds...") Threading.Thread.Sleep(20 * 1000) Console.WriteLine("Unsubscribing...") subscriber.UnsubscribeAllDataSets() Console.WriteLine("Waiting for 1 second...") ' Unsubscribe operation is asynchronous, messages may still come for a short while. Threading.Thread.Sleep(1 * 1000) Console.WriteLine("Finished...") End Sub Private Shared Sub subscriber_DataSetMessage_PublisherId(ByVal sender As Object, ByVal e As EasyUADataSetMessageEventArgs) ' Display the dataset. If e.Succeeded Then ' An event with null DataSetData just indicates a successful connection. If e.DataSetData IsNot Nothing Then Console.WriteLine() Console.WriteLine($"Dataset data: {e.DataSetData}") For Each pair As KeyValuePair(Of String, UADataSetFieldData) In e.DataSetData.FieldDataDictionary Console.WriteLine(pair) Next End If Else Console.WriteLine() Console.WriteLine($"*** Failure: {e.ErrorMessageBrief}") End If End Sub End Class ' Example output ' 'Subscribing... 'Processing dataset message events for 20 seconds... ' 'Dataset data: Good; Event; publisher=(UInt64)31, writer=51, fields: 4 '[#0, True {System.Boolean}; Good] '[#1, 1237 {System.Int32}; Good] '[#2, 2514 {System.Int32}; Good] '[#3, 10/1/2019 9:03:59 AM {System.DateTime}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 '[#0, False {System.Boolean}; Good] '[#1, 1239 {System.Int32}; Good] '[#2, 2703 {System.Int32}; Good] '[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=4, fields: 16 '[#0, False {System.Boolean}; Good] '[#1, 215 {System.Byte}; Good] '[#2, 1239 {System.Int16}; Good] '[#3, 1239 {System.Int32}; Good] '[#4, 1239 {System.Int64}; Good] '[#5, 87 {System.Int16}; Good] '[#6, 1239 {System.Int32}; Good] '[#7, 1239 {System.Int64}; Good] '[#8, 1239 {System.Decimal}; Good] '[#9, 1239 {System.Single}; Good] '[#10, 1239 {System.Double}; Good] '[#11, Romeo {System.String}; Good] '[#12, [20] {175, 186, 248, 246, 215, ...} {System.Byte[]}; Good] '[#13, d4492ca8-35c8-4b98-8edf-6ffa5ca041ca {System.Guid}; Good] '[#14, 10/1/2019 9:04:01 AM {System.DateTime}; Good] '[#15, [10] {1239, 1240, 1241, 1242, 1243, ...} {System.Int64[]}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 '[#2, 2722 {System.Int32}; Good] '[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] '[#0, False {System.Boolean}; Good] '[#1, 1239 {System.Int32}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=3, fields: 100 '[#0, 39 {System.Int64}; Good] '[#1, 139 {System.Int64}; Good] '[#2, 239 {System.Int64}; Good] '[#3, 339 {System.Int64}; Good] '[#4, 439 {System.Int64}; Good] '[#5, 539 {System.Int64}; Good] '[#6, 639 {System.Int64}; Good] '[#7, 739 {System.Int64}; Good] '[#8, 839 {System.Int64}; Good] '[#9, 939 {System.Int64}; Good] '[#10, 1039 {System.Int64}; Good] '... End Namespace
// This example shows how to subscribe to all dataset messages with specific publisher Id, on an OPC-UA PubSub connection // with UDP UADP mapping. // // In order to produce network messages for this example, run the UADemoPublisher tool. For documentation, see // https://kb.opclabs.com/UADemoPublisher_Basics . In some cases, you may have to specify the interface name to be used. // // Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . type TSubscriberEventHandlers80 = class procedure OnDataSetMessage( ASender: TObject; sender: OleVariant; const eventArgs: _EasyUADataSetMessageEventArgs); end; class procedure SubscribeDataSet.PublisherId; var ConnectionDescriptor: _UAPubSubConnectionDescriptor; SubscribeDataSetArguments: _EasyUASubscribeDataSetArguments; Subscriber: TEasyUASubscriber; SubscriberEventHandlers: TSubscriberEventHandlers80; begin // Define the PubSub connection we will work with. SubscribeDataSetArguments := CoEasyUASubscribeDataSetArguments.Create; ConnectionDescriptor := SubscribeDataSetArguments.DataSetSubscriptionDescriptor.ConnectionDescriptor; ConnectionDescriptor.ResourceAddress.ResourceDescriptor.UrlString := 'opc.udp://239.0.0.1'; // In some cases you may have to set the interface (network adapter) name that needs to be used, similarly to // the statement below. Your actual interface name may differ, of course. //ConnectionDescriptor.ResourceAddress.InterfaceName := 'Ethernet'; // Define the arguments for subscribing to the dataset, where the filter is (unsigned 64-bit) publisher Id 31. SubscribeDataSetArguments.DataSetSubscriptionDescriptor.Filter.PublisherId.SetIdentifier(UAPublisherIdType_UInt64, 31); // Instantiate the subscriber object and hook events. Subscriber := TEasyUASubscriber.Create(nil); SubscriberEventHandlers := TSubscriberEventHandlers80.Create; Subscriber.OnDataSetMessage := SubscriberEventHandlers.OnDataSetMessage; WriteLn('Subscribing...'); Subscriber.SubscribeDataSet(SubscribeDataSetArguments); WriteLn('Processing dataset message for 20 seconds...'); PumpSleep(20*1000); WriteLn('Unsubscribing...'); Subscriber.UnsubscribeAllDataSets; WriteLn('Waiting for 1 second...'); // Unsubscribe operation is asynchronous, messages may still come for a short while. PumpSleep(1*1000); WriteLn('Finished.'); FreeAndNil(Subscriber); FreeAndNil(SubscriberEventHandlers); end; procedure TSubscriberEventHandlers80.OnDataSetMessage( ASender: TObject; sender: OleVariant; const eventArgs: _EasyUADataSetMessageEventArgs); var Count: Cardinal; DictionaryEntry2: _DictionaryEntry2; Element: OleVariant; FieldDataDictionaryEnumerator: IEnumVariant; begin // Display the dataset. if eventArgs.Succeeded then begin // An event with null DataSetData just indicates a successful connection. if eventArgs.DataSetData <> nil then begin WriteLn; WriteLn('Dataset data: ', eventArgs.DataSetData.ToString); FieldDataDictionaryEnumerator := eventArgs.DataSetData.FieldDataDictionary.GetEnumerator; while (FieldDataDictionaryEnumerator.Next(1, Element, Count) = S_OK) do begin DictionaryEntry2 := IUnknown(Element) as _DictionaryEntry2; WriteLn(DictionaryEntry2.ToString); end; end; end else begin WriteLn; WriteLn('*** Failure: ', eventArgs.ErrorMessageBrief); end; end; // Example output: // //Subscribing... //Processing dataset message events for 20 seconds... // //Dataset data: Good; Event; publisher=(UInt64)31, writer=51, fields: 4 //[#0, True {System.Boolean}; Good] //[#1, 1237 {System.Int32}; Good] //[#2, 2514 {System.Int32}; Good] //[#3, 10/1/2019 9:03:59 AM {System.DateTime}; Good] // //Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 //[#0, False {System.Boolean}; Good] //[#1, 1239 {System.Int32}; Good] //[#2, 2703 {System.Int32}; Good] //[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] // //Dataset data: Good; Data; publisher=(UInt64)31, writer=4, fields: 16 //[#0, False {System.Boolean}; Good] //[#1, 215 {System.Byte}; Good] //[#2, 1239 {System.Int16}; Good] //[#3, 1239 {System.Int32}; Good] //[#4, 1239 {System.Int64}; Good] //[#5, 87 {System.Int16}; Good] //[#6, 1239 {System.Int32}; Good] //[#7, 1239 {System.Int64}; Good] //[#8, 1239 {System.Decimal}; Good] //[#9, 1239 {System.Single}; Good] //[#10, 1239 {System.Double}; Good] //[#11, Romeo {System.String}; Good] //[#12, [20] {175, 186, 248, 246, 215, ...} {System.Byte[]}; Good] //[#13, d4492ca8-35c8-4b98-8edf-6ffa5ca041ca {System.Guid}; Good] //[#14, 10/1/2019 9:04:01 AM {System.DateTime}; Good] //[#15, [10] {1239, 1240, 1241, 1242, 1243, ...} {System.Int64[]}; Good] // //Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 //[#2, 2722 {System.Int32}; Good] //[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] //[#0, False {System.Boolean}; Good] //[#1, 1239 {System.Int32}; Good] // //Dataset data: Good; Data; publisher=(UInt64)31, writer=3, fields: 100 //[#0, 39 {System.Int64}; Good] //[#1, 139 {System.Int64}; Good] //[#2, 239 {System.Int64}; Good] //[#3, 339 {System.Int64}; Good] //[#4, 439 {System.Int64}; Good] //[#5, 539 {System.Int64}; Good] //[#6, 639 {System.Int64}; Good] //[#7, 739 {System.Int64}; Good] //[#8, 839 {System.Int64}; Good] //[#9, 939 {System.Int64}; Good] //[#10, 1039 {System.Int64}; Good] //...
Rem This example shows how to subscribe to all dataset messages with specific publisher Id, on an OPC-UA PubSub connection Rem with UDP UADP mapping. Rem Rem In order to produce network messages for this example, run the UADemoPublisher tool. For documentation, see Rem https://kb.opclabs.com/UADemoPublisher_Basics . In some cases, you may have to specify the interface name to be used. Rem Rem Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Option Explicit Const UAPublisherIdType_UInt64 = 4 ' Define the PubSub connection we will work with. Dim SubscribeDataSetArguments: Set SubscribeDataSetArguments = CreateObject("OpcLabs.EasyOpc.UA.PubSub.OperationModel.EasyUASubscribeDataSetArguments") Dim ConnectionDescriptor: Set ConnectionDescriptor = SubscribeDataSetArguments.DataSetSubscriptionDescriptor.ConnectionDescriptor ConnectionDescriptor.ResourceAddress.ResourceDescriptor.UrlString = "opc.udp://239.0.0.1" ' In some cases you may have to set the interface (network adapter) name that needs to be used, similarly to ' the statement below. Your actual interface name may differ, of course. ' ConnectionDescriptor.ResourceAddress.InterfaceName = "Ethernet" ' Define the arguments for subscribing to the dataset, where the filter is (unsigned 64-bit) publisher Id 31. SubscribeDataSetArguments.DataSetSubscriptionDescriptor.Filter.PublisherId.SetIdentifier UAPublisherIdType_UInt64, 31 ' Instantiate the subscriber object and hook events. Dim Subscriber: Set Subscriber = CreateObject("OpcLabs.EasyOpc.UA.PubSub.EasyUASubscriber") WScript.ConnectObject Subscriber, "Subscriber_" WScript.Echo "Subscribing..." Subscriber.SubscribeDataSet SubscribeDataSetArguments WScript.Echo "Processing dataset message events for 20 seconds..." WScript.Sleep 20*1000 WScript.Echo "Unsubscribing..." Subscriber.UnsubscribeAllDataSets WScript.Echo "Waiting for 1 second..." ' Unsubscribe operation is asynchronous, messages may still come for a short while. WScript.Sleep 1*1000 WScript.Echo "Finished." Sub Subscriber_DataSetMessage(Sender, e) ' Display the dataset. If e.Succeeded Then ' An event with null DataSetData just indicates a successful connection. If Not (e.DataSetData Is Nothing) Then WScript.Echo WScript.Echo "Dataset data: " & e.DataSetData Dim Pair: For Each Pair in e.DataSetData.FieldDataDictionary WScript.Echo Pair Next End If Else WScript.Echo WScript.Echo "*** Failure: " & e.ErrorMessageBrief End If End Sub ' Example output: ' 'Subscribing... 'Processing dataset message events for 20 seconds... ' 'Dataset data: Good; Event; publisher=(UInt64)31, writer=51, fields: 4 '[#0, True {System.Boolean}; Good] '[#1, 1237 {System.Int32}; Good] '[#2, 2514 {System.Int32}; Good] '[#3, 10/1/2019 9:03:59 AM {System.DateTime}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 '[#0, False {System.Boolean}; Good] '[#1, 1239 {System.Int32}; Good] '[#2, 2703 {System.Int32}; Good] '[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=4, fields: 16 '[#0, False {System.Boolean}; Good] '[#1, 215 {System.Byte}; Good] '[#2, 1239 {System.Int16}; Good] '[#3, 1239 {System.Int32}; Good] '[#4, 1239 {System.Int64}; Good] '[#5, 87 {System.Int16}; Good] '[#6, 1239 {System.Int32}; Good] '[#7, 1239 {System.Int64}; Good] '[#8, 1239 {System.Decimal}; Good] '[#9, 1239 {System.Single}; Good] '[#10, 1239 {System.Double}; Good] '[#11, Romeo {System.String}; Good] '[#12, [20] {175, 186, 248, 246, 215, ...} {System.Byte[]}; Good] '[#13, d4492ca8-35c8-4b98-8edf-6ffa5ca041ca {System.Guid}; Good] '[#14, 10/1/2019 9:04:01 AM {System.DateTime}; Good] '[#15, [10] {1239, 1240, 1241, 1242, 1243, ...} {System.Int64[]}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 '[#2, 2722 {System.Int32}; Good] '[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] '[#0, False {System.Boolean}; Good] '[#1, 1239 {System.Int32}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=3, fields: 100 '[#0, 39 {System.Int64}; Good] '[#1, 139 {System.Int64}; Good] '[#2, 239 {System.Int64}; Good] '[#3, 339 {System.Int64}; Good] '[#4, 439 {System.Int64}; Good] '[#5, 539 {System.Int64}; Good] '[#6, 639 {System.Int64}; Good] '[#7, 739 {System.Int64}; Good] '[#8, 839 {System.Int64}; Good] '[#9, 939 {System.Int64}; Good] '[#10, 1039 {System.Int64}; Good] '...
REM This example shows how to subscribe to all dataset messages with specific publisher Id, on an OPC-UA PubSub connection REM with UDP UADP mapping. REM REM In order to produce network messages for this example, run the UADemoPublisher tool. For documentation, see REM https://kb.opclabs.com/UADemoPublisher_Basics . In some cases, you may have to specify the interface name to be used. REM REM Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . ' The subscriber object, with events 'Public WithEvents Subscriber5 As EasyUASubscriber Private Sub EasyUASubscriber_SubscribeDataSet_PublisherId_Command_Click() OutputText = "" ' Define the PubSub connection we will work with. Dim subscribeDataSetArguments As New EasyUASubscribeDataSetArguments Dim ConnectionDescriptor As UAPubSubConnectionDescriptor Set ConnectionDescriptor = subscribeDataSetArguments.dataSetSubscriptionDescriptor.ConnectionDescriptor ConnectionDescriptor.ResourceAddress.ResourceDescriptor.UrlString = "opc.udp://239.0.0.1" ' In some cases you may have to set the interface (network adapter) name that needs to be used, similarly to ' the statement below. Your actual interface name may differ, of course. 'ConnectionDescriptor.ResourceAddress.InterfaceName := 'Ethernet'; ' Define the arguments for subscribing to the dataset, where the filter is (unsigned 64-bit) publisher Id 31. Call subscribeDataSetArguments.dataSetSubscriptionDescriptor.Filter.PublisherId.SetIdentifier(UAPublisherIdType_UInt64, 31) ' Instantiate the subscriber object and hook events. Set Subscriber5 = New EasyUASubscriber OutputText = OutputText & "Subscribing..." & vbCrLf Call Subscriber5.SubscribeDataSet(subscribeDataSetArguments) OutputText = OutputText & "Processing dataset message for 20 seconds..." & vbCrLf Pause 20000 OutputText = OutputText & "Unsubscribing..." & vbCrLf Subscriber5.UnsubscribeAllDataSets OutputText = OutputText & "Waiting for 1 second..." & vbCrLf ' Unsubscribe operation is asynchronous, messages may still come for a short while. Pause 1000 Set Subscriber5 = Nothing OutputText = OutputText & "Finished." & vbCrLf End Sub Private Sub Subscriber5_DataSetMessage(ByVal sender As Variant, ByVal eventArgs As EasyUADataSetMessageEventArgs) ' Display the dataset If eventArgs.Succeeded Then ' An event with null DataSetData just indicates a successful connection. If Not eventArgs.DataSetData Is Nothing Then OutputText = OutputText & vbCrLf OutputText = OutputText & "Dataset data: " & eventArgs.DataSetData & vbCrLf Dim dictionaryEntry2 : For Each dictionaryEntry2 In eventArgs.DataSetData.FieldDataDictionary OutputText = OutputText & dictionaryEntry2 & vbCrLf Next End If Else OutputText = OutputText & vbCrLf OutputText = OutputText & "*** Failure: " & eventArgs.ErrorMessageBrief & vbCrLf End If ' Example output: ' 'Subscribing... 'Processing dataset message events for 20 seconds... ' 'Dataset data: Good; Event; publisher=(UInt64)31, writer=51, fields: 4 '[#0, True {System.Boolean}; Good] '[#1, 1237 {System.Int32}; Good] '[#2, 2514 {System.Int32}; Good] '[#3, 10/1/2019 9:03:59 AM {System.DateTime}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 '[#0, False {System.Boolean}; Good] '[#1, 1239 {System.Int32}; Good] '[#2, 2703 {System.Int32}; Good] '[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=4, fields: 16 '[#0, False {System.Boolean}; Good] '[#1, 215 {System.Byte}; Good] '[#2, 1239 {System.Int16}; Good] '[#3, 1239 {System.Int32}; Good] '[#4, 1239 {System.Int64}; Good] '[#5, 87 {System.Int16}; Good] '[#6, 1239 {System.Int32}; Good] '[#7, 1239 {System.Int64}; Good] '[#8, 1239 {System.Decimal}; Good] '[#9, 1239 {System.Single}; Good] '[#10, 1239 {System.Double}; Good] '[#11, Romeo {System.String}; Good] '[#12, [20] {175, 186, 248, 246, 215, ...} {System.Byte[]}; Good] '[#13, d4492ca8-35c8-4b98-8edf-6ffa5ca041ca {System.Guid}; Good] '[#14, 10/1/2019 9:04:01 AM {System.DateTime}; Good] '[#15, [10] {1239, 1240, 1241, 1242, 1243, ...} {System.Int64[]}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=1, fields: 4 '[#2, 2722 {System.Int32}; Good] '[#3, 10/1/2019 9:04:01 AM {System.DateTime}; Good] '[#0, False {System.Boolean}; Good] '[#1, 1239 {System.Int32}; Good] ' 'Dataset data: Good; Data; publisher=(UInt64)31, writer=3, fields: 100 '[#0, 39 {System.Int64}; Good] '[#1, 139 {System.Int64}; Good] '[#2, 239 {System.Int64}; Good] '[#3, 339 {System.Int64}; Good] '[#4, 439 {System.Int64}; Good] '[#5, 539 {System.Int64}; Good] '[#6, 639 {System.Int64}; Good] '[#7, 739 {System.Int64}; Good] '[#8, 839 {System.Int64}; Good] '[#9, 939 {System.Int64}; Good] '[#10, 1039 {System.Int64}; Good] '... End Sub
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.