// This example shows how to filter the events by their category.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-CSharp .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.
using System;
using System.Threading;
using OpcLabs.EasyOpc.AlarmsAndEvents;
using OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel;
using OpcLabs.EasyOpc.DataAccess;
namespace DocExamples.AlarmsAndEvents._EasyAEClient
{
partial class SubscribeEvents
{
// Instantiate the OPC-A&E client object.
static readonly EasyAEClient AEClient = new EasyAEClient();
// Instantiate the OPC-DA client object.
static readonly EasyDAClient DAClient = new EasyDAClient();
public static void FilterByCategories()
{
var eventHandler = new EasyAENotificationEventHandler(AEClient_Notification_FilterByCategories);
AEClient.Notification += eventHandler;
Console.WriteLine("Processing event notifications...");
var subscriptionFilter = new AESubscriptionFilter
{
Categories = new long[] { 15531778 }
};
// You can also filter using event types, severity, areas, and sources.
int handle = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, null, subscriptionFilter);
// Allow time for initial refresh
Thread.Sleep(5 * 1000);
// Set some events to active state.
DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", true);
DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState2.Activate", true);
Thread.Sleep(10 * 1000);
AEClient.UnsubscribeEvents(handle);
AEClient.Notification -= eventHandler;
}
// Notification event handler
static void AEClient_Notification_FilterByCategories(object sender, EasyAENotificationEventArgs e)
{
Console.WriteLine();
Console.WriteLine(e);
if (!e.Succeeded)
return;
Console.WriteLine("Refresh: {0}", e.Refresh);
Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete);
AEEventData eventData = e.EventData;
if (!(eventData is null))
{
Console.WriteLine("Event.CategoryId: {0}", eventData.CategoryId);
Console.WriteLine("Event.QualifiedSourceName: {0}", eventData.QualifiedSourceName);
Console.WriteLine("Event.Message: {0}", eventData.Message);
Console.WriteLine("Event.Active: {0}", eventData.Active);
Console.WriteLine("Event.Acknowledged: {0}", eventData.Acknowledged);
}
}
}
}
' This example shows how to filter the events by their category.
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET .
' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
' a commercial license in order to use Online Forums, and we reply to every post.
Imports System.Threading
Imports OpcLabs.EasyOpc.AlarmsAndEvents
Imports OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel
Imports OpcLabs.EasyOpc.DataAccess
Namespace AlarmsAndEvents._EasyAEClient
Partial Friend Class SubscribeEvents
_
Private Shared ReadOnly AEClient As New EasyAEClient()
_
Private Shared ReadOnly DAClient As New EasyDAClient()
Public Shared Sub FilterByCategories()
Dim eventHandler = New EasyAENotificationEventHandler(AddressOf AEClient_Notification_FilterByCategories)
AddHandler AEClient.Notification, eventHandler
Console.WriteLine("Processing event notifications...")
Dim subscriptionFilter As New AESubscriptionFilter() With _
{.Categories = New Long() {15531778}}
' You can also filter using event types, severity, areas, and sources.
Dim handle As Integer = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", Nothing, subscriptionFilter)
' Allow time for initial refresh
Thread.Sleep(5 * 1000)
' Set some events to active state.
DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", True)
DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState2.Activate", True)
Thread.Sleep(10 * 1000)
AEClient.UnsubscribeEvents(handle)
RemoveHandler AEClient.Notification, eventHandler
End Sub
' Notification event handler
Private Shared Sub AEClient_Notification_FilterByCategories(ByVal sender As Object, ByVal e As EasyAENotificationEventArgs)
Console.WriteLine()
Console.WriteLine(e)
If Not e.Succeeded Then
Exit Sub
End If
Console.WriteLine("Refresh: {0}", e.Refresh)
Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete)
Dim eventData As AEEventData = e.EventData
If e.EventData IsNot Nothing Then
Console.WriteLine("Event.CategoryId: {0}", eventData.CategoryId)
Console.WriteLine("Event.QualifiedSourceName: {0}", eventData.QualifiedSourceName)
Console.WriteLine("Event.Message: {0}", eventData.Message)
Console.WriteLine("Event.Active: {0}", eventData.Active)
Console.WriteLine("Event.Acknowledged: {0}", eventData.Acknowledged)
End If
End Sub
End Class
End Namespace
# This example shows how to filter the events by their category.
#
# 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 .
# Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
# a commercial license in order to use Online Forums, and we reply to every post.
# 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 *
from OpcLabs.EasyOpc.DataAccess import *
from OpcLabs.EasyOpc.OperationModel import *
# Notification event handler
def notification(sender, e):
print()
print(e)
if not e.Succeeded:
return
print('Refresh: ', e.Refresh, sep='')
print('RefreshComplete: ', e.RefreshComplete, sep='')
eventData = e.EventData
if eventData is not None:
print('Event.CategoryId: ', eventData.CategoryId, sep='')
print('Event.QualifiedSourceName: ', eventData.QualifiedSourceName, sep='')
print('Event.Message: ', eventData.Message, sep='')
print('Event.Active: ', eventData.Active, sep='')
print('Event.Acknowledged: ', eventData.Acknowledged, sep='')
# Instantiate the OPC-A&E client object.
aeClient = EasyAEClient()
# Instantiate the OPC-DA client object.
daClient = EasyDAClient()
#
aeClient.Notification += notification
print('Processing event notifications...')
subscriptionFilter = AESubscriptionFilter()
subscriptionFilter.Categories = [15531778]
# You can also filter using event types, severity, areas, and sources.
handle = IEasyAEClientExtension.SubscribeEvents(aeClient, '', 'OPCLabs.KitEventServer.2', 1000, None, subscriptionFilter)
# Allow time for initial refresh.
time.sleep(5)
# Set some events to active state.
try:
IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2',
'SimulateEvents.ConditionState1.Activate', True)
IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2',
'SimulateEvents.ConditionState2.Activate', True)
except OpcException as opcException:
print('*** Failure: ' + opcException.GetBaseException().Message)
exit()
time.sleep(10)
aeClient.UnsubscribeEvents(handle)
aeClient.Notification -= notification
print('Finished.')