/// <summary> /// Get Ae AreaSpace Data /// </summary> private void GetAeAreaSpaceData(TreeNode node, AeSession session) { AddressSpaceElementBrowseOptions browseOptions = new AddressSpaceElementBrowseOptions(); browseOptions.ElementTypeFilter = Softing.OPCToolbox.Client.EnumAddressSpaceElementType.BRANCH; AddressSpaceElement elem = null; if (!node.Equals(browseTreeView.Nodes[0])) { elem = node.Tag as AddressSpaceElement; } AddressSpaceElement[] addressSpaceElements = null; if (ResultCode.SUCCEEDED(session.Browse((AddressSpaceElement)elem, browseOptions, out addressSpaceElements, executionOptions))) { node.Nodes.Clear(); for (int i = 0; i < addressSpaceElements.Length; i++) { TreeNode newNode = new TreeNode(addressSpaceElements[i].Name, NODE_INDEX, NODE_INDEX); newNode.Name = addressSpaceElements[i].Name; newNode.Tag = addressSpaceElements[i]; node.Nodes.Add(newNode); newNode.Nodes.Add(new TreeNode("")); string[] conditions = null; string sourcePath = GetSourcePath(newNode); if (ResultCode.SUCCEEDED(session.QueryAeSourceConditions(sourcePath, out conditions, executionOptions))) { for (int j = 0; j < conditions.Length; j++) { TreeNode conditionNode = new TreeNode(conditions[j], PROP_INDEX, PROP_INDEX); conditionNode.Name = conditions[j]; conditionNode.Tag = String.Empty; newNode.Nodes.Add(conditionNode); } } } } AddressSpaceElementBrowseOptions browseOpt = new AddressSpaceElementBrowseOptions(); browseOpt.ElementTypeFilter = Softing.OPCToolbox.Client.EnumAddressSpaceElementType.LEAF; if (ResultCode.SUCCEEDED(session.Browse((AddressSpaceElement)elem, browseOpt, out addressSpaceElements, executionOptions))) { for (int i = 0; i < addressSpaceElements.Length; i++) { TreeNode newNode = new TreeNode(addressSpaceElements[i].Name, TAG_INDEX, TAG_INDEX); newNode.Name = addressSpaceElements[i].Name; newNode.Tag = addressSpaceElements[i]; node.Nodes.Add(newNode); string[] conditions = null; string sourcePath = GetSourcePath(newNode); if (ResultCode.SUCCEEDED(session.QueryAeSourceConditions(sourcePath, out conditions, executionOptions))) { for (int j = 0; j < conditions.Length; j++) { TreeNode conditionNode = new TreeNode(conditions[j], PROP_INDEX, PROP_INDEX); conditionNode.Name = conditions[j]; conditionNode.Tag = String.Empty; newNode.Nodes.Add(conditionNode); } } } } }
public override int QueryAddressSpaceElementData(string anElementID, out AddressSpaceElement anElement) { DaAddressSpaceElement element = new DaAddressSpaceElement(); if (anElementID.StartsWith("stringBased")) { if (anElementID == "stringBased") { element.Name = anElementID; element.IoMode = EnumIoMode.NONE; element.HasChildren = true; } else if (anElementID == "stringBased.N1" || anElementID == "stringBased.N2") { element.Name = anElementID.Substring(anElementID.LastIndexOf(".") + 1); element.AccessRights = EnumAccessRights.READWRITEABLE; element.Datatype = typeof(byte); element.HasChildren = true; element.IoMode = EnumIoMode.REPORT; } else if (anElementID == "stringBased.T1") { element.Name = anElementID.Substring(anElementID.LastIndexOf(".") + 1); element.AccessRights = EnumAccessRights.READWRITEABLE; element.Datatype = typeof(byte); element.HasChildren = false; element.IoMode = EnumIoMode.REPORT; } else if (anElementID.LastIndexOf("N1") > 0) { if (anElementID.Substring(anElementID.LastIndexOf("N1")).EndsWith("T1")) { element.Name = anElementID.Substring(anElementID.LastIndexOf(".") + 1); element.AccessRights = EnumAccessRights.READWRITEABLE; element.Datatype = typeof(byte); element.HasChildren = false; element.IoMode = EnumIoMode.REPORT; } } else if (anElementID.LastIndexOf("N2") > 0) { if (anElementID.Substring(anElementID.LastIndexOf("N2")).EndsWith("T1") || anElementID.Substring(anElementID.LastIndexOf("N2")).EndsWith("T2")) { element.Name = anElementID.Substring(anElementID.LastIndexOf(".") + 1); element.AccessRights = EnumAccessRights.READWRITEABLE; element.Datatype = typeof(byte); element.HasChildren = false; element.IoMode = EnumIoMode.REPORT; } } } else if (anElementID.StartsWith("syntaxBased")) { if (anElementID == "syntaxBased") { element.Name = anElementID; element.IoMode = EnumIoMode.NONE; element.HasChildren = true; } Int32 index = anElementID.LastIndexOf(".T"); if (index > 0) { element.Name = anElementID.Substring(index + 1); if (element.Name.Length == 2) { element.HasChildren = false; element.IoMode = EnumIoMode.POLL; element.AccessRights = EnumAccessRights.READWRITEABLE; element.Datatype = typeof(Int32); } else { element.Name = string.Empty; } } else { index = anElementID.LastIndexOf(".N"); if (index > 0) { element.Name = anElementID.Substring(index + 1); if (element.Name.Length == 2) { element.HasChildren = true; element.IoMode = EnumIoMode.NONE; } else { element.Name = string.Empty; } } } } // check if an element was succeeded if (element.Name == string.Empty) { anElement = null; return((int)EnumResultCode.E_BADTYPE); } // end if anElement = element; return((int)EnumResultCode.S_OK); } // end QueryAddressSpaceElementData