From 84962cb7debb7053b214e96f222e361d3c774a24 Mon Sep 17 00:00:00 2001 From: Diego Freitas Date: Tue, 3 Mar 2026 13:44:19 -0300 Subject: [PATCH] Ajustado culomb counter --- AgroBase/AgroBase/Forms/frmAcompanhamento.cs | 5 +-- .../Services/CoulombCounterService.cs | 31 ++++++++++++++----- .../OperationControl/Services/GpsService.cs | 2 +- .../Windows/MainWindow.xaml.cs | 2 +- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/AgroBase/AgroBase/Forms/frmAcompanhamento.cs b/AgroBase/AgroBase/Forms/frmAcompanhamento.cs index 44aeb4684..fc3f23a1e 100644 --- a/AgroBase/AgroBase/Forms/frmAcompanhamento.cs +++ b/AgroBase/AgroBase/Forms/frmAcompanhamento.cs @@ -75,7 +75,7 @@ namespace AgroBase.Forms lblGPS.ForeColor = Gps.Inicializado ? Color.Green : Color.Red; if (Gps.Inicializado) { - lblGPSDetalhes.Text = Gps.QualidadeFix.ToString() + " - " + Gps.PrecisaoCm.ToString("0.00") + " cm"; + lblGPSDetalhes.Text = $"{Gps.QualidadeFix} - {Gps.PrecisaoCm:F2} cm"; } lblPerformance.Text = Variaveis.OperacaoEmAndamento.DadosPerformance.PerformanceStr; @@ -87,8 +87,9 @@ namespace AgroBase.Forms if (DalyBMSService.Iniciado) { var Bat = DalyBMSService.DadosLeitura; - lblVBat.Text = $"Bateria: {Bat.Pack.TensaoTotal_V:0.00}V {Bat.Pack.Corrente_A:0.00}A {Bat.Pack.SOC_percent:0.00}% {Bat.TemperaturaMax:0.00}ºC"; + lblVBat.Text = $"Bateria: {Bat.Pack.TensaoTotal_V:F2}V {Bat.Pack.Corrente_A:F2}A {Bat.Pack.SOC_percent:F2}% {Bat.TemperaturaMax:Fw}ºC"; } + lblVBat.ForeColor = DalyBMSService.Iniciado ? Color.Green : Color.Red; } private void AtualizarDadosSensorCorrente(string id, Label lbl) diff --git a/AgroBase/AgroBase/Services/CoulombCounterService.cs b/AgroBase/AgroBase/Services/CoulombCounterService.cs index 1fdeeb38f..669f0e25f 100644 --- a/AgroBase/AgroBase/Services/CoulombCounterService.cs +++ b/AgroBase/AgroBase/Services/CoulombCounterService.cs @@ -115,19 +115,34 @@ namespace AgroBase.Services public void AtualizarConsumo(double distanciaTotalMetrosAtual) { - var Sensor = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.Sensores?.FirstOrDefault(x => x.ID == "AB36V"); + var DalyBms = DalyBMSService.DadosLeitura; + bool bms_iniciado = DalyBms?.Iniciado ?? false; + DateTime? bms_ultima_leitura = DalyBms?.UltimoComandoRecebido; + double bms_tensao = DalyBms?.Pack?.TensaoTotal_V ?? 0; + double bms_corrente = DalyBms?.Pack?.Corrente_A ?? 0; + double bms_potencia = bms_tensao * bms_corrente; + double bms_soc = DalyBms?.Pack?.SOC_percent ?? 0; - Iniciado = Sensor?.Inicializado ?? false; + var Sensor = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.Sensores?.FirstOrDefault(x => x.ID == "AB36V"); + bool sen_iniciado = Sensor?.Inicializado ?? false; + DateTime? sen_ultima_leitura = Sensor?.UltimaLeitura; + double sen_dt = Sensor?.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.dt ?? 0; + double sen_tensao = Sensor?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao)?.atual?.valor ?? 0; + double sen_corrente = (Sensor?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.valor ?? 0) / 1000.0; + double sen_potencia = Sensor?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0; + double sen_soc = Math.Round(FuncoesMatematicas.Map(sen_tensao, VariaveisEquipamento.TensaoMinimaBateria, VariaveisEquipamento.TensaoMaximaBateria, 0.0, 100.0), 2); + + Iniciado = bms_iniciado || sen_iniciado; if (!Iniciado) return; - _dt = Sensor.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.dt ?? 0; - TensaoInstantanea = Sensor.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao)?.atual?.valor ?? 0; - CorrenteInstantanea = (Sensor.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.valor ?? 0) / 1000.0; - PotenciaInstantanea = Sensor.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0; - - PercentualBateria = Math.Round(FuncoesMatematicas.Map(TensaoInstantanea, VariaveisEquipamento.TensaoMinimaBateria, VariaveisEquipamento.TensaoMaximaBateria, 0.0, 100.0), 2); + //_dt = Sensor.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.dt ?? 0; + _dt = (DateTime.Now - ((bms_iniciado ? bms_ultima_leitura : sen_ultima_leitura) ?? DateTime.Now)).TotalSeconds; + TensaoInstantanea = bms_iniciado ? bms_tensao : sen_tensao; + CorrenteInstantanea = bms_iniciado ? bms_corrente : sen_corrente; + PotenciaInstantanea = bms_iniciado ? bms_potencia : sen_potencia; + PercentualBateria = bms_iniciado ? bms_soc : sen_soc; PercentualBateria = FuncoesMatematicas.Clamp(PercentualBateria, 0, 100); // Verifique se as datas são válidas (não MinValue, MaxValue ou valores anômalos) diff --git a/AgroBase/OperationControl/Services/GpsService.cs b/AgroBase/OperationControl/Services/GpsService.cs index bc276bf6c..b4f9694fc 100644 --- a/AgroBase/OperationControl/Services/GpsService.cs +++ b/AgroBase/OperationControl/Services/GpsService.cs @@ -8,7 +8,6 @@ using AgroBase.Services; using AgroBase.Models; using static AgroBase.Models.Enums; using OperationControl.Models; -using System.Windows; using Application = System.Windows.Application; namespace OperationControl.Services @@ -266,6 +265,7 @@ namespace OperationControl.Services if (!sucesso) { Models.Variaveis.MostrarLog("Configurando módulo como base survery in..."); + BaseFix.fimProcesso = null; BaseFix.inicioProcesso = DateTime.UtcNow; await ConfigurarModuloBase(tempo_fixacao: TempoSurveryIn, porta_usb: "com3", porta_saida: "com3"); BaseFix.inicioFix = DateTime.UtcNow; diff --git a/AgroBase/OperationControl/Windows/MainWindow.xaml.cs b/AgroBase/OperationControl/Windows/MainWindow.xaml.cs index 817c8e67e..dfb66fa78 100644 --- a/AgroBase/OperationControl/Windows/MainWindow.xaml.cs +++ b/AgroBase/OperationControl/Windows/MainWindow.xaml.cs @@ -310,7 +310,7 @@ namespace OperationControl.Windows var gpsService = Variaveis.GpsService; lblDispositivos_Status.Content = VariaveisControleOperacao.StatusBase.ToString(); AplicarStatusModuloNaLabel(lblDispositivos_Status, VariaveisControleOperacao.StatusBase, true, false); - double progresso = (gpsService?.BaseFix?.PosicaoBaseFixada ?? false) ? gpsService?.BaseFix?.Progresso ?? double.NaN : double.NaN; + double progresso = !(gpsService?.BaseFix?.PosicaoBaseFixada ?? false) ? gpsService?.BaseFix?.Progresso ?? double.NaN : double.NaN; AtualizarDadosTela_GNSS(Variaveis.GpsService?.UltimaLeitura?.ToGnssModel() ?? new AgroBase.Models.Operacoes.OperacaoParametrosDadosGNSSModel(), marker_id: VariaveisControleOperacao.BaseMarkerID, progresso); AtualizarDadosTela_Heading(Variaveis.GpsService?.UltimaLeitura?.AnguloCarroDefinido ?? 0); }