跳到主要内容

HistoryUpdate

往服务端 Historian 写入数据 (而不是当前 Read / Write 操作的"实时值"):

高敏感操作

HistoryUpdate 多数生产 Server 默认禁止, 需要管理员明确开启 + 合规审计. 详见服务端要求.

签名

public IReadOnlyList<StatusCode> History.UpdateData(
string nodeId,
IReadOnlyList<DataValue> values,
HistoryUpdateType type = HistoryUpdateType.InsertReplace);

HistoryUpdateType

含义
Insert仅当时间点不存在才插入
Replace仅当时间点存在才替换
UpdateInsert + Replace 任一适用 (默认)
Remove删除该时间点

用法

补录历史数据

var dvs = new[]
{
new DataValue(new Variant(25.3), StatusCode.Good, sourceTimestamp: ts1),
new DataValue(new Variant(25.7), StatusCode.Good, sourceTimestamp: ts2),
new DataValue(new Variant(26.1), StatusCode.Good, sourceTimestamp: ts3),
};
var results = ua.History.UpdateData("ns=2;s=Temperature", dvs);

仅插入 (不覆盖已有)

ua.History.UpdateData("ns=2;s=Temperature", dvs, HistoryUpdateType.Insert);

InsertAnnotation

OPC UA 还支持给历史点加注释:

ua.History.InsertAnnotation("ns=2;s=Temperature",
timestamp: ts,
annotation: new Annotation("传感器校准", DateTime.UtcNow, "operator1"));

权限要求

  • 节点 AccessLevel bit 8 (HistoryWrite) 必须置位
  • 用户必须有 HistoryUpdate 权限
  • 大多数生产 Server 默认禁止, 需要管理员明确开启

错误码

错误码含义
BadHistoryOperationInvalid该节点不支持 HistoryUpdate
BadUserAccessDenied无权限
BadEntryExists(Insert 模式) 该时间点已存在
BadNoEntryExists(Replace / Remove 模式) 该时间点不存在

下一步