diff --git a/docs/drivers/evidence/twincat-tcbsd-fixture-2026-11-12.md b/docs/drivers/evidence/twincat-tcbsd-fixture-2026-11-12.md new file mode 100644 index 000000000..f7f3a936d --- /dev/null +++ b/docs/drivers/evidence/twincat-tcbsd-fixture-2026-11-12.md @@ -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.