Data Is Stale, Frozen, or Has Gaps
This article covers the family of "my data isn't moving" symptoms:
- A tag's live value looks frozen and never changes
- Trends show flat lines, big gaps, or far fewer points than expected
- History isn't recording for a tag, device, or the whole system
- A model complains that its input data is old or stale
These symptoms fall into two very different buckets, and the fix depends on which one you have:
Collection Has Stopped: Nothing Is Being Recorded
If the live value is frozen and Trends are empty, the tag isn't being collected at all. History can only record what collection produces, so fix collection first.
Work outward from the tag:
- Is the tag failed? A failed tag isn't producing values. Check its error code and error message. See Bad, Missing, or Frozen Tag Values.
- Is the parent device failed or stopped? If the device is down, every tag on it stops. A tag whose device is stopped shows an info banner telling you the device is stopped and the tag won't update until it is enabled and running. See Troubleshoot a Connection.
- Is the value a calculated or mapped value? An expression or value-mapping failure freezes the output even when the source tags are fine. See Expression & Value-Mapping Errors.
The three diagnostic fields (error code, error message, error detail), the status/quality legend, and the auto-clear behavior are all documented once in Reading Status, Quality & Errors. Start there if you need to interpret a code or status color.
History-Write Failure Codes
A tag can be collected successfully and still fail to write to history. In that case the live value is current, but a gap appears in Trends for that period. These are the codes that signal a history-write failure specifically:
Tag is not historizing properly
If a tag's live value is updating but Trends show flat lines or far fewer recorded points than expected, the cause is almost always a mismatch between the tag's Range Min / Max and the compression settings — not a collection problem.
Koios uses Swinging Door Trending (SDT) to compress historical data. SDT maintains a tolerance band (a "door") around the last recorded point and discards new values that fall inside the band, because the trend line already represents them. The width of that band is calculated as a percentage of the tag's configured range, not of the actual value.
The default tag range is 0–100. If a tag only moves between 0 and 1 but its range is left at 0–100, the tolerance band is wider than the entire signal, so almost nothing passes the filter. The result is silent data loss: the live value updates, but Trends look flat or empty.
How to fix it:
- Set the tag's Range Min and Range Max to match the actual expected value range (for example 0–1, not 0–100).
- Review the global Compression Deviation. A deviation of 1–2% is a good starting point for most process data.
- If only this tag needs special treatment, enable Override global compression settings on the tag's Configuration tab and set a tighter deviation, or disable compression for this tag alone.
- To disable compression globally, turn off the Compression Enabled toggle on the Retention page.
Trends Are Flat or Gappy
If Trends look wrong but the live value is fine, run through these in order:
- Flat line with almost no points → compression is discarding everything. See Tag is not historizing properly.
- A gap for a specific time window → collection or history-write stopped during that window. Check the tag/device error history and the history-write failure codes above.
- Older data disappeared entirely → retention cleanup deleted it. History older than the configured History Database Retention period is permanently removed. Review the period in Data Retention.
- Everything stopped at the same moment across many tags → a device outage or a service/resource problem. See Service Health & Resource Alarms.
A Model Complains About Old or Stale Data
Models read from history, so historization problems surface as binding errors. Check the model's Bindings tab for these two codes:
Both codes point back at historization: Stale History Data almost always means collection stopped on an upstream device, and Not Enough Historical Depth can be aggravated by aggressive compression starving the history. If the depth error won't clear even after waiting, confirm the bound tag is actually recording points — a compression/range mismatch can prevent history from ever filling the window. See Tag is not historizing properly and the model inference requirements for how depth is calculated. For the full model and binding error catalog, see A Model or Binding Isn't Running.
Still Stuck?
If a tag records live values but history stays empty even after correcting the range and compression:
- Confirm the tag's live value is genuinely changing — SDT correctly stores nothing for a truly constant signal until Maximum Time Between Samples forces a sample.
- Set the device's log level to Debug and watch for historization errors during a scan. See Logs.
- Check disk space and service health — a full disk or a stalled service stops all writes. See Service Health & Resource Alarms.
- If you're preparing a support ticket, gather the details in Collecting Diagnostics for Support.
What's Next
- Reading Status, Quality & Errors: the shared reference for the three diagnostic fields, the status/quality legend, and the master error-code lookup
- Bad, Missing, or Frozen Tag Values: upstream causes when a live value never moves
- Troubleshoot a Connection: device-level outages that stop collection
- A Model or Binding Isn't Running: stale-history and depth binding errors in full
- Service Health & Resource Alarms: disk, service, and resource problems that stop writes
- Tag Range and Compression: the SDT and compression settings that own historization
- Data Retention: compression, retention periods, and storage monitoring
- Model Inference Requirements: tensor shape and history depth
