/// <summary> /// Releases any continuation points. /// </summary> private void ReleaseContinuationPoints() { if (m_details != null) { HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(m_nodeToRead); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; m_session.HistoryRead( null, new ExtensionObject(m_details), TimestampsToReturn.Neither, true, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); NextBTN.Visible = false; StopBTN.Enabled = false; GoBTN.Visible = true; m_details = null; m_nodeToRead = null; } }
/// <summary> /// Starts a new read operation. /// </summary> private void ReadFirst() { ResultsLV.ClearEventHistory(); // set up the request parameters. ReadEventDetails details = new ReadEventDetails(); details.StartTime = DateTime.MinValue; details.EndTime = DateTime.MinValue; details.NumValuesPerNode = 0; details.Filter = m_filter.GetFilter(); if (StartTimeCK.Checked) { details.StartTime = StartTimeDP.Value.ToUniversalTime(); } if (EndTimeCK.Checked) { details.EndTime = EndTimeDP.Value.ToUniversalTime(); } if (MaxReturnValuesCK.Checked) { details.NumValuesPerNode = (uint)MaxReturnValuesNP.Value; } // read the events from the server. HistoryReadValueId nodeToRead = new HistoryReadValueId(); nodeToRead.NodeId = m_areaId; ReadNext(details, nodeToRead); }
/// <summary> /// Gets the history for the attribute. /// </summary> public void GetHistoryResults( ISystemContext context, HistoryReadValueId nodeToRead, DataValueCollection values) { DataValue value = null; do { if (m_annotations == null || m_position >= m_annotations.Count) { break; } value = m_annotations[m_position++]; ApplyIndexRangeAndDataEncoding(context, nodeToRead.ParsedIndexRange, nodeToRead.DataEncoding, value); values.Add(value); if (values.Count == MaxReturnValues) { break; } }while (value != null); Completed = m_annotations == null || m_position >= m_annotations.Count; if (m_annotations != null && m_position > 0) { m_annotations.RemoveRange(0, m_position); m_position = 0; } }
/// <summary> /// Gets the history for the attribute. /// </summary> public void GetHistoryResults( ISystemContext context, HistoryReadValueId nodeToRead, DataValueCollection values) { DataValue value = null; do { value = NextValue( context, nodeToRead.ParsedIndexRange, nodeToRead.DataEncoding); if (value != null) { values.Add(value); if (MaxReturnValues > 0 && values.Count == MaxReturnValues) { break; } } }while (value != null); Completed = value == null; }
/// <summary> /// Releases the history continuation point. /// </summary> protected override void HistoryReleaseContinuationPoints( ServerSystemContext context, IList <HistoryReadValueId> nodesToRead, IList <ServiceResult> errors, List <NodeHandle> nodesToProcess, IDictionary <NodeId, NodeState> cache) { for (int ii = 0; ii < nodesToProcess.Count; ii++) { NodeHandle handle = nodesToProcess[ii]; HistoryReadValueId nodeToRead = nodesToRead[handle.Index]; // find the continuation point. HistoryReadRequest request = LoadContinuationPoint(context, nodeToRead.ContinuationPoint); if (request == null) { errors[handle.Index] = StatusCodes.BadContinuationPointInvalid; continue; } // all done. errors[handle.Index] = StatusCodes.Good; } }
public virtual uint HandleHistoryEventReadRequest( object session, object readDetails, HistoryReadValueId id, ContinuationPointHistory continuationPoint, List <object[]> results) { return(2151677952); }
public static Entry For(HistoryReadValueId readValueId) { ObjectEntry entry = new ObjectEntry(); entry.Add("NodeId", For(readValueId.NodeId)); entry.Add("IndexRange", For(readValueId.IndexRange)); entry.Add("DataEncoding", For(readValueId.DataEncoding)); return(entry); }
public ContinuationPointHistory(object Details, TimestampsToReturn ReturnTimes, HistoryReadValueId ReadId) { this.Details = Details; this.ReturnTimes = ReturnTimes; this.ReadId = ReadId; IsValid = false; Offset = 0; }
public virtual uint HandleHistoryReadRequest( object session, object readDetails, HistoryReadValueId id, ContinuationPointHistory continuationPoint, List <DataValue> results, ref int?offsetContinueFit) { return(2151677952); }
/// <summary> /// read History data /// </summary> /// <param name="tag">节点的索引</param> /// <param name="start">开始时间</param> /// <param name="end">结束时间</param> /// <param name="count">读取的个数</param> /// <param name="containBound">是否包含边界</param> /// <returns>读取的数据列表</returns> public IEnumerable <DataValue> ReadHistoryRawDataValues(string tag, DateTime start, DateTime end, uint count = 1, bool containBound = false) { HistoryReadValueId m_nodeToContinue = new HistoryReadValueId() { NodeId = new NodeId(tag), }; RequestHeader requestHeader = new RequestHeader(); ReadRawModifiedDetails m_details = new ReadRawModifiedDetails { StartTime = start.ToUniversalTime(), EndTime = end.ToUniversalTime(), NumValuesPerNode = count, IsReadModified = false, ReturnBounds = containBound }; HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(m_nodeToContinue); m_session.HistoryRead( requestHeader, new ExtensionObject(m_details), TimestampsToReturn.Both, false, nodesToRead, out HistoryReadResultCollection results, out DiagnosticInfoCollection diagnosticInfos); ClientBase.ValidateResponse(results, nodesToRead); ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); if (StatusCode.IsBad(results[0].StatusCode)) { throw new ServiceResultException(results[0].StatusCode); } if (results[0].HistoryData != null) { HistoryData values = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; foreach (var value in values.DataValues) { if (value.SourceTimestamp < m_details.StartTime || value.SourceTimestamp > m_details.EndTime) { var difference = (m_details.StartTime - value.SourceTimestamp).Hours; value.SourceTimestamp = value.SourceTimestamp.AddHours(difference); } yield return(value); } } }
/// <summary> /// Continues a read operation. /// </summary> private void ReadNext(ReadEventDetails details, HistoryReadValueId nodeToRead) { HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(nodeToRead); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; ResponseHeader responseHeader = m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Neither, false, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); if (StatusCode.IsBad(results[0].StatusCode)) { throw ServiceResultException.Create(results[0].StatusCode, 0, diagnosticInfos, responseHeader.StringTable); } // display results. HistoryEvent data = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryEvent; ResultsLV.AddEventHistory(data); // check if a continuation point exists. if (results[0].ContinuationPoint != null && results[0].ContinuationPoint.Length > 0) { nodeToRead.ContinuationPoint = results[0].ContinuationPoint; NextBTN.Visible = true; StopBTN.Enabled = true; GoBTN.Visible = false; m_details = details; m_nodeToRead = nodeToRead; } // all done. else { NextBTN.Visible = false; StopBTN.Enabled = false; GoBTN.Visible = true; m_details = null; m_nodeToRead = null; } }
public IEnumerable <DataValue> ReadHistoryProcessed(string tag, DateTime start, DateTime end, string aggregateFunction, double processingInterval, uint count = 1, bool containBound = false) { HistoryReadValueId m_nodeToContinue = new HistoryReadValueId() { NodeId = new NodeId(tag), }; AggregateConfiguration aggregate = new AggregateConfiguration(); NodeIdCollection aggregateTypes = new NodeIdCollection(); aggregateTypes.Add(new NodeId(aggregateFunction)); ReadProcessedDetails m_details = new ReadProcessedDetails { StartTime = start.ToUniversalTime(), EndTime = end.ToUniversalTime(), AggregateConfiguration = aggregate, AggregateType = aggregateTypes, ProcessingInterval = processingInterval, }; m_logger.Information("start {0}/end {0}", m_details.StartTime, m_details.EndTime); HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(m_nodeToContinue); m_session.HistoryRead( null, new ExtensionObject(m_details), TimestampsToReturn.Both, false, nodesToRead, out HistoryReadResultCollection results, out DiagnosticInfoCollection 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; foreach (var value in values.DataValues) { yield return(value); } }
/// <summary> /// Saves a continuation point for later use. /// </summary> private void SaveContinuationPoint(HistoryReadDetails details, HistoryReadValueId nodeToRead, byte[] continuationPoint) { // clear existing continuation point. if (m_nodeToContinue != null) { HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(m_nodeToContinue); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; m_session.HistoryRead( null, new ExtensionObject(m_details), TimestampsToReturn.Neither, true, nodesToRead, out results, out diagnosticInfos); ClientBase.ValidateResponse(results, nodesToRead); ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); } m_details = null; m_nodeToContinue = null; // save new continutation point. if (continuationPoint != null && continuationPoint.Length > 0) { m_details = details; m_nodeToContinue = nodeToRead; m_nodeToContinue.ContinuationPoint = continuationPoint; } // update controls. if (m_nodeToContinue != null) { GoBTN.Visible = false; NextBTN.Visible = true; NextBTN.Enabled = true; StopBTN.Enabled = true; } else { GoBTN.Visible = true; GoBTN.Enabled = true; NextBTN.Visible = false; StopBTN.Enabled = false; } }
/// <summary> /// Fetches the recent history. /// </summary> private void ReadHistory(ReadEventDetails details, NodeId areaId) { HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); HistoryReadValueId nodeToRead = new HistoryReadValueId(); nodeToRead.NodeId = areaId; nodesToRead.Add(nodeToRead); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Neither, 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); } HistoryEvent events = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryEvent; foreach (HistoryEventFieldList e in events.Events) { DisplayEvent(e.EventFields); } // release continuation points. if (results[0].ContinuationPoint != null && results[0].ContinuationPoint.Length > 0) { nodeToRead.ContinuationPoint = results[0].ContinuationPoint; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Neither, true, nodesToRead, out results, out diagnosticInfos); } }
/// <summary> /// 读取一连串的历史数据,并将其转化成指定的类型 /// </summary> /// <param name="tag">节点的索引</param> /// <param name="start">开始时间</param> /// <param name="end">结束时间</param> /// <param name="count">读取的个数</param> /// <param name="containBound">是否包含边界</param> /// <returns>读取的数据列表</returns> public IEnumerable <T> ReadHistoryRawDataValues <T>(string tag, DateTime start, DateTime end, uint count = 1, bool containBound = false) { HistoryReadValueId m_nodeToContinue = new HistoryReadValueId() { NodeId = new NodeId(tag), }; ReadRawModifiedDetails m_details = new ReadRawModifiedDetails { StartTime = start.ToUniversalTime(), EndTime = end.ToUniversalTime(), NumValuesPerNode = count, IsReadModified = false, ReturnBounds = containBound }; m_logger.Information("start {0}/end {0}", m_details.StartTime, m_details.EndTime); HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(m_nodeToContinue); m_session.HistoryRead( null, new ExtensionObject(m_details), TimestampsToReturn.Both, false, nodesToRead, out HistoryReadResultCollection results, out DiagnosticInfoCollection 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; m_logger.Information("values {0}", values); foreach (var value in values.DataValues) { yield return((T)value.Value); } }
/// <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> /// Fetches the recent history. /// </summary> private void ReadAtTime() { ReadAtTimeDetails details = new ReadAtTimeDetails(); // generate times DateTime startTime = StartTimeDP.Value.ToUniversalTime(); for (int ii = 0; ii < MaxReturnValuesNP.Value; ii++) { details.ReqTimes.Add(startTime.AddMilliseconds((double)(ii * TimeStepNP.Value))); } 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> /// read History data /// </summary> /// <param name="tag">节点的索引</param> /// <param name="start">开始时间</param> /// <param name="end">结束时间</param> /// <param name="count">读取的个数</param> /// <param name="containBound">是否包含边界</param> /// <returns>读取的数据列表</returns> public IEnumerable <DataValue> ReadHistoryRawDataValues(string tag, DateTime start, DateTime end, uint count = 1, bool containBound = false) { var m_nodeToContinue = new HistoryReadValueId() { NodeId = new NodeId(tag), }; var m_details = new ReadRawModifiedDetails { StartTime = start, EndTime = end, NumValuesPerNode = count, IsReadModified = false, ReturnBounds = containBound }; var nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(m_nodeToContinue); Session.HistoryRead( null, new ExtensionObject(m_details), TimestampsToReturn.Both, false, nodesToRead, out var results, out var diagnosticInfos); ClientBase.ValidateResponse(results, nodesToRead); ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); if (StatusCode.IsBad(results[0].StatusCode)) { throw new ServiceResultException(results[0].StatusCode); } var values = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; foreach (var value in values.DataValues) { yield return(value); } }
/// <summary> /// Fetches the recent history. /// </summary> private void ReadRaw(bool isReadModified) { ReadRawModifiedDetails details = new ReadRawModifiedDetails(); details.StartTime = (StartTimeCK.Checked)?StartTimeDP.Value.ToUniversalTime():DateTime.MinValue; details.EndTime = (EndTimeCK.Checked)?EndTimeDP.Value.ToUniversalTime():DateTime.MinValue; details.NumValuesPerNode = (MaxReturnValuesCK.Checked)?(uint)MaxReturnValuesNP.Value:0; details.IsReadModified = isReadModified; details.ReturnBounds = (isReadModified)?false:ReturnBoundsCK.Checked; 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>读取一连串的历史数据,并将其转化成指定的类型</summary> /// <param name="url">节点的索引</param> /// <param name="start">开始时间</param> /// <param name="end">结束时间</param> /// <param name="count">读取的个数</param> /// <param name="containBound">是否包含边界</param> /// <returns></returns> public IEnumerable <T> ReadHistoryRawDataValues <T>(string url, DateTime start, DateTime end, uint count = 1, bool containBound = false) { HistoryReadValueId m_nodeToContinue = new HistoryReadValueId() { NodeId = new NodeId(url) }; ReadRawModifiedDetails rawModifiedDetails = new ReadRawModifiedDetails(); rawModifiedDetails.StartTime = start.ToUniversalTime(); rawModifiedDetails.EndTime = end.ToUniversalTime(); rawModifiedDetails.NumValuesPerNode = count; int num1 = 0; rawModifiedDetails.IsReadModified = num1 != 0; int num2 = containBound ? 1 : 0; rawModifiedDetails.ReturnBounds = num2 != 0; ReadRawModifiedDetails m_details = rawModifiedDetails; HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(m_nodeToContinue); HistoryReadResultCollection results; DiagnosticInfoCollection diagnosticInfos; this.m_session.HistoryRead((RequestHeader)null, new ExtensionObject((object)m_details), TimestampsToReturn.Both, false, nodesToRead, out results, out diagnosticInfos); ClientBase.ValidateResponse((IList)results, (IList)nodesToRead); ClientBase.ValidateDiagnosticInfos(diagnosticInfos, (IList)nodesToRead); if (StatusCode.IsBad(results[0].StatusCode)) { throw new ServiceResultException((ServiceResult)results[0].StatusCode); } HistoryData values = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; foreach (DataValue dataValue in (List <DataValue>)values.DataValues) { DataValue value = dataValue; yield return((T)value.Value); value = (DataValue)null; } List <DataValue> .Enumerator enumerator = new List <DataValue> .Enumerator(); }
public override UInt32 HandleHistoryEventReadRequest(object session, object readDetails, HistoryReadValueId id, ContinuationPointHistory continuationPoint, List <object[]> results) { if (readDetails is ReadEventDetails) { var rd = readDetails as ReadEventDetails; var dt = rd.StartTime; for (int i = 0; i < 5; i++) { var ev = GenerateSampleAlarmEvent(dt); results.Add(NetDispatcher.MatchFilterClauses(rd.SelectClauses, ev)); dt = dt.AddMinutes(1); } return((UInt32)StatusCode.Good); } return((UInt32)StatusCode.BadHistoryOperationUnsupported); }
private void ReleaseContinuationPoints() { ReadRawModifiedDetails details = new ReadRawModifiedDetails(); HistoryReadValueId nodeToRead = new HistoryReadValueId(); nodeToRead.NodeId = m_nodeId; if (m_result != null) { nodeToRead.ContinuationPoint = m_result.ContinuationPoint; } HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(nodeToRead); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Source, true, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); m_result = null; ShowResults(); }
/// <summary> /// Initializes a new instance of the <see cref="HdaHistoryReadRawModifiedRequest"/> class. /// </summary> /// <param name="itemId">The item id.</param> /// <param name="details">The details.</param> /// <param name="nodeToRead">The node to read.</param> public HdaHistoryReadAtTimeRequest(string itemId, ReadAtTimeDetails details, HistoryReadValueId nodeToRead) : base(itemId, details, nodeToRead) { ReqTimes = details.ReqTimes; }
private void ReadRaw(bool isReadModified) { ReadRawModifiedDetails details = new ReadRawModifiedDetails(); details.StartTime = DateTime.MinValue; details.EndTime = DateTime.MinValue; details.IsReadModified = isReadModified; details.NumValuesPerNode = 0; details.ReturnBounds = ReturnBoundsCK.Checked; if (StartTimeCK.Checked) { details.StartTime = StartTimeDP.Value.ToUniversalTime(); } if (EndTimeCK.Checked) { details.EndTime = EndTimeDP.Value.ToUniversalTime(); } if (MaxReturnValuesCK.Checked) { details.NumValuesPerNode = (uint)MaxReturnValuesNP.Value; } HistoryReadValueId nodeToRead = new HistoryReadValueId(); nodeToRead.NodeId = m_nodeId; if (m_result != null) { nodeToRead.ContinuationPoint = m_result.ContinuationPoint; } HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(nodeToRead); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Source, false, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); if (StatusCode.IsBad(results[0].StatusCode)) { throw new ServiceResultException(results[0].StatusCode); } m_result = results[0]; ShowResults(); }
/// <summary> /// Reads the last date in the archive (truncates milliseconds and converts to local). /// </summary> private DateTime ReadLastDate() { ReadRawModifiedDetails details = new ReadRawModifiedDetails(); details.StartTime = DateTime.MinValue; details.EndTime = DateTime.UtcNow.AddDays(1); details.NumValuesPerNode = 1; details.IsReadModified = false; details.ReturnBounds = false; HistoryReadValueId nodeToRead = new HistoryReadValueId(); nodeToRead.NodeId = m_nodeId; HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(nodeToRead); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Source, false, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); if (StatusCode.IsBad(results[0].StatusCode)) { return(DateTime.MinValue); } HistoryData data = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; if (results == null) { return(DateTime.MinValue); } DateTime endTime = data.DataValues[0].SourceTimestamp; if (results[0].ContinuationPoint != null && results[0].ContinuationPoint.Length > 0) { nodeToRead.ContinuationPoint = results[0].ContinuationPoint; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Source, true, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); } endTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, endTime.Hour, endTime.Minute, endTime.Second, 0, DateTimeKind.Utc); endTime = endTime.AddSeconds(1); endTime = endTime.ToLocalTime(); return(endTime); }
/// <summary> /// Reads the history for the variable value. /// </summary> protected virtual ServiceResult HistoryReadAtTime( ISystemContext context, BaseVariableState source, ReadAtTimeDetails details, TimestampsToReturn timestampsToReturn, bool releaseContinuationPoints, HistoryReadValueId nodeToRead, HistoryReadResult result) { return StatusCodes.BadHistoryOperationUnsupported; }
/// <summary> /// Reads the history for a single node which has already been validated. /// </summary> protected virtual ServiceResult HistoryRead( ISystemContext context, NodeState source, HistoryReadDetails details, TimestampsToReturn timestampsToReturn, bool releaseContinuationPoints, HistoryReadValueId nodesToRead, HistoryReadResult result) { // check for variable. BaseVariableState variable = source as BaseVariableState; if (variable == null) { return StatusCodes.BadHistoryOperationUnsupported; } // check for access. lock (Lock) { if ((variable.AccessLevel & AccessLevels.HistoryRead) == 0) { return StatusCodes.BadNotReadable; } } // handle read raw. ReadRawModifiedDetails readRawDetails = details as ReadRawModifiedDetails; if (readRawDetails != null) { return HistoryReadRaw( context, variable, readRawDetails, timestampsToReturn, releaseContinuationPoints, nodesToRead, result); } // handle read processed. ReadProcessedDetails readProcessedDetails = details as ReadProcessedDetails; if (readProcessedDetails != null) { return HistoryReadProcessed( context, variable, readProcessedDetails, timestampsToReturn, releaseContinuationPoints, nodesToRead, result); } // handle read processed. ReadAtTimeDetails readAtTimeDetails = details as ReadAtTimeDetails; if (readAtTimeDetails != null) { return HistoryReadAtTime( context, variable, readAtTimeDetails, timestampsToReturn, releaseContinuationPoints, nodesToRead, result); } return StatusCodes.BadHistoryOperationUnsupported; }
/// <summary> /// Initializes a new instance of the <see cref="HdaHistoryReadProcessedRequest"/> class. /// </summary> /// <param name="itemId">The item id.</param> /// <param name="aggregateId">The aggregate id.</param> /// <param name="details">The details.</param> /// <param name="nodeToRead">The node to read.</param> public HdaHistoryReadProcessedRequest(string itemId, uint aggregateId, ReadProcessedDetails details, HistoryReadValueId nodeToRead) : base(itemId, details, nodeToRead) { StartTime = details.StartTime; EndTime = details.EndTime; ResampleInterval = (long)details.ProcessingInterval; m_aggregateId = aggregateId; }
private void ReadProcessed() { ReadProcessedDetails details = new ReadProcessedDetails(); details.StartTime = StartTimeDP.Value.ToUniversalTime(); details.EndTime = EndTimeDP.Value.ToUniversalTime(); details.ProcessingInterval = (double)ResampleIntervalNP.Value; NodeId aggregateId = null; switch ((string)AggregateCB.SelectedItem) { case BrowseNames.AggregateFunction_Interpolative: { aggregateId = ObjectIds.AggregateFunction_Interpolative; break; } case BrowseNames.AggregateFunction_TimeAverage: { aggregateId = ObjectIds.AggregateFunction_TimeAverage; break; } case BrowseNames.AggregateFunction_Average: { aggregateId = ObjectIds.AggregateFunction_Average; break; } case BrowseNames.AggregateFunction_Count: { aggregateId = ObjectIds.AggregateFunction_Count; break; } case BrowseNames.AggregateFunction_Maximum: { aggregateId = ObjectIds.AggregateFunction_Maximum; break; } case BrowseNames.AggregateFunction_Minimum: { aggregateId = ObjectIds.AggregateFunction_Minimum; break; } case BrowseNames.AggregateFunction_Total: { aggregateId = ObjectIds.AggregateFunction_Total; break; } } details.AggregateType.Add(aggregateId); HistoryReadValueId nodeToRead = new HistoryReadValueId(); nodeToRead.NodeId = m_nodeId; if (m_result != null) { nodeToRead.ContinuationPoint = m_result.ContinuationPoint; } HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(nodeToRead); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Source, false, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); if (StatusCode.IsBad(results[0].StatusCode)) { throw new ServiceResultException(results[0].StatusCode); } m_result = results[0]; ShowResults(); }
/// <summary> /// Initializes a new instance of the <see cref="HdaHistoryReadRawModifiedRequest"/> class. /// </summary> /// <param name="itemId">The item id.</param> /// <param name="details">The details.</param> /// <param name="nodeToRead">The node to read.</param> public HdaHistoryReadAnnotationRequest(string itemId, ReadRawModifiedDetails details, HistoryReadValueId nodeToRead) : base(itemId, details, nodeToRead) { MaxReturnValues = (int)details.NumValuesPerNode; }
/// <summary> /// Reads the next batch of values from the server. /// </summary> private bool ReadNext( Session session, ExtensionObject details, List<HdaReadRequest> requests, bool releaseContinuationPoints) { // get the value. HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); for (int ii = 0; ii < requests.Count; ii++) { HdaReadRequest request = requests[ii]; if (request.IsComplete || request.Error < 0) { continue; } if (NodeId.IsNull(request.NodeId)) { request.Error = ResultIds.S_NODATA; continue; } HistoryReadValueId nodeToRead = new HistoryReadValueId(); nodeToRead.NodeId = request.NodeId; nodeToRead.ContinuationPoint = request.ContinuationPoint; nodeToRead.Handle = request; nodesToRead.Add(nodeToRead); } // check if something to do. if (nodesToRead.Count == 0) { return false; } HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; session.HistoryRead( null, details, TimestampsToReturn.Source, releaseContinuationPoints, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); // check if nothing more to do. if (releaseContinuationPoints) { return false; } // process results. bool continuationPoints = false; for (int ii = 0; ii < nodesToRead.Count; ii++) { HdaReadRequest request = (HdaReadRequest)nodesToRead[ii].Handle; if (request.Values == null) { request.Values = new List<DaValue>(); } request.Error = ProcessReadResults( session, results[ii], request.AttributeId, request.Values, request.ModificationInfos); request.ContinuationPoint = results[ii].ContinuationPoint; // check if continuation point provided. if (request.ContinuationPoint != null && request.ContinuationPoint.Length > 0) { request.Error = ResultIds.S_MOREDATA; continuationPoints = true; } else { request.IsComplete = true; } } return continuationPoints; }
private DateTime ReadFirstDate() { ReadRawModifiedDetails details = new ReadRawModifiedDetails(); details.StartTime = new DateTime(1970, 1, 1); details.EndTime = DateTime.UtcNow.AddDays(1); details.IsReadModified = false; details.NumValuesPerNode = 1; details.ReturnBounds = false; HistoryReadValueId nodeToRead = new HistoryReadValueId(); nodeToRead.NodeId = m_nodeId; HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); nodesToRead.Add(nodeToRead); HistoryReadResultCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Source, false, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); if (StatusCode.IsBad(results[0].StatusCode)) { return DateTime.MinValue; } HistoryData data = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; if (results == null) { return DateTime.MinValue; } DateTime startTime = data.DataValues[0].SourceTimestamp; if (results[0].ContinuationPoint != null && results[0].ContinuationPoint.Length > 0) { nodeToRead.ContinuationPoint = results[0].ContinuationPoint; m_session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Source, true, nodesToRead, out results, out diagnosticInfos); Session.ValidateResponse(results, nodesToRead); Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); } return startTime; }
/// <summary> /// Initializes a new instance of the <see cref="HdaHistoryReadRawModifiedRequest"/> class. /// </summary> /// <param name="itemId">The item id.</param> /// <param name="details">The details.</param> /// <param name="nodeToRead">The node to read.</param> public HdaHistoryReadRawModifiedRequest(string itemId, ReadRawModifiedDetails details, HistoryReadValueId nodeToRead) : base(itemId, details, nodeToRead) { StartTime = details.StartTime; EndTime = details.EndTime; MaxReturnValues = (int)details.NumValuesPerNode; ReturnBounds = details.ReturnBounds; IsReadModified = details.IsReadModified; }
/// <summary> /// Initializes a new instance of the <see cref="HdaHistoryReadRequest"/> class. /// </summary> /// <param name="itemId">The item id.</param> /// <param name="details">The details.</param> /// <param name="nodeToRead">The node to read.</param> public HdaHistoryReadRequest(string itemId, HistoryReadDetails details, HistoryReadValueId nodeToRead) { ItemId = itemId; IndexRange = nodeToRead.ParsedIndexRange; DataEncoding = nodeToRead.DataEncoding; }
/// <summary> /// Reads the raw data for a variable /// </summary> protected ServiceResult HistoryReadRaw( ISystemContext context, BaseVariableState source, ReadRawModifiedDetails details, TimestampsToReturn timestampsToReturn, bool releaseContinuationPoints, HistoryReadValueId nodeToRead, HistoryReadResult result) { ServerSystemContext serverContext = context as ServerSystemContext; HistoryDataReader reader = null; HistoryData data = new HistoryData(); if (nodeToRead.ContinuationPoint != null && nodeToRead.ContinuationPoint.Length > 0) { // restore the continuation point. reader = RestoreDataReader(serverContext, nodeToRead.ContinuationPoint); if (reader == null) { return(StatusCodes.BadContinuationPointInvalid); } // node id must match previous node id. if (reader.VariableId != nodeToRead.NodeId) { Utils.SilentDispose(reader); return(StatusCodes.BadContinuationPointInvalid); } // check if releasing continuation points. if (releaseContinuationPoints) { Utils.SilentDispose(reader); return(ServiceResult.Good); } } else { // get the source for the variable. IHistoryDataSource datasource = null; ServiceResult error = GetHistoryDataSource(serverContext, source, out datasource); if (ServiceResult.IsBad(error)) { return(error); } // create a reader. reader = new HistoryDataReader(nodeToRead.NodeId, datasource); // start reading. reader.BeginReadRaw( serverContext, details, timestampsToReturn, nodeToRead.ParsedIndexRange, nodeToRead.DataEncoding, data.DataValues); } // continue reading data until done or max values reached. bool complete = reader.NextReadRaw( serverContext, timestampsToReturn, nodeToRead.ParsedIndexRange, nodeToRead.DataEncoding, data.DataValues); // save continuation point. if (!complete) { SaveDataReader(serverContext, reader); result.StatusCode = StatusCodes.GoodMoreData; } // return the dat. result.HistoryData = new ExtensionObject(data); return(result.StatusCode); }
/// <summary> /// Initializes a new instance of the <see cref="HdaHistoryReadRawModifiedRequest"/> class. /// </summary> /// <param name="itemId">The item id.</param> /// <param name="attributeId">The attribute id.</param> /// <param name="details">The details.</param> /// <param name="nodeToRead">The node to read.</param> public HdaHistoryReadAttributeRequest(string itemId, uint attributeId, ReadRawModifiedDetails details, HistoryReadValueId nodeToRead) : base(itemId, details, nodeToRead) { MaxReturnValues = (int)details.NumValuesPerNode; m_attributeId = attributeId; }