diff --git a/docs/Historian.md b/docs/Historian.md index ae1568b3..5b7fb1c2 100644 --- a/docs/Historian.md +++ b/docs/Historian.md @@ -273,6 +273,22 @@ for this node), which is the signal to check that `ServerHistorian:Enabled=true` > so a HistoryRead on it runs to the full `CallTimeout` (~30 s) before erroring. Auto-provisioning on deploy > keeps freshly-historized tags from hitting that slow path. See the `CallTimeout` row above. +### Deferred types and the UInt16 fallback (#600 item 4) + +Historization is **numeric-analog only** in v1. `HistorianTypeMapper` classifies exactly nine types as +historizable (`Boolean`, `Int16/32/64`, `UInt16/32/64`, `Float32`, `Float64`): + +- **Deferred: `String`, `DateTime`, `Reference`.** The historian's SQL analog write path cannot carry them. + Provisioning skips them (counted in the `skipped=` tally, via `IsHistorizable`), the mapper throws + `NotSupportedException` for them, and `ContinuousHistorizationRecorder` drops their values and counts them + in `DroppedNonNumeric`. A tag authored `isHistorized` with one of these types therefore silently records + nothing; HistoryRead on it returns whatever the historian holds (typically `GoodNoData`). +- **Fallback: `UInt16 -> Uint4`.** The historian's `UInt2` write path is unproven upstream, so UInt16 tags + are provisioned as the wider `UInt4`. Values are unaffected; only the historian-side storage type differs. + (`Boolean -> Int2` is the other fallback, below.) + +Lifting either needs gateway-side support first; neither is scheduled. + ### Boolean historization maps to Int2 (issue #441) `EnsureTags` is contract-documented (HistorianGateway 0.2.0+) as an **upsert** — *"creates or updates