docs(#655): history is server-side only; rewrite OPC-009 and stale driver-history references
Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
@@ -125,14 +125,16 @@ The server shall expose the OPC UA alarm and condition model backed by each driv
|
||||
|
||||
## OPC-009: Historical Access
|
||||
|
||||
The server shall surface OPC UA Historical Access (HA) via each driver's `IHistoryProvider` (where implemented).
|
||||
The server shall surface OPC UA Historical Access (HA) through a single server-wide historian data source (`IHistorianDataSource`, backed by the HistorianGateway). Drivers carry no history capability (Gitea #655).
|
||||
|
||||
### Acceptance Criteria
|
||||
|
||||
- `HistoryRead` for `Raw`, `Processed`, `AtTime`, and `Events` dispatches through `CapabilityInvoker.InvokeAsync(DriverCapability.HistoryRead, …)`.
|
||||
- Drivers implementing `IHistoryProvider` today: Galaxy (Wonderware Historian), OPC UA Client (proxy to remote historian).
|
||||
- Drivers not implementing `IHistoryProvider` return `Bad_HistoryOperationUnsupported` for history requests on their nodes.
|
||||
- History reads require the `Read` permission bit on the target node.
|
||||
- `HistoryRead` for `Raw`, `Processed` (the Part 13 aggregates the backend serves), and `AtTime` over historized variable nodes, and for `Events` over alarm-owning equipment-folder event notifiers, is served by the registered `IHistorianDataSource`. It is not dispatched to a driver and does not pass through `CapabilityInvoker`.
|
||||
- A variable is historized by `isHistorized` in its `TagConfig` (optionally `historianTagname`); such nodes carry the `HistoryRead` access bit and `Historizing = true`. A node without it answers `Bad_HistoryOperationUnsupported`.
|
||||
- With `ServerHistorian:Enabled = false` (the `NullHistorianDataSource`), historized nodes return `GoodNoData`, never an error.
|
||||
- A per-node backend failure surfaces as a Bad status for that node only (`Bad_Timeout` past the request deadline, `Bad_AggregateNotSupported` for an aggregate the backend cannot serve); it does not fail the batch.
|
||||
- When `Security:Acl:Enabled` is true, each node requires the `HistoryRead` permission (`Bad_UserAccessDenied` otherwise). With the flag off, history reads are ungated for any admitted session.
|
||||
- An OPC UA Client driver does not proxy its upstream server's history; `isHistorized` on its tags records the value into the historian.
|
||||
|
||||
---
|
||||
|
||||
@@ -250,7 +252,7 @@ The server shall expose standard OPC UA `Server` object nodes required by the sp
|
||||
### Acceptance Criteria
|
||||
|
||||
- `ServerStatus` / `ServerState` / `CurrentTime` / `StartTime` populated and compliant with the OPC UA 1.05 spec.
|
||||
- `ServerCapabilities` declares historical access capabilities for namespaces that have an `IHistoryProvider`-backed driver.
|
||||
- `ServerCapabilities` declares historical access capabilities consistent with the server-wide historian data source.
|
||||
- `ServerRedundancy.RedundancySupport` reflects the cluster's redundancy mode (`None` / `Warm` / `Hot`).
|
||||
- `ServerRedundancy.ServerUriArray` lists both cluster members' `ApplicationUri` values.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user