コード例 #1
0
        private void UpdateTelemetry(ITelemetry03 telemetry)
        {
            const int maxErrors = 3;

            if (telemetry == null && _errorCounts < maxErrors)
            {
                return;
            }

            Parameter01Vm.CurrentValue = telemetry?.Kpwm;
            Parameter02Vm.CurrentValue = telemetry?.Ud;

            Parameter03Vm.CurrentValue = telemetry?.Uq;
            Parameter04Vm.CurrentValue = telemetry?.Id;
            Parameter05Vm.CurrentValue = telemetry?.Iq;

            Parameter06Vm.CurrentValue = telemetry?.UcompD;
            Parameter07Vm.CurrentValue = telemetry?.UCompQ;

            Parameter08Vm.CurrentValue = telemetry?.Aux1;
            Parameter09Vm.CurrentValue = telemetry?.Aux2;
            Parameter10Vm.CurrentValue = telemetry?.I2t;
            Parameter11Vm.CurrentValue = telemetry?.FollowMout;
        }
コード例 #2
0
        public void InCycleAction()
        {
            var waiter = new ManualResetEvent(false);
            var cmd    = new ReadTelemetry03Command();

            _commandSenderHost.Sender.SendCommandAsync(_targerAddressHost.TargetAddress,
                                                       cmd, TimeSpan.FromSeconds(0.1), 2,
                                                       (exception, bytes) =>
            {
                ITelemetry03 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(() => { UpdateTelemetry(telemetry); });
                    waiter.Set();
                }
            });
            waiter.WaitOne();
            waiter.Reset();
        }