Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Live data: show a value within 1 s of its change

Open
#116 1 comment 0 reactions 1 assignee View on GitHub

Maintainers usually reply within 1 day

@mrcsin is already working on this.

Since Oct 8, 2026.

Assessment

This issue has not been assessed yet.

Description

bug enhancement

Problem

The chart's live edge comes from the archive: RealtimePoll reads trends every second. The archive cannot carry a live edge. Simple-Scada buffers each variable in memory and writes it to trends in batches of about 50 rows or every ~8 minutes, so the newest row of a pen lags the plant by 1-3 min for a pen changing every second, ~8 min for a slow one, hours for a rarely changing one, and up to a day for a constant one (docs/architecture/scada-archive-observed.md#how-late-a-value-arrives). No setting controls the buffering.

Requirement: a change on the plant reaches the chart within 1 s.

What the SCADA's built-in OPC UA server gives (measured 2026-10-08, 2.7.6.0 demo-64)

  • Available in Minimal, Standard and Professional (manual, version table); enabled per project in Проект -> Настройки -> OPC UA-сервер, endpoint opc.tcp://<host>:<port>. The scripts manual (2.10.6) names it the usual way to hand current values to other applications.
  • Node of a variable: ns=3;s=<project ID><trends.id>, e.g. ns=3;s=FD34514A352 for id = 2. The project ID is in Проект -> Настройки -> Общие; changing it changes every address. Namespace URI http://simple-scada.com/UA.
  • Latency from the server's source timestamp to the client, 100 ms publishing interval: median 3-4 ms, max ~190 ms.
  • SourceTimestamp (UTC) equals the archive's t (local time): 119/119 rows of a by-change pen and 68/68 of a deadband pen matched on (t, v). A by-time pen matched 79/92; the other 13 archive rows sit on the archiver's own tick a few ms after the live change, sometimes with the previous value.
  • Live is denser than the archive: every change arrives (117 notifications in 2 min for Time10s, ~12 archive rows).
  • A new subscription delivers the current value at once, also for a pen that has not changed.
  • Anonymous, security mode None works; SemiPlot and the SCADA always run on one machine.

A question to the vendor (is OPC UA the intended route, does an OPC UA client take a licence seat, is the node address format stable, HistoryRead) is out; the expected answer is OPC UA.

Design proposal

  • Live source. A new SemiPlot.DataSource.* sibling subscribes over OPC UA (OPCFoundation.NetStandard.Opc.Ua.Client) to every pen of the catalogue, publishing interval ~100 ms, and emits the same Sample stream the poll emits today. Endpoint port and project ID are configuration keys under connection/.
  • Archive watermark per pen. The archive poll stays and advances, per pen, the newest t seen in trends.
  • Live buffer per pen. Holds live samples newer than the pen's watermark, bounded in time (e.g. 24 h); samples at or below the watermark are dropped. Stitching is by watermark, not by matching points, because by-time pens do not match exactly.
  • Rendering. History from the archive up to the watermark, the live buffer after it; when the archive catches up its rows replace the live points. At start-up the first notification of each pen draws a step from its last archived value to now; live history exists only while the window runs.
  • OPC UA down. Archive only, a message on the panel, reconnection in the background.

Related findings that touch the read path

  • Layers 1 and 2 hold at most 2 points per period (min and max), not 4: AggregationLayer.ToPointSpacing is off by a factor of two.
  • Layer 3 can be empty (2.7.6.0 wrote none in 48 h): a window that selects the day layer draws nothing; the hour layer has to stand in.

Acceptance

  • A value change on the SCADA appears on the chart within 1 s, measured on the bench with the demo SCADA.
  • No visible seam or duplicate when the archive catches up with the live buffer.
  • With the OPC UA server off, the chart works from the archive alone and says so.
Dominant language
C#
Stars
0
Forks
0
Avg merge
3h 2m
Merged PRs (30d)
35

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Semiteq/SemiPlot

All issues in Semiteq/SemiPlot

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.