docs(abcip): Large Forward Open refusal targets and ConnectionSize honouring (T21 review r1 M6)
The 5069-L3x supports the Large open, as the press proved. The narrow/refusing case is a pre-v20 1769-L3x or a bridge. AbCipDeviceOptions.ConnectionSize: the native transport honours it on the wire; libplctag ignores it. Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
@@ -120,7 +120,7 @@ happens when a non-safety write lands on a real `1756-L8xS` — is not exercised
|
||||
|
||||
Since T21 the CompactLogix profile defaults to a **Large** Forward Open (4002), matching what libplctag
|
||||
opens for `plc=compactlogix`. The old 504 default was cosmetic under libplctag, which never received it,
|
||||
and cost the native transport ~3× the round trips per poll. A narrower 5069-L3x / pre-v20 target that refuses
|
||||
and cost the native transport ~3× the round trips per poll. A pre-v20 CompactLogix (1769-L3x) or a bridge that refuses
|
||||
the Large open is handled by `CipConnection`'s fallback (a regular open at min(size, 504) in the same
|
||||
throttled attempt). That fallback is pinned by unit tests against a fake target only: `ab_server` accepts
|
||||
any size, so a refusing controller is never exercised here.
|
||||
|
||||
@@ -129,11 +129,9 @@ public sealed class AbCipDriverOptions
|
||||
/// touching every other device on the same family.</param>
|
||||
/// <param name="ConnectionSize">Per-device override for the Forward Open
|
||||
/// ConnectionSize (Large Forward Open packet size in bytes). <c>null</c> inherits the family
|
||||
/// profile's <c>DefaultConnectionSize</c>. Honoured by the driver layer; the underlying
|
||||
/// libplctag 1.5.2 wrapper has no direct <c>ConnectionSize</c> property, so the value is
|
||||
/// plumbed through <see cref="AbCipTagCreateParams"/> for forward-compat with future wrapper
|
||||
/// versions or a custom tag-attribute path; current builds use the family profile default at
|
||||
/// the wire layer regardless.</param>
|
||||
/// profile's <c>DefaultConnectionSize</c>. The native transport honours it on the wire (its Forward
|
||||
/// Open size). The libplctag transport ignores it: the libplctag 1.5.2 wrapper has no
|
||||
/// <c>ConnectionSize</c> property, so libplctag opens with its own size for the <c>plc</c> attribute.</param>
|
||||
public sealed record AbCipDeviceOptions(
|
||||
string HostAddress,
|
||||
AbCipPlcFamily PlcFamily = AbCipPlcFamily.ControlLogix,
|
||||
|
||||
@@ -43,7 +43,7 @@ public sealed record AbCipPlcFamilyProfile(
|
||||
LibplctagPlcAttribute: "compactlogix",
|
||||
// Large Forward Open, matching libplctag: `plc=compactlogix` opens Large (0x5B, 4002) and the
|
||||
// native transport must not pack into a third of the window (T21 latency harness: 504 cost ~3x
|
||||
// the round trips per poll). A narrower 5069-L3x / pre-v20 target that refuses the Large open
|
||||
// the round trips per poll). A pre-v20 CompactLogix (1769-L3x) or a bridge that refuses the Large open
|
||||
// is covered by CipConnection's fallback — a regular open at min(size, 504) inside the same
|
||||
// throttled attempt. An explicit ConnectionSize (driver options or per device) still wins.
|
||||
DefaultConnectionSize: 4002,
|
||||
|
||||
Reference in New Issue
Block a user