/// <summary> /// Gets the aggregate functions object id. /// </summary> /// <param name="session">The session.</param> /// <param name="objectId">The object id.</param> /// <returns>The node id.</returns> private List<HdaAggregate> GetAggregateFunctions(Session session, NodeId objectId) { Browser browser = new Browser(session); browser.BrowseDirection = BrowseDirection.Forward; browser.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HierarchicalReferences; browser.IncludeSubtypes = true; browser.NodeClassMask = (int)NodeClass.Object; browser.ResultMask = (uint)(BrowseResultMask.DisplayName | BrowseResultMask.BrowseName | BrowseResultMask.TypeDefinition); browser.ContinueUntilDone = true; ReferenceDescriptionCollection references = browser.Browse(objectId); List<HdaAggregate> aggregates = new List<HdaAggregate>(); for (int ii = 0; ii < references.Count; ii++) { ReferenceDescription reference = references[ii]; if (reference.TypeDefinition != Opc.Ua.ObjectTypeIds.AggregateFunctionType) { continue; } HdaAggregate aggregate = new HdaAggregate(); NodeId remoteId = (NodeId)reference.NodeId; aggregate.RemoteId = remoteId; aggregate.LocalId = ComUtils.GetHdaAggregateId(remoteId); aggregate.Name = reference.ToString(); aggregate.Description = null; // check for previously mapped ids. if (aggregate.LocalId == 0) { aggregate.LocalId = m_mapper.GetLocalIntegerIdMapping(Opc.Ua.BrowseNames.AggregateFunctions, remoteId); } aggregates.Add(aggregate); } return aggregates; }