Stores information about an HDA read request.
Exemple #1
0
        /// <summary>
        /// Creates the read requests.
        /// </summary>
        private List<HdaReadRequest> CreateReadRequests(
            Session session,
            DateTime startTime,
            DateTime endTime,
            uint numValues,
            bool returnBounds,
            int[] serverHandles,
            ReadRawModifiedDetails details)
        {
            // start time or end time must be specified.
            if (startTime == DateTime.MinValue && endTime == DateTime.MinValue)
            {
                throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
            }

            // num values must be specified if start or end time is missing.
            if (numValues == 0 && (startTime == DateTime.MinValue || endTime == DateTime.MinValue))
            {
                throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
            }

            // can't exceed the limits imposed by the server configuration.
            if (m_configuration.MaxReturnValues > 0 && numValues > m_configuration.MaxReturnValues)
            {
                throw ComUtils.CreateComException(ResultIds.E_MAXEXCEEDED);
            }
            
            details.StartTime = startTime;
            details.EndTime = endTime;
            details.IsReadModified = false;
            details.NumValuesPerNode = numValues;
            details.ReturnBounds = returnBounds;

            // build the list of requests.
            List<HdaReadRequest> requests = new List<HdaReadRequest>();

            for (int ii = 0; ii < serverHandles.Length; ii++)
            {
                HdaReadRequest request = new HdaReadRequest();
                requests.Add(request);

                // look up server handle.
                request.Handle = m_itemManager.LookupHandle(serverHandles[ii]);

                if (request.Handle == null)
                {
                    request.Error = ResultIds.E_INVALIDHANDLE;
                    continue;
                }

                // initialize request.
                request.NodeId = request.Handle.NodeId;
                request.ClientHandle = request.Handle.ClientHandle;
            }

            return requests;
        }
Exemple #2
0
        /// <summary>
        /// Creates the read requests.
        /// </summary>
        private List<HdaReadRequest> CreateReadRequests(
            Session session,
            DateTime startTime,
            DateTime endTime,
            int serverHandle, 
            uint[] attributeIds, 
            ReadRawModifiedDetails details)
        {
            if (startTime == DateTime.MinValue)
            {
                throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
            }

            // check for the special case where current values are requested.
            if (endTime == DateTime.MinValue && startTime.AddSeconds(10) < DateTime.UtcNow)
            {
                throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
            }

            // specify the parameters for the request.
            details.StartTime = startTime;
            details.EndTime = endTime;
            details.IsReadModified = false;
            details.NumValuesPerNode = 0;
            details.ReturnBounds = true;
            
            // look up server handle.
            HdaItemHandle handle = m_itemManager.LookupHandle(serverHandle);

            if (handle == null)
            {
                throw ComUtils.CreateComException(ResultIds.E_INVALIDHANDLE);
            }
            
            // get the node ids for the requested attributes.
            NodeId[] nodeIds = null;
            
            int[] errors = m_itemManager.GetAttributeHistoryNodeIds(
                session, 
                handle, 
                attributeIds,
                out nodeIds);

            // build the list of requests.
            List<HdaReadRequest> requests = new List<HdaReadRequest>();

            for (int ii = 0; ii < attributeIds.Length; ii++)
            {
                HdaReadRequest request = new HdaReadRequest();
                requests.Add(request);

                // initialize request.
                request.Handle = handle;
                request.AttributeId = attributeIds[ii];

                if (request.Handle == null)
                {
                    request.Error = ResultIds.E_INVALIDHANDLE;
                    continue;
                }

                request.ClientHandle = request.Handle.ClientHandle;
                
                // check for errors.
                if (errors[ii] != ResultIds.S_OK)
                {
                    request.Error = errors[ii];
                    request.IsComplete = true;
                    continue;
                }

                request.NodeId = nodeIds[ii];
            }

            return requests;
        }
Exemple #3
0
        /// <summary>
        /// Creates the read requests.
        /// </summary>
        private List<HdaReadRequest> CreateReadRequests(
            Session session,
            DateTime[] timestamps,
            int[] serverHandles, 
            ReadAtTimeDetails details)
        {
            if (m_configuration.MaxReturnValues > 0 && timestamps.Length > m_configuration.MaxReturnValues)
            {
                throw ComUtils.CreateComException(ResultIds.E_MAXEXCEEDED);
            }

            details.ReqTimes.AddRange(timestamps);

            // build the list of requests.
            List<HdaReadRequest> requests = new List<HdaReadRequest>();

            for (int ii = 0; ii < serverHandles.Length; ii++)
            {
                HdaReadRequest request = new HdaReadRequest();
                requests.Add(request);

                // look up server handle.
                request.Handle = m_itemManager.LookupHandle(serverHandles[ii]);

                if (request.Handle == null)
                {
                    request.Error = ResultIds.E_INVALIDHANDLE;
                    continue;
                }
                
                // set node id to use.
                request.NodeId = request.Handle.NodeId;
                request.ClientHandle = request.Handle.ClientHandle;
            }

            return requests;
        }
Exemple #4
0
        /// <summary>
        /// Creates the read requests.
        /// </summary>
        private List<HdaReadRequest> CreateReadRequests(
            Session session,
            DateTime startTime,
            DateTime endTime,
            int[] serverHandles, 
            ReadRawModifiedDetails details)
        {
            if (startTime == DateTime.MinValue || endTime == DateTime.MinValue)
            {
                throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
            }

            // specify the parameters for the request.
            details.StartTime = startTime;
            details.EndTime = endTime;
            details.IsReadModified = false;
            details.NumValuesPerNode = 0;
            details.ReturnBounds = false;

            // build the list of requests.
            List<HdaReadRequest> requests = new List<HdaReadRequest>();

            for (int ii = 0; ii < serverHandles.Length; ii++)
            {
                HdaReadRequest request = new HdaReadRequest();
                requests.Add(request);

                // initialize request.
                request.AttributeId = INTERNAL_ATTRIBUTE_ANNOTATION;
                
                // look up server handle.
                request.Handle = m_itemManager.LookupHandle(serverHandles[ii]);

                if (request.Handle == null)
                {
                    request.Error = ResultIds.E_INVALIDHANDLE;
                    continue;
                }

                request.ClientHandle = request.Handle.ClientHandle;
                
                // look up annotation property.
                NodeId annotationsId = m_itemManager.GetAnnotationsPropertyNodeId(session, request.Handle);

                if (NodeId.IsNull(annotationsId))
                {
                    request.Error = ResultIds.S_NODATA;
                    continue;
                }

                // set node id.
                request.NodeId = annotationsId;
            }

            return requests;
        }
Exemple #5
0
        /// <summary>
        /// Creates the read requests.
        /// </summary>
        private List<HdaReadRequest> CreateReadRequests(
            Session session,
            DateTime startTime,
            DateTime endTime,
            double resampleInterval,
            int[] serverHandles, 
            uint[] aggregateIds,
            ReadProcessedDetails details)
        {
            // start time or end time must be specified.
            if (startTime == DateTime.MinValue || endTime == DateTime.MinValue || startTime == endTime || resampleInterval < 0)
            {
                throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
            }

            // check the number of intervals.
            if (m_configuration.MaxReturnValues > 0 && resampleInterval != 0)
            {
                long range = Math.Abs(((endTime - startTime).Ticks));

                if (range/(TimeSpan.TicksPerMillisecond*resampleInterval) > m_configuration.MaxReturnValues)
                {
                    throw ComUtils.CreateComException(ResultIds.E_MAXEXCEEDED);
                }
            }
            
            details.StartTime = startTime;
            details.EndTime = endTime;
            details.ProcessingInterval = resampleInterval;

            // build the list of requests.
            List<HdaReadRequest> requests = new List<HdaReadRequest>();

            for (int ii = 0; ii < serverHandles.Length; ii++)
            {
                HdaReadRequest request = new HdaReadRequest();
                requests.Add(request);

                // initialize request.
                request.AggregateId = aggregateIds[ii];

                // look up server handle.
                request.Handle = m_itemManager.LookupHandle(serverHandles[ii]);

                if (request.Handle == null)
                {
                    request.Error = ResultIds.E_INVALIDHANDLE;
                    continue;
                }
                
                // set node id to use.
                request.NodeId = request.Handle.NodeId;
                request.ClientHandle = request.Handle.ClientHandle;

                // check aggregate.
                NodeId aggregateId = ComUtils.GetHdaAggregateId(aggregateIds[ii]);

                if (aggregateId == null)
                {
                    aggregateId = m_mapper.GetRemoteIntegerIdMapping(Opc.Ua.BrowseNames.AggregateFunctions, aggregateIds[ii]);
                }

                if (aggregateId == null)
                {
                    request.Error = ResultIds.E_NOT_AVAIL;
                    continue;
                }

                details.AggregateType.Add(aggregateId);
            }

            return requests;
        }