scada-points.csv led with a scada_tag column of PS_* names derived from
the PLC register map - PS_STN_WET_WELL_LEVEL and the like. CI Server never
adopted them. They named nothing that exists, nothing in this repo read
them, and read as if authoritative they have already caused a real defect
in a downstream project.
Replaced with ci-server-points.csv, the as-built delivery from the CI
Server side (copied from yau-plant-assistant, not re-derived). It is keyed
on the CI Server item, with the station and point name beside it:
ci_item,ci_station,ci_point,description,poll_group,...
gen_scada_points.py now reproduces that file byte-identically, taking the
names from the LEAF table in gen_ciserver_qli.py so the CSV and the .qli
cannot disagree. tag_for() is gone. Verified: the CSV and all three .qli
regenerate unchanged, and all six displays still build.
The four poll groups keep their PS_ names - PS_STATUS_BITS, PS_PUBLISHED,
PS_SETPOINTS, PS_SIM_CONTROL. Those are live configuration, and are the
only legitimate PS_ names.
modbus_points/README.md gains a 'four namespaces' section - instrument tag,
PLC address, CI Server point, CI Server item - since confusing them is what
produced the placeholder column in the first place.
Also settles the historian drift left open in the previous commit. The
live export is the authority: the server runs WRPS_ONE_SEC at 5 SECONDS,
not 1, and WRPS_THIRTY_SEC at 30 seconds rather than a 60 second
WRPS_ONE_MIN. Code assuming 60 s was wrong by twelvefold. Recorded in
historian/README.md with a caution never to hardcode a sample interval.
Every .qli in the delivery was byte-identical to ours - only the CSV
differed.
|
||
|---|---|---|
| .. | ||
| export_his_group.qli | ||
| export_item_his_df.qli | ||
| export_items.qli | ||
| README.md | ||
ciserver-backup-2026-08 — ⚠️ OUTDATED. Evidence only.
Caution
Do not import anything in this folder. These are exports taken out of CI Server around 2026-08-20. They are a record of what the server held at that moment, not source, and they are known to be superseded.
Why they are kept
The CI Server side of this project has no other record. cicore1 was not
reachable during the 2026-09 audit, so nothing here could be checked against the
live system. These exports are the only evidence of what was actually configured,
as opposed to what the repo believes was configured.
| File | Class | Contains |
|---|---|---|
export_items.qli |
ITEM_DF |
147 records mentioning AID.WRPS |
export_his_group.qli |
HIS_GROUP_DF |
historian collection groups |
export_item_his_df.qli |
ITEM_HIS_DF |
item → group bindings |
An export holds every record of its class, not only this project's. Filter on
AID.WRPS when comparing.
The drift they revealed — and settled
Comparing these against ../modbus_points/historian/ shows the two do not agree.
These exports are the authority: they record what the running server actually
did, whereas his_group.qli records what the source project intended.
| In this export | In the repo's source |
|---|---|
WRPS_EVENT, WRPS_ONE_SEC |
✅ both |
WRPS_THIRTY_SEC |
❌ absent |
FIVE_SECONDS (binding STN.LEVEL, STN.INFLOW) |
❌ absent — not a WRPS group |
| — | WRPS_ONE_MIN, absent from the export |
That is the whole reason this folder exists rather than being deleted.
The rates matter more than the names. The live WRPS_ONE_SEC runs at 5
seconds, not 1, and the second group is WRPS_THIRTY_SEC at 30 seconds, not
a 60 second WRPS_ONE_MIN. Code that assumed 60 seconds was wrong by twelvefold.
Never hardcode a sample interval — read it from the item.
Replacing it
When cicore1 is reachable, re-export the five classes (../../QUICKLOAD.md),
diff them against ../modbus_points/, resolve the differences, and replace this
folder with a dated export that has been verified. Do not accumulate backups —
one known-good snapshot is more useful than three of uncertain age.