K1 vs K2 differences
ALPAO DM electronics counter check K2 only. The ao.AMExHCNT keywords do not exist on K1.
STRAP uninitialized check - RTC modes K2: wcmode 13 (LGS_57x57) or 15 (LGS_29X29), updated 20 May 2026 for HAKA. K1: wcmode 6 (LGS_ocam2k), 9 (GLAO) or 10 (LTAO).
BM2 saturation check Same logic on both, using the telescope's own EPICS channels (k1:ao:ls:bm2:* / k2:ao:ls:bm2:*).
Keyword read error handling K2 only acts on a check when the keyword reads succeed (status >= 0) for every check. K1 does this only for the FCS stall check and the RTC fault check (detectwfcfault skips the check if ao.wcstat, ao.wcdmstat or ao.wcdtstat are disconnected).
Overillumination recovery K1 opens the loops a second time just before re-writing ao.o1smgn (harmless).
hvcrecovery K1 passes continue=continue to change_keyword_block; otherwise the logic is the same.
KEYWORD_CHECK (commented out) In K1's commented-out code the retry limit is 10 (~3 s) and the counter resets; K2's is 3. This has no effect while it stays commented out.
Things noticed during review (possible issues, not changes)
ao.wcdtstat ERROR value detectwfcfault tests ao.wcdtstat EQ 5, but on both telescopes ERROR is 10 for this keyword (5 = UNUSED2). A DT loop ERROR may therefore not trigger the Initialize RTC recovery.
ao.wcttstat checkwfc reads ao.wcttstat, which does not exist on either telescope. The post-recovery check therefore only uses ao.wcdmstat and ao.wcstat.
30-minute alarm silencing The CE/TRS/ALPAO alarms count down 1800 check cycles. At the nominal 0.5 s timer that is ~15 min, not 30. The real time depends on how long each cycle takes.
ALPAO counter logic The alarm fires if any one of the four counters is unchanged between two cycles (OR). It does not require all four to be stalled.
OCAM2K flow message The message tells users to check k2rtcenv.dsp even on K1.