跳到主要内容

ReadProcessed (聚合)

最强大的 HistoryRead 模式, 配合标准聚合函数. 给区间 + 聚合函数 + 子区间宽度, 服务端返回每个子区间的聚合结果.

前置 / 配套

签名

public IReadOnlyList<DataValue> History.ReadProcessed(
string nodeId,
DateTime startTime,
DateTime endTime,
string aggregateNodeId,
double processingIntervalMs);

标准聚合函数 NodeId (ns=0)

NodeId名称含义
i=2342Average算术平均
i=2343TimeAverage时间加权平均
i=2344Total累计总和
i=2346Minimum最小值
i=2347Maximum最大值
i=2348MinimumActualTime最小值出现时间
i=2349MaximumActualTime最大值出现时间
i=2350RangeMax − Min
i=2352Count点数
i=2355NumberOfTransitions状态变化次数
i=2341Interpolative插值

完整列表见 OPC UA 聚合函数标准.


用法

24 小时温度的每小时平均

var values = ua.History.ReadProcessed(
nodeId: "ns=2;s=Temperature",
startTime: DateTime.UtcNow.Date.AddDays(-1),
endTime: DateTime.UtcNow.Date,
aggregateNodeId: "i=2342" /* Average */,
processingIntervalMs: 3_600_000 /* 1 hour */);
// 返回 24 个 DataValue, 每个是该小时的平均值

一周每天的最大温度

var maxes = ua.History.ReadProcessed("ns=2;s=Temperature",
startTime: today.AddDays(-7), endTime: today,
aggregateNodeId: "i=2347" /* Maximum */,
processingIntervalMs: 86_400_000 /* 1 day */);

一小时累计流量

var totals = ua.History.ReadProcessed("ns=2;s=FlowRate",
startTime: now.AddHours(-1), endTime: now,
aggregateNodeId: "i=2344" /* Total */,
processingIntervalMs: 3_600_000);

性能优势

  • 避免拉百万点原始数据再客户端算
  • 服务端常对历史数据建索引, 聚合极快
  • 跨日 / 跨周报表的标准方案

服务端要求

  • Historian 必须实现该聚合函数 (服务端 ServerCapabilities/AggregateFunctions 列出支持的)
  • 不支持的聚合返回 BadAggregateNotSupported

下一步