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
{
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,
ReferenceTypeId = ReferenceTypeIds.Organizes,
RequestedNodeId = new NodeId("Controllers", InstanceNamespaceIndex),
BrowseName = new QualifiedName("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),
ReferenceTypeId = ReferenceTypeIds.Organizes,
RequestedNodeId = new NodeId(block.Name, InstanceNamespaceIndex),
BrowseName = new QualifiedName(block.Name, TypeNamespaceIndex),
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