Hello,
below is an example you asked for. I have found some problems related to event attributes during the development of this example, so you should download the recent build (5.12.1312.1 or later) from our Web site in order to make it work.
Reading DA items from inside A&E notification handler is supported in general. But you should consider any time-consuming operations inside the notifications handlers.
// This example shows how to subscribe to events with specified event attributes, and obtain the attribute values in event
// notifications.
using System;
using System.Collections.Generic;
using System.Threading;
using OpcLabs.EasyOpc.AlarmsAndEvents;
using OpcLabs.EasyOpc.DataAccess;
namespace DocExamples
{
namespace _EasyAENotificationEventArgs
{
class AttributeValues
{
public static void Main()
{
var easyAEClient = new EasyAEClient();
var easyDAClient = new EasyDAClient();
var eventHandler = new EventHandler<EasyAENotificationEventArgs>(easyAEClient_Notification);
easyAEClient.Notification += eventHandler;
// Inactivate the event condition (we will later activate it and receive the notification)
easyDAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Inactivate", true);
AESubscriptionFilter subscriptionFilter = easyAEClient.CreateSubscriptionFilter();
subscriptionFilter.Sources = new[] { "Simulation.ConditionState1" };
// Prepare a dictionary holding requested event attributes for each event category
// The event category IDs and event attribute IDs are hard-coded here, but can be obtained from the OPC
// server by querying as well.
var returnedAttributesByCategory = new AEAttributeSetDictionary();
returnedAttributesByCategory[0x00ECFF02] = new long[] {0x00EB0003, 0x00EB0008};
Console.WriteLine("Subscribing to events...");
int handle = easyAEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, null, subscriptionFilter,
returnedAttributesByCategory);
// Give the refresh operation time to complete
Thread.Sleep(5 * 1000);
// Trigger an event carrying specified attributes (activate the condition)
easyDAClient.WriteItemValue("", "OPCLabs.KitServer.2",
"SimulateEvents.ConditionState1.AttributeValues.15400963", 123456);
easyDAClient.WriteItemValue("", "OPCLabs.KitServer.2",
"SimulateEvents.ConditionState1.AttributeValues.15400968", "Some string value");
easyDAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", true);
Console.WriteLine("Processing event notifications for 10 seconds...");
Thread.Sleep(10 * 1000);
easyAEClient.UnsubscribeEvents(handle);
}
// Notification event handler
static void easyAEClient_Notification(object sender, EasyAENotificationEventArgs e)
{
if (!e.Refresh && (e.Event != null))
{
// Display all received event attribute IDs and their corresponding values
Console.WriteLine("Event attribute count: {0}", e.Event.AttributeValues.Count);
foreach (KeyValuePair<long, object> pair in e.Event.AttributeValues)
Console.WriteLine(" {0}: {1}", pair.Key, pair.Value);
}
}
}
}
}
Regards