docs(#755): TC/BSD fixture reachable but PLC runtime in Config (trial licence expired 2026-05-01)
v2-ci / unit-tests (push) Has been cancelled

Read-only ADS gate from WW_DEV_VM: port 10000 Config, port 851 absent (error 6).
Boot project is the committed OtOpcUaTwinCatFixture without GVL_Perf/FB_PerfChurn.
Member writes, coalescing and #761 array writes remain blocked; no multi-hop hardware.

Claude-Session: https://claude.ai/code/session_01GT67ACmpMR7b9LGRPLijMi
This commit is contained in:
Joseph Doherty
2026-11-12 23:09:50 -05:00
parent 6147e8dcba
commit 85db1dbfba
@@ -0,0 +1,71 @@
# TwinCAT TC/BSD fixture state: 10.100.0.128, 2026-11-12
Gitea #755 items that need the fixture: discovered struct/FB member writes, notification coalescing
under load and the multi-hop AMS route. The #761 TwinCAT array-write residual also needs it.
**Result: none of them can run yet. The fixture's network and ADS system service are up, but its PLC
runtime is in Config because the only licence on it, a 7-day trial, expired on 2026-05-01. AMS port
851 does not exist until the runtime reaches Run, so every PLC symbol read, write and notification
fails with ADS error 6 ("target port not found").** No driver code or tests changed. All access in
this run was read-only: ReadState plus ADS file-service reads (FFILEFIND, FOPEN read-only, FREAD,
FCLOSE). There were no WriteControl calls, route changes or file writes.
## Target
| | |
|---|---|
| Host | TC/BSD ESXi VM `PC-A9A32B`, 10.100.0.128 (UniFi DHCP reservation, see project memory) |
| AmsNetId / PLC port | `41.169.163.43.1.1` : 851 |
| Network | ping OK (about 5 ms); TCP 48898 open from the Mac |
| ADS path used | WW_DEV_VM (10.100.0.48). Its TwinCAT XAR 4024 router holds the static route `PC-A9A32B → 10.100.0.128 / 41.169.163.43.1.1` (read back from `StaticRoutes.xml`; not modified). The Mac has no route of its own on the fixture: UDP AddRoute with the factory login is refused (0x704), so a Mac route needs the real fixture password. |
## Observed
```
port 10000: AdsState=Config DeviceState=1
port 851: AdsErrorException Target port could not be found. (AdsErrorCode: 6, 0x6)
GVL_Fixture.nCounter / GVL_Primitives.vWord / GVL_Plant...Motor.Temperature: AdsErrorCode 6
```
Licence. `/usr/local/etc/TwinCAT/3.1/Target/License/TrialLicense.tclrs` (1,372 bytes, read over ADS) is the
only licence file:
```
IssueTime 2026-04-23T05:23:00
ExpireTime 2026-05-01T00:00:00
```
Boot project. `/usr/local/etc/TwinCAT/3.1/Boot/Plc/Port_851.app` (84,140 bytes, SHA-256 `80894edf…17fd4f`,
with `Port_851.autostart` present) and `CurrentConfig.xml` (`CreateTime="2026-04-23T09:07:08"`). The `.app`
strings name the committed fixture project `OtOpcUaTwinCatFixture`: `GVL_Fixture`, `GVL_Primitives`,
`GVL_Arrays`, `GVL_Enums`, `GVL_Plant`, `MAIN`, `FB_LineSim`, `FB_AxisSim` and the `ST_*` DUTs from
`tests/.../TwinCatProject/PLC/`. **`GVL_Perf` and `FB_PerfChurn` are absent.** Those come from the
stranded `origin/auto/driver-gaps` branch and are not on master.
## Per-item status
| #755 item | Status | What unblocks it |
|---|---|---|
| Discovered struct/FB member writes | **Blocked: runtime in Config** | Renew the trial licence, then put the runtime in Run. The boot project already has the needed shapes (`GVL_Plant.Line1` structs; FB instances `MAIN.lineSim` (`FB_LineSim`) and its `axisSim[1..3,1..4]` (`FB_AxisSim`)), so no PLC deploy is needed. |
| Notification coalescing under a saturated cycle | **Blocked: licence, and a PLC deploy** | The licence as above. `GVL_Perf`/`FB_PerfChurn` are not in the boot project, so a saturated-cycle test means building and activating a project that includes them (owner action in XAE). Without it, only an unsaturated proxy is possible: many notifications on the `FB_LineSim` churn. |
| Multi-hop AMS route | **No second hop exists** | No IPC-gateway topology is in reach. The only chain (Mac → WW_DEV_VM XAR → TC/BSD) would need a new route for the Mac on WW_DEV_VM's router, which is outside this run's write scope. It is also a routed router-to-router path, not a target behind an EtherCAT/IPC gateway. The driver itself has no multi-hop logic: routing is entirely the AMS router's job. |
| Test Connect happy path | Done 2026-11-11 (see `twincat-z35474-testconnect-2026-11-11.md` and #863) | n/a |
| Stale `oee-tagdump-mac` routes on Z34834 | Not done: needs an ADS write on a production press | Owner approval |
| XAR/TC-BSD trial licence rotation | Manual ops item. The expired licence above is why the fixture is in Config. | A paid runtime licence, or a renewal every 7 days |
| #761 array-write residual | **Blocked: runtime in Config** | Same as member writes. `GVL_Arrays` is in the boot project. |
## How to unblock (owner actions)
1. From a Windows box with **TwinCAT XAE** that has a route to `41.169.163.43.1.1`, renew the 7-day trial on the
target: SYSTEM → License → "7 Days Trial License" (captcha). WW_DEV_VM has the route but only XAR, not XAE.
2. Restart TwinCAT into Run. The `Port_851` boot project autostarts.
3. Re-run with `TWINCAT_TARGET_HOST`/`TWINCAT_TARGET_NETID` set, from WW_DEV_VM (it has .NET SDK 10.0.204 and the
route). The member-write, array-write and unsaturated-load gates can then run within the 7-day window.
4. For the saturated-cycle coalescing gate, also add `GVL_Perf`/`FB_PerfChurn` from `origin/auto/driver-gaps` to the
project and activate it.
## Tools
Scratch tools, not in the repo: `adsprobe.exe` (ReadState + fixture reads) and `adsfile.exe` (read-only ADS
file service) are in `C:\Users\dohertj2\` on WW_DEV_VM, built against Beckhoff.TwinCAT.Ads 7.0.172. A note on
the TC/BSD file service: FOPEN takes mode `0x1` (read). `0x5` (read|binary) is refused with 1803.