diff --git a/src/PlcInterface.Ads/IServiceCollectionExtension.cs b/src/PlcInterface.Ads/IServiceCollectionExtension.cs index ab540f76..d9bed9b0 100644 --- a/src/PlcInterface.Ads/IServiceCollectionExtension.cs +++ b/src/PlcInterface.Ads/IServiceCollectionExtension.cs @@ -1,6 +1,5 @@ using System.IO.Abstractions; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; using PlcInterface.Ads.TwinCATAbstractions; namespace PlcInterface.Ads; @@ -25,7 +24,7 @@ public static IServiceCollection AddAdsPLC(this IServiceCollection serviceDescri .AddSingletonFactory, IAdsPlcConnection>() .AddSingleton(x => x.GetRequiredService()) .AddTransient() - .AddSingleton(x => new TwinCAT.Ads.AdsClient(x.GetRequiredService>())) + .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() diff --git a/src/PlcInterface.Ads/PlcConnection.cs b/src/PlcInterface.Ads/PlcConnection.cs index 174a6f93..feab6667 100644 --- a/src/PlcInterface.Ads/PlcConnection.cs +++ b/src/PlcInterface.Ads/PlcConnection.cs @@ -71,12 +71,12 @@ public void Disconnect() => DisconnectAsync().GetAwaiter().GetResult(); /// - public Task DisconnectAsync() - => Task.Run(() => - { - _ = adsDisposableConnection.Disconnect(); - adsDisposableConnection.ConnectionStateChanged -= AdsDisposableConnection_ConnectionStateChanged; - }); + public async Task DisconnectAsync() + { + using var timeoutCts = new CancellationTokenSource(TimeSpan.FromSeconds(2)); + _ = await adsDisposableConnection.DisconnectAsync(timeoutCts.Token).ConfigureAwait(false); + adsDisposableConnection.ConnectionStateChanged -= AdsDisposableConnection_ConnectionStateChanged; + } /// public void Dispose() diff --git a/src/PlcInterface.Ads/PlcInterface.Ads.csproj b/src/PlcInterface.Ads/PlcInterface.Ads.csproj index 9b0f1c58..b94278fc 100644 --- a/src/PlcInterface.Ads/PlcInterface.Ads.csproj +++ b/src/PlcInterface.Ads/PlcInterface.Ads.csproj @@ -18,9 +18,9 @@ - - - + + + diff --git a/src/PlcInterface.Ads/TwincatAbstractions/SumSymbolReadAbstraction.cs b/src/PlcInterface.Ads/TwincatAbstractions/SumSymbolReadAbstraction.cs index 531c14ee..bc818e4b 100644 --- a/src/PlcInterface.Ads/TwincatAbstractions/SumSymbolReadAbstraction.cs +++ b/src/PlcInterface.Ads/TwincatAbstractions/SumSymbolReadAbstraction.cs @@ -10,7 +10,7 @@ namespace PlcInterface.Ads.TwinCATAbstractions; /// internal sealed class SumSymbolReadAbstraction(IAdsConnection connection, IList symbols) : ISumSymbolRead { - private readonly SumSymbolRead backend = new(connection, symbols); + private readonly SumSymbolRead backend = new(connection, symbols, SumFallbackMode.All); /// public object[] Read() diff --git a/src/PlcInterface.Ads/TwincatAbstractions/SumSymbolWriteAbstraction.cs b/src/PlcInterface.Ads/TwincatAbstractions/SumSymbolWriteAbstraction.cs index 1002c58c..adf99444 100644 --- a/src/PlcInterface.Ads/TwincatAbstractions/SumSymbolWriteAbstraction.cs +++ b/src/PlcInterface.Ads/TwincatAbstractions/SumSymbolWriteAbstraction.cs @@ -10,7 +10,7 @@ namespace PlcInterface.Ads.TwinCATAbstractions; /// internal sealed class SumSymbolWriteAbstraction(IAdsConnection connection, IList symbols) : ISumSymbolWrite { - private readonly SumSymbolWrite backend = new(connection, symbols); + private readonly SumSymbolWrite backend = new(connection, symbols, SumFallbackMode.All); /// public void Write(object[] values) diff --git a/src/PlcInterface.Sandbox/PlcInterface.Sandbox.csproj b/src/PlcInterface.Sandbox/PlcInterface.Sandbox.csproj index 0498caaa..e5e8c981 100644 --- a/src/PlcInterface.Sandbox/PlcInterface.Sandbox.csproj +++ b/src/PlcInterface.Sandbox/PlcInterface.Sandbox.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/PlcInterface.Sandbox/Program.cs b/src/PlcInterface.Sandbox/Program.cs index 182a29e4..29e458d4 100644 --- a/src/PlcInterface.Sandbox/Program.cs +++ b/src/PlcInterface.Sandbox/Program.cs @@ -1,7 +1,5 @@ -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; using PlcInterface.Ads; using PlcInterface.OpcUa; using PlcInterface.Sandbox.PLCCommands; @@ -58,7 +56,7 @@ private static async Task Main(string[] args) _ = builder.Services .AddAdsPLC() - .AddSingleton(x => new AmsTcpIpRouter(x.GetRequiredService>(), x.GetRequiredService())) + .AddSingleton() .AddOptions() .BindConfiguration(AdsConnectionSettingsSection) .Services diff --git a/test/PlcInterface.Ads.Tests/PlcConnectionTests.cs b/test/PlcInterface.Ads.Tests/PlcConnectionTests.cs index 5f0de2f2..6fd286cb 100644 --- a/test/PlcInterface.Ads.Tests/PlcConnectionTests.cs +++ b/test/PlcInterface.Ads.Tests/PlcConnectionTests.cs @@ -141,7 +141,7 @@ public void DisconnectCallsDisconnectOnClient() connection.Disconnect(); // Assert - adsClientMock.Verify(x => x.Disconnect(), Times.Once); + adsClientMock.Verify(x => x.DisconnectAsync(It.IsAny()), Times.Once); } [TestMethod] @@ -161,7 +161,7 @@ public async Task DisconnectCallsDisconnectOnClientAsync() await connection.DisconnectAsync(); // Assert - adsClientMock.Verify(x => x.Disconnect(), Times.Once); + adsClientMock.Verify(x => x.DisconnectAsync(It.IsAny()), Times.Once); } [TestMethod]