private void browseBranch(Branch Parent) { _OPCBrowser.ShowBranches(); if (_OPCBrowser.Count > 0) { for (int i = 1; i <= _OPCBrowser.Count; i++) { _OPCBrowser.MoveDown(_OPCBrowser.Item(i)); //string BranchName = _OPCBrowser.CurrentPosition; //while(BranchName.Contains(".")) //{ // BranchName = BranchName.Substring(_OPCBrowser.CurrentPosition.IndexOf(".") + 1); //} Branch b = new Branch(Name: _OPCBrowser.CurrentPosition, Server: this._OPCServer, Parent: Parent); browseBranch(b); browseLeaf(b); _OPCBrowser.MoveUp(); _OPCBrowser.ShowBranches(); } } }
private bool LoadDataToTree(OPCBrowser oPCBrowser, TreeNodeCollection treeNodeCollection, string root) { oPCBrowser.Organization.ToString(); oPCBrowser.ShowBranches(); bool isLeaf = true; foreach (object turn in opcBrowser) { TreeNode node = null; node = treeNodeCollection.Add(turn.ToString()); opcBrowser.MoveDown(turn.ToString()); if (LoadDataToTree(oPCBrowser, node.Nodes, root + "\\" + turn.ToString())) { //if (turn.ToString().Equals("PV")) //{ //textBoxResult.Text +=root+"\\"+turn.ToString() + "\r\n"; File.AppendAllText(path, root + "\\" + turn.ToString() + "\r\n", Encoding.UTF8); // } } oPCBrowser.MoveUp(); isLeaf = false; } return(isLeaf); }
/// <summary> /// OPCBrowser遍历组下所有点,并构建Tree节点 /// </summary> /// <param name="nodes"></param> public void ShowBranchesByTree(TreeNodeCollection nodes) { TreeNode treeNode; oPCBrowser.ShowBranches(); foreach (object branch in oPCBrowser) { if (branch.ToString().Equals("_Hints") || branch.ToString().Equals("_System"))//排除这两项 { } else { treeNode = nodes.Add(branch.ToString()); oPCBrowser.MoveDown(branch.ToString()); ShowBranchesByTree(treeNode.Nodes); oPCBrowser.MoveUp(); } } }
/// <summary> /// OPCBrowser遍历组下一层节点,并构建Tree节点 /// </summary> /// <param name="nodeId"></param> public List <OpcNode> ShowBranches(string nodeId = "") { if (nodeId.IsNullOrEmpty()) { //返回根节点,需要顺序执行下列3个函数。 oPCBrowser.MoveTo(oPCBrowser.CurrentPosition.Split('.')); oPCBrowser.ShowLeafs(true); oPCBrowser.MoveToRoot(); } else { oPCBrowser.MoveTo(nodeId.Split('.')); } oPCBrowser.ShowBranches(); List <OpcNode> listNode = Task.Run(() => { List <OpcNode> list = new List <OpcNode>(); foreach (object branch in oPCBrowser) { string key = "ClassIcon"; bool isExpand = false; string branchNodeId = ""; //拼接nodeId if (nodeId.IsNullOrEmpty()) { branchNodeId = branch.ToString(); } else { branchNodeId = nodeId + "." + branch.ToString(); } oPCBrowser.MoveDown(branch.ToString()); oPCBrowser.ShowBranches(); if (oPCBrowser.Count > 0) { isExpand = true; } var child = new OpcNode(branch.ToString(), branchNodeId, key, isExpand); list.Add(child); oPCBrowser.MoveUp(); } return(list); } ).Result; oPCBrowser.MoveToRoot(); return(listNode); }
/// <summary> /// 将数据获取到treeview /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LoadDataToTree(OPCBrowser oPCBrowser, TreeNodeCollection treeNodeCollection) { oPCBrowser.Organization.ToString(); oPCBrowser.ShowBranches(); foreach (object turn in oPCBrowser) { TreeNode node = treeNodeCollection.Add(turn.ToString()); treeView1.SelectedNode = node; oPCBrowser.MoveDown(turn.ToString()); LoadDataToTree(oPCBrowser, node.Nodes); oPCBrowser.MoveUp(); } oPCBrowser.ShowLeafs(false); foreach (object turn in oPCBrowser) { treeView1.SelectedNode.Nodes.Add(turn.ToString()); } }
/// <summary> /// Рекурсивно обходит содержимое OPC-сервера. /// </summary> /// <param name="aBrowser">Браузер OPC-сервера.</param> /// <param name="aPrefix">Префикс для построения дерева.</param> private static void ShowOpcTagsRecurcive(OPCBrowser aBrowser, string aPrefix = "") { var isError = false; try { aBrowser.ShowBranches(); } catch (Exception ex) { Console.WriteLine("Ошибка при отображении ветки."); isError = true; } if (!isError) { foreach (var item in aBrowser) { Console.WriteLine(aPrefix + "Ветвь: " + item); aBrowser.MoveDown(item.ToString()); ShowOpcTagsRecurcive(aBrowser, aPrefix + "-"); aBrowser.MoveUp(); } } isError = false; try { aBrowser.ShowLeafs(); } catch (Exception ex) { Console.WriteLine("Ошибка при отображении листа."); isError = true; } if (!isError) { foreach (var item in aBrowser) { Console.WriteLine(aPrefix + "Лист:" + item); } } }
/// <summary> /// 列出OPC组下所有点 /// </summary> /// <param name="oPCBrowser"></param> private void RecurBrowseItems(OPCBrowser oPCBrowser, string groupName) { //int len = groupName.Length; //ArrayList al = new ArrayList(); ////展开分支 //oPCBrowser.ShowBranches(); ////展开叶子 //oPCBrowser.ShowLeafs(true); //listBoxItems.Items.Clear(); //listView1.Items.Clear(); //foreach (object turn in oPCBrowser) //{ // if (turn.ToString().Contains(groupName)) // { // al.Add(turn); // } //} //foreach (var item in al) //{ // if (!item.ToString().Contains("._")) // { // listBoxItems.Items.Add(item.ToString()); // listView1.Items.Add(item.ToString()); // } //} listView1.Items.Clear(); oPCBrowser.MoveDown(groupName); oPCBrowser.ShowBranches(); oPCBrowser.ShowLeafs(true); listBoxItems.Items.Clear(); listView1.Items.Clear(); foreach (object turn in oPCBrowser) { listView1.Items.Add(turn.ToString()); listBoxItems.Items.Add(turn.ToString()); } oPCBrowser.MoveUp(); }
/// <summary> /// 建立分支树 /// </summary> /// <param name="node"></param> /// <param name="oPCBrowser"></param> private void BuildBranchTree(ref TreeNode node, OPCBrowser oPCBrowser) { if (node == null) { MessageBox.Show("请创建根节点"); } TreeNode treeNode; oPCBrowser.ShowBranches(); foreach (object Branch in oPCBrowser) { treeNode = node.Nodes.Add(Branch.ToString()); try { oPCBrowser.MoveDown(Branch.ToString()); BuildBranchTree(ref treeNode, oPCBrowser); oPCBrowser.MoveUp(); } catch (Exception) { } } ListLeaf(ref node, oPCBrowser); }
/// <summary> /// 显示节点树 不包含叶子节点 /// </summary> /// <param name="node"></param> /// <returns></returns> public TagTreeNode GetTree(TagTreeNode node) { TagTreeNode subNode = null; opcBrowser.ShowBranches(); foreach (var branch in opcBrowser) { if (node == null) { node = new TagTreeNode(opcServer.ServerName); } //Console.WriteLine(branch); subNode = node.AddNode(branch.ToString()); try { opcBrowser.MoveDown(branch.ToString()); GetTree(subNode); opcBrowser.MoveUp(); } catch { } } return(node); }
public void GetOPCTags(OPCType opc, bool SyncData) { string server = ""; string filter1 = ""; string filter2 = ""; string sep = ""; string device = ""; type = opc; switch (type) { case OPCType.Kepware: server = "Kepware.KEPServerEX.V6"; filter1 = "A3*"; filter2 = "R*"; sep = "."; device = "KEPWARE"; break; case OPCType.Matrikon: server = "Matrikon.OPC.AllenBradleyPLCs.1"; filter1 = "A3*"; filter2 = ""; sep = ":"; device = "MATRIKON"; break; } Plcs.Clear(); this.Sync = SyncData; List <string> sChannels = new List <string>(); oServer.Connect(server); oServer.OPCGroups.DefaultGroupIsActive = true; int iChannels; oGroup = oServer.OPCGroups.Add(sGroup); oGroup.IsSubscribed = true; oGroup.OPCItems.DefaultIsActive = true; oGroup.AsyncReadComplete += OCPCallBack; oBrowser = oServer.CreateBrowser(); oBrowser.Filter = filter1; oBrowser.ShowBranches(); iChannels = oBrowser.Count; for (int i = 0; i < iChannels; i++) { sChannels.Add(oBrowser.Item(i + 1)); } foreach (string sChannel in sChannels) { oBrowser.MoveDown(sChannel); oBrowser.Filter = filter2; oBrowser.ShowBranches(); for (int j = 0; j < oBrowser.Count; j++) { this.AddPLC(sChannel + sep + oBrowser.Item(j + 1), device); } oBrowser.MoveUp(); } }