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