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
2.4 KiB
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.