ajustes para fixacao via survery in
This commit is contained in:
parent
a8f9bf9817
commit
7a6707d0ef
|
|
@ -259,88 +259,105 @@ namespace OperationControl.Services
|
|||
if (!fixar)
|
||||
{
|
||||
Models.Variaveis.MostrarLog("Configurando módulo como rover parado...");
|
||||
await BaseFix.ConfigurarComoRoverParadoAsync(
|
||||
portaUsb: portaUsb,
|
||||
portaEntrada: portaEntrada);
|
||||
await BaseFix.ConfigurarComoRoverParadoAsync(portaUsb: portaUsb, portaEntrada: portaEntrada);
|
||||
return;
|
||||
}
|
||||
|
||||
bool sucesso = false;
|
||||
string mensagem = "";
|
||||
|
||||
|
||||
BaseFix.fimProcesso = null;
|
||||
BaseFix.inicioProcesso = DateTime.UtcNow;
|
||||
BaseFix.inicioFix = DateTime.UtcNow;
|
||||
|
||||
Models.Variaveis.MostrarLog($"Aplicando posição fixa da base com o método {metodo}...");
|
||||
|
||||
switch (metodo)
|
||||
try
|
||||
{
|
||||
case MetodoFixacaoBase.Ntrip:
|
||||
sucesso = await BaseFix.FixarBaseViaNtripAsync(
|
||||
portaUsb: portaUsb,
|
||||
portaSaida: portaSaida,
|
||||
portaEntrada: portaEntrada,
|
||||
startNtrip: () =>
|
||||
{
|
||||
Models.Variaveis.MostrarLog("Iniciando correção NTRIP...");
|
||||
CorrecaoRTK_Ntrip = true;
|
||||
_ = Task.Run(async () => await AplicarCorrecaoRTK_Ntrip());
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
stopNtrip: () =>
|
||||
{
|
||||
Models.Variaveis.MostrarLog("Parando correção NTRIP...");
|
||||
CorrecaoRTK_Ntrip = false;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
segsFixEstavel: TempoSurveryIn
|
||||
);
|
||||
break;
|
||||
BaseFix.fimProcesso = null;
|
||||
BaseFix.inicioProcesso = DateTime.UtcNow;
|
||||
BaseFix.inicioFix = DateTime.UtcNow;
|
||||
BaseFix.CorrecaoEmAndamento = true;
|
||||
|
||||
case MetodoFixacaoBase.SurveyIn:
|
||||
await ConfigurarModuloBase(tempo_fixacao: TempoSurveryIn, porta_usb: portaUsb, porta_saida: portaSaida);
|
||||
while (UltimaLeitura.QualidadeFix != TiposCorrecaoGPS.BaseFix && BaseFix.inicioFix != null && (DateTime.UtcNow - BaseFix.inicioFix).Value.TotalSeconds < TempoSurveryIn)
|
||||
await Task.Delay(1000);
|
||||
break;
|
||||
Models.Variaveis.MostrarLog($"Aplicando posição fixa da base com o método {metodo}...");
|
||||
|
||||
case MetodoFixacaoBase.Manual:
|
||||
if (lat.HasValue && lon.HasValue && alt.HasValue)
|
||||
await BaseFix.AplicarBaseFixAsync(portaUsb, portaSaida, baseId, lat.Value, lon.Value, alt.Value);
|
||||
break;
|
||||
}
|
||||
|
||||
// Aguarda 10 segundos para ver se o UM982 pegou o BaseFix
|
||||
while (sucesso && UltimaLeitura.QualidadeFix != TiposCorrecaoGPS.BaseFix && BaseFix.inicioFix != null && (DateTime.UtcNow - BaseFix.inicioFix).Value.TotalSeconds < 10)
|
||||
{
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
|
||||
BaseFix.fimProcesso = DateTime.UtcNow;
|
||||
BaseFix.FixLiberado = false;
|
||||
|
||||
sucesso = UltimaLeitura.QualidadeFix == TiposCorrecaoGPS.BaseFix;
|
||||
mensagem = sucesso ? $"Posição da base aplicada com sucesso com o método {metodo}." : $"Falha ao aplicar posição da base com o método {metodo}.";
|
||||
|
||||
if (sucesso && !(offset ?? false))
|
||||
{
|
||||
BaseFix.LatitudeFix = UltimaLeitura.Latitude;
|
||||
BaseFix.LongitudeFix = UltimaLeitura.Longitude;
|
||||
BaseFix.AltitudeElpsoidalFix = UltimaLeitura.AltitudeElipsoidal;
|
||||
BaseFix.OrientacaoFix = UltimaLeitura.OrientacaoReal;
|
||||
|
||||
if (AppShell.Mock)
|
||||
switch (metodo)
|
||||
{
|
||||
UltimaLeitura.Latitude = lat.Value;
|
||||
UltimaLeitura.Longitude = lon.Value;
|
||||
UltimaLeitura.AltitudeElipsoidal = alt.Value;
|
||||
AtualizarCoordenadasGPS();
|
||||
case MetodoFixacaoBase.Ntrip:
|
||||
BaseFix.DefinirTempos(segsFixEstavel: TempoSurveryIn, segsJanelaSegs: 600, metodo: metodo);
|
||||
sucesso = await BaseFix.FixarBaseViaNtripAsync(
|
||||
portaUsb: portaUsb,
|
||||
portaSaida: portaSaida,
|
||||
portaEntrada: portaEntrada,
|
||||
startNtrip: () =>
|
||||
{
|
||||
Models.Variaveis.MostrarLog("Iniciando correção NTRIP...");
|
||||
CorrecaoRTK_Ntrip = true;
|
||||
_ = Task.Run(async () => await AplicarCorrecaoRTK_Ntrip());
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
stopNtrip: () =>
|
||||
{
|
||||
Models.Variaveis.MostrarLog("Parando correção NTRIP...");
|
||||
CorrecaoRTK_Ntrip = false;
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
);
|
||||
break;
|
||||
|
||||
case MetodoFixacaoBase.SurveyIn:
|
||||
BaseFix.DefinirTempos(segsFixEstavel: TempoSurveryIn, segsJanelaSegs: TempoSurveryIn + 10, metodo: metodo);
|
||||
await ConfigurarModuloBase(tempo_fixacao: TempoSurveryIn, porta_usb: portaUsb, porta_saida: portaSaida);
|
||||
while (UltimaLeitura.QualidadeFix != TiposCorrecaoGPS.BaseFix && BaseFix.inicioFix != null && (DateTime.UtcNow - BaseFix.inicioFix).Value.TotalSeconds < TempoSurveryIn)
|
||||
{
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
sucesso = true;
|
||||
break;
|
||||
|
||||
case MetodoFixacaoBase.Manual:
|
||||
if (lat.HasValue && lon.HasValue && alt.HasValue)
|
||||
{
|
||||
BaseFix.DefinirTempos(segsFixEstavel: 10, segsJanelaSegs: 10, metodo: metodo);
|
||||
await BaseFix.AplicarBaseFixAsync(portaUsb, portaSaida, baseId, lat.Value, lon.Value, alt.Value);
|
||||
sucesso = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Aguarda 10 segundos para ver se o UM982 pegou o BaseFix
|
||||
DateTime fimFix = DateTime.UtcNow;
|
||||
while (sucesso && UltimaLeitura.QualidadeFix != TiposCorrecaoGPS.BaseFix && BaseFix.inicioFix != null && (DateTime.UtcNow - fimFix).TotalSeconds < 10)
|
||||
{
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Models.Variaveis.MostrarLog($"Erro ao definir posicao da base: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
BaseFix.fimProcesso = DateTime.UtcNow;
|
||||
BaseFix.FixLiberado = false;
|
||||
BaseFix.CorrecaoEmAndamento = false;
|
||||
|
||||
Models.Variaveis.MostrarLog(mensagem);
|
||||
Models.Variaveis.Dock?._vm?.FinalizarFixacaoBase(sucesso, mensagem);
|
||||
sucesso = UltimaLeitura.QualidadeFix == TiposCorrecaoGPS.BaseFix;
|
||||
mensagem = sucesso ? $"Posição da base aplicada com sucesso com o método {metodo}." : $"Falha ao aplicar posição da base com o método {metodo}.";
|
||||
|
||||
if (sucesso && !(offset ?? false))
|
||||
{
|
||||
BaseFix.LatitudeFix = UltimaLeitura.Latitude;
|
||||
BaseFix.LongitudeFix = UltimaLeitura.Longitude;
|
||||
BaseFix.AltitudeElpsoidalFix = UltimaLeitura.AltitudeElipsoidal;
|
||||
BaseFix.OrientacaoFix = UltimaLeitura.OrientacaoReal;
|
||||
|
||||
if (AppShell.Mock && lat.HasValue && lon.HasValue && alt.HasValue)
|
||||
{
|
||||
UltimaLeitura.Latitude = lat.Value;
|
||||
UltimaLeitura.Longitude = lon.Value;
|
||||
UltimaLeitura.AltitudeElipsoidal = alt.Value;
|
||||
AtualizarCoordenadasGPS();
|
||||
}
|
||||
}
|
||||
|
||||
Models.Variaveis.MostrarLog(mensagem);
|
||||
Models.Variaveis.Dock?._vm?.FinalizarFixacaoBase(sucesso, mensagem);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ConfigurarModuloBase(string porta_usb = "com3", string porta_saida = "com2", int tempo_fixacao = 60)
|
||||
|
|
@ -1226,6 +1243,7 @@ namespace OperationControl.Services
|
|||
public DateTime? fimProcesso = null;
|
||||
private int segundosFixEstavel = 120;
|
||||
private int maxJanelaSegundos = 120;
|
||||
private MetodoFixacaoBase metodo = MetodoFixacaoBase.Ntrip;
|
||||
public double Progresso
|
||||
{
|
||||
get
|
||||
|
|
@ -1253,7 +1271,7 @@ namespace OperationControl.Services
|
|||
string progresso = "";
|
||||
if (CorrecaoEmAndamento)
|
||||
{
|
||||
progresso = $"Recebendo correção RTK via Ntrip. Progresso geral: {ProgressoGeral:F2}%, Progresso correção: {Progresso:F2}%";
|
||||
progresso = $"Recebendo correção RTK via {metodo}. Progresso geral: {ProgressoGeral:F2}%, Progresso correção: {Progresso:F2}%";
|
||||
}
|
||||
else if (PosicaoBaseFixada && CorrecaoAbsoluta && inicioProcesso.HasValue && fimProcesso.HasValue)
|
||||
{
|
||||
|
|
@ -1283,6 +1301,12 @@ namespace OperationControl.Services
|
|||
public double AltitudeElpsoidalFix { get; set; }
|
||||
public double OrientacaoFix { get; set; }
|
||||
|
||||
public void DefinirTempos(int segsFixEstavel, int segsJanelaSegs, MetodoFixacaoBase metodo)
|
||||
{
|
||||
segundosFixEstavel = segsFixEstavel;
|
||||
maxJanelaSegundos = segsJanelaSegs;
|
||||
}
|
||||
|
||||
public void ReiniciarFix()
|
||||
{
|
||||
CorrecaoEmAndamento = false;
|
||||
|
|
@ -1293,16 +1317,11 @@ namespace OperationControl.Services
|
|||
}
|
||||
|
||||
// ===== 1) Função principal =====
|
||||
public async Task<bool> FixarBaseViaNtripAsync(string portaUsb = "com3", string portaEntrada = "com2", string portaSaida = "com2", string baseId = "957", int segsFixEstavel = 120, int maxJanelaSegs = 600, double madK = 3.5, Func<Task> startNtrip = null, Func<Task> stopNtrip = null)
|
||||
public async Task<bool> FixarBaseViaNtripAsync(string portaUsb = "com3", string portaEntrada = "com2", string portaSaida = "com2", string baseId = "957", double madK = 3.5, Func<Task> startNtrip = null, Func<Task> stopNtrip = null)
|
||||
{
|
||||
if (CorrecaoEmAndamento || !APIService.HasInternet)
|
||||
if (!APIService.HasInternet)
|
||||
return false;
|
||||
|
||||
CorrecaoEmAndamento = true;
|
||||
|
||||
segundosFixEstavel = segsFixEstavel;
|
||||
maxJanelaSegundos = maxJanelaSegs;
|
||||
|
||||
// 1.1 Config temporária como rover parado + NMEA
|
||||
await ConfigurarComoRoverParadoAsync(portaUsb, portaEntrada);
|
||||
|
||||
|
|
@ -1342,7 +1361,6 @@ namespace OperationControl.Services
|
|||
finally
|
||||
{
|
||||
if (stopNtrip != null) await stopNtrip();
|
||||
CorrecaoEmAndamento = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -253,7 +253,7 @@ namespace OperationControl.ViewModels
|
|||
}
|
||||
}
|
||||
|
||||
private double? _offsetFrontalBaseCm;
|
||||
private double? _offsetFrontalBaseCm = 0;
|
||||
public double? OffsetFrontalBaseCm
|
||||
{
|
||||
get => _offsetFrontalBaseCm;
|
||||
|
|
@ -267,7 +267,7 @@ namespace OperationControl.ViewModels
|
|||
}
|
||||
}
|
||||
|
||||
private double? _offsetLateralBaseCm;
|
||||
private double? _offsetLateralBaseCm = 0;
|
||||
public double? OffsetLateralBaseCm
|
||||
{
|
||||
get => _offsetLateralBaseCm;
|
||||
|
|
|
|||
Loading…
Reference in New Issue