Adding Event support to Server
Added Event Type ControllerEventType with UaModeler Implement Event generation
Figure 5.1:
Get state change events from system
public override void Startup()
{
try
{
Console.WriteLine("Starting Lesson5aNodeManager.");
base.Startup();
InstanceNamespaceIndex = AddNamespaceUri("http://yourcompany.com/lesson04a/");
TypeNamespaceIndex = AddNamespaceUri(yourorganisation.BA.Namespaces.BA);
Console.WriteLine("Loading the Controller Model.");
ImportUaNodeset(Assembly.GetEntryAssembly(), "buildingautomation.xml");
m_system.Initialize();
m_system.BlockStateChanged += new BlockStateChangedEventHandler(UnderlyingSystem_BlockStateChanged);
Register event handler with underlying system
Create Notifier Hierarchy
Server → Controller Folder
CreateObjectSettings settings = new CreateObjectSettings()
{
ParentNodeId = ObjectIds.ObjectsFolder,
RequestedNodeId =
new NodeId(
"Controllers", InstanceNamespaceIndex),
TypeDefinitionId = ObjectTypeIds.FolderType,
NotifierParent = ObjectIds.Server
};
CreateObject(
Server.DefaultRequestContext, settings);
Controller Folder → Controller (event source)
settings = new CreateObjectSettings()
{
ParentNodeId =
new NodeId(
"Controllers", InstanceNamespaceIndex),
RequestedNodeId =
new NodeId(block.Name, InstanceNamespaceIndex),
TypeDefinitionId = typeDefinitionId,
NotifierParent =
new NodeId(
"Controllers", InstanceNamespaceIndex)
};
CreateObject(
Server.DefaultRequestContext, settings);
Report the event
private void UnderlyingSystem_BlockStateChanged(int blockAddress, string blockName, int state)
{
GenericEvent e =
new GenericEvent(
Server.FilterManager);
e.Initialize(
null,
new NodeId(yourorganisation.BA.ObjectTypes.ControllerEventType, TypeNamespaceIndex),
new NodeId(blockName, InstanceNamespaceIndex),
blockName,
"A controller state changed.");
e.Set(e.ToPath(
new QualifiedName(yourorganisation.BA.BrowseNames.State, TypeNamespaceIndex)), state);
ReportEvent(e.SourceNode, e);
}
Figure 5.2:
- Document → Add…
- Select Document “Event View”
- Drag & Drop Server object to Event View
- Call Methods Stop and Start on controller objects