ajuste
This commit is contained in:
parent
561a299dae
commit
e14e6c343d
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue