From c667c113e3c348a882f2d6646df3a588c9c66a0c Mon Sep 17 00:00:00 2001 From: Peter Butzhammer Date: Wed, 7 Feb 2024 11:29:48 +0100 Subject: [PATCH] Set s7Connector in constructor --- Sharp7.Rx/Sharp7Connector.cs | 6 +++--- Sharp7.Rx/Sharp7Plc.cs | 39 +++++++++++++++++++++++------------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/Sharp7.Rx/Sharp7Connector.cs b/Sharp7.Rx/Sharp7Connector.cs index e8a078a..efdd014 100644 --- a/Sharp7.Rx/Sharp7Connector.cs +++ b/Sharp7.Rx/Sharp7Connector.cs @@ -13,14 +13,14 @@ namespace Sharp7.Rx; internal class Sharp7Connector : IS7Connector { - private readonly BehaviorSubject connectionStateSubject = new BehaviorSubject(Enums.ConnectionState.Initial); + private readonly BehaviorSubject connectionStateSubject = new(Enums.ConnectionState.Initial); private readonly int cpuSlotNr; - private readonly CompositeDisposable disposables = new CompositeDisposable(); + private readonly CompositeDisposable disposables = new(); private readonly string ipAddress; private readonly int port; private readonly int rackNr; - private readonly LimitedConcurrencyLevelTaskScheduler scheduler = new LimitedConcurrencyLevelTaskScheduler(maxDegreeOfParallelism: 1); + private readonly LimitedConcurrencyLevelTaskScheduler scheduler = new(maxDegreeOfParallelism: 1); private readonly IS7VariableNameParser variableNameParser; private bool disposed; diff --git a/Sharp7.Rx/Sharp7Plc.cs b/Sharp7.Rx/Sharp7Plc.cs index d57f63c..974619d 100644 --- a/Sharp7.Rx/Sharp7Plc.cs +++ b/Sharp7.Rx/Sharp7Plc.cs @@ -14,13 +14,13 @@ namespace Sharp7.Rx; public class Sharp7Plc : IPlc { - protected readonly CompositeDisposable Disposables = new CompositeDisposable(); - private readonly ConcurrentSubjectDictionary multiVariableSubscriptions = new ConcurrentSubjectDictionary(StringComparer.InvariantCultureIgnoreCase); - private readonly List performanceCoutner = new List(1000); + private readonly CompositeDisposable disposables = new(); + private readonly ConcurrentSubjectDictionary multiVariableSubscriptions = new(StringComparer.InvariantCultureIgnoreCase); + private readonly List performanceCoutner = new(1000); private readonly PlcConnectionSettings plcConnectionSettings; private readonly IS7VariableNameParser varaibleNameParser = new CacheVariableNameParser(new S7VariableNameParser()); private bool disposed; - private IS7Connector s7Connector; + private Sharp7Connector s7Connector; /// @@ -44,13 +44,26 @@ public class Sharp7Plc : IPlc public Sharp7Plc(string ipAddress, int rackNumber, int cpuMpiAddress, int port = 102, TimeSpan? multiVarRequestCycleTime = null) { plcConnectionSettings = new PlcConnectionSettings {IpAddress = ipAddress, RackNumber = rackNumber, CpuMpiAddress = cpuMpiAddress, Port = port}; + s7Connector = new Sharp7Connector(plcConnectionSettings, varaibleNameParser); + ConnectionState = s7Connector.ConnectionState; - if (multiVarRequestCycleTime != null && multiVarRequestCycleTime > TimeSpan.FromMilliseconds(5)) - MultiVarRequestCycleTime = multiVarRequestCycleTime.Value; + if (multiVarRequestCycleTime != null) + { + if (multiVarRequestCycleTime < TimeSpan.FromMilliseconds(5)) + MultiVarRequestCycleTime = TimeSpan.FromMilliseconds(5); + else + MultiVarRequestCycleTime = multiVarRequestCycleTime.Value; + } + } + + public IObservable ConnectionState { get; } + + public ILogger Logger + { + get => s7Connector.Logger; + set => s7Connector.Logger = value; } - public IObservable ConnectionState { get; private set; } - public ILogger Logger { get; set; } public TimeSpan MultiVarRequestCycleTime { get; } = TimeSpan.FromSeconds(0.1); public int MultiVarRequestMaxItems { get; set; } = 16; @@ -108,9 +121,6 @@ public class Sharp7Plc : IPlc public async Task InitializeAsync() { - s7Connector = new Sharp7Connector(plcConnectionSettings, varaibleNameParser) {Logger = Logger}; - ConnectionState = s7Connector.ConnectionState; - await s7Connector.InitializeAsync(); #pragma warning disable 4014 @@ -128,7 +138,7 @@ public class Sharp7Plc : IPlc #pragma warning restore 4014 RunNotifications(s7Connector, MultiVarRequestCycleTime) - .AddDisposableTo(Disposables); + .AddDisposableTo(disposables); return true; } @@ -207,7 +217,7 @@ public class Sharp7Plc : IPlc if (disposing) { - Disposables.Dispose(); + disposables.Dispose(); if (s7Connector != null) { @@ -254,7 +264,8 @@ public class Sharp7Plc : IPlc var min = performanceCoutner.Min(); var max = performanceCoutner.Max(); - Logger?.LogTrace("Performance statistic during {0} elements of plc notification. Min: {1}, Max: {2}, Average: {3}, Plc: '{4}', Number of variables: {5}, Batch size: {6}", performanceCoutner.Capacity, min, max, average, plcConnectionSettings.IpAddress, + Logger?.LogTrace("Performance statistic during {0} elements of plc notification. Min: {1}, Max: {2}, Average: {3}, Plc: '{4}', Number of variables: {5}, Batch size: {6}", + performanceCoutner.Capacity, min, max, average, plcConnectionSettings.IpAddress, multiVariableSubscriptions.ExistingKeys.Count(), MultiVarRequestMaxItems); performanceCoutner.Clear();