/// <summary> /// Get OPC tree for selected branch /// </summary> /// <param name="itemId">Parent level element</param> /// <returns>Collection of OPC children</returns> public ObservableCollection <mTreeNode> GetTree(Opc.ItemIdentifier itemId) { ObservableCollection <mTreeNode> tree = new ObservableCollection <mTreeNode>(); if (isConnected) { Opc.Da.BrowsePosition position; Opc.Da.BrowseFilters filters = new Opc.Da.BrowseFilters() { BrowseFilter = Opc.Da.browseFilter.branch }; Opc.Da.BrowseElement[] elements = server.Browse(itemId, filters, out position); if (elements != null) { foreach (Opc.Da.BrowseElement el in elements) { mTreeNode node = new mTreeNode(); node.Description = el.Name; node.Name = el.ItemName; node.Path = el.ItemPath; if (el.HasChildren) { var childItemId = new Opc.ItemIdentifier(el.ItemPath, el.ItemName); node.Nodes = new ObservableCollection <mTreeNode>(GetTree(childItemId)); } tree.Add(node); } } } RefreshServerStatus(); return(tree); }
/// <summary> /// Get list of OPC tags for selected group/branch /// </summary> /// <param name="path">Root item/leaf path</param> /// <param name="name">Root item/leaf name</param> /// <returns>Collection of tags, names and path only, not values</returns> public ObservableCollection <mItem> GetTags(string path, string name) { ObservableCollection <mItem> tags = new ObservableCollection <mItem>(); var itemId = new Opc.ItemIdentifier(path, name); Opc.Da.BrowsePosition position; Opc.Da.BrowseFilters filters = new Opc.Da.BrowseFilters() { BrowseFilter = Opc.Da.browseFilter.item }; Opc.Da.BrowseElement[] elements = server.Browse(itemId, filters, out position); if (elements != null) { foreach (Opc.Da.BrowseElement el in elements) { mItem tag = new mItem(el.ItemName, el.ItemPath); tags.Add(tag); } } return(tags); }