From e14e6c343d8e70966fdc574cfa769dd3bf2558be Mon Sep 17 00:00:00 2001 From: Diego Freitas Date: Wed, 10 Dec 2025 17:01:58 -0300 Subject: [PATCH] ajuste --- .../Services/CoulombCounterService.cs | 74 +++++++++---------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/AgroBase/AgroBase/Services/CoulombCounterService.cs b/AgroBase/AgroBase/Services/CoulombCounterService.cs index c499b1679..1fdeeb38f 100644 --- a/AgroBase/AgroBase/Services/CoulombCounterService.cs +++ b/AgroBase/AgroBase/Services/CoulombCounterService.cs @@ -193,48 +193,49 @@ namespace AgroBase.Services _distanciaTotalMetrosAnterior = distanciaTotalMetrosAtual; _energiaConsumidaAnterior_Wh = EnergiaConsumida_Wh; - // Ignora leituras inválidas ou regressões - if (deltaDist_m <= 0 || deltaWh < 0) - return; - - // Alimenta a janela móvel - _historicoDeltaDist_m.Enqueue(deltaDist_m); - _historicoDeltaWh.Enqueue(deltaWh); - - _somaDistanciaJanela_m += deltaDist_m; - _somaEnergiaJanela_Wh += deltaWh; - - // Mantém a janela com no máximo JanelaAutonomia_m metros - while (_somaDistanciaJanela_m > JanelaAutonomia_m && _historicoDeltaDist_m.Count > 0) + // ---------- 1) ATUALIZAÇÃO DA JANELA (SÓ SE ANDOU) ---------- + if (deltaDist_m > 0 && deltaWh >= 0) { - double dOld = _historicoDeltaDist_m.Dequeue(); - double whOld = _historicoDeltaWh.Dequeue(); + // Alimenta a janela móvel + _historicoDeltaDist_m.Enqueue(deltaDist_m); + _historicoDeltaWh.Enqueue(deltaWh); - _somaDistanciaJanela_m -= dOld; - _somaEnergiaJanela_Wh -= whOld; - } + _somaDistanciaJanela_m += deltaDist_m; + _somaEnergiaJanela_Wh += deltaWh; - // Calcula Wh/m médio da janela - if (_somaDistanciaJanela_m > 0 && _somaEnergiaJanela_Wh > 0) - { - WhPorMetro = _somaEnergiaJanela_Wh / _somaDistanciaJanela_m; - } - else - { - WhPorMetro = 0; - } + // Mantém a janela com no máximo JanelaAutonomia_m metros + while (_somaDistanciaJanela_m > JanelaAutonomia_m && _historicoDeltaDist_m.Count > 0) + { + double dOld = _historicoDeltaDist_m.Dequeue(); + double whOld = _historicoDeltaWh.Dequeue(); - if (WhPorMetro > 0) - { - // EMA simples - double alpha = 0.2; // suavização - if (WhPorMetroHistorico <= 0) - WhPorMetroHistorico = WhPorMetro; + _somaDistanciaJanela_m -= dOld; + _somaEnergiaJanela_Wh -= whOld; + } + + // Calcula Wh/m médio da janela + if (_somaDistanciaJanela_m > 0 && _somaEnergiaJanela_Wh > 0) + { + WhPorMetro = _somaEnergiaJanela_Wh / _somaDistanciaJanela_m; + } else - WhPorMetroHistorico = WhPorMetroHistorico * (1 - alpha) + WhPorMetro * alpha; - } + { + WhPorMetro = 0; + } - // Calcula distâncias máxima teórica e segura + if (WhPorMetro > 0) + { + // EMA simples + double alpha = 0.2; // suavização + if (WhPorMetroHistorico <= 0) + WhPorMetroHistorico = WhPorMetro; + else + WhPorMetroHistorico = WhPorMetroHistorico * (1 - alpha) + WhPorMetro * alpha; + } + } + // se deltaDist_m <= 0, só não atualiza a janela, mas continua + + // ---------- 2) CÁLCULO DA AUTONOMIA (SEMPRE QUE POSSÍVEL) ---------- double consumoRef_WhPorMetro = WhPorMetroReferencia; if (consumoRef_WhPorMetro > 0 && WhRestante > 0) @@ -248,7 +249,6 @@ namespace AgroBase.Services } else { - // aqui sim, caso extremo sem nada configurado DistanciaMaximaTeorica_m = 0; DistanciaMaximaSegura_m = 0; }