MTConnect driver: verify Java reference coverage and close gaps #804
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Request
Ensure lmxopcua provides the read-only MTConnect Agent driver capabilities demonstrated by the Java driver in ignitionoee, and close any verified gaps.
Existing implementation: lmxopcua already contains
ZB.MOM.WW.OtOpcUa.Driver.MTConnectand its contracts/tests. Treat this as a coverage and parity review of that driver, followed by any necessary additions, rather than creating a duplicate driver. Existing work includes #613, #626, #627, #628 and #650; preserve capabilities beyond the Java baseline.Java reference
Capabilities to verify
/probediscovery,/currentsnapshots, and multipart/samplestreaming; configurable Agent URI and optional device scope.UNAVAILABLE, malformed values, and transport failures; preserve source timestamps and avoid fabricated Good values.Acceptance criteria
The Java driver was live-validated on development Ignition against the fixture on 2026-08-10, including live subscriptions, adapter UNAVAILABLE, Agent restart/rebuild, cached reads, stalled-stream watchdog, and rebaseline limits. This is reference evidence; it does not establish validation of lmxopcua's implementation or every MTConnect device/vendor.
Done on master (merge 8a0f0df0;
d6392dae,f17ff1e6). Parity matrix vs the ignitionoee Java driver is indocs/drivers/MTConnect.md§"Java reference parity (#804)": ~35 capabilities already covered, .NET exceeds Java on TIME_SERIES/DATA_SET/TABLE, native CONDITION alarms, backoff and adaptive sample count (all kept). Nine verified gaps closed, each with a test that failed before:6–9. stray Description under Components, float overflow/NaN served Good,
42.000000on ints, duplicate sibling component names.Unit 714 (was 678), integration vs the shared cppagent fixture 20/20 (was 18), plus a driver-level live run (adapter stop, Agent restart, paused Agent).
IWritable(since 2026-08-05) writes only the Agent's AllowPut surface, never the controller; off by default behind two gates — consistent with "no controller write path". Follow-ups: #823, #824 (owner decision), #825.