Ajustes no fluxo de fixacao da posicao da base

This commit is contained in:
Diego Freitas 2026-03-03 09:32:36 -03:00
parent c8861877fa
commit bd0dc7c6a5
2 changed files with 29 additions and 13 deletions

View File

@ -225,7 +225,9 @@ namespace OperationControl.Services
private bool InverterHeading = false;
private bool LoopRTK_Ntrip = false;
private bool Ntrip_Conectado = false;
private bool CorrecaoRTK_Ntrip = false;
private int TempoSurveryIn = 120;
public int TaxaAmostragemHz = 5;
private int rtk_timeout = 60;
public GPSModel UltimaLeitura = new GPSModel();
@ -245,6 +247,7 @@ namespace OperationControl.Services
LeverArm = new GeoLeverArm(VariaveisControleOperacao.LeverArmFrontal, VariaveisControleOperacao.LeverArmLateral);
BaseFix = new BaseFixService(PortaGps, this);
bool sucesso = await BaseFix.FixarBaseViaNtripAsync(
portaUsb: "com3",
portaSaida: "com3",
portaEntrada: "com3",
startNtrip: async () =>
@ -258,11 +261,13 @@ namespace OperationControl.Services
Models.Variaveis.MostrarLog("Parando correção NTRIP...");
CorrecaoRTK_Ntrip = false;
},
segsFixEstavel: 120
segsFixEstavel: TempoSurveryIn
);
if (!sucesso)
{
await ConfigurarModuloBase(tempo_fixacao: 60, porta_saida: "com3");
Models.Variaveis.MostrarLog("Configurando módulo como base survery in...");
await ConfigurarModuloBase(tempo_fixacao: TempoSurveryIn, porta_usb: "com3", porta_saida: "com3");
BaseFix.PosicaoBaseFixada = true;
}
}
@ -1054,6 +1059,7 @@ namespace OperationControl.Services
{
if ((response ?? "").Contains("200 OK"))
{
Ntrip_Conectado = true;
Models.Variaveis.MostrarLog("Conexão bem-sucedida ao mountpoint!");
byte[] buffer = new byte[4096];
@ -1069,6 +1075,7 @@ namespace OperationControl.Services
}
else
{
Ntrip_Conectado = false;
Models.Variaveis.MostrarLog($"Falha na conexão com NTRIP: {response}");
await Task.Delay(5000); // Aguarde antes de tentar novamente
break;
@ -1079,12 +1086,14 @@ namespace OperationControl.Services
}
catch (Exception ex)
{
Ntrip_Conectado = false;
Models.Variaveis.MostrarLog($"Erro na conexão RTK: {ex.Message}");
await Task.Delay(5000); // Aguarde antes de tentar novamente
}
}
LoopRTK_Ntrip = false;
Ntrip_Conectado = false;
}
private void AtualizarCoordenadasGPS()
@ -1152,15 +1161,19 @@ namespace OperationControl.Services
string progresso = "";
if (CorrecaoEmAndamento)
{
progresso = $"Recebendo correção RTK via Ntrip. Progresso geral: {ProgressoGeral.ToString("0.00")}%, Progresso correção: {Progresso.ToString("0.00")}%";
progresso = $"Recebendo correção RTK via Ntrip. Progresso geral: {ProgressoGeral:F2}%, Progresso correção: {Progresso:F2}%";
}
else if (CorrecaoAbsoluta && inicioProcesso.HasValue && fimProcesso.HasValue)
else if (PosicaoBaseFixada && CorrecaoAbsoluta && inicioProcesso.HasValue && fimProcesso.HasValue)
{
progresso = $"Correção absoluta concluída com {amostras_pos.Count} amostras em {(fimProcesso.Value - inicioProcesso.Value).TotalSeconds.ToString("0.00")} segundos";
progresso = $"Correção absoluta concluída com {amostras_pos.Count} amostras em {(fimProcesso.Value - inicioProcesso.Value).TotalSeconds:F2} segundos";
}
else if (PosicaoBaseFixada && !CorrecaoAbsoluta)
{
progresso = $"Correção relativa concluída em {segundosFixEstavel} segundos";
}
else if (inicioProcesso.HasValue && fimProcesso.HasValue)
{
progresso = $"Correção absoluta falhou com {amostras_pos.Count} amostras em {(fimProcesso.Value - inicioProcesso.Value).TotalSeconds.ToString("0.00")} segundos";
progresso = $"Correção absoluta falhou com {amostras_pos.Count} amostras em {(fimProcesso.Value - inicioProcesso.Value).TotalSeconds:F2} segundos";
}
else
{
@ -1169,6 +1182,7 @@ namespace OperationControl.Services
return progresso;
}
}
public bool PosicaoBaseFixada = false;
public bool CorrecaoAbsoluta = false;
public bool CorrecaoEmAndamento = false;
public bool FixLiberado = false;
@ -1201,6 +1215,7 @@ namespace OperationControl.Services
Models.Variaveis.MostrarLog("Poucas amostras de RTK FIX coletadas. Tente aumentar o tempo ou verificar sinais.");
CorrecaoAbsoluta = false;
FixLiberado = false;
PosicaoBaseFixada = false;
return CorrecaoAbsoluta;
}
@ -1214,6 +1229,7 @@ namespace OperationControl.Services
Models.Variaveis.MostrarLog($" lat = {lat:0.000000000}, lon = {lon:0.000000000}, h = {h:0.000}");
CorrecaoAbsoluta = true;
FixLiberado = false;
PosicaoBaseFixada = true;
return CorrecaoAbsoluta;
}
finally

View File

@ -1669,10 +1669,10 @@ namespace OperationControl.Windows
lblGNSS_Posicao.Foreground = new SolidColorBrush(dados.Iniciado ? System.Windows.Media.Colors.Green : System.Windows.Media.Colors.Red);
lblGNSS_Correcao.Content = $"Correção {dados.QualidadeFix} " +
(dados.QualidadeFix == AgroBase.Models.Enums.TiposCorrecaoGPS.BaseFix ?
(dados.OrientacaoReal.ToString("0.00") + "°") :
((dados.NtripAtivado ? "N" : "B") + $" {dados.IdadeCorrecao.ToString("0.0")} s"));
lblGNSS_Satelites.Content = $"Satélites {dados.NumeroSatelites} ({dados.PrecisaoCm.ToString("0.00")} cm)";
lblGNSS_Altitude.Content = $"Altitude {dados.Altitude.ToString("0.00")} m";
($"{dados.OrientacaoReal:F2}°") :
((dados.NtripAtivado ? "N" : "B") + $" {dados.IdadeCorrecao:F1} s"));
lblGNSS_Satelites.Content = $"Satélites {dados.NumeroSatelites} ({dados.PrecisaoCm:F2} cm)";
lblGNSS_Altitude.Content = $"Altitude {dados:F2} m";
if (dados_base)
{
@ -1684,11 +1684,11 @@ namespace OperationControl.Windows
else
{
lblGNSS_Progresso.Visibility = Visibility.Visible;
lblGNSS_Progresso.Content = $"{progresso.ToString("0.00")}%";
lblGNSS_Progresso.Content = $"{progresso:F2}%";
}
bool gnss_fix_preciso = new List<AgroBase.Models.Enums.TiposCorrecaoGPS>() { AgroBase.Models.Enums.TiposCorrecaoGPS.RTKFixo, AgroBase.Models.Enums.TiposCorrecaoGPS.RTKFlutuante }.Contains(Variaveis.GpsService?.UltimaLeitura?.QualidadeFix ?? AgroBase.Models.Enums.TiposCorrecaoGPS.SemCorrecao);
bool gnss_fixado = Variaveis.GpsService?.BaseFix?.CorrecaoAbsoluta ?? false;
bool gnss_fixado = Variaveis.GpsService?.BaseFix?.PosicaoBaseFixada ?? false;
bool gnss_fixando = btnGNSS_FixarBase.Content.ToString() == "Parar";
btnGNSS_FixarBase.IsEnabled = (gnss_fix_preciso && !gnss_fixado) || gnss_fixando || gnss_fixado;
@ -1711,7 +1711,7 @@ namespace OperationControl.Windows
{
if (!Variaveis.GpsService.BaseFix.FixLiberado)
{
if (Variaveis.GpsService.BaseFix.CorrecaoAbsoluta)
if (Variaveis.GpsService.BaseFix.PosicaoBaseFixada)
{
var res = MessageBox.Show("Mudar posição da base?", "Tem certeza que deseja fixar a posição da base novamente?", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (res == MessageBoxResult.Yes)