public void InCycleAction() { var waiter = new ManualResetEvent(false); var cmd = new ReadTelemetry02Command(); _commandSenderHost.Sender.SendCommandAsync(_targerAddressHost.TargetAddress, cmd, TimeSpan.FromSeconds(0.1), 2, (exception, bytes) => { ITelemetry02 telemetry = null; try { if (exception != null) { throw new Exception("Произошла ошибка во время обмена", exception); } var result = cmd.GetResult(bytes); _errorCounts = 0; telemetry = result; } catch (Exception ex) { _errorCounts++; // TODO: потенциально опасная ситуация (переполнение инта (примерно через 233 часа при опросе телеметрии раз в 50 милисекунд) telemetry = null; //_logger.Log("Ошибка: " + ex.Message); //Console.WriteLine(ex); } finally { _uiRoot.Notifier.Notify(() => { // TODO: result update telemetry UpdateTelemetry(telemetry); }); waiter.Set(); } }); waiter.WaitOne(); waiter.Reset(); }
private void UpdateTelemetry(ITelemetry02 telemetry) { const int maxErrors = 3; if (telemetry == null && _errorCounts < maxErrors) { return; } Parameter01Vm.CurrentValue = telemetry?.Wout; Parameter02Vm.CurrentValue = telemetry?.WsetF; Parameter03Vm.CurrentValue = telemetry?.FIset; Parameter04Vm.CurrentValue = telemetry?.FImag; Parameter05Vm.CurrentValue = telemetry?.FImagF; Parameter06Vm.CurrentValue = telemetry?.IqSet; Parameter07Vm.CurrentValue = telemetry?.IdSet; Parameter08Vm.CurrentValue = telemetry?.Ed; Parameter09Vm.CurrentValue = telemetry?.Eq; Parameter10Vm.CurrentValue = telemetry?.Ef; Parameter11Vm.CurrentValue = telemetry?.Efi; }