/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; }