// This example shows how to acknowledge an event condition in the OPC server.
using System;
using System.Threading;
using OpcLabs.EasyOpc.AlarmsAndEvents;
using OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel;
using OpcLabs.EasyOpc.DataAccess;
using OpcLabs.EasyOpc.OperationModel;
namespace DocExamples.AlarmsAndEvents._EasyAEClient
{
class AcknowledgeCondition
{
// 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();
static volatile bool _done;
public static void Main1()
{
var eventHandler = new EasyAENotificationEventHandler(AEClient_Notification);
AEClient.Notification += eventHandler;
Console.WriteLine("Processing event notifications for 1 minute...");
var subscriptionFilter = new AESubscriptionFilter
{
Sources = new AENodeDescriptor[] { "Simulation.ConditionState1" }
};
int handle = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, null, subscriptionFilter);
// Give the refresh operation time to complete
Thread.Sleep(5 * 1000);
// Trigger an acknowledgeable event
try
{
DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", true);
}
catch (OpcException opcException)
{
Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message);
return;
}
_done = false;
DateTime endTime = DateTime.Now + new TimeSpan(0, 0, 5);
while ((!_done) && (DateTime.Now < endTime))
Thread.Sleep(1000);
// Give some time to also receive the acknowledgement notification
Thread.Sleep(5 * 1000);
AEClient.UnsubscribeEvents(handle);
AEClient.Notification -= eventHandler;
}
// Notification event handler
static void AEClient_Notification(object sender, EasyAENotificationEventArgs e)
{
Console.WriteLine();
if (!e.Succeeded)
{
Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief);
return;
}
Console.WriteLine("Refresh: {0}", e.Refresh);
Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete);
AEEventData eventData = e.EventData;
if (!(eventData is null))
{
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);
Console.WriteLine("Event.AcknowledgeRequired: {0}", eventData.AcknowledgeRequired);
if (eventData.AcknowledgeRequired)
{
Console.WriteLine(">>>>> ACKNOWLEDGING THIS EVENT");
try
{
AEClient.AcknowledgeCondition("", "OPCLabs.KitEventServer.2", "Simulation.ConditionState1", "Simulated",
eventData.ActiveTime, eventData.Cookie);
}
catch (OpcException opcException)
{
Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message);
return;
}
Console.WriteLine(">>>>> EVENT ACKNOWLEDGED");
_done = true;
}
}
}
}
}
' This example shows how to acknowledge an event condition in the OPC server.
Imports System.Threading
Imports OpcLabs.EasyOpc.AlarmsAndEvents
Imports OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel
Imports OpcLabs.EasyOpc.DataAccess
Imports OpcLabs.EasyOpc.OperationModel
Namespace AlarmsAndEvents._EasyAEClient
Friend Class AcknowledgeCondition
_
Private Shared ReadOnly AEClient As New EasyAEClient()
_
Private Shared ReadOnly DAClient As New EasyDAClient()
Private Shared _done As Boolean ' volatile
Public Shared Sub Main1()
Dim eventHandler = New EasyAENotificationEventHandler(AddressOf AEClient_Notification)
AddHandler AEClient.Notification, eventHandler
Console.WriteLine("Processing event notifications for 1 minute...")
Dim subscriptionFilter As New AESubscriptionFilter
subscriptionFilter.Sources = New AENodeDescriptor() {"Simulation.ConditionState1"}
Dim handle As Integer = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, Nothing, subscriptionFilter)
' Give the refresh operation time to complete
Thread.Sleep(5 * 1000)
' Trigger an acknowledgeable event
Try
DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", True)
Catch opcException As OpcException
Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message)
Exit Sub
End Try
_done = False
Dim endTime As Date = Date.Now + New TimeSpan(0, 0, 5)
Do While ((Not _done)) AndAlso (Date.Now < endTime)
Thread.Sleep(1000)
Loop
' Give some time to also receive the acknowledgement notification
Thread.Sleep(5 * 1000)
AEClient.UnsubscribeEvents(handle)
RemoveHandler AEClient.Notification, eventHandler
End Sub
' Notification event handler
Private Shared Sub AEClient_Notification(ByVal sender As Object, ByVal e As EasyAENotificationEventArgs)
Console.WriteLine()
If Not e.Succeeded Then
Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief)
Exit Sub
End If
Console.WriteLine("Refresh: {0}", e.Refresh)
Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete)
If e.EventData IsNot Nothing Then
Dim eventData As AEEventData = e.EventData
Console.WriteLine("EventData.QualifiedSourceName: {0}", eventData.QualifiedSourceName)
Console.WriteLine("EventData.Message: {0}", eventData.Message)
Console.WriteLine("EventData.Active: {0}", eventData.Active)
Console.WriteLine("EventData.Acknowledged: {0}", eventData.Acknowledged)
Console.WriteLine("EventData.AcknowledgeRequired: {0}", eventData.AcknowledgeRequired)
If eventData.AcknowledgeRequired Then
Console.WriteLine(">>>>> ACKNOWLEDGING THIS EVENT")
Try
AEClient.AcknowledgeCondition("", "OPCLabs.KitEventServer.2", "Simulation.ConditionState1", "Simulated", eventData.ActiveTime, eventData.Cookie)
Catch opcException As OpcException
Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message)
Exit Sub
End Try
Console.WriteLine(">>>>> EVENT ACKNOWLEDGED")
_done = True
End If
End If
End Sub
End Class
End Namespace