private OpcDaBrowseElement CreateBranchBrowseElement(string name) { return(new OpcDaBrowseElement { Name = name, HasChildren = true, IsItem = false, ItemId = OpcBrowseServerAddressSpace.TryGetItemId(name) }); }
public static string TryGetItemId(this OpcBrowseServerAddressSpace opcBrowseServerAddressSpace, string itemName) { try { return(opcBrowseServerAddressSpace.GetItemId(itemName)); } catch (Exception ex) { return(null); } }
private void MoveToRoot() { try { for (int i = 0; i < MaxDepth; ++i) { // will throw if we aleady at root OpcBrowseServerAddressSpace.ChangeBrowsePosition(OPCBROWSEDIRECTION.OPC_BROWSE_UP); } } catch (COMException ex) { if (ex.ErrorCode == HRESULT.E_FAIL) // E_FAIL when change position on root element; { return; } throw; } }
protected override void ChangeBrowsePositionTo(string itemId) { IEnumerable <string> path; if (!_itemIdToPath.TryGetValue(itemId, out path)) { throw new ArgumentException("Item not discovered yet. In OPC DA 1.X all parent branches should be expanded before expanding the element.", "itemId"); } MoveToRoot(); if (String.IsNullOrEmpty(itemId)) // Already at root { return; } // Browse down using path foreach (var itemName in path) { OpcBrowseServerAddressSpace.ChangeBrowsePosition(OPCBROWSEDIRECTION.OPC_BROWSE_DOWN, itemName); } _currentPath = path; }
protected virtual void ChangeBrowsePositionTo(string itemId) { OpcBrowseServerAddressSpace.ChangeBrowsePosition(OPCBROWSEDIRECTION.OPC_BROWSE_TO, itemId); }
private OpcDaBrowseElement[] GetElementsImpl(string itemId, OpcDaElementFilter filter) { IEnumerable <OpcDaBrowseElement> elements; var namespaceType = OpcBrowseServerAddressSpace.Organization; VarEnum dataTypeFilter = TypeConverter.ToVarEnum(filter.DataType); switch (namespaceType) { case OpcDaNamespaceType.Hierarchial: ChangeBrowsePositionTo(itemId); switch (filter.ElementType) { case OpcDaBrowseFilter.All: var branches = OpcBrowseServerAddressSpace.BrowseOpcItemIds(OpcDaBrowseType.Branch, filter.Name, dataTypeFilter, filter.AccessRights) .Select(CreateBranchBrowseElement); var leafs = OpcBrowseServerAddressSpace.BrowseOpcItemIds(OpcDaBrowseType.Leaf, filter.Name, dataTypeFilter, filter.AccessRights) .Select(CreateLeafBrowseElement); elements = branches.Union(leafs); break; case OpcDaBrowseFilter.Branches: elements = OpcBrowseServerAddressSpace.BrowseOpcItemIds(OpcDaBrowseType.Branch, filter.Name, dataTypeFilter, filter.AccessRights) .Select(CreateBranchBrowseElement); break; case OpcDaBrowseFilter.Items: elements = OpcBrowseServerAddressSpace.BrowseOpcItemIds(OpcDaBrowseType.Leaf, filter.Name, dataTypeFilter, filter.AccessRights) .Select(CreateLeafBrowseElement); break; default: throw new ArgumentOutOfRangeException(); } break; case OpcDaNamespaceType.Flat: if (filter.ElementType == OpcDaBrowseFilter.Branches) // no branches in flat namespace { elements = Enumerable.Empty <OpcDaBrowseElement>(); } else { elements = OpcBrowseServerAddressSpace.BrowseOpcItemIds(OpcDaBrowseType.Flat, filter.Name, dataTypeFilter, filter.AccessRights) .Select(CreateLeafBrowseElement); } break; default: throw new ArgumentOutOfRangeException(); } return(elements.ToArray()); }