HistoryUpdate
往服务端 Historian 写入数据 (而不是当前 Read / Write 操作的"实时值"):
高敏感操作
HistoryUpdate 多数生产 Server 默认禁止, 需要管理员明确开启 + 合规审计. 详见服务端要求.
签名
public IReadOnlyList<StatusCode> History.UpdateData(
string nodeId,
IReadOnlyList<DataValue> values,
HistoryUpdateType type = HistoryUpdateType.InsertReplace);
HistoryUpdateType
| 值 | 含义 |
|---|---|
Insert | 仅当时间点不存在才插入 |
Replace | 仅当时间点存在才替换 |
Update | Insert + 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 模式) 该时间点不存在 |