'Declaration
Event Notification As EasyAENotificationEventHandler
'Usage
Dim instance As IEasyAEClient Dim handler As EasyAENotificationEventHandler AddHandler instance.Notification, handler
event EasyAENotificationEventHandler Notification
event EasyAENotificationEventHandler^ Notification
Event Data
The event handler receives an argument of type EasyAENotificationEventArgs containing data related to this event. The following EasyAENotificationEventArgs properties provide information specific to this event.
Property | Description |
---|---|
AcknowledgedChanged | Indicates to the application that the Acknowledged state of the condition has changed. |
ActiveChanged | Indicates to the application that the Active state of the condition has changed. |
Arguments | Holds arguments that were used to subscribe to events in an OPC-A&E server. |
AttributeChanged | Indicates to the application that one or more attributes of the condition have changed. |
ChangeMask | Indicates to the client which properties of the condition have changed, to have caused the server to send the event notification. |
Diagnostics | Diagnostics information (such as warnings) assembled during the operation. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
DiagnosticsCount | Count of diagnostic information elements assembled during the operation. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
DiagnosticsSummary | Textual summary of diagnostics information, one message per line. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
EnabledChanged | Indicates to the application that the Enabled state of the condition has changed. |
ErrorId | Gets or sets the error ID of the error. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
ErrorMessage | Gets or sets a message that describes the current exception. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
ErrorMessageBrief | The first line of the error message. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
EventData | Event notification information. |
Exception | Gets the current exception. Contains null reference when no exception. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
MessageChanged | Indicates to the application that the Message of the condition has changed. |
NormalizedDiagnostics | A normalized OpcLabs.BaseLib.OperationModel.OperationEventArgs.Diagnostics collection. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
NormalizedException | A normalized OpcLabs.BaseLib.OperationModel.OperationEventArgs.Exception object, or null if there was no error. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
QualityChanged | Indicates to the application that the Quality of the condition has changed. |
Refresh | Denotes whether this notification was triggered by subscription refresh. |
RefreshComplete | When True, this notification denotes that the subscription refresh is complete. |
SeverityChanged | Indicates to the application that the Severity of the condition has changed. |
SubconditionChanged | Indicates to the application that the subcondition (SubconditionName) of the condition has changed. |
Succeeded | Gets indication whether the operation has succeeded. (Inherited from OpcLabs.BaseLib.OperationModel.OperationEventArgs) |
Example
.NET
COM
.NET
// This example shows how to subscribe to events and display the event message with each notification. It also shows how to // unsubscribe afterwards. using System; using System.Threading; using OpcLabs.EasyOpc.AlarmsAndEvents; using OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel; namespace DocExamples.AlarmsAndEvents._EasyAEClient { partial class SubscribeEvents { public static void Main1() { // Instantiate the client object. using (var client = new EasyAEClient()) { var eventHandler = new EasyAENotificationEventHandler(client_Notification); client.Notification += eventHandler; int handle = client.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000); Console.WriteLine("Processing event notifications for 1 minute..."); Thread.Sleep(60 * 1000); client.UnsubscribeEvents(handle); } } // Notification event handler static void client_Notification(object sender, EasyAENotificationEventArgs e) { if (!e.Succeeded) { Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief); return; } if (!(e.EventData is null)) Console.WriteLine(e.EventData.Message); } } }
# This example shows how to subscribe to events and display the event message with each notification. It also shows how to # unsubscribe afterwards. #requires -Version 5.1 using namespace OpcLabs.EasyOpc.AlarmsAndEvents # 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 EasyAEClient # Notification event handler Register-ObjectEvent -InputObject $client -EventName Notification -Action { if (-not $EventArgs.Succeeded) { Write-Host "*** Failure: $($EventArgs.ErrorMessageBrief)" #return } if ($EventArgs.EventData -ne $null) { Write-Host $EventArgs.EventData.Message } } Write-Host "Subscribing events..." $handle = [IEasyAEClientExtension]::SubscribeEvents($client, "", "OPCLabs.KitEventServer.2", 1000) Write-Host "Processing event notifications for 1 minute..." $stopwatch = [System.Diagnostics.Stopwatch]::StartNew() while ($stopwatch.Elapsed.TotalSeconds -lt 60) { Start-Sleep -Seconds 1 } Write-Host "Unsubscribing events..." $client.UnsubscribeEvents($handle) Write-Host "Finished."
# This example shows how to subscribe to events and display the event message with each notification. It also shows how # to unsubscribe afterwards. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc import time # Import .NET namespaces. from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.AlarmsAndEvents import * # Notification event handler def notification(sender, e): if not e.Succeeded: print('*** Failure: ', e.ErrorMessageBrief, sep='') return else: if e.EventData is not None: print(e.EventData.Message) # Instantiate the client object client = EasyAEClient() client.Notification += notification print('Subscribing events...') handle = IEasyAEClientExtension.SubscribeEvents(client, '', 'OPCLabs.KitEventServer.2', 1000) print('Processing event notifications for 1 minute...') time.sleep(60) print('Unsubscribing events...') client.UnsubscribeAllEvents() client.Notification -= notification print('Finished.')
' This example shows how to subscribe to events and display the event message with each notification. It also shows how to ' unsubscribe afterwards. Imports System.Threading Imports OpcLabs.EasyOpc.AlarmsAndEvents Imports OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel Namespace AlarmsAndEvents._EasyAEClient Partial Friend Class SubscribeEvents Public Shared Sub Main1() Using client = New EasyAEClient() Dim eventHandler = New EasyAENotificationEventHandler(AddressOf client_Notification) AddHandler client.Notification, eventHandler Dim handle As Integer = client.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000) Console.WriteLine("Processing event notifications for 1 minute...") Thread.Sleep(60 * 1000) client.UnsubscribeEvents(handle) End Using End Sub ' Notification event handler Private Shared Sub client_Notification(ByVal sender As Object, ByVal e As EasyAENotificationEventArgs) If Not e.Succeeded Then Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief) Exit Sub End If If e.EventData IsNot Nothing Then Console.WriteLine(e.EventData.Message) End If End Sub End Class End Namespace
// This example shows how to subscribe to events and display the event message with each notification. It also shows how to // unsubscribe afterwards. class DEasyEAClientEvents { function Notification($Sender, $E) { if (!($E->Succeeded)) { printf("*** Failure: %s\n", $E->ErrorMessageBrief); Exit(); } if (!is_null($E->EventData)) { print $E->EventData->Message; print "\n"; } } } $ServerDescriptor = new COM("OpcLabs.EasyOpc.ServerDescriptor"); $ServerDescriptor->ServerClass = "OPCLabs.KitEventServer.2"; $Client = new COM("OpcLabs.EasyOpc.AlarmsAndEvents.EasyAEClient"); $Events = new DEasyEAClientEvents(); com_event_sink($Client, $Events, "DEasyEAClientEvents"); print "Subscribing events...\n"; $SubscriptionParameters = new COM("OpcLabs.EasyOpc.AlarmsAndEvents.AESubscriptionParameters"); $SubscriptionParameters->NotificationRate = 1000; $handle = $Client->SubscribeEvents($ServerDescriptor, $SubscriptionParameters, TRUE, NULL); print "Processing event notifications for 1 minute...\n"; $startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 60); print "Unsubscribing events...\n"; $Client->UnsubscribeEvents($handle); print "Finished.\n";
Rem This example shows how to subscribe to events and display the event message with each notification. It also shows how to Rem unsubscribe afterwards. Private Sub SubscribeEvents_Main_Command_Click() OutputText = "" Dim serverDescriptor As New serverDescriptor serverDescriptor.ServerClass = "OPCLabs.KitEventServer.2" ' Instantiate the client object and hook events Set Client1 = New EasyAEClient OutputText = OutputText & "Subscribing..." & vbCrLf Dim subscriptionParameters As New AESubscriptionParameters subscriptionParameters.notificationRate = 1000 Dim handle Dim state handle = Client1.SubscribeEvents(serverDescriptor, subscriptionParameters, True, state) OutputText = OutputText & "Processing event notifications for 1 minute..." & vbCrLf Pause 60000 OutputText = OutputText & "Unsubscribing events..." & vbCrLf Client1.UnsubscribeEvents handle OutputText = OutputText & "Waiting for 5 seconds..." & vbCrLf Pause 5000 OutputText = OutputText & "Finished." & vbCrLf Set Client1 = Nothing End Sub Private Sub Client1_OnNotification(ByVal sender As Variant, ByVal eventArgs As EasyAENotificationEventArgs) If Not eventArgs.Succeeded Then OutputText = OutputText & eventArgs.ErrorMessageBrief & vbCrLf Exit Sub End If If Not eventArgs.EventData Is Nothing Then OutputText = OutputText & eventArgs.EventData.Message & vbCrLf End If End Sub
// This example shows how to work with Software Tolbox TOP Server 5 Alarms and Events. // Use simdemo_WithA&E.opf configuration file and write a value above 1000 to Channel1.Device1.Tag1 or Channel1.Device1.Tag2. using System; using System.Diagnostics; using System.Threading; using OpcLabs.EasyOpc.AlarmsAndEvents; using OpcLabs.EasyOpc.AlarmsAndEvents.AddressSpace; using OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel; using OpcLabs.EasyOpc.OperationModel; namespace DocExamples.AlarmsAndEvents.SWToolbox { class TOPServer_AE { public static void Main1() { // Instantiate the client object. var client = new EasyAEClient(); // Browse for some areas and sources AENodeElementCollection areaElements; try { areaElements = client.BrowseAreas("", "SWToolbox.TOPServer_AE.V5", ""); } catch (OpcException opcException) { Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message); return; } foreach (AENodeElement areaElement in areaElements) { Debug.Assert(!(areaElement is null)); Debug.Assert(!(areaElement.QualifiedName is null)); Console.WriteLine("areaElements[\"{0}\"]:", areaElement.Name); Console.WriteLine(" .QualifiedName: {0}", areaElement.QualifiedName); AENodeElementCollection sourceElements = client.BrowseSources("", "SWToolbox.TOPServer_AE.V5", areaElement.QualifiedName); foreach (AENodeElement sourceElement in sourceElements) { Debug.Assert(sourceElement != null); Console.WriteLine(" sourceElements[\"{0}\"]:", sourceElement.Name); Console.WriteLine(" .QualifiedName: {0}", sourceElement.QualifiedName); } } // Query for event categories AECategoryElementCollection categoryElements; try { categoryElements = client.QueryEventCategories("", "SWToolbox.TOPServer_AE.V5"); } catch (OpcException opcException) { Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message); return; } foreach (AECategoryElement categoryElement in categoryElements) { Debug.Assert(categoryElement != null); Console.WriteLine("CategoryElements[\"{0}\"].Description: {1}", categoryElement.CategoryId, categoryElement.Description); } // Subscribe to events, wait, and unsubscribe var eventHandler = new EasyAENotificationEventHandler(client_Notification); client.Notification += eventHandler; int handle = client.SubscribeEvents("", "SWToolbox.TOPServer_AE.V5", 1000); Console.WriteLine("Processing event notifications for 1 minute..."); Thread.Sleep(60 * 1000); client.UnsubscribeEvents(handle); } // Notification event handler static void client_Notification(object sender, EasyAENotificationEventArgs e) { if (!(e.Exception is null)) Console.WriteLine("e.Exception.Message: {0}", e.Exception.Message); if (!(e.Exception is null)) Console.WriteLine("e.Exception.Source: {0}", e.Exception.Source); Console.WriteLine("e.Refresh: {0}", e.Refresh); Console.WriteLine("e.RefreshComplete: {0}", e.RefreshComplete); if (!(e.EventData is null)) Console.WriteLine("e.EventData.QualifiedSourceName: {0}", e.EventData.QualifiedSourceName); if (!(e.EventData is null)) Console.WriteLine("e.EventData.Time: {0}", e.EventData.Time); if (!(e.EventData is null)) Console.WriteLine("e.EventData.Message: {0}", e.EventData.Message); if (!(e.EventData is null)) Console.WriteLine("e.EventData.EventType: {0}", e.EventData.EventType); if (!(e.EventData is null)) Console.WriteLine("e.EventData.CategoryId: {0}", e.EventData.CategoryId); if (!(e.EventData is null)) Console.WriteLine("e.EventData.Severity: {0}", e.EventData.Severity); if (!(e.EventData is null)) Console.WriteLine("e.EventData.ConditionName: {0}", e.EventData.ConditionName); if (!(e.EventData is null)) Console.WriteLine("e.EventData.SubconditionName: {0}", e.EventData.SubconditionName); if (!(e.EventData is null)) Console.WriteLine("e.EventData.Enabled: {0}", e.EventData.Enabled); if (!(e.EventData is null)) Console.WriteLine("e.EventData.Active: {0}", e.EventData.Active); if (!(e.EventData is null)) Console.WriteLine("e.EventData.Acknowledged: {0}", e.EventData.Acknowledged); if (!(e.EventData is null)) Console.WriteLine("e.EventData.Quality: {0}", e.EventData.Quality); if (!(e.EventData is null)) Console.WriteLine("e.EventData.AcknowledgeRequired: {0}", e.EventData.AcknowledgeRequired); if (!(e.EventData is null)) Console.WriteLine("e.EventData.ActiveTime: {0}", e.EventData.ActiveTime); } } }
' This example shows how to work with Software Tolbox TOP Server 5 Alarms and Events. ' Use simdemo_WithA&E.opf configuration file and write a value above 1000 to Channel1.Device1.Tag1 or Channel1.Device1.Tag2. Imports System.Threading Imports OpcLabs.EasyOpc.AlarmsAndEvents Imports OpcLabs.EasyOpc.AlarmsAndEvents.AddressSpace Imports OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel Imports OpcLabs.EasyOpc.OperationModel Namespace AlarmsAndEvents.SWToolbox Friend Class TOPServer_AE Public Shared Sub Main1() Dim client = New EasyAEClient() ' Browse for some areas and sources Dim areaElements As AENodeElementCollection Try areaElements = client.BrowseAreas("", "SWToolbox.TOPServer_AE.V5", "") Catch opcException As OpcException Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message) Exit Sub End Try For Each areaElement As AENodeElement In areaElements Debug.Assert(areaElement IsNot Nothing) Debug.Assert(areaElement.QualifiedName IsNot Nothing) Console.WriteLine("areaElements[""{0}""]:", areaElement.Name) Console.WriteLine(" .QualifiedName: {0}", areaElement.QualifiedName) Dim sourceElements As AENodeElementCollection = client.BrowseSources("", "SWToolbox.TOPServer_AE.V5", areaElement.QualifiedName) For Each sourceElement As AENodeElement In sourceElements Debug.Assert(sourceElement IsNot Nothing) Console.WriteLine(" sourceElements[""{0}""]:", sourceElement.Name) Console.WriteLine(" .QualifiedName: {0}", sourceElement.QualifiedName) Next sourceElement Next areaElement ' Query for event categories Dim categoryElements As AECategoryElementCollection Try categoryElements = client.QueryEventCategories("", "SWToolbox.TOPServer_AE.V5") Catch opcException As OpcException Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message) Exit Sub End Try For Each categoryElement As AECategoryElement In categoryElements Debug.Assert(categoryElement IsNot Nothing) Console.WriteLine("CategoryElements[""{0}""].Description: {1}", categoryElement.CategoryId, categoryElement.Description) Next categoryElement ' Subscribe to events, wait, and unsubscribe Dim eventHandler = New EasyAENotificationEventHandler(AddressOf client_Notification) AddHandler client.Notification, eventHandler Dim handle As Integer = client.SubscribeEvents("", "SWToolbox.TOPServer_AE.V5", 1000) Console.WriteLine("Processing event notifications for 1 minute...") Thread.Sleep(60 * 1000) client.UnsubscribeEvents(handle) End Sub ' Notification event handler Private Shared Sub client_Notification(ByVal sender As Object, ByVal e As EasyAENotificationEventArgs) If e.Exception IsNot Nothing Then Console.WriteLine("e.Exception.Message: {0}", e.Exception.Message) End If If e.Exception IsNot Nothing Then Console.WriteLine("e.Exception.Source: {0}", e.Exception.Source) End If Console.WriteLine("e.Refresh: {0}", e.Refresh) Console.WriteLine("e.RefreshComplete: {0}", e.RefreshComplete) If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.QualifiedSourceName: {0}", e.EventData.QualifiedSourceName) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.Time: {0}", e.EventData.Time) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.Message: {0}", e.EventData.Message) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.EventType: {0}", e.EventData.EventType) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.CategoryId: {0}", e.EventData.CategoryId) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.Severity: {0}", e.EventData.Severity) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.ConditionName: {0}", e.EventData.ConditionName) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.SubconditionName: {0}", e.EventData.SubconditionName) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.Enabled: {0}", e.EventData.Enabled) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.Active: {0}", e.EventData.Active) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.Acknowledged: {0}", e.EventData.Acknowledged) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.Quality: {0}", e.EventData.Quality) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.AcknowledgeRequired: {0}", e.EventData.AcknowledgeRequired) End If If e.EventData IsNot Nothing Then Console.WriteLine("e.EventData.ActiveTime: {0}", e.EventData.ActiveTime) End If End Sub End Class End Namespace
Requirements