Files
lmxopcua/docs/plans/2026-10-07-native-ab-transport-gate-results.md
T
2026-10-07 17:36:16 -04:00

2.6 KiB

Native AB transport gate results

ab_server suites (T17)

Every ab_server integration test now runs once per transport (TransportMatrix in each integration project). Run 2026-10-07 against 10.100.0.35, one compose profile at a time (AbCip /opt/otopcua-abcip, AB_SERVER_COMPOSE_PROFILE=<p>; AbLegacy ~/otopcua-ablegacy, AB_LEGACY_COMPOSE_PROFILE=<p>); every stack was brought down afterwards.

  • Image: otopcua-ab-server:libplctag-release (sha256:19e814747d85…, built 2026-08-01; ab_server from libplctag v2.7.0 + patches 0001/0002). Host compose files md5-identical to the repo's.
  • Commit: fixes 82d011c7 + 2171fc8c, test matrix 8c68694d.

Counts are pass / fail / skip for the transport-parameterised rows only. Each AbCip run also passed the 6 transport-independent AbServerProfileTests. The AbCip skips are the 3 Emulate-tier tests (AB_SERVER_PROFILE=emulate only). The AbLegacy skips are Slc500_write_then_read…, which skips itself on both transports when the slc500 port (:44819) is down.

Profile Libplctag Native Native ⊇ Libplctag
controllogix 1 / 0 / 3 1 / 0 / 3 yes
compactlogix 1 / 0 / 3 1 / 0 / 3 yes
micro800 0 / 1 / 3 1 / 0 / 3 yes (libplctag fails, see below)
guardlogix 1 / 0 / 3 1 / 0 / 3 yes
slc500 2 / 0 / 0 2 / 0 / 0 yes
micrologix 1 / 0 / 1 1 / 0 / 1 yes
plc5 1 / 0 / 1 1 / 0 / 1 yes

Native-only failures found and fixed:

  • 82d011c7 (controllogix): RegisterSession carried a non-zero sender context, and ab_server rejects that with encapsulation status 1. Every native session failed.
  • 2171fc8c (slc500): ab_server answers Execute PCCC with a fixed requestor id (07 3D F3 45 43 50 21), so the requestor-echo check rejected every native PCCC reply. Native now sends libplctag's identity.

Skips added: none. The PLC-5 integration test only reads N7, so the PLC-5 Unsupported paths (non-N reads, all writes) and status-bit sub-element writes are never exercised by the suite.

micro800: the smoke test used to send /1,0 for every family, and both transports failed against --plc=Micro800. It now uses an empty path for Micro800. With the empty path, native passes. libplctag still fails with BadCommunicationError, because the driver's libplctag runtime passes Path = "" and libplctag answers that with ErrorBadData. A null path works (checked with the capture client). That defect is pre-existing and libplctag-side; it is recorded, not fixed, here.

Differential vs ab_server (T18)

(pending)

AdminUI /run (T19)

(pending)

Real press (T21)

(pending)

Latency (T21)

(pending)