Files
lmxopcua/docs/v2/focas-deployment.md
Joseph Doherty 7f9d6a778e Auto: focas-f3a — cnc_rdalmhistry alarm-history extension
Adds FocasAlarmProjection with two modes (ActiveOnly default, ActivePlusHistory)
that polls cnc_rdalmhistry on connect + on a configurable cadence (5 min default,
HistoryDepth=100 capped at 250). Emits historic events via IAlarmSource with
SourceTimestampUtc set from the CNC's reported timestamp; dedup keyed on
(OccurrenceTime, AlarmNumber, AlarmType). Ships the ODBALMHIS packed-buffer
decoder + encoder in Wire/FocasAlarmHistoryDecoder.cs and threads
ReadAlarmHistoryAsync through IFocasClient (default no-op so existing transport
variants stay back-compat). FocasDriver now implements IAlarmSource.

13 new unit tests cover: mode switch, dedup, distinct-timestamp emission,
type-as-key behaviour, OccurrenceTime passthrough (not Now), HistoryDepth
clamp/fallback, and decoder round-trip. All 341 FOCAS unit tests still pass.

Docs: docs/drivers/FOCAS.md (new), docs/v2/focas-deployment.md (new),
docs/v2/implementation/focas-wire-protocol.md (new),
docs/v2/implementation/focas-simulator-plan.md (new),
docs/drivers/FOCAS-Test-Fixture.md (alarm-history bullet appended).

Closes #267
2026-04-26 00:07:59 -04:00

2.4 KiB

FOCAS deployment guide

Per-driver runbook for deploying the FANUC FOCAS driver. See docs/drivers/FOCAS.md for the per-feature reference and focas-version-matrix.md for the per-CNC-series capability surface.

Operator config-knob cheat sheet

Knob Where Default Notes
Devices[].HostAddress FocasDriverOptions.Devices focas://{ip}[:{port}]
Devices[].Series FocasDriverOptions.Devices Unknown Drives per-series range validation in FocasCapabilityMatrix.
Devices[].OverrideParameters FocasDriverOptions.Devices null MTB-specific parameter numbers for Feed/Rapid/Spindle/Jog overrides. null suppresses the Override/ subtree.
Probe.Enabled FocasDriverOptions.Probe true Background reachability probe.
Probe.Interval FocasDriverOptions.Probe 00:00:05 Probe cadence.
FixedTree.ApplyFigureScaling FocasDriverOptions.FixedTree true Divide position values by 10^decimal-places (issue #262).
AlarmProjection.Mode FocasDriverOptions.AlarmProjection ActiveOnly ActiveOnly keeps today's behaviour. ActivePlusHistory polls cnc_rdalmhistry on connect + on HistoryPollInterval ticks (issue #267, plan PR F3-a).
AlarmProjection.HistoryPollInterval FocasDriverOptions.AlarmProjection 00:05:00 Cadence of the history poll. Operator dashboards run the default; high-frequency rigs can drop to 30 s.
AlarmProjection.HistoryDepth FocasDriverOptions.AlarmProjection 100 Most-recent-N ring-buffer entries pulled per poll. Hard-capped at 250 so misconfigured values can't blast the wire session.

Sample appsettings.json snippet for ActivePlusHistory

{
  "Drivers": {
    "FOCAS": {
      "Devices": [
        { "HostAddress": "focas://10.0.0.5:8193", "Series": "Series30i" }
      ],
      "AlarmProjection": {
        "Mode": "ActivePlusHistory",
        "HistoryPollInterval": "00:05:00",
        "HistoryDepth": 100
      }
    }
  }
}

The history projection emits each unseen entry through IAlarmSource.OnAlarmEvent with SourceTimestampUtc set from the CNC's reported wall-clock — keep CNC clocks on UTC so the dedup key (OccurrenceTime, AlarmNumber, AlarmType) stays stable across DST transitions.