示例#1
0
        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();
        }
示例#2
0
        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;
        }