Example #1
0
        /// <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;
            }
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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;
            }
        }
Example #4
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;
            }
        }
Example #6
0
 public virtual uint HandleHistoryEventReadRequest(
     object session,
     object readDetails,
     HistoryReadValueId id,
     ContinuationPointHistory continuationPoint,
     List <object[]> results)
 {
     return(2151677952);
 }
Example #7
0
        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);
        }
Example #8
0
            public ContinuationPointHistory(object Details, TimestampsToReturn ReturnTimes, HistoryReadValueId ReadId)
            {
                this.Details     = Details;
                this.ReturnTimes = ReturnTimes;
                this.ReadId      = ReadId;

                IsValid = false;
                Offset  = 0;
            }
Example #9
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);
                }
            }
        }
Example #11
0
        /// <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);
            }
        }
Example #13
0
        /// <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;
            }
        }
Example #14
0
        /// <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);
            }
        }
Example #16
0
        /// <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);
        }
Example #17
0
        /// <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);
        }
Example #18
0
        /// <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);
            }
        }
Example #19
0
        /// <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);
        }
Example #20
0
        /// <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();
        }
Example #21
0
            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);
            }
Example #22
0
        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();
        }
Example #23
0
 /// <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;
 }
Example #24
0
        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();
        }
Example #25
0
        /// <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;
        }
Example #28
0
        /// <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;
        }
Example #29
0
        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();
        }
Example #30
0
 /// <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;
 }
Example #31
0
        /// <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;
        }
Example #32
0
        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;
        }
Example #33
0
 /// <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;
 }
Example #34
0
 /// <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);
        }
Example #36
0
 /// <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;
 }
Example #37
0
        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();
        }