docs(phase5): correct FOCAS probe binding — direct DllImport, not WireFocasClient (integration review)

This commit is contained in:
Joseph Doherty
2026-06-16 07:12:48 -04:00
parent 961b2b558d
commit af280af842
2 changed files with 6 additions and 3 deletions
+4 -2
View File
@@ -47,7 +47,7 @@ with a human-readable explanation rather than a false-green TCP-open tick.
| **AbCip** | `libplctag` Tag `InitializeAsync` (EIP session + CIP Forward Open). A CIP-level error such as tag-not-found still proves the controller answered CIP → `Ok`. A session/ForwardOpen/connect error → handshake fail. | `"CIP session OK"` | `10.100.0.35:44818` (CIP sim) |
| **AbLegacy** | Same `libplctag` `InitializeAsync` handshake as AbCip, PCCC protocol family. | `"CIP session OK"` (PCCC family) | Deferred — no PLC5/SLC sim |
| **TwinCAT** | `AdsClient.Connect` + `ReadStateAsync`. See [degrade semantics](#twincat-degrade) below. | `"ADS state: {state}"` | Deferred — no ADS target |
| **FOCAS** | `cnc_allclibhndl3` via FWLIB P/Invoke (`Wire.WireFocasClient`). See [degrade semantics](#focas-degrade) below. | `"FOCAS handle OK"` | Deferred — no CNC + FWLIB |
| **FOCAS** | `cnc_allclibhndl3` via a direct `DllImport("fwlib32")` in the probe. See [degrade semantics](#focas-degrade) below. | `"FOCAS handle OK"` | Deferred — no CNC + FWLIB |
| **Galaxy** | gRPC unary call to `GalaxyRepository.TestConnection` on the configured mxaccessgw endpoint. See [auth-rejection rule](#galaxy-auth-rejection) below. | `"gateway gRPC OK"` | `http://10.100.0.48:5120` (mxaccessgw) |
**Historian.Wonderware** already performed a real handshake (`Hello``HelloAck`)
@@ -86,7 +86,9 @@ managed AMS router cannot start):
On a Windows host with the FANUC FWLIB shared library present:
- `cnc_allclibhndl3` is called via the existing `Wire.WireFocasClient` P/Invoke.
- `cnc_allclibhndl3` is called via a direct `DllImport("fwlib32")` declared in
the probe (the production `Wire.WireFocasClient` is a pure-managed FOCAS/2 TCP
client, not an FWLIB P/Invoke, so the probe carries its own native binding).
A successful handle allocation → `Ok=true`, `"FOCAS handle OK"`.
- A CNC-level rejection → handshake fail.
@@ -26,7 +26,8 @@ operator gets a false "connection OK" and only discovers the truth when the driv
- TwinCAT: `AdsClient.Connect(netId, port)` + `ReadStateAsync` (`AdsTwinCATClient.cs:90,194`).
- OpcUaClient: `DiscoveryClient.GetEndpointsAsync` (no session / cert / auth — `OpcUaClientDriver.cs:422`).
- Galaxy: the `MxGateway.Client` gRPC channel + one lightweight unary call.
- FOCAS: `cnc_allclibhndl3` via the existing wire P/Invoke (`Wire.WireFocasClient`).
- FOCAS: `cnc_allclibhndl3` via a direct `DllImport("fwlib32")` in the probe (the production
`Wire.WireFocasClient` is pure-managed FOCAS/2 TCP, not an FWLIB P/Invoke).
- **Probe dispatch** clamps the timeout to 160 s and passes a cancelled-on-timeout `ct`
(`AdminOperationsActor.cs:284-291`). Probes MUST honour it and MUST NOT mutate state (read-only handshakes).
- **A proven skip-gated E2E harness exists** (`DriverTestConnectE2eTests`) targeting the live Modbus sim with