Files
lmxopcua/docs/deployments/wonder-app-vd03-makino-z-34184.md
T
Joseph Doherty a7dd2f59d0
v2-ci / build (push) Failing after 39s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
docs(otopcua): record FixedTree live-validation on wonder-app-vd03 (Makino Z-34184)
2026-06-26 16:02:05 -04:00

100 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Deployment record — wonder-app-vd03 · Makino Pro 5 (Z-34184) FOCAS
**Date configured:** 2026-06-25
**Host:** `wonder-app-vd03.zmr.zimmer.com` (OtOpcUaHost Windows service, single fused admin+driver node)
**Status:** Configured + deployed + served. **Live values blocked** by the FOCAS PDU-v3 driver gap —
see [`docs/plans/2026-06-25-focas-pdu-v3-30i-b-support.md`](../plans/2026-06-25-focas-pdu-v3-30i-b-support.md).
## Equipment
| Field | Value |
|---|---|
| Machine | **Makino Pro 5** (FANUC **30i-B** control) |
| **IP / FOCAS endpoint** | **`10.201.31.5:8193`** (FOCAS Ethernet, TCP) — reachable from the host (and from VPN clients) |
| **ZTag** | **`Z-34184`** |
| Manufacturer / Model | `Makino` / `Pro 5` |
| CNC series (driver) | `Thirty_i` (30i) |
## OtOpcUa host endpoints
- AdminUI: `http://wonder-app-vd03.zmr.zimmer.com:9000` (login disabled — `Security__Auth__DisableLogin=true`)
- OPC UA: `opc.tcp://wonder-app-vd03.zmr.zimmer.com:4840/OtOpcUa`
- Akka cluster: `:4053` · ConfigDb: SQL `OtOpcUaConfig` on `:1433`
## Deployed configuration (cluster `DEV`, Enterprise `zb` / Site `wonder-app-vd03`)
First config ever deployed on this node. All authored via the AdminUI.
| Object | Value |
|---|---|
| Namespace | `dev-equipment` (Equipment), URI `urn:zb:wonder-app-vd03:equipment` |
| UNS path | `zb / wonder-app-vd03 / machining / makino` |
| FOCAS driver instance | `focas-z-34184` ("Makino Pro 5 Z-34184 (FOCAS)"), backend `wire`, FixedTree enabled |
| Device | `10.201.31.5:8193`, series `Thirty_i` |
| Equipment | `z-34184``EquipmentId = EQ-3686c0272279`, MachineCode `Z-34184`, ZTag `Z-34184` |
| Tags | `parts-count``MACRO:3901` (Float64/Double, Read); `parts-required``MACRO:3902` (Float64/Double, Read) |
| Deployment | `0c2db588` (rev `924b59097eba…`) — **Sealed / "In sync"** |
OPC UA node IDs (verified served via the OtOpcUa CLI client):
- Equipment: `ns=2;s=EQ-3686c0272279`
- `ns=2;s=EQ-3686c0272279/parts-count`
- `ns=2;s=EQ-3686c0272279/parts-required`
## Host change required to deploy at all (Akka cluster roles)
This node was joining the Akka cluster **role-less**, so no deployment could ever complete
("a task was canceled"; Fleet status: "no driver-role nodes are Up"). Root cause: `OTOPCUA_ROLES`
(set to `admin,driver`) drives Program.cs actor wiring but does **not** populate the Akka member roles —
those come from config `Cluster:Roles`, which was unset (no `Cluster__Roles` env var; no `Cluster`
section in any appsettings). No code bridges `OTOPCUA_ROLES``AkkaClusterOptions.Roles`.
**Fix applied to the host service** (`HKLM\SYSTEM\CurrentControlSet\Services\OtOpcUaHost``Environment`):
added `Cluster__Roles__0=admin` and `Cluster__Roles__1=driver`, then restarted the service. The member
now joins **UP with roles ADMIN+DRIVER** and deployments seal. Prior env backed up on the host at
`E:\ApiInstall\OtOpcUa\_envbak-20260625T145303.txt`.
> Product follow-up: either wire `OTOPCUA_ROLES` → `AkkaClusterOptions.Roles`, or bake `Cluster:Roles`
> into the deploy template, so a node redeploy doesn't regress to role-less.
## Live verification (OtOpcUa CLI client → server)
`connect` + `browse` confirm the equipment + both tags are served at the node IDs above.
**Driver fix shipped (2026-06-25):** the wire client now accepts PDU v3 (see the linked plan). Validated
directly against `10.201.31.5``MACRO:3901`/`3902` read **Good** from the live 30i-B. **However, the
OtOpcUaHost on this box is still running the pre-v3 driver binary**, so the live OPC UA tags will keep
returning `Bad_WaitingForInitialData` until the rebuilt `ZB.MOM.WW.OtOpcUa.Driver.FOCAS.dll` (or a fresh
self-contained host publish) is deployed to `E:\ApiInstall\OtOpcUa\` and `OtOpcUaHost` is restarted. Once
redeployed, `parts-count`/`parts-required` should go Good (FixedTree + PMC/Parameter still pending the
follow-on v3 command work).
## FixedTree under the Equipment node (feature built 2026-06-26)
The FOCAS **FixedTree** (Identity / Axes / Spindle / Program / Timers) now surfaces under the equipment as
read-only value nodes, via a generic post-connect `ITagDiscovery` injection feature (branch
`feat/focas-fixedtree-equipment-injection`; design + plan at
[`docs/plans/2026-06-26-otopcua-fixedtree-equipment-injection-design.md`](../plans/2026-06-26-otopcua-fixedtree-equipment-injection-design.md)
and [`…-injection.md`](../plans/2026-06-26-otopcua-fixedtree-equipment-injection.md)). After the driver
connects and its `FixedTreeCache` populates (~02 s), nodes are grafted at e.g.
`ns=2;s=EQ-3686c0272279/FOCAS/Identity/SeriesNumber` and `…/FOCAS/Axes/X/AbsolutePosition`, carrying live
values through the same path as the authored `parts-count`/`parts-required` tags, and survive redeploys.
**✅ LIVE-VALIDATED 2026-06-26.** A full self-contained Host overlay built from
`feat/focas-fixedtree-equipment-injection` @ `37cac5de` was deployed to `E:\ApiInstall\OtOpcUa`
(stop → full backup `E:\ApiInstall\OtOpcUa_bak-20260626111416` → robocopy overlay preserving
`appsettings*.json` + `pki\` → restart; `/healthz` 200 Healthy, member Up ADMIN+DRIVER, OPC `:4840`
listening). After the FOCAS driver reconnected, the host log recorded
`DriverHost …: injected 57 discovered node(s) for driver focas-z-34184 under EQ-3686c0272279` and
`AddressSpaceApplier: discovered nodes materialised under EQ-3686c0272279 (folders=14, vars=57)`
no `Exception`/`NotSupportedException`. Verified via the OtOpcUa CLI from a remote client:
- `browse --recursive ns=2;s=EQ-3686c0272279` → new `FOCAS` subtree (`Identity`, `Axes` X/Y/Z/B/C/AA
+ `Actual`, `Spindle/S1`, `Program`, `OperationMode`, `Timers`), stable + idempotent across repeat
browses (no churn); the device-host folder (`10.201.31.5:8193`) was collapsed as designed.
- Sample reads, all **Good** (`Status 0x0`) with fresh/advancing source times:
`FOCAS/Identity/SeriesNumber=G431`, `CncType=31`, `AxisCount=7`,
`FOCAS/Axes/X/AbsolutePosition=2801574` (live), `FOCAS/OperationMode/ModeText=TJOG`.
- Authored `parts-count`/`parts-required` still Good — no regression.
Rollback point retained at `E:\ApiInstall\OtOpcUa_bak-20260626111416`.