跳到主要内容

趋势数据自存储

Zeus 点表只保存每个点的当前快照,不再内置采样历史、历史文件存储或图表样本缓存。趋势图、报表、审计和长期留存由业务层决定数据结构、容量、落盘位置和清理策略。

订阅采集变化​

单点趋势可以订阅 Changed:

var samples = new List<(DateTimeOffset Timestamp, double Value)>();

points.Changed += (_, e) =>
{
if (e.Current.Definition.Name != "temperature" || e.Current.Error is not null)
{
return;
}

if (e.Current.Value is IConvertible value && e.Current.UpdatedAt is { } timestamp)
{
samples.Add((timestamp, Convert.ToDouble(value, CultureInfo.InvariantCulture)));
}
};

整表或多点趋势建议订阅 BatchChanged,在一轮采集结束后统一追加,避免图表或数据库被每个点单独刷新:

points.BatchChanged += (_, e) =>
{
foreach (var change in e.Changes)
{
var snapshot = change.Current;
if (snapshot.Error is not null || snapshot.UpdatedAt is null)
{
continue;
}

// 写入数据库、JSONL、CSV、时序库,或推给图表控件。
SaveSample(snapshot);
}
};

桌面界面​

WinForms 继续使用控件绑定显示当前值、报警色、写回按钮状态:

points.BindText("temperature", temperatureLabel, value => $"{value:0.0} C");
points.BindAlarmBackColor("temperature", temperatureLabel);

WPF 继续在 ViewModel 中暴露当前值绑定源:

Temperature = points.AsBindingSource("temperature", dispatcher, value => $"{value:0.0} C");

当前值 Label 继续逐点绑定。趋势曲线、多点报表请订内核的 BatchChanged,不要每个点变化都追加一次序列。这与用不用桌面绑定源无关。对照见 点表与采集。

如果页面需要趋势曲线,ViewModel 自己维护 ObservableCollection 或图表库需要的序列,并在 BatchChanged 中按 e.Changes 追加点。Zeus 不绑定具体图表库,也不替业务决定历史容量。

持久化建议​

  • 短期曲线:内存环形队列或图表控件自己的序列。
  • 报表留存:CSV、JSONL、SQLite、SQL Server、InfluxDB 等由应用直接写入。
  • 审计数据:把点名、时间戳、值、报警状态和错误信息作为明确字段保存。
  • 容量清理:按业务要求做保留天数、最大行数或分区归档。

下一步:需要显示当前值和报警色看 WinForms 适配器 或 WPF 适配器。