af19db4ed1
Sum-read (#310): batches a poll's reads per device into sum commands capped at sumReadMaxItems, per-item ADS errors mapped per tag, falls back to individual reads when the target refuses the command. Diagnostics (#314): ADS state, app name, online-change count, task cycle/exec/jitter via IDriverDiagnostics. Re-implemented against the current raw-byte read path (stranded auto/driver-gaps commits predate it). Sum-write not ported. Unit tests only; live gate pending a route. Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
22 lines
1.0 KiB
C#
22 lines
1.0 KiB
C#
namespace ZB.MOM.WW.OtOpcUa.Driver.TwinCAT;
|
|
|
|
/// <summary>
|
|
/// Thrown by <see cref="ITwinCATClient.ReadValuesAsync"/> when the TARGET refuses the ADS sum-read
|
|
/// command as a whole (service or index group not supported). It is not a comms fault: the driver marks
|
|
/// the device "no sum-read" and re-reads the batch with individual reads, so the poll still completes.
|
|
/// </summary>
|
|
internal sealed class TwinCATSumReadRefusedException : Exception
|
|
{
|
|
/// <summary>Initializes a new instance of the <see cref="TwinCATSumReadRefusedException"/> class.</summary>
|
|
/// <param name="adsErrorCode">The overall ADS error code the target answered with.</param>
|
|
/// <param name="inner">The underlying exception, if any.</param>
|
|
public TwinCATSumReadRefusedException(uint adsErrorCode, Exception? inner = null)
|
|
: base($"ADS sum-read refused by the target (ADS error {adsErrorCode})", inner)
|
|
{
|
|
AdsErrorCode = adsErrorCode;
|
|
}
|
|
|
|
/// <summary>Gets the overall ADS error code.</summary>
|
|
public uint AdsErrorCode { get; }
|
|
}
|