The old 05-scada/, restructured around the distinction its README never
drew: configuration is deployed with dssqld, displays are deployed by
file copy. Conflating the two is what made the folder confusing.
modbus_points/ the tag database - named for the protocol,
since CI Server configures others differently
modbus_points/historian/ 3 groups, 49 bindings - HAND-MADE, no
generator, and drifted from the server
hmi/ displays and their generator
ciserver-backup-2026-08/ outdated exports, evidence only, never import
QUICKLOAD.md dssqld export/import, the 5 classes, the import
order, and why an item import kills every display
README.md the chain end to end, and the not-updating triage
Verified during the move - the whole chain is reproducible:
scada-points.csv and all three .qli regenerate byte-identically
all six displays build clean
Removed the K offset machinery from build_display.py, item-ids.meta.json
and DEPLOY.md. K was a consistency check on measured ids, not a source of
them, and diagnosing a dead screen by arithmetic is wasted effort when
validating the display in CI Server's Editor Module fixes it outright.
The guidance now leads with that one action.
Recorded, not fixed: the repo's historian config disagrees with the
2026-08 CI Server export - WRPS_THIRTY_SEC and a FIVE_SECONDS group exist
on the server and not here. cicore1 was unreachable during this audit, so
which is correct is unknown.
Not carried across: __pycache__, out/*.xml, and the top-level
WRPS_Overview.xml that was tracked despite .gitignore declaring the
display XMLs to be build output.
104 lines
5.8 KiB
Markdown
104 lines
5.8 KiB
Markdown
# The WRPS component kit
|
||
|
||
The house style for this project's displays. AOG is the **reference** for how a
|
||
component is parameterised — it is not used directly, and only the components
|
||
this project needs exist.
|
||
|
||
Applies to this display and every future display in the project. A new
|
||
requirement adds a component here; it never adds a second style.
|
||
|
||
## Tokens
|
||
|
||
Named like AOG's `AOG_C*` so they map onto CI Server global parameters. A restyle
|
||
is an edit to this table and nothing else.
|
||
|
||
| Token | Value | Use |
|
||
|---|---|---|
|
||
| `WRPS_CBG` | `#EDF0F4` | display ground |
|
||
| `WRPS_CSF` | `#FFFFFF` | panel / surface |
|
||
| `WRPS_CSF2` | `#F5F8FB` | recessed surface, inside a value box |
|
||
| `WRPS_CBD` | `#C3CCD8` | border — heavier than a desktop design, for distance |
|
||
| `WRPS_CBD2` | `#DFE5EC` | hairline, internal dividers |
|
||
| `WRPS_CT1` | `#0E1621` | primary ink |
|
||
| `WRPS_CT2` | `#465468` | labels, secondary ink |
|
||
| `WRPS_CAC` | `#0B7DA8` | **interaction only** — selected, focus, faceplate rule |
|
||
| `WRPS_CAC2` | `#12A5D9` | accent bright — focus ring |
|
||
| `WRPS_CRUN` / bg | `#0F8A45` / `#E4F6EA` | running / on |
|
||
| `WRPS_CWRN` / bg | `#A85B00` / `#FFEFD2` | attention |
|
||
| `WRPS_CALM` / border | `#D32029` / `#96131A` | **alarm — always a filled block** |
|
||
| `WRPS_CPRC` | `#2B3F52` | pipe and vessel outline |
|
||
| `WRPS_CWTR` | `#9FCFE6` | liquid fill |
|
||
|
||
**Colour policy.** The plant is drawn in ink on white. Cyan means *you can act on
|
||
this*; green, amber and red mean *the plant is telling you something*. Nothing
|
||
else is coloured, so an abnormal state is the only colour on the screen.
|
||
|
||
**Abnormal is a filled block, never coloured text.** At distance, red text on
|
||
white reads as slightly darker grey; a filled red block with white text does not.
|
||
One fault propagates to every place it is relevant — banner, symbol, instrument
|
||
bubble, value box, faceplate badge — so it cannot be missed from any part of the
|
||
screen.
|
||
|
||
**Type.** Labels **Segoe UI**, values and tag names **Consolas**. Both ship with
|
||
Windows, so nothing depends on a font that might not be installed — but Segoe is
|
||
the modern face and Tahoma is what dates a screen. Consolas is monospaced, so
|
||
digits keep their column as values update at 100 ms, and using it for tag names
|
||
gives the display its technical read.
|
||
|
||
**Sized for a TV.** Nothing on the display is smaller than ~1.35% of screen
|
||
height (about 15 px at 1080p); the wet well level is the largest thing at 4.6%,
|
||
because it is the number a room actually watches. Ink is near-black on white and
|
||
borders are heavier than a desktop design would use — contrast is what survives a
|
||
bright room and a projector.
|
||
|
||
**Why it does not look like AOG.** What dates AOG is the bevelled 3D artwork and
|
||
mid-grey ground, not the grey itself. This kit is flat, square-cornered, hairline
|
||
bordered, white on cool neutral.
|
||
|
||
## Components
|
||
|
||
Every one takes the AOG-shaped parameter set where it applies: `item`,
|
||
`setPointItem`, `tagName`, `format`, `showAlarmIndicator`, `selectable`,
|
||
`displayToActivate`.
|
||
|
||
| Component | Purpose | Key parameters | States |
|
||
|---|---|---|---|
|
||
| `WRPS_Display` | The 16:9 shell: ground, title bar, body, simulation band | — | — |
|
||
| `WRPS_Title` | Display header — name, drawing ref, station states right | `title`, `subtitle` | — |
|
||
| `WRPS_Panel` | Every framed region. Panels never nest | `header` | — |
|
||
| `WRPS_Value` | **Every** analog value | `item`, `tagName`, `format`, `units`, `size`, `displayToActivate` | normal · large · warn · alarm |
|
||
| `WRPS_State` | **Every** discrete status | `item`, `onText`, `offText`, `inverse`, `severity` | off · on · warn · alarm |
|
||
| `WRPS_Button` | **Every** command and mode selection | `label`, `item`, `writeValue`, `pressed`, `variant` | normal · pressed · destructive |
|
||
| `WRPS_Pump` | Pump symbol, circle with impeller cross | `item`, `tagName`, `displayToActivate` | stopped · running · tripped |
|
||
| `WRPS_Valve` | Swing check and manual isolation, from the P&ID legend | `kind` | static |
|
||
| `WRPS_Instrument` | ISA bubble, function letters over loop number | `letters`, `loop`, `item` | static · with value |
|
||
| `WRPS_Vessel` | Wet well: outline, liquid fill, setpoint ladder at true heights | `levelItem`, `setpointItems`, `range` | — |
|
||
| `WRPS_Faceplate` | Popup display frame — cyan rule, kit components inside | `title`, `subtitle`, `item` | — |
|
||
| `WRPS_AlarmBanner` | Present **only** when something is abnormal; pushes the display down | `alarmList`, `count` | hidden · active · acknowledged |
|
||
|
||
`WRPS_SimBand` is **not** another component: it is `WRPS_Button` and `WRPS_Value`
|
||
inside a fenced region with a cyan rule and a standing label, so the simulation
|
||
controls can never be mistaken for plant control.
|
||
|
||
## Rules
|
||
|
||
1. **No hand-drawn values or buttons.** If it shows a number it is `WRPS_Value`;
|
||
if it is clickable it is `WRPS_Button`. This is what stops displays drifting.
|
||
2. **Faceplates are separate displays** opened via `displayToActivate`, matching
|
||
how AOG works — not overlay groups on the parent display.
|
||
3. **Setpoint edits go through a numeric entry popup**, not an inline field.
|
||
4. **State is never colour alone.** `WRPS_State` carries a square marker and its
|
||
own text, so it survives a projector or a colour-blind operator.
|
||
5. **Simulation controls stay in the band.** They never appear beside plant
|
||
controls.
|
||
6. **An abnormal condition propagates everywhere it is relevant** — banner, plant
|
||
symbol, instrument bubble, value box, faceplate badge. One fault, five places.
|
||
7. **Blink is reserved for unacknowledged alarms**, and only on the tag name, not
|
||
whole regions. CI Server supports this natively (`blinkEnabled`, `blinkDelay`,
|
||
700 ms in the reference screens).
|
||
8. **Green is only for genuinely-running equipment.** If normal operation is
|
||
colourful, red has competition and stops being an alarm.
|
||
|
||
## Geometry
|
||
|
||
16:9. Laid out on the editor's 4 px snap grid; 1920 × 1080 unless told otherwise.
|