Skip to content

Gotchas

Use this page only for library-specific caveats.

Shared SLMP setup, profile, point-limit, and end-code symptoms live in the shared SLMP Troubleshooting & Codes page. For profile limits and device availability, use the shared SLMP Profile Parameters page.

Current library-specific caveats

Area Symptom Guidance
IPv6 endpoint Construction fails for an IPv6 literal, or a hostname has no usable address. SLMP TCP and UDP are IPv4-only. Use an IPv4 literal or a hostname with an IPv4 result; the first IPv4 result is used and the library never falls back to IPv6.
Request ordering Multiple async callers share one connection. The ordinary SlmpClient uses one FIFO queue and never overlaps complete operations. Queue wait does not consume the transaction timeout; use separate clients for independent parallel sessions.
Timeout after a read SlmpTimeoutException is thrown and the transport is closed. Call OpenAsync before another request. A read does not change PLC state, so retry only under the application's normal read-consistency policy.
TCP/UDP connection or I/O failure SlmpTransportException is thrown for a read or pre-send failure. Inspect InnerException for native diagnostics, repair the endpoint/network cause, and explicitly reconnect as required.
Interrupted write or remote operation SlmpOperationOutcomeUnknownException is thrown. Do not retry automatically. Inspect Reason, reconcile the PLC/application state through a controlled read or process-specific handshake, then explicitly reopen when it is safe.
Request after a retired transaction SlmpNotConnectedException is thrown. The prior timeout, cancellation, malformed response, or transport failure retired that connection generation. Call OpenAsync; the library never resends the prior request.
var first = client.ReadTypedAsync("D100", "U");
var second = client.ReadTypedAsync("D101", "U");
var values = await Task.WhenAll(first, second);