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;
_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;
}