Skip to main content

Controls — HMI alarm copy

FieldDetail
Primary artifact(s)controls/water/hmi/alarm-strings.csv
SpecRO-SPEC-001 §5.6 ; WIRE-001

Summary

Operator-facing text for every ALM_* InternalLatch tag in tags.csv. Each CSV row plc_tag matches one latch bit packed into ANN_ALM_WORD0 by alarms.st. The AlarmActive screen (see screens.md) decodes the word and displays user_message / sev_hmi from this table.

Rows are ordered by ANN_ALM_WORD0 bit index (0–14). Severity in sev_hmi aligns with alarm_class on the latch tag unless noted (e.g. safety UV uses safety for CM5 banner styling).

Bitplc_tagsev_hmirequires_ack_ok
0ALM_PT101_HIcriticalyes
1ALM_PT102_HIcriticalyes
2ALM_PT103_LOwarnmaybe
3ALM_PT104_LOwarnmaybe
4ALM_FEED_LOW_FLOWwarnmaybe
5ALM_VFD_ANY_FLTcriticalyes
6ALM_CT101_HIGH_CONDwarnmaybe
7ALM_UV_LAMP_FLTsafetyyes
8ALM_TDS_DEVIATIONwarnmaybe
9ALM_T101_LEVEL_LOW_LATCHcriticalyes
10ALM_T102_LEVEL_CRITICALcriticalyes
11ALM_UV_LAMP_30DAYinfono
12ALM_UV_LAMP_7DAYwarnmaybe
13ALM_ENCL_OT_FAULTcriticalyes
14ALM_BLOCK_ICE_ON_UV_FLTinfono

Ack column semantics: yes = operator should acknowledge via HMI_ACK_ALARMS after following procedure_hint; maybe = ack clears latch but underlying condition may persist; no = informational / auto-clears when guard passes (see ST alarm sequencer).

Conditional clears (not encoded in CSV): ALM_ENCL_OT_FAULT needs TT-200 < latch SP − 5 °F; ALM_UV_LAMP_FLT needs fault cleared and HMI_DISINFECT_CHKCOMPLETE; ALM_VFD_ANY_FLT ack also pulses Modbus VFD reset.

Test

CM5 Alarm block import — verify 15 rows, one plc_tag per InternalLatch ALM_* in tags.csv.

Offline parity check (from repo root):

python3 - <<'PY'
import csv
tags = {r["tag_name"] for r in csv.DictReader(open("controls/water/tags/tags.csv")) if r["tag_name"].startswith("ALM_")}
rows = list(csv.DictReader(open("controls/water/hmi/alarm-strings.csv")))
csv_tags = {r["plc_tag"] for r in rows}
assert tags == csv_tags, f"mismatch tags={sorted(tags-csv_tags)} csv={sorted(csv_tags-tags)}"
assert len(rows) == 15
print("OK:", len(rows), "alarm strings ↔ latch tags")
PY

Open items

  • Spanish toggle future