# AquaCom known operations registry **Source of all evidence:** *Technical description – AquaCom – RTU level*, Rev 1.6, ITT Flygt AB, July 2004 (`AquaCom_RTU_1_6_eng.pdf`; markdown conversion in this folder). Section references below are to that document. **Purpose.** Registers every AquaCom operation the gateway may implement, with its evidence and implementation status. An operation enters this registry *before* implementation begins; adding an operation with status beyond `REGISTERED` requires its evidence to be complete and its gaps resolved or scoped. Open questions live in `protocol-gaps.md` — this registry never invents behavior not stated in the source. **Status values:** `REGISTERED` (evidence located, not yet implemented) · `PARTIAL` (framework-level support only) · `IMPLEMENTED` (codec + tests + traceability) · `OUT-OF-SCOPE` (deliberately not implemented in the initial release; evidence retained for future phases). **Framing note (applies to every operation):** CS→RTU telegrams are `SOH + SPACE + DEST + SPACE + TYPE + SPACE + DATA… + SPACE + '#' + SPACE + CHK + CR`; RTU→CS telegrams are `STX + SPACE + DATA… + SPACE + '#' + SPACE + CHK + CR` (§2.3.2). Checksum per §2.4; `Wait` (DC3) bytes are stripped before parsing and excluded from the checksum (§3.6.4). --- ## Session / control operations ### OPS-001 — Connection message (`OK`) | Field | Content | |---|---| | Direction | RTU→CS (CS dialled) · CS→RTU (RTU dialled in alarm) | | Purpose | Dialled-line connection answer; the answering side sends OK before conversation begins. The answering phase is "6×OK with 2.5s delay between each, aborted as soon as a telegram arrives"; some RTUs send 2×OK ≈4s apart instead (§2.2.3, §3.3.1). | | Evidence | §2.2.3, §3.3.1, examples §3.4.1.2, §3.4.5.3, §3.4.7.2, §3.4.9.2, §3.4.10.3, §3.4.11.3, §3.4.12.2 | | Gaps | — | | Status | REGISTERED (dialled lines only; not applicable to fixed/TCP operation) | ### OPS-002 — Break (`BRK`) | Field | Content | |---|---| | Direction | CS→RTU | | Purpose | End communication. No answer is returned. Send 3× in a row before hanging up. Mandatory after a WGS containing a control command — some RTUs stay "remote controlled" until BRK (§3.4.13). | | Evidence | §3.4.13 | | Gaps | — | | Status | REGISTERED (required for session teardown; harmless on fixed lines) | ### OPS-003 — Break with acknowledge (`EBR`) | Field | Content | |---|---| | Direction | CS→RTU | | Purpose | BRK variant expecting a `SCO` answer; retransmit up to 6 times on timeout or wrong answer. Not supported in Forth RTUs (§3.5.4, §3.2 summary table). | | Evidence | §3.5.4 | | Gaps | — | | Status | REGISTERED (Basic RTUs only) | ### OPS-004 — Caller identification (dialled lines) | Field | Content | |---|---| | Direction | RTU→CS | | Purpose | Identifies the calling RTU (`STX DEST ACT # CHK CR`); capability-dependent (§2.2.3.2). | | Evidence | §2.2.3.2–3 | | Gaps | AQ-GAP-008 (ACT values unknown) | | Status | REGISTERED — blocked by AQ-GAP-008 | --- ## Live-data operations ### OPS-005 — Status request (`WGS`) | Field | Content | |---|---| | Direction | CS→RTU, answer RTU→CS | | Purpose | Live-values polling. Answer: `ver, prod, Nal, alp, rem, r1–r4, mp1–mpN` (measuring points for the requested picture), followed by `Nal` alarm codes (§3.4.10). This is the protocol's primary live-acquisition operation. | | Evidence | §3.4.10, examples §3.4.10.2–3, §2.2.3.1, §3.6.4; CFG picture/command sections §3.4.10.4–5 | | Gaps | AQ-GAP-002 (alp semantics; hypothesis `mp count = alp−1` consistent with all four examples), AQ-GAP-005 (long-example checksums pending PDF transcription) | | Status | REGISTERED (live acquisition is core scope; see `software-specification.md` §11) | The `dir` field (F/B/N/M/!) is machine **control** — excluded from the initial release (`software-specification.md` §3.2); the decoder shall tolerate its syntax, and the gateway shall always transmit `!` (ignore). ### OPS-006 — Alarm request (`WCA`) and answers `ALR`/`ALN`/`ALO` | Field | Content | |---|---| | Direction | CS→RTU (`WCA`, `ALO`), RTU→CS (`ALR`, `ALN`) | | Purpose | Alarm polling/acknowledgement; `set=2` sets the RTU clock from the request's date/time (§3.4.1). Alarm retrieval is extension scope but the evidence now exists. | | Evidence | §3.4.1, §2.2.3.3, §3.5.1.1 (Basic ALR variant) | | Gaps | AQ-GAP-010 | | Status | REGISTERED — alarm retrieval is OUT-OF-SCOPE for the initial release; clock setting (`set=2`) also OUT-OF-SCOPE (audit + confirmation architecture required first, cf. implementation specification §76) | --- ## Historical-data operations ### OPS-007 — Historical trend (`WGH`) | Field | Content | |---|---| | Direction | CS→RTU, answer RTU→CS (data or `NDA`) | | Purpose | 5-minute-block historical trend retrieval. Request carries the timestamp of the last stored block; the answer continues from there, up to max 6 hours / 4000 chars; `NDA` ends the stream. This is the backfill/watermark operation the Historical Acquisition Manager is built around (§3.4.12). | | Evidence | §3.4.12 incl. full multi-answer example §3.4.12.2 and CFG scaling §3.4.12.3; wire-level example §3.7 | | Gaps | AQ-GAP-003 (block value count), AQ-GAP-001(e/g) | | Status | REGISTERED (core scope; requires `protocol-gaps.md` AQ-GAP-003 working hypothesis wired to station point configuration) | Semantics confirmed by example: a day's final block is timestamped `00:00` of the *next* day (§3.4.12.2 comment); requests use the last received block's timestamp to resume — the exact pattern the gateway's synchronization watermark must reproduce. ### OPS-008 — Periodical report (`WGD`) | Field | Content | |---|---| | Direction | CS→RTU, answer RTU→CS (data or `NDA`) | | Purpose | Per-day segmented aggregates (default 00-06 / 06-09 / 09-16 / 16-00 + sum) per reporting point (§3.4.11). Maps to canonical `AcquisitionSource = AQUACOM_REPORT`. Request also sets the RTU clock (same caveat as WCA). | | Evidence | §3.4.11 incl. CFG section and scaling formula | | Gaps | AQ-GAP-009, AQ-GAP-010(b) | | Status | REGISTERED (implemented after WGH; report points configured separately from trend points per §3.4.11.4) | --- ## Configuration / definition operations ### OPS-009 — Function channels (`MCC`, `MPA`, `MPB`, `MPC`, `MPD`, `MPL`) | Field | Content | |---|---| | Direction | CS→RTU (set) and RTU→CS (fetch) | | Purpose | Setpoint/config channel write & fetch. **Fetch limitation (Forth):** the RTU echoes only the *last sent* telegram — you must send what you want to receive; a cold-started RTU cannot be fetched from (§3.4.2–3, §3.4.3 "Important 2"). Types: `A`/`D` integer, `T` text (quoted, `_` = empty/space-as-underscore), `0–4` float decimals (§3.4.2.2; Basic variant §3.5.2). | | Evidence | §3.4.2–3, §3.4.2.3 CFG/AquaView examples | | Gaps | AQ-GAP-001(a), AQ-GAP-004 | | Status | REGISTERED (used for station configuration; **writes to setpoints are control operations — OUT-OF-SCOPE initially**; read-back of a previously sent telegram is acceptable) | ### OPS-010 — Analogue channels (`MAS`) | Field | Content | |---|---| | Direction | CS→RTU (set) and RTU→CS (fetch) | | Purpose | Analogue input config (signal type, alarm levels, hysteresis, decimals; `htr` trend flag on Basic RTUs). Fetch requires a prior send, as with MCC (§3.4.4–5, §3.5.3). | | Evidence | §3.4.4–5, §3.5.3, CFG examples | | Gaps | AQ-GAP-003 (htr vs. Forth CFG trend section) | | Status | REGISTERED (definitions source; writes OUT-OF-SCOPE initially, as OPS-009) | ### OPS-011 — Alarm code filter (`MAT`) and priorities (`SLT`) | Field | Content | |---|---| | Direction | CS→RTU (set) and RTU→CS (fetch, capability-dependent per ATF controller-type digits) | | Purpose | Alarm code remapping and A–Z priorities. The document itself states MAT "is not necessary to implement" (§3.4.6.3). | | Evidence | §3.4.6–9 | | Gaps | AQ-GAP-006 | | Status | OUT-OF-SCOPE (alarm system extension; revisit when alarm retrieval is scheduled) | --- ## Answer telegrams (all operations) ### OPS-012 — Fixed answers `SCO` / `SCE` / `NDA` / `!!` (Wait) | Field | Content | |---|---| | Direction | RTU→CS | | Purpose | `SCO` = telegram OK; `SCE` = error in telegram (optional rejected-channel payload, AQ-GAP-007); `NDA` = requested data not available (normal WGH/WGD stream terminator — **not** an error); `!!` = single DC3 (13H) byte, may be embedded *inside* another telegram, must be stripped before parsing, excluded from checksum, and resets the CS receive timeout (§3.6). | | Evidence | §3.6, §3.6.4 checksum-identical pair of examples (both verified: 2925), §3.7 | | Gaps | AQ-GAP-007 (SCE payload) | | Status | REGISTERED (the `!!` handling is a hard requirement for any long-answer operation: WGH, WGD, WGS, MCC fetch) | --- ## Implementation order (evidence-complete subset) 1. Framing + checksum + `!!` stripping (OPS-012 + framing note) — fully evidenced, unblocked. 2. OPS-005 `WGS` (live) — blocked only by AQ-GAP-002, which has a documented workaround (decode via `Nal`, cross-check `alp` diagnostically). 3. OPS-007 `WGH` (history) — blocked by AQ-GAP-003 working-hypothesis wiring (station configuration drives block layout). 4. OPS-008 `WGD` (reports) — after WGH; AQ-GAP-009 defaults. 5. Session ops OPS-001/002 as transports require (BRK for fixed-line WGS sessions). This order matches the implementation phases (Phase 3 codec → Phase 6 live → Phase 10 historical) and honors live-over-history scheduling.