fix(driver-twincat): resolve Medium code-review finding (Driver.TwinCAT-011)
Confirm AdsErrorCode values from Beckhoff.TwinCAT.Ads 7.0.172 and rewrite MapAdsError with 20 explicit cases. Fix critical bug: AdsSymbolVersionChanged was 0x0702 (DeviceInvalidGroup) but DeviceSymbolVersionInvalid is 1809 (0x0711); correct constant and all comments. Add BadOutOfService for DeviceNotReady and BadInvalidState for DeviceInvalidState/PLC-in-Config. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -516,14 +516,16 @@ public sealed class TwinCATDriver : IDriver, IReadable, IWritable, ITagDiscovery
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Routes a wire-detected ADS symbol-version-changed (0x0702) to Core as an
|
||||
/// <see cref="IRediscoverable"/> invocation (Driver.TwinCAT-013). A PLC re-download
|
||||
/// invalidates every symbol + notification handle, so the address space must be rebuilt
|
||||
/// — this is the documented TwinCAT failure mode, not a transient connection error.
|
||||
/// Routes a wire-detected ADS symbol-version-changed (DeviceSymbolVersionInvalid 1809 /
|
||||
/// 0x0711) to Core as an <see cref="IRediscoverable"/> invocation (Driver.TwinCAT-013).
|
||||
/// A PLC re-download invalidates every symbol + notification handle, so the address
|
||||
/// space must be rebuilt — this is the documented TwinCAT failure mode, not a transient
|
||||
/// connection error.
|
||||
/// </summary>
|
||||
private void HandleSymbolVersionChanged(object? sender, EventArgs e) =>
|
||||
OnRediscoveryNeeded?.Invoke(this, new RediscoveryEventArgs(
|
||||
"TwinCAT symbol-version-changed 0x0702 — PLC program re-downloaded", ScopeHint: "TwinCAT"));
|
||||
"TwinCAT symbol-version-changed (DeviceSymbolVersionInvalid 0x0711) — PLC program re-downloaded",
|
||||
ScopeHint: "TwinCAT"));
|
||||
|
||||
public void Dispose() => DisposeAsync().AsTask().GetAwaiter().GetResult();
|
||||
public async ValueTask DisposeAsync() => await ShutdownAsync(CancellationToken.None).ConfigureAwait(false);
|
||||
|
||||
Reference in New Issue
Block a user