diff --git a/archreview/plans/R2-01-s7-fault-hardening-plan.md.tasks.json b/archreview/plans/R2-01-s7-fault-hardening-plan.md.tasks.json index 1eff77e8..7070e3ab 100644 --- a/archreview/plans/R2-01-s7-fault-hardening-plan.md.tasks.json +++ b/archreview/plans/R2-01-s7-fault-hardening-plan.md.tasks.json @@ -64,7 +64,7 @@ { "id": 10, "subject": "Doc: R2-09 connect-throttle seam note on EnsureConnectedAsync (STAB-8 S7 part, note-only)", - "status": "pending", + "status": "completed", "blockedBy": [3] }, { diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7Driver.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7Driver.cs index df642c02..c25eeedc 100644 --- a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7Driver.cs +++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7Driver.cs @@ -1211,6 +1211,15 @@ public sealed class S7Driver /// MUST be called while holding — it mutates / /// and reuses the single-connection-per-PLC invariant the gate /// enforces. The read / write / probe paths all take the gate before calling it. + /// + /// While the PLC is down every data call and probe tick pays a full connect attempt + /// bounded only by _options.Timeout (STAB-8). This method is the single + /// choke-point all S7 reconnects flow through (already gate-serialized), so the + /// fleet-wide connect-attempt throttle planned in R2-09 plugs in here: a + /// last-failed-attempt timestamp checked at the top of the slow path. Deliberately NOT + /// implemented driver-locally — see + /// archreview/plans/R2-01-s7-fault-hardening-plan.md Finding 3. + /// /// /// Cancellation token for the (re)connect attempt. /// A live .