protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { if (disposingSubject != null) { disposingSubject.OnNext(Unit.Default); disposingSubject.OnCompleted(); var disposable = (disposingSubject as IDisposable); if (disposable != null) { disposable.Dispose(); } disposingSubject = null; } if (s7Connector != null) { s7Connector.Disconnect().Wait(); s7Connector.Dispose(); s7Connector = null; } } disposed = true; } }
private async Task <Unit> GetAllValues(bool connected, IS7Connector connector) { if (!connected) { return(Unit.Default); } if (multiVariableSubscriptions.ExistingKeys.IsEmpty()) { return(Unit.Default); } var stopWatch = Stopwatch.StartNew(); foreach (var partsOfMultiVarRequest in multiVariableSubscriptions.ExistingKeys.Buffer(MultiVarRequestMaxItems)) { var multiVarRequest = await connector.ExecuteMultiVarRequest(partsOfMultiVarRequest); foreach (var pair in multiVarRequest) { if (multiVariableSubscriptions.TryGetObserver(pair.Key, out var subject)) { subject.OnNext(pair.Value); } } } stopWatch.Stop(); performanceCoutner.Add(stopWatch.ElapsedMilliseconds); PrintAndResetPerformanceStatistik(); return(Unit.Default); }
public async Task <bool> InitializeAsync() { s7Connector = new Sharp7Connector(plcConnectionSettings, varaibleNameParser) { Logger = Logger }; ConnectionState = s7Connector.ConnectionState; await s7Connector.InitializeAsync(); #pragma warning disable 4014 Task.Run(async() => { try { await s7Connector.Connect(); } catch (Exception e) { Logger?.LogError(e, "Error while connecting to PLC"); } }); #pragma warning restore 4014 RunNotifications(s7Connector, TimeSpan.FromMilliseconds(100)) .AddDisposableTo(Disposables); return(true); }
private IDisposable RunNotifications(IS7Connector connector, TimeSpan cycle) { return(ConnectionState.FirstAsync() .Select(states => states == Enums.ConnectionState.Connected) .SelectMany(connected => GetAllValues(connected, connector)) .RepeatAfterDelay(cycle) .LogAndRetryAfterDelay(Logger, cycle, "Error while getting batch notifications from plc") .TakeUntil(disposingSubject) .Subscribe()); }
public async Task <bool> InitializeAsync() { s7Connector = new Sharp7Connector(ipAddress, rackNumber, cpuMpiAddress); ConnectionState = s7Connector.ConnectionState; await s7Connector.InitializeAsync(); #pragma warning disable 4014 Task.Run(async() => { try { await s7Connector.Connect(); } catch (Exception) { } }); #pragma warning restore 4014 return(true); }