Files
wwtools/histdb/04-retrieval-options.md
T
Joseph Doherty 32f26272ae Initial commit: Wonderware / System Platform tools and reference
Five tools under one repo, all docs organized per DOCS-GUIDE.md:

- aalogcli: .NET 4.8 / x86 CliFx CLI for reading System Platform binary
  logs (*.aaLGX) for LLM debugging, built on aaOpenSource/aaLog. Commands:
  last, tail, range, unread, fields. Stable JSON envelope under --llm-json.
  Build template under lib/build/ for rebuilding aaLogReader.dll.

- aot: ArchestrA Object Toolkit 2014 v4.0 reference material. Dev guide
  (Markdown converted from CHM), API reference for the ArchestrA.Toolkit
  namespace, and the Monitor / Watchdog VS sample solutions.

- graccesscli: .NET 4.8 / x86 CliFx CLI that automates Galaxy
  configuration via the ArchestrA GRAccess COM interop. Includes session
  daemon, IPC protocol, and llm-json envelope contract.

- grdb: SQL/DDL exploration of the Galaxy Repository database. DDL
  captures, reusable queries, hierarchy / contained-name <-> tag-name
  translation notes.

- histdb: LLM-oriented reference for AVEVA Historian retrieval. INSQL
  linked-server, extension tables, every wwXxx time-domain extension,
  every retrieval mode, alarm/event SQL recipes, REST API. Distilled
  from the 243-page Historian Retrieval Guide.

Root contains:
- CLAUDE.md: thin index pointing into each tool's README.
- DOCS-GUIDE.md: doctrine for organizing docs for LLM consumption.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 18:22:20 -04:00

9.2 KiB
Raw Blame History

Retrieval options (the rest of the wwXxx parameters)

wwRetrievalMode picks the algorithm; everything below tunes it. Set in the WHERE clause exactly like wwRetrievalMode. Each is case-insensitive. None can be supplied via IN or OR.

Which option applies to which mode

(Selecting the most-asked questions; consult the source PDF table on pp. 89-90 for the full grid.)

Option Cyclic Delta Full Interpolated BestFit Average Min Max Integral Slope Counter ValueState RoundTrip
wwCycleCount (limit)
wwResolution
wwTimeDeadband
wwValueDeadband
wwVersion
wwInterpolationType
wwTimeStampRule
wwQualityRule
wwStateCalc
wwFilter (analog filter) where applicable
wwValueSelector (summary tags)
wwTimeZone everywhere
wwEdgeDetection

wwCycleCount — number of cycles

AND wwCycleCount = 60   -- give me 60 evenly-spaced cycles across the window

For "truly cyclic" modes (Cyclic, Interpolated, Average, Integral) you get one row per tag per cycle. Other modes use cycles for grouping but may emit zero, one, or many rows per cycle.

For Delta / Full, wwCycleCount acts as a limit on the first N matching rows instead of a cycle count.

wwCycleCount and wwResolution are mutually exclusive intents — set one. If neither is set, the default cycle count is 100.

wwResolution — cycle length in milliseconds

AND wwResolution = 60000   -- 60-second cycles

number_of_cycles = window_length / wwResolution. Use this when "every minute" matters more than "100 evenly-spaced points." See "Phantom cycles" in the source PDF (p. 95) for what happens at the boundary edges.

wwTimeDeadband — suppress fast changes (Delta only)

Milliseconds. Within wwTimeDeadband of the most recently returned point, further changes are dropped. The deadband resets every time a point is emitted.

AND wwRetrievalMode = 'Delta' AND wwTimeDeadband = 10000   -- ≤1 sample / 10 s

wwValueDeadband — suppress small changes (Delta only)

Percent of the tag's engineering-unit full-scale. Drops changes smaller than the deadband from the previously returned point. Quality changes always force a row out, regardless of deadband.

AND wwRetrievalMode = 'Delta' AND wwValueDeadband = 1.0   -- 1% of full scale

wwVersion — original vs. latest stored value

AND wwVersion = 'Latest'    -- default; honors any post-write corrections
AND wwVersion = 'Original'  -- as captured at write time

Latest values that have been overwritten carry QualityDetail = 202. Applies to every retrieval mode.

wwInterpolationType

AND wwInterpolationType = 'Linear'    -- override per-query
AND wwInterpolationType = 'StairStep'

Resolution order: query-level wwInterpolationType > per-tag AnalogTag.InterpolationType > system parameters InterpolationTypeInteger / InterpolationTypeReal. The output column also reports the type that was actually applied per row (LINEAR or STAIRSTEP).

wwTimeStampRule — which end of the cycle owns the timestamp

AND wwTimeStampRule = 'START'   -- default; row stamped at cycle start
AND wwTimeStampRule = 'END'     -- row stamped at cycle end

Affects the DateTime column in cyclic-flavored modes. Cycle-start time is also exposed via the read-only StartDateTime column for diagnostic purposes (cannot be used in WHERE — see 02-syntax-limits.md).

wwTimeZone — return data in a different zone

Accepts any value from the TimeZone.TimeZone column. The TimeZone table is rebuilt at every server start from the OS's registered zones, so it picks up custom zones automatically. DST is corrected against the server OS; there is no client-side zone option.

AND wwTimeZone = 'Eastern Standard Time'

If unset, the server's local zone is used. For UTC-only output use wwTimeZone = 'UTC'.

wwQualityRule — how to combine quality

When combining multiple stored points into one cycle output (any cyclic mode plus Average, Min, Max, etc.), this controls how individual qualities collapse into a single output quality:

  • Good (default for most cyclic modes) — output is Good only if every contributing point was Good.
  • Extended — propagate worst quality with extra detail bits.
  • Other rule names per source PDF p. 111. Eight worked queries on pp. 113-118.

Cyclic, Full, Delta, Min, Max, BestFit do not combine qualities — wwQualityRule is silently ignored for those.

wwStateCalcValueState / RoundTrip aggregation

For ValueState:

  • Minimum — shortest time in each unique state.
  • Maximum — longest time in each unique state.
  • Average — average time in each unique state.
  • Total — total time in each unique state.
  • Percent — total time as a percentage of cycle length.

For RoundTrip, only the *Contained variants are valid: MinContained, MaxContained, AvgContained, TotalContained, PercentContained. The "contained" forms only count fully-contained intervals — partial intervals at cycle boundaries are excluded, which matters for slow-changing tags vs. long cycles. The non-contained calculations have arbitrary cycle-boundary effects that can produce non-intuitive results for slow tags over long cycles.

wwFilter — analog value filtering

Three filter functions, plus the predictive variant.

  • SigmaLimit(<n>) — drop outliers more than n standard deviations from the mean.
  • ToDiscrete(<threshold>, <op>) — convert analog to discrete; e.g. ToDiscrete(5.0, >) returns 1 above 5.0, 0 below. Supported ops: >, >=, <, <=, =, <>.
  • SnapTo(<step>, <min>, <max>) — quantize the value to the nearest step, clamped to [min, max]. Snapped values get the 0x2000 QualityDetail bit.
  • Predictive variant — see source PDF p. 86; SLR forecast over the cycle.
AND wwFilter = 'SnapTo(0.01, 0, 1000)'
AND wwFilter = 'ToDiscrete(5.0, >)'

Bad filter syntax returns a syntax error and zero rows.

wwValueSelector — analog summary value pickoff

When an analog summary tag has multiple summarized values stored for one period, this picks which one to surface:

Setting Meaning
AUTO (default) Mode-dependent — see PDF p. 125-128.
FIRST First summarized value in the period.
LAST Last value in the period.
MIN Minimum value in the period (timestamp = where the min occurred).
MAX Maximum value in the period (timestamp = where the max occurred).
AVG Time-weighted average.

wwEdgeDetection (RoundTrip + alarm/event subqueries)

Picks which edges count for RoundTrip:

AND wwEdgeDetection = 'Leading'    -- transition into the state
AND wwEdgeDetection = 'Trailing'   -- transition out of the state
AND wwEdgeDetection = 'Both'       -- either

Also used in event-pattern queries against the WideHistory table — see PDF pp. 78-85 for analog and discrete edge-detection examples.

wwOption — reserved bit-bag

Catch-all for one-off feature flags AVEVA exposes per release. Almost never set in user queries; consult the source PDF if a feature note tells you to.

Reserved / deprecated

Name Status
wwParameters, wwMaxStates Reserved. Don't use.
wwRowCount Deprecated alias for wwCycleCount. Still works, but write new queries with wwCycleCount.

Combining options

Multiple wwXxx are fine as long as each appears in a single AND predicate (no IN, no OR). A representative dense query:

SELECT TagName, DateTime, Value, StateTime, StartDateTime
FROM History
WHERE TagName IN ('Reactor1Level')
  AND DateTime >= DATEADD(hour, -8, GETDATE()) AND DateTime <= GETDATE()
  AND wwRetrievalMode  = 'RoundTrip'
  AND wwStateCalc      = 'AvgContained'
  AND vValue           = CONVERT(SQL_VARIANT, '1')
  AND wwCycleCount     = 1
  AND wwTimeStampRule  = 'Start'
  AND wwQualityRule    = 'Good'
  AND wwFilter         = 'ToDiscrete(5.0,>)'
  AND wwVersion        = 'Latest';

Next