ReadEvents
如果服务端记录事件历史 (HistoryRead Events), 客户端可以按时间区间拉历史事件.
配套
- 实时事件订阅请用 事件订阅.
- 历史变量数据请用 ReadRaw / ReadProcessed.
签名
public IReadOnlyList<EventFieldList> History.ReadEvents(
string eventNotifierNodeId, // 通常 i=2253 Server
DateTime startTime,
DateTime endTime,
uint maxValues = 0,
EventFilter filter = null);
EventFieldList
服务端返回的每条事件是一组字段值, 字段名由 EventFilter 决定. 如果不传 filter, SDK 默认拉常用字段 (Severity / Message / SourceName / Time / EventType).
用法
var events = ua.History.ReadEvents("i=2253",
startTime: now.AddDays(-1),
endTime: now);
foreach (var e in events)
{
Console.WriteLine($"[{e.Severity}] {e.SourceName}: {e.Message} @ {e.Time}");
}
自定义 EventFilter
如果想过滤 EventType / Severity, 构造 EventFilter (后续 SDK 版本将提供高级 builder API).
var filter = new EventFilter()
.SelectFields(new[] { "Severity", "Message", "SourceName", "Time" })
.WhereSeverityAtLeast(500);
var events = ua.History.ReadEvents("i=2253", from, to, filter: filter);
服务端要求
- 必须支持 HistoryRead Events (服务端 ServerCapabilities 标志位)
- 事件源节点必须有 EventNotifier Attribute (12) bit 1 (HistoryRead) 置位
与实时事件订阅的关系
| API | 拿什么 |
|---|---|
SubscribeEvents(...) | 实时事件 (订阅期间发生的) |
History.ReadEvents(...) | 历史事件 (服务端归档的) |
通常组合用: 启动时 ReadEvents 拉过去 24 小时, 然后 SubscribeEvents 接管实时.