09/16/2022
Hello
My goal is to retrieve all alarm nodes (their addresses) from the server. These nodes are characterized by having HasTypeDefinition reference pointing towards the ObjectType named AlarmType.
Our existing solution is very slow and most likely suboptimal. Currently it works by searching the whole tree and comparing each node with custom expression, in this case, checking if the nodes reference table contains reference named AlarmType.
I don't think this is the right direction to solve this problem and I doubt how much it is possible to speed up this proccess. My idea was to use the AlarmType reference and by reversing it reaching the desired nodes. Instead this reference pointed back not at these nodes, but to different SubTypes of AlarmType. These SubTypes have matching BrowseName/DisplayName to the target alarm nodes but are not connected in any way to them. Overall, this solution failed.
What would be the optimal way of achieving my goal?
05/30/2017
You get all active alarms by subscribing to the Server object with an EventFilter and calling ConditionRefresh.
If a Node exists the ConditionId field provides the NodeId.
You cannot get *all* alarm nodes in the server because they may not even be in the address space (i.e. many servers do not expose alarms as nodes or only make them visible when they are active).
Any client design that depends on browsing the entire address space to find nodes will not work well with many servers with dynamic address spaces. I suggest you revisit your design decisions.
1 Guest(s)