跳到主要内容

ReadHistory (Raw)

public IReadOnlyList<DataValue> ReadHistory(
string nodeId,
DateTime startTime,
DateTime endTime,
uint maxValues = 0);

最常用的历史读, 返回 [startTime, endTime] 区间内全部原始数据点.

前置 / 配套

参数

参数默认说明
nodeId目标 NodeId
startTime区间起 (UTC)
endTime区间止 (UTC)
maxValues0 (不限)单次返回上限

用法

var dvs = ua.ReadHistory("ns=2;s=Temperature",
startTime: DateTime.UtcNow.AddHours(-1),
endTime: DateTime.UtcNow,
maxValues: 1000);

foreach (var dv in dvs) using (dv)
Console.WriteLine($"{dv.SourceTimestamp:O}: {dv.Value} ({dv.Status})");

异常

异常含义
OpcUaException(BadHistoryOperationUnsupported)服务端无 Historian
OpcUaException(BadNotReadable)节点无 HistoryRead 权限
OpcUaException(BadCommunicationError)网络故障

ContinuationPoint 处理 (内部)

如果数据量大, 服务端可能分多次返回 (ContinuationPoint). SDK 内部已自动循环 BrowseNext 等价的 HistoryReadNext, 客户端拿到的是合并后的完整列表.


性能与最佳实践

  • 高频数据 (1000 Hz+) 拉一天 = 86 M+ 点 → 必须用 maxValues 限制或改用 ReadProcessed 聚合

  • DataValue 列表里每个元素都是 IDisposable, 建议:

    foreach (var dv in dvs) using (dv) { /* 用完即释放 */ }
  • 时间戳一律 UTC, 不要传本地时间

下一步