} //end GetConditionState public int InitializeAeObjects() { int connectResult = (int)EnumResultCode.E_FAIL; try{ m_aeSession = new AeSession("opcae:///Softing.OPCToolboxDemo_ServerAE.1/{2E565243-B238-11D3-842D-0008C779D775}"); m_aeSubscription = new AeSubscription(m_aeSession); connectResult = m_aeSession.Connect( true, true, null); m_aeSubscription.RefreshAeConditions(null); } catch (Exception exc) { GetApplication().Trace( EnumTraceLevel.ERR, EnumTraceGroup.USER, "OpcClient::InitializeAeObjects", exc.ToString()); } // end try...catch return(connectResult); } // end InitializeAeObjects
/// <summary> /// Build AeBrowse /// </summary> /// <param name="aeSession"></param> public void BuildAeBrowseTree(AeSession aeSession) { if (browseTreeView.Nodes.Count > 0) { if (browseTreeView.Nodes[0].Text.Equals(aeSession.Url + AREA_SPACE)) { return; } } daSubscription = null; browseTreeView.Nodes.Clear(); TreeNode treeRootNode = new TreeNode(aeSession.Url + AREA_SPACE, BROWSE_INDEX, BROWSE_INDEX); treeRootNode.Name = aeSession.Url + AREA_SPACE; browseTreeView.Nodes.Add(treeRootNode); treeRootNode.Nodes.Add(new TreeNode("")); treeRootNode.Tag = aeSession; treeRootNode = new TreeNode(aeSession.Url + EVENT_CATEGORIES, BROWSE_INDEX, BROWSE_INDEX); treeRootNode.Name = aeSession.Url + EVENT_CATEGORIES; browseTreeView.Nodes.Add(treeRootNode); treeRootNode.Nodes.Add(new TreeNode("")); treeRootNode.Tag = aeSession; if (Options.SortAe) { browseTreeView.Sort(); } else { browseTreeView.Sorted = false; } }
/// <summary> /// Fill Browse data /// </summary> /// <param name="treeNode"></param> private void ExpandTreeNode(TreeNode treeNode, TreeNode rootNode) { if (rootNode == null) { return; } if (rootNode.Tag == null) { return; } this.browseTreeView.Cursor = Cursors.WaitCursor; if (Type.ReferenceEquals(rootNode.Tag.GetType(), typeof(DaSession))) { GetDaData(treeNode, rootNode, rootNode.Tag); } else if (Type.ReferenceEquals(rootNode.Tag.GetType(), typeof(AeSession))) { AeSession session = rootNode.Tag as AeSession; if (session == null || treeNode.Tag == null) { this.browseTreeView.Cursor = Cursors.Default; return; } if (treeNode == browseTreeView.Nodes[1]) { GetAeEventCategoriesData(treeNode, session); } else { GetAeAreaSpaceData(treeNode, session); } } this.browseTreeView.Cursor = Cursors.Default; }
} // end ProcessCommandLine public void Terminate() { GetApplication().Terminate(); m_daSession = null; m_daSubscription = null; m_daItem = null; m_aeSession = null; m_aeSubscription = null; } // end Terminate
//-- #endregion #region Public Properties //----------------------- //-- #endregion #region Handles //--------------------- private void HandleEnableAeConditionsBySourceCompleted( AeSession anAeSession, uint executionContext, bool enable, string path, int result) { if (ResultCode.SUCCEEDED(result)) { Console.WriteLine("Enabling conditions succeeded!"); } }
/// <summary> /// Initializes a new instance of the <see cref="AeCategory"/> class. /// </summary> /// <param name="anEventType"></param> /// <param name="anId"></param> /// <param name="aDescription"></param> /// <param name="aSession"></param> internal AeCategory( EnumEventType anEventType, uint anId, string aDescription, AeSession aSession) { m_index = ++CategoryIndex; m_eventType = anEventType; m_Id = anId; m_description = aDescription; m_aeSession = aSession; }
//-- #endregion #region Private Members //--------------------- #region Private Attributes //------------------------ //-- #endregion //-- #endregion #region Public Methods //--------------------- //-- #endregion #region Public Properties //----------------------- //-- #endregion #region Handles //--------------------- public static void HandleQueryAeSourceConditionsCompleted(AeSession anAeSession, uint executionOptions, string sourcePath, string[] conditionNames, int result) { if (ResultCode.SUCCEEDED(result)) { System.Console.WriteLine("\n Source conditions of " + sourcePath + " :"); for (int i = 0; i < conditionNames.Length; i++) { System.Console.WriteLine(" ["+ i + "] " + conditionNames[i]); } } //end if else { System.Console.WriteLine("Failed to asynchronously query the conditions of source: " + sourcePath); } } // end HandleQueryAeSourceConditionsCompleted
/// <summary> /// AeSubscription Properties /// </summary> /// <param name="subscription"></param> internal bool AeSubscription(AeSubscription subscription) { panelBottom.Visible = true; this.daItem = null; aeSubscription = subscription; daSession = null; daSubscription = null; aeSession = null; Helper.DataTypes dataTypeHelper = new DataTypes(); this.panelBottom.Visible = true; //AeSubscription Buffer Time Helper.CustomProperties propServiceColl = new DemoClient.Helper.CustomProperties(); Helper.CustomProperty customProperty = new DemoClient.Helper.CustomProperty("Buffer Time", "System.String", "General", null, aeSubscription.RequestedBufferTime); propServiceColl.Properties.Add(customProperty); //AeSubscription Revised Buffer Time customProperty = new DemoClient.Helper.CustomProperty("Revised Buffer Time", "System.String", "General", null, aeSubscription.RevisedBufferTime); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSubscription Max Size customProperty = new DemoClient.Helper.CustomProperty("Max Size", "System.String", "General", null, aeSubscription.RequestedMaxSize); propServiceColl.Properties.Add(customProperty); //AeSubscription Revised Max Size customProperty = new DemoClient.Helper.CustomProperty("Revised Max Size", "System.String", "General", null, aeSubscription.RevisedMaxSize); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); this.propertyGrid.PropertySort = PropertySort.Categorized; this.propertyGrid.SelectedObject = propServiceColl; return(true); }
/// <summary> /// Get Ae Event Categories Data /// </summary> private void GetAeEventCategoriesData(TreeNode node, AeSession session) { node.Nodes.Clear(); //query categories for each event type AeCategory[] categories = null; session.QueryAeCategories(out categories, executionOptions); for (int i = 0; i < categories.Length; i++) { TreeNode categoryNode = new TreeNode(categories[i].Description, NODE_INDEX, NODE_INDEX); categoryNode.Name = categories[i].Description; node.Nodes.Add(categoryNode); //Query categories' attributes AeAttribute[] attributes = null; categories[i].QueryAeAttributes(out attributes, executionOptions); for (int j = 0; j < attributes.Length; j++) { TreeNode attributeNode = new TreeNode(attributes[j].Description, TAG_INDEX, TAG_INDEX); attributeNode.Name = attributes[j].Description; categoryNode.Nodes.Add(attributeNode); } //Query ConditionNames string[] conditionNames = null; categories[i].QueryAeConditionNames(out conditionNames, executionOptions); for (int j = 0; j < conditionNames.Length; j++) { TreeNode conditionNameNode = new TreeNode(conditionNames[j], PROP_INDEX, PROP_INDEX); conditionNameNode.Name = conditionNames[j]; categoryNode.Nodes.Add(conditionNameNode); } } }
/// <summary> /// DaSubscription Properties /// </summary> /// <param name="subscription"></param> internal bool DaSubscription(DaSubscription subscription) { panelBottom.Visible = true; this.daItem = null; daSubscription = subscription; daSession = null; aeSubscription = null; aeSession = null; Helper.DataTypes dataTypeHelper = new DataTypes(); this.panelBottom.Visible = true; //DaSubscription Name Helper.CustomProperties propServiceColl = new DemoClient.Helper.CustomProperties(); Helper.CustomProperty customProperty = new DemoClient.Helper.CustomProperty("Name", "System.String", "General", null, daSubscription.Name); propServiceColl.Properties.Add(customProperty); //DaSubscription Update Rate customProperty = new DemoClient.Helper.CustomProperty("Update Rate(ms)", "System.String", "General", null, daSubscription.RequestedUpdateRate); propServiceColl.Properties.Add(customProperty); //DaSubscription Revised Update Rate customProperty = new DemoClient.Helper.CustomProperty("Revised Update Rate(ms)", "System.String", "General", null, daSubscription.RevisedUpdateRate); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //DaSubscription Deadband customProperty = new DemoClient.Helper.CustomProperty("Deadband", "System.String", "General", null, daSubscription.Deadband.ToString()); propServiceColl.Properties.Add(customProperty); //DaSubscription Time Bias customProperty = new DemoClient.Helper.CustomProperty("Time Bias(min)", "System.String", "General", null, daSubscription.TimeBias); propServiceColl.Properties.Add(customProperty); //DaSubscription Locale Id ServerStatus status; if (ResultCode.SUCCEEDED(daSubscription.DaSession.GetStatus(out status, null))) { LocaleId.SelectedItem = daSubscription.LocaleId; LocaleId.LocaleIdList = status.SupportedLcIds; customProperty = new DemoClient.Helper.CustomProperty("Locale Id", "System.String", "General", null, daSubscription.LocaleId, typeof(Helper.LCIDEditor), typeof(Helper.LCIDEditor)); } else { customProperty = new DemoClient.Helper.CustomProperty("Locale Id", "System.String", "General", null, daSubscription.LocaleId); } propServiceColl.Properties.Add(customProperty); //DaSubscription Revised Keep Alive Time customProperty = new DemoClient.Helper.CustomProperty("Keep Alive Time(ms)", "System.String", "General", null, daSubscription.RequestedKeepAliveTime); propServiceColl.Properties.Add(customProperty); customProperty = new DemoClient.Helper.CustomProperty("Revised Keep Alive Time(ms)", "System.String", "General", null, daSubscription.RevisedKeepAliveTime); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); this.propertyGrid.PropertySort = PropertySort.Categorized; this.propertyGrid.SelectedObject = propServiceColl; return(true); }
/// <summary> /// AeSession Properties /// </summary> /// <param name="session"></param> internal bool AeSession(AeSession session) { panelBottom.Visible = true; this.daItem = null; daSubscription = null; daSession = null; aeSubscription = null; aeSession = session; Helper.DataTypes dataTypeHelper = new DataTypes(); this.panelBottom.Visible = true; //AeSession URL Helper.CustomProperties propServiceColl = new DemoClient.Helper.CustomProperties(); Helper.CustomProperty customProperty = new DemoClient.Helper.CustomProperty("URL", "System.String", "General", null, aeSession.Url); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSession Locale Id ServerStatus status = null; if (ResultCode.SUCCEEDED(aeSession.GetStatus(out status, null))) { LocaleId.SelectedItem = aeSession.LocaleId; LocaleId.LocaleIdList = status.SupportedLcIds; customProperty = new DemoClient.Helper.CustomProperty("Locale Id", "System.String", "General", null, aeSession.LocaleId, typeof(Helper.LCIDEditor), typeof(Helper.LCIDEditor)); } else { customProperty = new DemoClient.Helper.CustomProperty("Locale Id", "System.String", "General", null, aeSession.LocaleId); } propServiceColl.Properties.Add(customProperty); //AeSession Client name customProperty = new DemoClient.Helper.CustomProperty("Client Name", "System.String", "General", null, aeSession.ClientName); propServiceColl.Properties.Add(customProperty); //AeSession Available filter criterias EnumFilterBy filters; if (ResultCode.SUCCEEDED(aeSession.QueryAvailableAeFilters(out filters, null))) { customProperty = new DemoClient.Helper.CustomProperty("Available Filter Criterias", "System.String", "General", null, GetFilter(filters)); } else { customProperty = new DemoClient.Helper.CustomProperty("Available Filter Criterias", "System.String", "General", null, ""); } customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSession Class Context EnumClassContext classContext = aeSession.ClassContext; customProperty = new DemoClient.Helper.CustomProperty("DCOM Class Context", typeof(EnumClassContext), "General", null, classContext); propServiceColl.Properties.Add(customProperty); if (status != null) { //AeSession Vendor info customProperty = new DemoClient.Helper.CustomProperty("Vendor Info", "System.String", "Status", null, status.VendorInfo); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSession Version customProperty = new DemoClient.Helper.CustomProperty("Version", "System.String", "Status", null, status.ProductVersion); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSession Start time customProperty = new DemoClient.Helper.CustomProperty("Start Time", "System.String", "Status", null, ValueConverter.DateTimeOptions(status.StartTime)); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSession Current time customProperty = new DemoClient.Helper.CustomProperty("Current Time", "System.String", "Status", null, ValueConverter.DateTimeOptions(status.CurrentTime)); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSession Last update time customProperty = new DemoClient.Helper.CustomProperty("Last Update Time", "System.String", "Status", null, ValueConverter.DateTimeOptions(status.LastUpdateTime)); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSession Status info customProperty = new DemoClient.Helper.CustomProperty("Status Info", "System.String", "Status", null, status.StatusInfo); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSession Server state customProperty = new DemoClient.Helper.CustomProperty("Server State", "System.String", "Status", null, status.State); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); } this.propertyGrid.PropertySort = PropertySort.Categorized; this.propertyGrid.SelectedObject = propServiceColl; return(true); }
/// <summary> /// Show DaItem Properties /// </summary> /// <param name="daItem"></param> internal bool DaItem(DaItem item) { panelBottom.Visible = true; this.daItem = item; daSubscription = null; daSession = null; aeSubscription = null; aeSession = null; Helper.DataTypes dataTypeHelper = new DataTypes(); this.panelBottom.Visible = true; //Item Id Helper.CustomProperties propServiceColl = new DemoClient.Helper.CustomProperties(); Helper.CustomProperty customProperty = new DemoClient.Helper.CustomProperty("Item Id", "System.String", "General", null, daItem.Id); propServiceColl.Properties.Add(customProperty); //Item Path customProperty = new DemoClient.Helper.CustomProperty("Item Path", "System.String", "General", null, daItem.Path); propServiceColl.Properties.Add(customProperty); //Requested Data Type string dataType = daItem.NativeDatatype.FullName; if (dataType.Contains("*")) { dataType = dataType.Remove(dataType.IndexOf('*')); } dataTypeHelper.Type = System.Type.GetType(dataType); customProperty = new DemoClient.Helper.CustomProperty("Requested Data Type", dataTypeHelper.RequiredDataTypes.Values.GetType().ToString(), "General", null, dataTypeHelper.NativeDataType, typeof(Helper.DataTypeEditor), typeof(Helper.DataTypeEditor)); propServiceColl.Properties.Add(customProperty); //Deadband customProperty = new DemoClient.Helper.CustomProperty("Deadband", "System.String", "General", null, daItem.Deadband.ToString()); propServiceColl.Properties.Add(customProperty); //Native Data Type customProperty = new DemoClient.Helper.CustomProperty("Native Data Type", "System.String", "General", null, dataTypeHelper.NativeDataType); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //Access Rights string strAccesRights = ""; switch (daItem.AccessRights) { case EnumAccessRights.READABLE: strAccesRights = "read"; break; case EnumAccessRights.READWRITEABLE: strAccesRights = "read and write"; break; case EnumAccessRights.WRITEABLE: strAccesRights = "write"; break; } customProperty = new DemoClient.Helper.CustomProperty("Acces Rights", "System.String", "General", null, strAccesRights); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //Engineering Units Type string strEUType = ""; switch (daItem.EUType) { case EnumEUType.ANALOG: strEUType = "analog"; break; case EnumEUType.ENUMERATED: strEUType = "enumerated"; break; case EnumEUType.NOENUM: strEUType = "no"; break; } customProperty = new DemoClient.Helper.CustomProperty("EU Type", "System.String", "General", null, strEUType); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //Engeneering Units Info string euInfo = ""; if (daItem.EUInfo != null) { euInfo = daItem.EUInfo.ToString(); } customProperty = new DemoClient.Helper.CustomProperty("EU Info", "System.String", "General", null, euInfo); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); this.propertyGrid.SelectedObject = propServiceColl; return(true); }
/// <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); } } } } }