This commit is contained in:
Diego Freitas 2025-12-10 17:01:58 -03:00
parent 561a299dae
commit e14e6c343d
1 changed files with 37 additions and 37 deletions

View File

@ -193,48 +193,49 @@ namespace AgroBase.Services
_distanciaTotalMetrosAnterior = distanciaTotalMetrosAtual; _distanciaTotalMetrosAnterior = distanciaTotalMetrosAtual;
_energiaConsumidaAnterior_Wh = EnergiaConsumida_Wh; _energiaConsumidaAnterior_Wh = EnergiaConsumida_Wh;
// Ignora leituras inválidas ou regressões // ---------- 1) ATUALIZAÇÃO DA JANELA (SÓ SE ANDOU) ----------
if (deltaDist_m <= 0 || deltaWh < 0) 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)
{ {
double dOld = _historicoDeltaDist_m.Dequeue(); // Alimenta a janela móvel
double whOld = _historicoDeltaWh.Dequeue(); _historicoDeltaDist_m.Enqueue(deltaDist_m);
_historicoDeltaWh.Enqueue(deltaWh);
_somaDistanciaJanela_m -= dOld; _somaDistanciaJanela_m += deltaDist_m;
_somaEnergiaJanela_Wh -= whOld; _somaEnergiaJanela_Wh += deltaWh;
}
// Calcula Wh/m médio da janela // Mantém a janela com no máximo JanelaAutonomia_m metros
if (_somaDistanciaJanela_m > 0 && _somaEnergiaJanela_Wh > 0) while (_somaDistanciaJanela_m > JanelaAutonomia_m && _historicoDeltaDist_m.Count > 0)
{ {
WhPorMetro = _somaEnergiaJanela_Wh / _somaDistanciaJanela_m; double dOld = _historicoDeltaDist_m.Dequeue();
} double whOld = _historicoDeltaWh.Dequeue();
else
{
WhPorMetro = 0;
}
if (WhPorMetro > 0) _somaDistanciaJanela_m -= dOld;
{ _somaEnergiaJanela_Wh -= whOld;
// EMA simples }
double alpha = 0.2; // suavização
if (WhPorMetroHistorico <= 0) // Calcula Wh/m médio da janela
WhPorMetroHistorico = WhPorMetro; if (_somaDistanciaJanela_m > 0 && _somaEnergiaJanela_Wh > 0)
{
WhPorMetro = _somaEnergiaJanela_Wh / _somaDistanciaJanela_m;
}
else 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; double consumoRef_WhPorMetro = WhPorMetroReferencia;
if (consumoRef_WhPorMetro > 0 && WhRestante > 0) if (consumoRef_WhPorMetro > 0 && WhRestante > 0)
@ -248,7 +249,6 @@ namespace AgroBase.Services
} }
else else
{ {
// aqui sim, caso extremo sem nada configurado
DistanciaMaximaTeorica_m = 0; DistanciaMaximaTeorica_m = 0;
DistanciaMaximaSegura_m = 0; DistanciaMaximaSegura_m = 0;
} }