跳到主要内容

ReadAtTime

给一组离散时间点, 服务端按 "前一个 / 后一个 / 线性插值" 算法返回那个时刻的值. 用于"对齐时序":

前置 / 配套

签名

public IReadOnlyList<DataValue> History.ReadAtTime(
string nodeId,
IReadOnlyList<DateTime> times,
bool useSimpleBounds = true);
参数说明
nodeId目标 NodeId
times离散时间点列表 (UTC)
useSimpleBoundstrue = 阶梯型 (用 ≤ t 的最近点); false = 线性插值

用法

// 拉过去 24 小时, 每整点的温度
var hours = Enumerable.Range(0, 25)
.Select(h => DateTime.UtcNow.Date.AddHours(h))
.ToList();
var values = ua.History.ReadAtTime("ns=2;s=Temperature", hours);
for (int i = 0; i < hours.Count; i++)
Console.WriteLine($"{hours[i]:HH:mm}: {values[i].Value}");

与 ReadProcessed 的区别

API返回
ReadAtTime每个时间点对应一个内插值 (不聚合)
ReadProcessed每个子区间一个聚合值 (Avg / Min / Max / ...)

例 "拉 24 小时, 每小时一个值":

  • ReadAtTime: 输入 25 个整点, 返回 25 个内插点 (每个整点的值, 可能是相邻原始点的线性插值)
  • ReadProcessed: aggregate=Average, interval=1 h, 返回 24 个区间的平均值

应用场景

  • 时序对齐: 不同传感器采样时间不同, 要拉到同一时刻才能比较
  • 数据库导出: 整点抽样
  • 报表: 每天 24 行

下一步