agrobot_base/AgroBase/AgroBase/Services/CoulombCounterService.cs

88 lines
2.8 KiB
C#

using AgroBase.Models;
using System;
namespace AgroBase.Services
{
public class CoulombCounterService
{
public CoulombCounterService(double _max_Amp)
{
double coulombsMax = _max_Amp * 3600;
CargaMaxima = coulombsMax;
double consumo = (Variaveis.OperacaoEmAndamento.DispSen?.Dados?.BateriaCargaConsumida ?? 0);
Consumido = consumo < CargaMaxima ? consumo : 0;
CargaAtual = CargaMaxima - Consumido;
}
private double CargaMaxima { get; set; }
private double CargaAtual { get; set; }
private double CargaAtualAmp
{
get
{
return CargaAtual / 3600.0;
}
}
private double Consumido { get; set; }
public double ConsumidoAmp
{
get
{
return Consumido / 3600.0;
}
}
public double PercentualAtual
{
get
{
return (CargaAtual / CargaMaxima) * 100;
}
}
public double PercentualConsumido
{
get
{
return (Consumido / CargaMaxima) * 100;
}
}
public void AtualizarConsumo()
{
// Obtenha as datas das leituras
DateTime ultimaLeitura = PZEMService.UltimaLeitura.DataHora;
DateTime penultimaLeitura = PZEMService.PenultimaLeitura.DataHora;
// Verifique se as datas são válidas (não MinValue, MaxValue ou valores anômalos)
if (ultimaLeitura == DateTime.MinValue || ultimaLeitura == DateTime.MaxValue ||
penultimaLeitura == DateTime.MinValue || penultimaLeitura == DateTime.MaxValue)
{
Console.WriteLine("Erro: Leitura inválida detectada.");
return;
}
// Calcule a diferença de tempo em segundos
double DifTempo = (ultimaLeitura - penultimaLeitura).TotalSeconds;
// Defina um limite para a diferença de tempo (por exemplo, 3600 segundos = 1 hora)
double limiteTempo = 3600; // Ajuste conforme necessário
if (DifTempo <= 0 || DifTempo > limiteTempo)
{
Console.WriteLine($"Erro: Diferença de tempo inválida detectada: {DifTempo} segundos.");
return;
}
// Calcule os coulombs e atualize os valores
double coulombsLeitura = (PZEMService.UltimaLeitura.Corrente) * DifTempo;
Consumido += coulombsLeitura;
CargaAtual -= coulombsLeitura;
}
public void AtualizarValorConsumido(double _consumo_Amp)
{
double coulombsConsumidos = _consumo_Amp * 3600;
Consumido = coulombsConsumidos;
}
}
}