/// <summary> /// Changes the session. /// </summary> public void ChangeSession(Session session, bool fetchRecent) { if (Object.ReferenceEquals(session, m_session)) { return; } if (m_session != null) { DeleteSubscription(); m_session = null; } m_session = session; m_dataset.Clear(); LeftPN.Enabled = m_session != null; if (m_session != null) { AggregateCB.Items.Clear(); AggregateCB.Items.Add(new AvailableAggregate() { NodeId = null, DisplayName = "None" }); AggregateCB.SelectedIndex = 0; ILocalNode node = m_session.NodeCache.Find(ObjectIds.Server_ServerCapabilities_AggregateFunctions) as ILocalNode; if (node != null) { foreach (IReference reference in node.References.Find(ReferenceTypeIds.HierarchicalReferences, false, true, m_session.TypeTree)) { ILocalNode aggregate = m_session.NodeCache.Find(reference.TargetId) as ILocalNode; if (aggregate != null || aggregate.TypeDefinitionId == ObjectTypeIds.AggregateFunctionType) { AvailableAggregate item = new AvailableAggregate(); item.NodeId = aggregate.NodeId; item.DisplayName = m_session.NodeCache.GetDisplayText(aggregate); AggregateCB.Items.Add(item); } } AggregateCB.SelectedIndex = 1; } SubscriptionStateChanged(); } }
/// <summary> /// Fetches the recent history. /// </summary> private void ReadProcessed() { AvailableAggregate aggregate = (AvailableAggregate)AggregateCB.SelectedItem; ReadProcessedDetails details = new ReadProcessedDetails(); details.StartTime = StartTimeDP.Value.ToUniversalTime(); details.EndTime = EndTimeDP.Value.ToUniversalTime(); details.ProcessingInterval = (double)ResampleIntervalNP.Value; details.AggregateType.Add(aggregate.NodeId); details.AggregateConfiguration.UseServerCapabilitiesDefaults = true; HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); HistoryReadValueId nodeToRead = new HistoryReadValueId(); nodeToRead.NodeId = m_nodeId; nodesToRead.Add(nodeToRead); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Both, false, nodesToRead, out results, out diagnosticInfos); ClientBase.ValidateResponse(results, nodesToRead); ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); if (StatusCode.IsBad(results[0].StatusCode)) { throw new ServiceResultException(results[0].StatusCode); } HistoryData values = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; DisplayResults(values); // save any continuation point. SaveContinuationPoint(details, nodeToRead, results[0].ContinuationPoint); }
/// <summary> /// Changes the session. /// </summary> public void ChangeSession(Session session) { if (Object.ReferenceEquals(session, m_session)) { return; } if (m_session != null) { DeleteSubscription(); RemoveSession(session); m_session = null; SessionCB.Items.Clear(); } if (session == null) { return; } AddSession(session); m_session = session; m_dataset.Clear(); LeftPN.Enabled = m_session != null; if (m_session != null) { AggregateCB.Items.Clear(); ILocalNode node = m_session.NodeCache.Find(ObjectIds.Server_ServerCapabilities_AggregateFunctions) as ILocalNode; if (node != null) { foreach (IReference reference in node.References.Find(ReferenceTypeIds.HierarchicalReferences, false, true, m_session.TypeTree)) { ILocalNode aggregate = m_session.NodeCache.Find(reference.TargetId) as ILocalNode; if (aggregate != null || aggregate.TypeDefinitionId == ObjectTypeIds.AggregateFunctionType) { AvailableAggregate item = new AvailableAggregate(); item.NodeId = aggregate.NodeId; item.DisplayName = m_session.NodeCache.GetDisplayText(aggregate); AggregateCB.Items.Add(item); } } if (AggregateCB.Items.Count == 0) { AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_Interpolative, DisplayName = BrowseNames.AggregateFunction_Interpolative }); AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_Average, DisplayName = BrowseNames.AggregateFunction_Average }); AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_TimeAverage, DisplayName = BrowseNames.AggregateFunction_TimeAverage }); AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_Total, DisplayName = BrowseNames.AggregateFunction_Total }); AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_Count, DisplayName = BrowseNames.AggregateFunction_Count }); } if (AggregateCB.Items.Count > 0) { AggregateCB.SelectedIndex = 0; } } SubscriptionStateChanged(); } }