本文整理汇总了C#中Resolution.GetInterval方法的典型用法代码示例。如果您正苦于以下问题:C# Resolution.GetInterval方法的具体用法?C# Resolution.GetInterval怎么用?C# Resolution.GetInterval使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Resolution
的用法示例。
在下文中一共展示了Resolution.GetInterval方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetContiguousDataRegions
/// <summary>
/// Read historian data from server.
/// </summary>
/// <param name="connection">openHistorian connection.</param>
/// <param name="startTime">Start time of query.</param>
/// <param name="stopTime">Stop time of query.</param>
/// <param name="measurementID">Measurement ID to test for data continuity.</param>
/// <param name="resolution">Resolution for testing data.</param>
/// <param name="expectedFullResolutionTicks">Expected number of ticks per interval at full resolution, e.g., 33,333 = 1/30 of a second representing a sampling interval of 30 times per second.</param>
/// <returns>Enumeration of valid data ranges for specified time range.</returns>
/// <remarks>
/// 1 tick = 100 nanoseconds.
/// </remarks>
public static IEnumerable<Tuple<DateTime, DateTime>> GetContiguousDataRegions(Connection connection, DateTime startTime, DateTime stopTime, ulong measurementID, Resolution resolution, long expectedFullResolutionTicks = 333333)
{
// Setup time-range and point ID selections
SeekFilterBase<HistorianKey> timeFilter;
MatchFilterBase<HistorianKey, HistorianValue> pointFilter = PointIdMatchFilter.CreateFromPointID<HistorianKey, HistorianValue>(measurementID);
HistorianKey key = new HistorianKey();
HistorianValue value = new HistorianValue();
TimeSpan interval, tolerance;
// Set data scan resolution
if (resolution == Resolution.Full)
{
interval = new TimeSpan(expectedFullResolutionTicks);
timeFilter = TimestampSeekFilter.CreateFromRange<HistorianKey>(startTime, stopTime);
}
else
{
interval = resolution.GetInterval();
timeFilter = TimestampSeekFilter.CreateFromIntervalData<HistorianKey>(startTime, stopTime, interval, new TimeSpan(TimeSpan.TicksPerMillisecond));
}
// PMUs times may float a little - provide a one millisecond tolerance window above the standard interval
tolerance = interval.Add(TimeSpan.FromMilliseconds(1.0D));
DateTime lastStartTime = startTime;
DateTime lastStopTime = startTime;
DateTime nextExpectedTime = startTime;
DateTime currentTime;
long totalRegions = 0;
// Start stream reader for the provided time window and selected points
using (Database database = connection.OpenDatabase())
{
TreeStream<HistorianKey, HistorianValue> stream = database.Read(SortedTreeEngineReaderOptions.Default, timeFilter, pointFilter);
// Scan historian stream for given point over specified time range and data resolution
while (stream.Read(key, value))
{
currentTime = key.TimestampAsDate;
// See if current time was not expected time and gap is larger than resolution tolerance - could simply
// be user started with a time that was not aligned with desired resolution, hence the tolerance check
if (currentTime != nextExpectedTime && currentTime - nextExpectedTime > tolerance)
{
if (lastStartTime != lastStopTime)
{
// Detected a data gap, return last contiguous region
totalRegions++;
yield return new Tuple<DateTime, DateTime>(lastStartTime, lastStopTime);
}
// Move start time to current value
lastStartTime = currentTime;
lastStopTime = lastStartTime;
nextExpectedTime = lastStartTime + interval;
}
else
{
// Setup next expected timestamp
nextExpectedTime += interval;
lastStopTime = currentTime;
}
}
// If no data gaps were detected, return a single value for full region for where there was data
if (totalRegions == 0 && lastStartTime != lastStopTime)
yield return new Tuple<DateTime, DateTime>(lastStartTime, lastStopTime);
}
}
示例2: GetHistorianData
/// <summary>
/// Read historian data from server.
/// </summary>
/// <param name="connection">openHistorian connection.</param>
/// <param name="startTime">Start time of query.</param>
/// <param name="stopTime">Stop time of query.</param>
/// <param name="measurementIDs">Comma separated list of measurement IDs to query - or <c>null</c> for all available points.</param>
/// <param name="resolution">Resolution for data query.</param>
/// <returns>Enumeration of <see cref="IMeasurement"/> values read for time range.</returns>
/// <example>
/// <code>
/// using (var connection = new Connection("127.0.0.1", "PPA"))
/// foreach(var measurement in GetHistorianData(connection, DateTime.UtcNow.AddMinutes(-1.0D), DateTime.UtcNow))
/// Console.WriteLine("{0}:{1} @ {2} = {3}, quality: {4}", measurement.Key.Source, measurement.Key.ID, measurement.Timestamp, measurement.Value, measurement.StateFlags);
/// </code>
/// </example>
public static IEnumerable<IMeasurement> GetHistorianData(Connection connection, DateTime startTime, DateTime stopTime, string measurementIDs = null, Resolution resolution = Resolution.Full)
{
SeekFilterBase<HistorianKey> timeFilter;
MatchFilterBase<HistorianKey, HistorianValue> pointFilter = null;
HistorianKey key = new HistorianKey();
HistorianValue value = new HistorianValue();
// Set data scan resolution
if (resolution == Resolution.Full)
timeFilter = TimestampSeekFilter.CreateFromRange<HistorianKey>(startTime, stopTime);
else
timeFilter = TimestampSeekFilter.CreateFromIntervalData<HistorianKey>(startTime, stopTime, resolution.GetInterval(), new TimeSpan(TimeSpan.TicksPerMillisecond));
// Setup point ID selections
if (!string.IsNullOrEmpty(measurementIDs))
pointFilter = PointIdMatchFilter.CreateFromList<HistorianKey, HistorianValue>(measurementIDs.Split(',').Select(ulong.Parse));
// Start stream reader for the provided time window and selected points
using (Database database = connection.OpenDatabase())
{
TreeStream<HistorianKey, HistorianValue> stream = database.Read(SortedTreeEngineReaderOptions.Default, timeFilter, pointFilter);
while (stream.Read(key, value))
yield return new Measurement()
{
Metadata = MeasurementKey.LookUpOrCreate(connection.InstanceName, (uint)key.PointID).Metadata,
Timestamp = key.TimestampAsDate,
Value = value.AsSingle,
StateFlags = (MeasurementStateFlags)value.Value3
};
}
}
示例3: GetHistorianData
/// <summary>
/// Read historian data from server.
/// </summary>
/// <param name="connection">openHistorian connection.</param>
/// <param name="startTime">Start time of query.</param>
/// <param name="stopTime">Stop time of query.</param>
/// <param name="measurementIDs">Array of measurement IDs to query - or <c>null</c> for all available points.</param>
/// <param name="resolution">Resolution for data query.</param>
/// <returns>Enumeration of <see cref="IMeasurement"/> values read for time range.</returns>
/// <example>
/// <code>
/// using (var connection = new Connection("127.0.0.1", "PPA"))
/// foreach(var measurement in GetHistorianData(connection, DateTime.UtcNow.AddMinutes(-1.0D), DateTime.UtcNow))
/// Console.WriteLine("{0}:{1} @ {2} = {3}, quality: {4}", measurement.Key.Source, measurement.Key.ID, measurement.Timestamp, measurement.Value, measurement.StateFlags);
/// </code>
/// </example>
public static IEnumerable<IMeasurement> GetHistorianData(Connection connection, DateTime startTime, DateTime stopTime, IEnumerable<ulong> measurementIDs = null, Resolution resolution = Resolution.Full)
{
SeekFilterBase<HistorianKey> timeFilter;
MatchFilterBase<HistorianKey, HistorianValue> pointFilter = null;
HistorianKey key = new HistorianKey();
HistorianValue value = new HistorianValue();
// Set data scan resolution
if (resolution == Resolution.Full)
{
timeFilter = TimestampSeekFilter.CreateFromRange<HistorianKey>(startTime, stopTime);
}
else
{
TimeSpan resolutionInterval = resolution.GetInterval();
BaselineTimeInterval interval = BaselineTimeInterval.Second;
if (resolutionInterval.Ticks < Ticks.PerMinute)
interval = BaselineTimeInterval.Second;
else if (resolutionInterval.Ticks < Ticks.PerHour)
interval = BaselineTimeInterval.Minute;
else if (resolutionInterval.Ticks == Ticks.PerHour)
interval = BaselineTimeInterval.Hour;
startTime = startTime.BaselinedTimestamp(interval);
stopTime = stopTime.BaselinedTimestamp(interval);
timeFilter = TimestampSeekFilter.CreateFromIntervalData<HistorianKey>(startTime, stopTime, resolutionInterval, new TimeSpan(TimeSpan.TicksPerMillisecond));
}
// Setup point ID selections
if ((object)measurementIDs != null)
pointFilter = PointIdMatchFilter.CreateFromList<HistorianKey, HistorianValue>(measurementIDs);
// Start stream reader for the provided time window and selected points
using (Database database = connection.OpenDatabase())
{
TreeStream<HistorianKey, HistorianValue> stream = database.Read(SortedTreeEngineReaderOptions.Default, timeFilter, pointFilter);
while (stream.Read(key, value))
yield return new Measurement()
{
Metadata = MeasurementKey.LookUpOrCreate(connection.InstanceName, (uint)key.PointID).Metadata,
Timestamp = key.TimestampAsDate,
Value = value.AsSingle,
StateFlags = (MeasurementStateFlags)value.Value3
};
}
}
示例4: GetHistorianData
/// <summary>
/// Read historian data from server.
/// </summary>
/// <param name="database">Client database to use for query.</param>
/// <param name="startTime">Start time of query.</param>
/// <param name="stopTime">Stop time of query.</param>
/// <param name="measurementIDs">Measurement IDs to query - or <c>null</c> for all available points.</param>
/// <param name="resolution">Resolution for data query.</param>
/// <param name="seriesLimit">Maximum number of points per series.</param>
/// <param name="forceLimit">Flag that determines if series limit should be strictly enforced.</param>
/// <param name="cancellationToken">Cancellation token for query.</param>
/// <returns>Enumeration of <see cref="TrendValue"/> instances read for time range.</returns>
public static IEnumerable<TrendValue> GetHistorianData(ClientDatabaseBase<HistorianKey, HistorianValue> database, DateTime startTime, DateTime stopTime, ulong[] measurementIDs, Resolution resolution, int seriesLimit, bool forceLimit, ICancellationToken cancellationToken = null)
{
if ((object)cancellationToken == null)
cancellationToken = new CancellationToken();
if ((object)database == null)
yield break;
TimeSpan resolutionInterval = resolution.GetInterval();
SeekFilterBase<HistorianKey> timeFilter;
MatchFilterBase<HistorianKey, HistorianValue> pointFilter = null;
HistorianKey key = new HistorianKey();
HistorianValue value = new HistorianValue();
// Set data scan resolution
if (resolution == Resolution.Full)
{
timeFilter = TimestampSeekFilter.CreateFromRange<HistorianKey>(startTime, stopTime);
}
else
{
BaselineTimeInterval interval = BaselineTimeInterval.Second;
if (resolutionInterval.Ticks < Ticks.PerMinute)
interval = BaselineTimeInterval.Second;
else if (resolutionInterval.Ticks < Ticks.PerHour)
interval = BaselineTimeInterval.Minute;
else if (resolutionInterval.Ticks == Ticks.PerHour)
interval = BaselineTimeInterval.Hour;
startTime = startTime.BaselinedTimestamp(interval);
stopTime = stopTime.BaselinedTimestamp(interval);
timeFilter = TimestampSeekFilter.CreateFromIntervalData<HistorianKey>(startTime, stopTime, resolutionInterval, new TimeSpan(TimeSpan.TicksPerMillisecond));
}
Dictionary<ulong, DataRow> metadata = null;
LocalOutputAdapter historianAdapter;
if (LocalOutputAdapter.Instances.TryGetValue(database.Info?.DatabaseName ?? DefaultInstanceName, out historianAdapter))
metadata = historianAdapter?.Measurements;
if ((object)metadata == null)
yield break;
// Setup point ID selections
if ((object)measurementIDs != null)
pointFilter = PointIdMatchFilter.CreateFromList<HistorianKey, HistorianValue>(measurementIDs);
else
measurementIDs = metadata.Keys.ToArray();
// Start stream reader for the provided time window and selected points
Dictionary<ulong, long> pointCounts = new Dictionary<ulong, long>(measurementIDs.Length);
Dictionary<ulong, long> intervals = new Dictionary<ulong, long>(measurementIDs.Length);
Dictionary<ulong, ulong> lastTimes = new Dictionary<ulong, ulong>(measurementIDs.Length);
double range = (stopTime - startTime).TotalSeconds;
ulong pointID, timestamp, resolutionSpan = (ulong)resolutionInterval.Ticks, baseTicks = (ulong)UnixTimeTag.BaseTicks.Value;
long pointCount;
DataRow row;
if (resolutionSpan <= 1UL)
resolutionSpan = Ticks.PerSecond;
if (seriesLimit < 1)
seriesLimit = 1;
// Estimate total measurement counts per point so decimation intervals for each series can be calculated
foreach (ulong measurementID in measurementIDs)
{
if (resolution == Resolution.Full)
pointCounts[measurementID] = metadata.TryGetValue(measurementID, out row) ? (long)(int.Parse(row["FramesPerSecond"].ToString()) * range) : 2;
else
pointCounts[measurementID] = (long)(range / resolutionInterval.TotalSeconds.NotZero(1.0D));
}
foreach (ulong measurementID in pointCounts.Keys)
intervals[measurementID] = (pointCounts[measurementID] / seriesLimit).NotZero(1L);
lock (database)
{
TreeStream<HistorianKey, HistorianValue> stream = database.Read(SortedTreeEngineReaderOptions.Default, timeFilter, pointFilter);
while (stream.Read(key, value) && !cancellationToken.IsCancelled)
{
pointID = key.PointID;
timestamp = key.Timestamp;
pointCount = pointCounts[pointID];
//.........这里部分代码省略.........