跳到主要内容

read_history_modified

如果服务端允许 HistoryUpdate (修改历史), 数据可能被改过. read_history_modified 拉到所有版本及修改记录, 用于审计 / 法规合规.

前置 / 配套

签名

pub fn Session::read_history_modified(
&self,
node_id: &str,
start: SystemTime,
end: SystemTime,
max_values: u32,
return_bounds: bool,
) -> Result<Vec<DataValue>, OpcUaError>;
参数说明
node_id目标 NodeId
start / endUTC 区间
max_values上限, 0 = 不限
return_boundstrue = 返回区间边界点 (插值/最近值); false = 只返区间内的

返回值

Vec<DataValue>. 每个 DataValue 含修改记录的完整 Variant + Status + Timestamp. 当前 SDK 把修改记录按时间序列扁平返回 — 同一个 source_timestamp 上可能出现多条 (原始 + 修改后) DataValue, 客户端按需排序去重.


用法

use std::time::{Duration, SystemTime};

let now = SystemTime::now();
let yesterday = now - Duration::from_secs(86400);
let modified = s.read_history_modified(
"ns=2;s=Temperature",
yesterday, now,
/*max*/ 0, /*bounds*/ true,
)?;

for m in &modified {
println!("{:?}: {:?} ({})",
m.source_timestamp(), m.variant(), m.status());
}

何时用

  • 法规合规: GMP / FDA 21 CFR Part 11 等要求"数据可追溯"
  • 审计日志: 谁动了关键参数
  • 数据修复回滚: 知道改之前的值是什么

服务端要求

  • 必须实现 HistoryUpdate
  • 必须保留修改历史 (而不是直接覆盖)
  • 用户身份必须正确传递 (Username / Certificate Token)

错误

StatusCode原因
BAD_HISTORY_OPERATION_UNSUPPORTED服务端不支持 ReadModified
BAD_NOT_READABLE节点无 HistoryRead 权限

与 ReadRaw 的差别

API返回
read_history每个时间点最新版本 (覆盖前的看不到)
read_history_modified每个时间点所有版本 + 修改记录

下一步