88 lines
2.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|