// This example shows how to subscribe to changes of a single monitored item and display the value of the item with each // change. using System; using OpcLabs.EasyOpc.UA; using OpcLabs.EasyOpc.UA.OperationModel; namespace UADocExamples._EasyUAClient { partial class SubscribeDataChange { public static void Overload1() { 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/" // Instantiate the client object and hook events. var client = new EasyUAClient(); client.DataChangeNotification += client_DataChangeNotification; Console.WriteLine("Subscribing..."); client.SubscribeDataChange(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853", 1000); Console.WriteLine("Processing data change events for 20 seconds..."); System.Threading.Thread.Sleep(20 * 1000); Console.WriteLine("Unsubscribing..."); client.UnsubscribeAllMonitoredItems(); Console.WriteLine("Waiting for 5 seconds..."); System.Threading.Thread.Sleep(5 * 1000); Console.WriteLine("Finished."); } static void client_DataChangeNotification(object sender, EasyUADataChangeNotificationEventArgs e) { // Display value. if (e.Succeeded) Console.WriteLine($"Value: {e.AttributeData.Value}"); else Console.WriteLine($"*** Failure: {e.ErrorMessageBrief}"); } } }
# This example shows how to subscribe to changes of a single monitored item and display the value of the item with each # change. #requires -Version 5.1 using namespace OpcLabs.EasyOpc.UA # The path below assumes that the current directory is [ProductDir]/Examples-NET/PowerShell/Windows . Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcUA.dll" Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcUAComponents.dll" [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/" # Instantiate the client object. $client = New-Object EasyUAClient # Data change notification handler Register-ObjectEvent -InputObject $client -EventName DataChangeNotification -Action { # Display value. if ($EventArgs.Succeeded) { Write-Host "Value: $($EventArgs.AttributeData.Value)" } else { Write-Host "*** Failure: $($EventArgs.ErrorMessageBrief)" } } Write-Host "Subscribing..." $client.SubscribeDataChange($endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853", 1000) Write-Host "Processing data change events for 20 seconds..." $stopwatch = [System.Diagnostics.Stopwatch]::StartNew() while ($stopwatch.Elapsed.TotalSeconds -lt 20) { Start-Sleep -Seconds 1 } Write-Host "Unsubscribing..." $client.UnsubscribeAllMonitoredItems() Write-Host "Waiting for 5 seconds..." Start-Sleep -Seconds 5 Write-Host "Finished."
# This example shows how to subscribe to changes of a single monitored item and display the value of the item with each # change. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc import time # Import .NET namespaces. from OpcLabs.EasyOpc.UA import * from OpcLabs.EasyOpc.UA.OperationModel import * def dataChangeNotification(sender, e): # Display value. if e.Succeeded: print('Value: ', e.AttributeData.Value, sep='') else: print('*** Failure: ', e.ErrorMessageBrief, sep='') 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/' # Instantiate the client object and hook events. client = EasyUAClient() client.DataChangeNotification += dataChangeNotification print('Subscribing...') IEasyUAClientExtension.SubscribeDataChange(client, endpointDescriptor, UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10853'), 1000) print('Processing data change events for 20 seconds...') time.sleep(20) print('Unsubscribing...') client.UnsubscribeAllMonitoredItems() print('Waiting for 5 seconds...') time.sleep(5) print('Finished.')
' This example shows how to subscribe to changes of a single monitored item and display the value of the item with each change. Imports OpcLabs.EasyOpc.UA Imports OpcLabs.EasyOpc.UA.OperationModel Namespace _EasyUAClient Friend Class SubscribeDataChange Public Shared Sub Overload1() ' 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/" ' Instantiate the client object and hook events Dim client = New EasyUAClient() AddHandler client.DataChangeNotification, AddressOf client_DataChangeNotification Console.WriteLine("Subscribing...") client.SubscribeDataChange(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853", 1000) Console.WriteLine("Processing monitored item changed events for 10 seconds...") Threading.Thread.Sleep(10 * 1000) Console.WriteLine("Unsubscribing...") client.UnsubscribeAllMonitoredItems() Console.WriteLine("Waiting for 5 seconds...") Threading.Thread.Sleep(5 * 1000) End Sub Private Shared Sub client_DataChangeNotification(ByVal sender As Object, ByVal e As EasyUADataChangeNotificationEventArgs) ' Display value If e.Succeeded Then Console.WriteLine("Value: {0}", e.AttributeData.Value) Else Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief) End If End Sub End Class End Namespace
// This example shows how to subscribe to changes of a single monitored item and display each change. #include "stdafx.h" // Includes "QuickOpc.h", and other commonly used files #include <atlcom.h> #include "SubscribeDataChange.h" namespace _EasyUAClient { // CEasyUAClientEvents class CEasyUAClientEvents : public IDispEventImpl<1, CEasyUAClientEvents> { public: BEGIN_SINK_MAP(CEasyUAClientEvents) // Event handlers must have the __stdcall calling convention SINK_ENTRY(1, DISPID_EASYUACLIENTEVENTS_DATACHANGENOTIFICATION, &CEasyUAClientEvents::DataChangeNotification) END_SINK_MAP() public: // The handler for EasyUAClient.DataChangeNotification event STDMETHOD(DataChangeNotification)(VARIANT varSender, _EasyUADataChangeNotificationEventArgs* pEventArgs) { // Display the data // Remark: Production code would check EventArgsPtr->Exception before accessing EventArgsPtr->AttributeData. _UAAttributeDataPtr AttributeDataPtr(pEventArgs->AttributeData); _tprintf(_T("%s\n"), (LPCTSTR)CW2CT(AttributeDataPtr->ToString)); return S_OK; } }; void SubscribeDataChange::Main() { // Initialize the COM library CoInitializeEx(NULL, COINIT_MULTITHREADED); { // Instantiate the client object _EasyUAClientPtr ClientPtr(__uuidof(EasyUAClient)); // Hook events CEasyUAClientEvents* pClientEvents = new CEasyUAClientEvents(); AtlGetObjectSourceInterface(ClientPtr, &pClientEvents->m_libid, &pClientEvents->m_iid, &pClientEvents->m_wMajorVerNum, &pClientEvents->m_wMinorVerNum); pClientEvents->m_iid = _uuidof(DEasyUAClientEvents); pClientEvents->DispEventAdvise(ClientPtr, &pClientEvents->m_iid); // _tprintf(_T("Subscribing...\n")); ClientPtr->SubscribeDataChange( //L"http://opcua.demo-this.com:51211/UA/SampleServer", L"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", L"nsu=http://test.org/UA/Data/ ;i=10853", 1000); _tprintf(_T("Processing monitored item changed events for 1 minute...\n")); Sleep(60*1000); // Unhook events pClientEvents->DispEventUnadvise(ClientPtr, &pClientEvents->m_iid); } // Release all interface pointers BEFORE calling CoUninitialize() CoUninitialize(); } }
// This example shows how to subscribe to changes of a single monitored item // and display each change. type TClientEventHandlers = class procedure OnDataChangeNotification( Sender: TObject; sender0: OleVariant; eventArgs: _EasyUADataChangeNotificationEventArgs); end; procedure TClientEventHandlers.OnDataChangeNotification( Sender: TObject; sender0: OleVariant; eventArgs: _EasyUADataChangeNotificationEventArgs); begin // Display the data // Remark: Production code would check eventArgs.Exception before accessing // eventArgs.AttributeData. WriteLn(eventArgs.Arguments.NodeDescriptor.ToString, ': ', eventArgs.AttributeData.ToString); end; class procedure SubscribeDataChange.Main; var Client: EasyUAClient; EvsClient: TEvsEasyUAClient; ClientEventHandlers: TClientEventHandlers; begin // Instantiate the client object and hook events EvsClient := TEvsEasyUAClient.Create(nil); Client := EvsClient.ComServer; ClientEventHandlers := TClientEventHandlers.Create; EvsClient.OnDataChangeNotification := @ClientEventHandlers.OnDataChangeNotification; WriteLn('Subscribing...'); Client.SubscribeDataChange( //'http://opcua.demo-this.com:51211/UA/SampleServer', 'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer', 'nsu=http://test.org/UA/Data/ ;i=10853', 1000); WriteLn('Processing data change events for 1 minute...'); PumpSleep(60*1000); end;
// This example shows how to subscribe to changes of a single monitored item // and display each change. type TClientEventHandlers121 = class procedure OnDataChangeNotification( ASender: TObject; sender: OleVariant; const eventArgs: _EasyUADataChangeNotificationEventArgs); end; procedure TClientEventHandlers121.OnDataChangeNotification( ASender: TObject; sender: OleVariant; const eventArgs: _EasyUADataChangeNotificationEventArgs); begin // Display the data if eventArgs.Succeeded then WriteLn(eventArgs.Arguments.NodeDescriptor.ToString, ': ', eventArgs.AttributeData.ToString) else WriteLn(eventArgs.Arguments.NodeDescriptor.ToString, ' *** Failure: ', eventArgs.ErrorMessageBrief); end; class procedure SubscribeDataChange.Main; var Client: TEasyUAClient; ClientEventHandlers: TClientEventHandlers121; begin // Instantiate the client object and hook events Client := TEasyUAClient.Create(nil); ClientEventHandlers := TClientEventHandlers121.Create; Client.OnDataChangeNotification := ClientEventHandlers.OnDataChangeNotification; WriteLn('Subscribing...'); Client.SubscribeDataChange( //'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', 'nsu=http://test.org/UA/Data/ ;i=10853', 1000); WriteLn('Processing data change events for 1 minute...'); PumpSleep(60*1000); WriteLn('Unsubscribing...'); Client.UnsubscribeAllMonitoredItems; WriteLn('Waiting for 5 seconds...'); PumpSleep(5*1000); WriteLn('Finished.'); FreeAndNil(Client); FreeAndNil(ClientEventHandlers); end;
// This example shows how to subscribe to changes of a single monitored item and display each change. class ClientEvents { function DataChangeNotification($Sender, $E) { // Display the data if ($E->Succeeded) printf("%s\n", $E->AttributeData); else printf("*** Failure : %s\n", $E->ErrorMessageBrief); } } // Instantiate the client object and hook events $Client = new COM("OpcLabs.EasyOpc.UA.EasyUAClient"); $ClientEvents = new ClientEvents(); com_event_sink($Client, $ClientEvents, "DEasyUAClientEvents"); printf("Subscribing...\n"); $Client->SubscribeDataChange( //"http://opcua.demo-this.com:51211/UA/SampleServer", "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;i=10853", 1000); printf("Processing monitored item changed events for 1 minute...\n"); $startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 60);
Rem This example shows how to subscribe to changes of a single monitored item and display each change. ' The client object, with events 'Public WithEvents Client1 As EasyUAClient Public Sub SubscribeDataChange_Main_Command_Click() OutputText = "" Set Client1 = New EasyUAClient OutputText = OutputText & "Subscribing..." & vbCrLf Call Client1.SubscribeDataChange("opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;i=10853", 1000) OutputText = OutputText & "Processing data changed notification events for 1 minute..." & vbCrLf Pause 60000 OutputText = OutputText & "Unsubscribing..." & vbCrLf Client1.UnsubscribeAllMonitoredItems OutputText = OutputText & "Waiting for 5 seconds..." & vbCrLf Pause 5000 OutputText = OutputText & "Finished." & vbCrLf Set Client1 = Nothing End Sub Public Sub Client1_DataChangeNotification(ByVal sender As Variant, ByVal eventArgs As EasyUADataChangeNotificationEventArgs) ' Display the data If eventArgs.Exception Is Nothing Then OutputText = OutputText & eventArgs.AttributeData & vbCrLf Else OutputText = OutputText & eventArgs.ErrorMessageBrief & vbCrLf End If End Sub
Rem This example shows how to subscribe to changes of a single monitored item and display each change. Option Explicit ' Instantiate the client object and hook events Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient") WScript.ConnectObject Client, "Client_" WScript.Echo "Subscribing..." Client.SubscribeDataChange "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;i=10853", 1000 WScript.Echo "Processing monitored item changed events for 1 minute..." WScript.Sleep 60*1000 Sub Client_DataChangeNotification(Sender, e) ' Display the data Dim display: If e.Exception Is Nothing Then display = e.AttributeData Else display = e.ErrorMessageBrief WScript.Echo display End Sub
Copyright © 2004-2023 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base. Technical support: Online Forums, FAQ.