docs(ga): G7 PASS - FOCAS live CNC on vd03 (Makino 31i-B), axis tag added via owner-approved deploy e9fbe63e
v2-ci / unit-tests (push) Waiting to run
v2-ci / unit-tests (push) Waiting to run
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
# G7: FOCAS live-CNC smoke on a real FANUC control (2026-11-13)
|
||||
|
||||
**Result: PASS on every criterion that can be checked from here. Two exceptions: an axis position (vd03 has no axis
|
||||
tags authored) and the comparison against the control panel (needs a person at the machine).**
|
||||
**Result: PASS.** Every criterion passes. An axis tag was added to vd03 for the axis criterion (see "Axis position"
|
||||
below). The one item not done is the comparison of the identity values against the control panel, which needs a person
|
||||
at the machine.
|
||||
|
||||
## Setup
|
||||
|
||||
@@ -17,9 +18,29 @@ tags authored) and the comparison against the control panel (needs a person at t
|
||||
|---|---|---|
|
||||
| The wire client opens a FOCAS2 session | **PASS.** The driver has served Good values since boot (12:28:45Z); every value below comes from that live session. | `reads.txt` |
|
||||
| Identity nodes return non-null values | **PASS** (non-null). `SeriesNumber` G431, `Version` 22.0, `CncType` 31, `MtType` MM, `MaxAxes` 32, `AxisCount` 7, all Good. **Not compared with the control panel** (needs a person at the machine). G431 matches the series recorded for this control in the 2026-10 wire-decode work. | `reads.txt` |
|
||||
| An axis position reads Good with a plausible value | **NOT CHECKED HERE.** vd03's configuration authors no `Axes/` tags, and adding one would mean a deploy to DEV. Plausible Good values from the same live session: `Spindle/S1/Load` 56.7 % and `MotorSpeedPct` (moving), `Timers/CuttingSeconds`, `OperationMode/ModeText` AUTO, `Program/Name` `//CNC_MEM/USER/LIBRARY/O1111`. The position decode is pinned by real-31i-B captures from this machine (`docs/drivers/FOCAS.md` §"Wire decode corrections (2026-10)"). | `reads.txt` |
|
||||
| An axis position reads Good with a plausible value | **PASS after the deploy below** (`Axes/X/AbsolutePosition` = 280.1574, Good). Before it: vd03's configuration authors no `Axes/` tags, and adding one would mean a deploy to DEV. Plausible Good values from the same live session: `Spindle/S1/Load` 56.7 % and `MotorSpeedPct` (moving), `Timers/CuttingSeconds`, `OperationMode/ModeText` AUTO, `Program/Name` `//CNC_MEM/USER/LIBRARY/O1111`. The position decode is pinned by real-31i-B captures from this machine (`docs/drivers/FOCAS.md` §"Wire decode corrections (2026-10)"). | `reads.txt` |
|
||||
| A subscription delivers ≥ 3 updates within 5 s | **PASS:** 6 Good updates of `Spindle/S1/Load` in 5 s (13:15:16–13:15:21Z). | `sub5.txt` |
|
||||
| No `EW_SOCKET` (-1) / `EW_HANDLE` (-7) during a 2-minute soak | **PASS.** Soak 13:15:22–13:17:27Z: a recursive subscription on the driver's 22 variables got 272 notifications, and 21 variables were Good throughout. The 22nd, `Program/BlockCount`, read `BadNoData` throughout (the control does not report it; the same in every deploy record). **0 `EW_SOCKET`/`EW_HANDLE` in the whole day's server log.** The only ERR/WRN lines in the window come from these reads connecting by IP ("domain not listed in the server certificate") and the known DEV mesh-PSK warning. | `soak-summary.txt`, `soak-notifications.txt`, `vd03-log-window.txt` |
|
||||
|
||||
Record: CNC FANUC 31i-B (Makino Z-34184), series G431, version 22.0; test date 2026-11-13; OtOpcUa `76e73e7d`
|
||||
(deployed); client `otopcua-cli` from `c9bc358d`.
|
||||
|
||||
## Axis position (owner-approved DEV config deploy, 2026-11-13 15:30Z)
|
||||
|
||||
The owner approved adding an axis tag to vd03 so the axis criterion could be checked directly.
|
||||
- **Authoring:** in vd03's AdminUI `/raw`: device `z-34184` → **Browse device** (a live FOCAS browse of the control
|
||||
listed axes X, Y, Z, B, C, AA6, AA7) → selected `FOCAS/z-34184/Axes/X/AbsolutePosition` with "Create matching
|
||||
tag-groups" → **Add 1 tag**.
|
||||
- **Deploy:** `e9fbe63e`, revision `f902e9409d79…`, sealed 15:30:13Z. It also cleared the standing "Configuration
|
||||
drift" chip left by the #903 edit-and-revert check.
|
||||
- **Apply:** server log `AddressSpaceApplier: applied plan (kind="PureAdd", added=3, removed=0, changed=0, …
|
||||
rebuild=false)` and `raw subtree materialised (containers=2, tags=1, subset=true, failed=0)`. This was a surgical
|
||||
add: no rebuild, existing subscriptions untouched (`vd03-log-deploy-excerpt.txt`).
|
||||
- **Read:** `ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Axes/X/AbsolutePosition` = **280.1574, Good**, 11 s after the
|
||||
seal. ServiceLevel stayed 250.
|
||||
- **Subscription:** 30 s, the axis held still (one Good notification, `axis-sub30.txt`). The 5-update subscribe
|
||||
criterion is met by `Spindle/S1/Load` above.
|
||||
- **Re-check of all 23 variables:** 22 Good + `BlockCount` `BadNoData`, as before (`after-deploy-summary.txt`).
|
||||
- **Log:** still 0 `EW_SOCKET`/`EW_HANDLE` for the day. The only ERR lines after the deploy are these reads by IP.
|
||||
|
||||
The tag is left in place on vd03 as a permanent axis-position monitor.
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
|
||||
==================== SUMMARY ====================
|
||||
Total subscribed: 23
|
||||
Ever went BAD during window: 1
|
||||
NEVER went bad (suspect): 22
|
||||
Last status GOOD: 22
|
||||
Last status NOT-GOOD: 1
|
||||
No update received at all: 0
|
||||
|
||||
--- Nodes that NEVER received a bad-quality update (suspect) ---
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/AxisCount
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/CncType
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/MaxAxes
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/MtType
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/SeriesNumber
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Identity/Version
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/OperationMode/Mode
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/OperationMode/ModeText
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/MainNumber
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/Name
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/Number
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/ONumber
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Program/Sequence
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Spindle/S1/Load
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Spindle/S1/MotorSpeedPct
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Timers/CuttingSeconds
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Timers/CycleSeconds
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Timers/OperatingSeconds
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Timers/PowerOnSeconds
|
||||
ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Axes/X/AbsolutePosition
|
||||
ns=2;s=focas-z-34184/z-34184/parts-count
|
||||
ns=2;s=focas-z-34184/z-34184/parts-required
|
||||
@@ -0,0 +1,10 @@
|
||||
Subscribed to 1/1 nodes (interval: 500ms). Press Ctrl+C to stop and print summary.
|
||||
[11/13/2026 15:30:13] ns=2;s=focas-z-34184/z-34184/FOCAS/z-34184/Axes/X/AbsolutePosition = 280.1574 (Good [0x00000000])
|
||||
|
||||
==================== SUMMARY ====================
|
||||
Total subscribed: 1
|
||||
Ever went BAD during window: 0
|
||||
NEVER went bad (suspect): 1
|
||||
Last status GOOD: 1
|
||||
Last status NOT-GOOD: 0
|
||||
No update received at all: 0
|
||||
@@ -0,0 +1,7 @@
|
||||
2026-11-13 10:30:13.208 -05:00 [INF] AddressSpaceApplier: applied plan (kind="PureAdd", added=3, removed=0, changed=0, surgicalRawTags=0, unsRefDeltas=0, renamedFolders=0, rebuild=false)
|
||||
2026-11-13 10:30:13.208 -05:00 [INF] AddressSpaceApplier: hierarchy materialised (areas=1, lines=1, equipment=1, failed=0)
|
||||
2026-11-13 10:30:13.208 -05:00 [INF] AddressSpaceApplier: raw subtree materialised (containers=2, tags=1, subset=true, failed=0)
|
||||
2026-11-13 10:30:23.901 -05:00 [ERR] The domain 'opc.tcp://10.220.157.247:4840/OtOpcUa' is not listed in the server certificate.
|
||||
2026-11-13 10:30:25.383 -05:00 [ERR] The domain 'opc.tcp://10.220.157.247:4840/OtOpcUa' is not listed in the server certificate.
|
||||
2026-11-13 10:30:33.433 -05:00 [ERR] The domain 'opc.tcp://10.220.157.247:4840/OtOpcUa' is not listed in the server certificate.
|
||||
2026-11-13 10:31:04.723 -05:00 [ERR] The domain 'opc.tcp://10.220.157.247:4840/OtOpcUa' is not listed in the server certificate.
|
||||
@@ -311,6 +311,6 @@ Record: client name + version, OtOpcUa git SHA, test date.
|
||||
| G4 | Audit driver table | All 8 drivers listed as shipped | Dev |
|
||||
| G5 | Run deployment checklist doc | All items checked; Fleet Admin signs off — **SIGNED OFF 2026-11-13** | Fleet Admin |
|
||||
| G6 | Browse/read/subscribe against live Galaxy | Good quality, non-empty tree | Dev (dev box) |
|
||||
| G7 | FOCAS CNC smoke — see live-hardware runbook | Session open, Good quality reads | Dev + lab hardware |
|
||||
| G7 | FOCAS CNC smoke — see live-hardware runbook | Session open, Good quality reads — **PASS 2026-11-13** (vd03, Makino 31i-B) | Dev + lab hardware |
|
||||
| G8 | CTT profile run against live endpoint | **Waived 2026-11-13 (owner)** | — |
|
||||
| G9 | Redundancy cutover runbook | A-block + B2 pass with >= 1 client — **PASS 2026-11-13** (`otopcua-cli`) | Dev + two instances |
|
||||
|
||||
@@ -137,12 +137,13 @@ v2 GA requires all of the following:
|
||||
- [x] Phase 5 driver complement shipped (Galaxy, Modbus, S7, OpcUaClient, AbCip, AbLegacy, TwinCAT, FOCAS).
|
||||
- [x] Production deployment checklist (separate doc) signed off by Fleet Admin. **G5 SIGNED OFF 2026-11-13** by the owner as Fleet Admin (#615).
|
||||
- [x] At least one end-to-end integration run against the live Galaxy on the dev box succeeds. **G6 PASS 2026-11-12** (#615): windev test Galaxy `DEV` through mxaccessgw `447070a5`; browse (raw + UNS), read, subscribe, write and readback, and native alarm → Part 9 → ack (confirmed in Galaxy) → clear. Evidence: `docs/drivers/evidence/galaxy-g6-e2e-2026-11-12.md`. Found #895 (fixed, `e113faf5`) and #896 (open). DeployWatcher not exercised (no headless Galaxy redeploy).
|
||||
- [ ] FOCAS live-CNC wire-level smoke (#54) runs clean against a real FANUC control.
|
||||
- [x] FOCAS live-CNC wire-level smoke (#54) runs clean against a real FANUC control. **G7 PASS 2026-11-13** on the deployed DEV server (vd03, `76e73e7d`) against the Makino Z-34184 FANUC 31i-B (series G431, version 22.0). Identity, axis `X/AbsolutePosition` (added by owner-approved deploy `e9fbe63e`, a surgical PureAdd), 6 updates in 5 s, and a 2-minute soak with 0 `EW_SOCKET`/`EW_HANDLE`. The identity values were not compared against the control panel. Evidence: `docs/drivers/evidence/focas-g7-2026-11-13/RESULTS.md`.
|
||||
- [x] ~~OPC UA conformance test (CTT or UA Compliance Test Tool) passes against the live endpoint.~~ **G8 WAIVED by the owner 2026-11-13** (#615): no CTT run is required for v2 GA.
|
||||
- [x] Non-transparent redundancy cutover validated with at least one production client (Ignition 8.3 recommended — see decision #85). **G9 PASS 2026-11-13** (#615), with `otopcua-cli` as the client (owner-approved), on an isolated 2-node pair in the deployed `Unset` mode (`003c7f89`): A1–A3, A5, A7, A8, B2 (crash) and B3 pass; A4/A5b are recorded as unmet under `Unset` and met under `Warm` (#717). Evidence: `docs/plans/evidence/2026-11-13-615-g9/RESULTS.md`.
|
||||
|
||||
## Change log
|
||||
|
||||
- **2026-11-13** — **G7 PASS:** a read-only FOCAS live-CNC smoke on vd03 against the Makino Z-34184 31i-B. The owner approved adding one axis tag (`Axes/X/AbsolutePosition`, deploy `e9fbe63e`, surgical PureAdd); it reads 280.1574 Good. The panel comparison was not done (it needs a person at the machine). G1 awaits the owner's decision.
|
||||
- **2026-11-13** — **G2 PASS.** Two full `dotnet test ZB.MOM.WW.OtOpcUa.slnx` runs (60 projects, ~21k tests). One real defect: a bare `"driver"` role literal from #717's `c569f806`, fixed in `f416b883`. Every other failure is environmental and filed: the Modbus fixture is swamped by load (#909), an intermittent opc-plc `BadRequestInterrupted` (#910), and a scripted-alarm run-guard timing test (#911). G1 (stale Phase 6 compliance scripts) and G7 (FOCAS live CNC) evidence is recorded and awaits the owner's decision.
|
||||
- **2026-11-13** — **G5 (#615) signed off** by the owner as Fleet Admin. With G6/G9 passed and G8 waived, every #615 gate is complete and #615 is closed.
|
||||
- **2026-11-13** — **G9 (#615) PASS and G8 waived.** The owner approved `otopcua-cli` as the G9 client and waived the CTT (G8) for GA. G9 ran on an isolated 2-node pair (`otopcua-g9`, `master` `003c7f89`, redundancy mode `Unset` as deployed). ServiceLevel 250/240, a follower stop left the Primary at 250, and ServerArray lists both URIs. On a graceful Primary stop the CLI's `-F` sessions failed over in about 11 s. On a `docker kill` of the Primary they failed over within 1 s, with a ~2 s data gap and no Bad values; the survivor reached 250 at +44 s. The returning node settled at 240 with no failback. A4 (`RedundancySupport`) and A5b (`ServerUriArray`) are unmet under `Unset` and met under `Warm` (#717, closed; enabling Warm is #907). The run found a CLI defect: array values printed as `System.String[]`, fixed by `ValueFormatter`. Evidence: `docs/plans/evidence/2026-11-13-615-g9/RESULTS.md`. G5 (Fleet Admin sign-off) is the only open exit criterion.
|
||||
|
||||
Reference in New Issue
Block a user