/// <summary> /// Метод для поиска всех тегов на ОРС сервере /// </summary> /// <param name="itemName"></param> public void Browse(string itemName = "") { var itemIdentifier = new Opc.ItemIdentifier(); itemIdentifier.ItemName = itemName; var browseFilters = new Opc.Da.BrowseFilters(); browseFilters.BrowseFilter = browseFilter.all; var browsePosition = new Opc.Da.BrowsePosition(itemIdentifier, browseFilters); BrowseElement[] browseElements = serverHandle.Browse(itemIdentifier, browseFilters, out browsePosition); if (browseElements != null) { foreach (BrowseElement element in browseElements) { if (element.IsItem) { Console.WriteLine("Item name : {0}", element.ItemName); } else { Console.WriteLine(); Console.WriteLine("Group name : {0}", element.ItemName); Browse(element.ItemName); } } } }
public void GetDataFilterItem(Opc.Da.Server server) { this.m_filterItem = null; if (this.m_unfilteredItemID == null) { BrowsePosition position = null; try { ItemIdentifier itemID = new ItemIdentifier(this); BrowseFilters filters = new BrowseFilters { ElementNameFilter = "DataFilters", BrowseFilter = browseFilter.all, ReturnAllProperties = false, PropertyIDs = null, ReturnPropertyValues = false }; BrowseElement[] elementArray = null; if (this.m_unconvertedItemID == null) { filters.ElementNameFilter = "CPX"; elementArray = server.Browse(itemID, filters, out position); if ((elementArray == null) || (elementArray.Length == 0)) { return; } if (position != null) { position.Dispose(); position = null; } itemID = new ItemIdentifier(elementArray[0].ItemPath, elementArray[0].ItemName); filters.ElementNameFilter = "DataFilters"; } elementArray = server.Browse(itemID, filters, out position); if ((elementArray != null) && (elementArray.Length != 0)) { this.m_filterItem = new ItemIdentifier(elementArray[0].ItemPath, elementArray[0].ItemName); } } finally { if (position != null) { position.Dispose(); position = null; } } } }
private void recursiveTreeFill(Server server, string itemId) { BrowsePosition position; BrowseFilters filters = new BrowseFilters() { BrowseFilter = browseFilter.all }; ItemIdentifier item = (itemId == null) ? new ItemIdentifier() : new ItemIdentifier(itemId); BrowseElement[] browseElements = server.Browse(item, filters, out position); repository.Add(itemId, browseElements); for (int index = 0; index < browseElements.Length; index++) { BrowseElement browsedElement = browseElements[index]; string itemName = browsedElement.ItemName; if (browsedElement.HasChildren) { recursiveTreeFill(server, itemName); } else { if (!repository.ContainsKey(itemId)) { repository.Add(itemId, new BrowseElement[] { }); } } } }
/// <summary> /// Fetches the set of data filters from the server. /// </summary> public ComplexItem[] GetDataFilters(Opc.Da.Server server) { // not a valid operation for data filter items. if (m_unfilteredItemID != null) { return(null); } // data filters not supported by the item. if (m_filterItem == null) { return(null); } BrowsePosition position = null; try { // browse any existing filter instances. BrowseFilters filters = new BrowseFilters(); filters.ElementNameFilter = null; filters.BrowseFilter = browseFilter.item; filters.ReturnAllProperties = false; filters.PropertyIDs = CPX_PROPERTIES; filters.ReturnPropertyValues = true; BrowseElement[] elements = server.Browse(m_filterItem, filters, out position); // nothing found. if (elements == null || elements.Length == 0) { return(new ComplexItem[0]); } // contruct an array of complex data items for each available data filter. ArrayList dataFilters = new ArrayList(elements.Length); foreach (BrowseElement element in elements) { ComplexItem item = new ComplexItem(); if (item.Init(element)) { dataFilters.Add(item); } } // return the set of available data filters. return((ComplexItem[])dataFilters.ToArray(typeof(ComplexItem))); } finally { if (position != null) { position.Dispose(); position = null; } } }
/// <summary> /// Метод рекурсивного поиска тегов в UA структурах и добавление их в disoveredTags /// </summary> /// <param name="id">объект который надо просканировать</param> private int Browse(Opc.ItemIdentifier id = null) { try { var filters = new Opc.Da.BrowseFilters { BrowseFilter = Opc.Da.browseFilter.all }; Opc.Da.BrowsePosition pos = null; var elements = server.Browse(id, filters, out pos); if (elements != null) { foreach (Opc.Da.BrowseElement element in elements) { if (element.IsItem) { _tags.Add(new Opc.Da.Item { ItemName = element.ItemName }); } if (element.HasChildren) { Browse(new Opc.ItemIdentifier(element.ItemPath, element.ItemName)); } } } return(0); } catch (Exception ex) { return(-1); } }
public void Browse(System.Windows.Forms.TreeNode node) { try { Opc.Da.Server server = this.FindServer(node); ItemIdentifier itemID = null; if (node.Tag != null && node.Tag.GetType() == typeof(BrowseElement)) { BrowseElement browseElement = (BrowseElement)node.Tag; itemID = new ItemIdentifier(browseElement.ItemPath, browseElement.ItemName); } node.Nodes.Clear(); BrowsePosition browsePosition = null; BrowseElement[] array = server.Browse(itemID, this.m_filters, out browsePosition); if (array != null) { BrowseElement[] array2 = array; for (int i = 0; i < array2.Length; i++) { BrowseElement browseElement2 = array2[i]; if (!browseElement2.ItemName.Contains("alrosa_w") && !browseElement2.ItemName.Contains("List of")) { if (!browseElement2.IsItem) { this.AddBrowseElement(node, browseElement2); } } } node.Expand(); } while (browsePosition != null) { System.Windows.Forms.DialogResult dialogResult = System.Windows.Forms.MessageBox.Show("More items meeting search criteria exist. Continue browse?", "Browse Items", System.Windows.Forms.MessageBoxButtons.YesNo); if (dialogResult == System.Windows.Forms.DialogResult.No) { break; } array = server.BrowseNext(ref browsePosition); if (array != null) { BrowseElement[] array2 = array; for (int i = 0; i < array2.Length; i++) { BrowseElement browseElement2 = array2[i]; this.AddBrowseElement(node, browseElement2); } node.Expand(); } } } catch (System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } }
private string getRootName(Server server) { BrowsePosition position; BrowseFilters filters = new BrowseFilters() { BrowseFilter = browseFilter.all }; BrowseElement[] rootElements = server.Browse(new ItemIdentifier(), filters, out position); return(rootElements[0].ItemName); }
public ComplexItem[] GetDataFilters(Opc.Da.Server server) { ComplexItem[] itemArray; if (this.m_unfilteredItemID != null) { return(null); } if (this.m_filterItem == null) { return(null); } BrowsePosition position = null; try { BrowseFilters filters = new BrowseFilters { ElementNameFilter = null, BrowseFilter = browseFilter.item, ReturnAllProperties = false, PropertyIDs = CPX_PROPERTIES, ReturnPropertyValues = true }; BrowseElement[] elementArray = server.Browse(this.m_filterItem, filters, out position); if ((elementArray == null) || (elementArray.Length == 0)) { return(new ComplexItem[0]); } ArrayList list = new ArrayList(elementArray.Length); foreach (BrowseElement element in elementArray) { ComplexItem item = new ComplexItem(); if (item.Init(element)) { list.Add(item); } } itemArray = (ComplexItem[])list.ToArray(typeof(ComplexItem)); } finally { if (position != null) { position.Dispose(); position = null; } } return(itemArray); }
/// <summary> /// Explore a folder on the Opc Server /// </summary> /// <param name="tag">The fully-qualified identifier of the tag. You can specify a subfolder by using a comma delimited name. /// E.g: the tag `foo.bar` finds the sub nodes of `bar` on the folder `foo`</param> /// <returns>The list of sub-nodes</returns> public IEnumerable <DaNode> ExploreFolder(string tag) { var parent = FindNode(tag); OpcDa.BrowsePosition p; var nodes = _server.Browse(new ItemIdentifier(parent.Tag), new OpcDa.BrowseFilters(), out p) .Select(t => new DaNode(t.Name, t.ItemName, parent)) .ToList(); //add nodes to cache foreach (var node in nodes) { AddNodeToCache(node); } return(nodes); }
private void getTree(Opc.Da.Server server) { BrowsePosition bp; ItemIdentifier itemID = new ItemIdentifier(); BrowseFilters filters = new BrowseFilters(); BrowseElement[] be = server.Browse(itemID, filters, out bp); TreeNode kepServ = null; int i = be.Length; // MessageBox.Show(i.ToString()); while (i != 0) { --i; kepServ = treeView1.Nodes.Add(be[i].ItemName); } // treeView1.Nodes.Add(kepServ); }
/// <summary> /// Creates a new data filter. /// </summary> public ComplexItem CreateDataFilter(Opc.Da.Server server, string filterName, string filterValue) { // not a valid operation for data filter items. if (m_unfilteredItemID != null) { return(null); } // data filters not supported by the item. if (m_filterItem == null) { return(null); } BrowsePosition position = null; try { // write the desired filter to the server. ItemValue item = new ItemValue(m_filterItem); // create the filter parameters document. StringWriter ostrm = new StringWriter(); XmlTextWriter writer = new XmlTextWriter(ostrm); writer.WriteStartElement("DataFilters"); writer.WriteAttributeString("Name", filterName); writer.WriteString(filterValue); writer.WriteEndElement(); writer.Close(); // create the value to write. item.Value = ostrm.ToString(); item.Quality = Quality.Bad; item.QualitySpecified = false; item.Timestamp = DateTime.MinValue; item.TimestampSpecified = false; // write the value. IdentifiedResult[] result = server.Write(new ItemValue[] { item }); if (result == null || result.Length == 0) { throw new ApplicationException("Unexpected result from server."); } if (result[0].ResultID.Failed()) { throw new ApplicationException("Could not create new data filter."); } // browse for new data filter item. BrowseFilters filters = new BrowseFilters(); filters.ElementNameFilter = filterName; filters.BrowseFilter = browseFilter.item; filters.ReturnAllProperties = false; filters.PropertyIDs = CPX_PROPERTIES; filters.ReturnPropertyValues = true; BrowseElement[] elements = server.Browse(m_filterItem, filters, out position); // nothing found. if (elements == null || elements.Length == 0) { throw new ApplicationException("Could not browse to new data filter."); } ComplexItem filterItem = new ComplexItem(); if (!filterItem.Init(elements[0])) { throw new ApplicationException("Could not initialize to new data filter."); } // return the new data filter. return(filterItem); } finally { if (position != null) { position.Dispose(); position = null; } } }
private void UpdateFolderData(TreeNode node) { if (node == null) { uiFolderTagsBindingSource.DataSource = null; return; } //Add items to folder, read from OPC Server if first time var folderTags = node.Tag as List<BrowseElement>; if (folderTags == null) { TreeNode rootNode = node; while (rootNode.Parent != null) { rootNode = rootNode.Parent; } var opcServer = Settings.OpcServers.Where(os => rootNode.FullPath == os.ServerName).Single(); string urlstring = opcServer.URL; Server server = new Server(new Factory(), new URL(urlstring)); server.Connect(); BrowsePosition position; BrowseFilters filters = new BrowseFilters() { BrowseFilter = browseFilter.all }; ItemIdentifier itemId = null; if (node.FullPath != server.Name) { itemId = new ItemIdentifier(node.Name); } BrowseElement[] elements = server.Browse(itemId, filters, out position); server.Disconnect(); var items = elements.Where(e => e.IsItem); if (items.Any()) { folderTags = items.ToList(); } else { folderTags = new List<BrowseElement>(); } var folders = elements.Where(e => e.IsItem == false); if(folders.Any()) { foreach (var element in elements.Where(e => !e.IsItem)) { node.Nodes.Add(element.Name).Name = element.ItemName; } } node.Tag = folderTags; } //Exlude elements which already are in group folderTags = folderTags.ToList(); var selectedGroup = uiGroupsTab_Groups.SelectedItem as Group; if (selectedGroup != null) { if (selectedGroup.Properties != null) { foreach (var property in selectedGroup.Properties) { folderTags.RemoveAll(t => t.ItemName == property.TagName); } } } uiFolderTagsBindingSource.DataSource = folderTags; //if (elements != null) //{ // var itemsIDs = new List<ItemIdentifier>(); // foreach (var element in elements) // { // itemsIDs.Add(new ItemIdentifier(element.ItemName)); // } // var prid = new List<PropertyID>(); // prid.Add(new PropertyID(1)); // prid.Add(new PropertyID(2)); // var tst = server.GetProperties(itemsIDs.ToArray(), prid.ToArray(), true); //} }
private void DisplayChildren(TreeNode ParentNode, TreeNodeMouseClickEventArgs e) { BrowsePosition bp; ItemIdentifier itemID = new ItemIdentifier(e.Node.FullPath.Replace("\\", "."), e.Node.FullPath.Replace("\\", ".")); BrowseFilters filters = new BrowseFilters(); BrowseElement[] be = server.Browse(itemID, filters, out bp); // MessageBox.Show(bp.MaxElementsReturned.ToString()); if (be != null) { int i = be.Length; // Вначале выводим все листья на данном уровне while (i != 0) { --i; TreeNode tvNode; if (ParentNode == null) { tvNode = treeView1.Nodes.Add(be[i].Name); if (be[i].IsItem) { listView1.Items.Add(be[i].Name); Object irr = getOPCValue(e.Node.FullPath.Replace("\\", ".") + "." + be[i].Name, be); } } else { if (be[i].IsItem) { ListViewItem lvItem = new ListViewItem(); ListViewItem.ListViewSubItem[] lvSubItem = new ListViewItem.ListViewSubItem[3]; Object irr = getOPCValue(e.Node.FullPath.Replace("\\", ".") + "." + be[i].Name, be); lvItem.Text = e.Node.FullPath.Replace("\\", ".") + "." + be[i].Name; //lvItem.SubItems.Add(getOPCValue(be[i].ItemName).ToString()); lvItem.SubItems.Add(irr.ToString()); listView2.Items.Add(lvItem); } else { tvNode = ParentNode.Nodes.Add(be[i].Name); } } } } else { MessageBox.Show("be null"); } //// BrowsePosition bp2; //// ItemIdentifier itemID2 = new ItemIdentifier(e.Node.NextNode.Text, e.Node.NextNode.Text); //// BrowseFilters filters2 = new BrowseFilters(); //// BrowseElement[] be2 = server.Browse(itemID, filters, out bp); // while (cnt != 0) // { // TreeNode tvNode; // if (ParentNode == null) // tvNode = treeView1.Nodes.Add(be[i].ItemName); // else // tvNode = ParentNode.Nodes.Add(strName); // // pParent.ChangeBrowsePosition(tagOPCHDA_BROWSEDIRECTION.OPCHDA_BROWSE_DOWN, strName); // DisplayChildren(tvNode, pParent); //Рекурсивно вызываем метод // //После того как все дочерние узлы показаны постепенно поднимаемся // //вверх // pParent.ChangeBrowsePosition(tagOPCHDA_BROWSEDIRECTION.OPCHDA_BROWSE_UP, // strName); // pEnum.RemoteNext(1, out strName, out cnt); // } }
/// <summary> /// Fetches the item id for the data filters items. /// </summary> public void GetDataFilterItem(Opc.Da.Server server) { m_filterItem = null; // not a valid operation for data filter items. if (m_unfilteredItemID != null) { return; } BrowsePosition position = null; try { ItemIdentifier itemID = new ItemIdentifier(this); // browse any existing filter instances. BrowseFilters filters = new BrowseFilters(); filters.ElementNameFilter = CPX_DATA_FILTERS; filters.BrowseFilter = browseFilter.all; filters.ReturnAllProperties = false; filters.PropertyIDs = null; filters.ReturnPropertyValues = false; BrowseElement[] elements = null; // browse for the 'CPX' branch first. if (m_unconvertedItemID == null) { filters.ElementNameFilter = CPX_BRANCH; elements = server.Browse(itemID, filters, out position); // nothing found. if (elements == null || elements.Length == 0) { return; } // release the position object. if (position != null) { position.Dispose(); position = null; } // update the item for the next browse operation. itemID = new ItemIdentifier(elements[0].ItemPath, elements[0].ItemName); filters.ElementNameFilter = CPX_DATA_FILTERS; } // browse for the 'DataFilters' branch. elements = server.Browse(itemID, filters, out position); // nothing found. if (elements == null || elements.Length == 0) { return; } m_filterItem = new ItemIdentifier(elements[0].ItemPath, elements[0].ItemName); } finally { if (position != null) { position.Dispose(); position = null; } } }
public ComplexItem CreateDataFilter(Opc.Da.Server server, string filterName, string filterValue) { ComplexItem item2; if (this.m_unfilteredItemID != null) { return(null); } if (this.m_filterItem == null) { return(null); } BrowsePosition position = null; try { ItemValue value2 = new ItemValue(this.m_filterItem); StringWriter w = new StringWriter(); XmlTextWriter writer2 = new XmlTextWriter(w); writer2.WriteStartElement("DataFilters"); writer2.WriteAttributeString("Name", filterName); writer2.WriteString(filterValue); writer2.WriteEndElement(); writer2.Close(); value2.Value = w.ToString(); value2.Quality = Quality.Bad; value2.QualitySpecified = false; value2.Timestamp = DateTime.MinValue; value2.TimestampSpecified = false; IdentifiedResult[] resultArray = server.Write(new ItemValue[] { value2 }); if ((resultArray == null) || (resultArray.Length == 0)) { throw new ApplicationException("Unexpected result from server."); } if (resultArray[0].ResultID.Failed()) { throw new ApplicationException("Could not create new data filter."); } BrowseFilters filters = new BrowseFilters { ElementNameFilter = filterName, BrowseFilter = browseFilter.item, ReturnAllProperties = false, PropertyIDs = CPX_PROPERTIES, ReturnPropertyValues = true }; BrowseElement[] elementArray = server.Browse(this.m_filterItem, filters, out position); if ((elementArray == null) || (elementArray.Length == 0)) { throw new ApplicationException("Could not browse to new data filter."); } ComplexItem item = new ComplexItem(); if (!item.Init(elementArray[0])) { throw new ApplicationException("Could not initialize to new data filter."); } item2 = item; } finally { if (position != null) { position.Dispose(); position = null; } } return(item2); }
public ComplexItem[] GetTypeConversions(Opc.Da.Server server) { ComplexItem[] itemArray; if ((this.m_unconvertedItemID != null) || (this.m_unfilteredItemID != null)) { return(null); } BrowsePosition position = null; try { BrowseFilters filters = new BrowseFilters { ElementNameFilter = "CPX", BrowseFilter = browseFilter.branch, ReturnAllProperties = false, PropertyIDs = null, ReturnPropertyValues = false }; BrowseElement[] elementArray = server.Browse(this, filters, out position); if ((elementArray == null) || (elementArray.Length == 0)) { return(null); } if (position != null) { position.Dispose(); position = null; } ItemIdentifier itemID = new ItemIdentifier(elementArray[0].ItemPath, elementArray[0].ItemName); filters.ElementNameFilter = null; filters.BrowseFilter = browseFilter.item; filters.ReturnAllProperties = false; filters.PropertyIDs = CPX_PROPERTIES; filters.ReturnPropertyValues = true; elementArray = server.Browse(itemID, filters, out position); if ((elementArray == null) || (elementArray.Length == 0)) { return(new ComplexItem[0]); } ArrayList list = new ArrayList(elementArray.Length); foreach (BrowseElement element in elementArray) { if (element.Name != "DataFilters") { ComplexItem item = new ComplexItem(); if (item.Init(element)) { item.GetDataFilterItem(server); list.Add(item); } } } itemArray = (ComplexItem[])list.ToArray(typeof(ComplexItem)); } finally { if (position != null) { position.Dispose(); position = null; } } return(itemArray); }
/// <summary> /// Fetches the set of type conversions from the server. /// </summary> public ComplexItem[] GetTypeConversions(Opc.Da.Server server) { // only the root item can have type conversions. if (m_unconvertedItemID != null || m_unfilteredItemID != null) { return(null); } BrowsePosition position = null; try { // look for the 'CPX' branch. BrowseFilters filters = new BrowseFilters(); filters.ElementNameFilter = CPX_BRANCH; filters.BrowseFilter = browseFilter.branch; filters.ReturnAllProperties = false; filters.PropertyIDs = null; filters.ReturnPropertyValues = false; BrowseElement[] elements = server.Browse(this, filters, out position); // nothing found. if (elements == null || elements.Length == 0) { return(null); } // release the browse position object. if (position != null) { position.Dispose(); position = null; } // browse for type conversions. ItemIdentifier itemID = new ItemIdentifier(elements[0].ItemPath, elements[0].ItemName); filters.ElementNameFilter = null; filters.BrowseFilter = browseFilter.item; filters.ReturnAllProperties = false; filters.PropertyIDs = CPX_PROPERTIES; filters.ReturnPropertyValues = true; elements = server.Browse(itemID, filters, out position); // nothing found. if (elements == null || elements.Length == 0) { return(new ComplexItem[0]); } // contruct an array of complex data items for each available conversion. ArrayList conversions = new ArrayList(elements.Length); foreach (BrowseElement element in elements) { if (element.Name != CPX_DATA_FILTERS) { ComplexItem item = new ComplexItem(); if (item.Init(element)) { // check if data filters supported for type conversion. item.GetDataFilterItem(server); conversions.Add(item); } } } // return the set of available conversions. return((ComplexItem[])conversions.ToArray(typeof(ComplexItem))); } finally { if (position != null) { position.Dispose(); position = null; } } }