diff --git a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs index df1c02676..5d9c6e115 100644 --- a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs +++ b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs @@ -363,6 +363,11 @@ namespace AgroBase.Models DispAtu = AtuConectado, DispSen = SenConectado, DispMvd = MvdConectado, + Simulando = false, + Mapa = new MapasModel(), + GPSTrajetoria = new List(), + Sensoriamento = new OperacaoSensoriamentoLogModel(), + Trajetoria = new TrajetoriaMapaOperacaoModel(new List>()) }; } @@ -835,8 +840,6 @@ namespace AgroBase.Models { Variaveis.OperacaoEmAndamento.Parametros = p; Variaveis.OperacaoEmAndamento.DefinirComponentesEmUso(); - Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List>()); - Variaveis.OperacaoEmAndamento.Sensoriamento = new OperacaoSensoriamentoLogModel(); RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false)); Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados(); } @@ -986,6 +989,7 @@ namespace AgroBase.Models p.Controle = Parametros.Controle; p.QtdBicos = Parametros.QtdBicos; p.QtdCamerasSolo = Parametros.QtdCamerasSolo; + p.Mapa = Parametros.Mapa; p.RuasPercorrer = Parametros.RuasPercorrer; p.ModulosMandatorios = Parametros.ModulosMandatorios; p.ParametrosMandatorios = Parametros.ParametrosMandatorios; @@ -1077,6 +1081,20 @@ namespace AgroBase.Models Variaveis.OperacaoEmAndamento.Trajetoria?.AutonomiaCorredor?.Parar(); } + public void ReiniciarOperacao(bool daBase) + { + RedisService.AtualizarCampos( + CtxKey.DadosOperacao, + ("status", StatusOperacao.Parametrizando), + ("iniciado", false) + ); + + CarregarParamerosOperacaoBase(Variaveis.OperacaoEmAndamento.Parametros); + + if (daBase) + EnviarParametorsOperacao(); + } + public async Task RealizarCalibragemInicialAsync(bool forcar) { bool modsCalibrados = Variaveis.OperacaoEmAndamento.ModsCalibragem.All(x => x.Value.Values.Count > 0 && x.Value.Values.All(y => y == true)); @@ -1177,17 +1195,7 @@ namespace AgroBase.Models public void ReiniciarSimulacao() { - RedisService.AtualizarCampos( - CtxKey.DadosOperacao, - ("status", StatusOperacao.Parametrizando), - ("iniciado", false) - ); - - Variaveis.OperacaoEmAndamento.Iniciado = false; - Variaveis.OperacaoEmAndamento.Simulando = false; - Variaveis.OperacaoEmAndamento.Mapa = new MapasModel(); - Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List>()); - Variaveis.OperacaoEmAndamento.GPSTrajetoria = new List(); + ReiniciarOperacao(false); var Topico = Variaveis.MqttServiceLocal.Topicos.FirstOrDefault(x => x.Topico == MapasVariaveisModel.TopicoSelecaoRuasMapa); Topico.Mensagens.Add(new MqttService.MqttTopicosMensagensModel() @@ -1488,22 +1496,29 @@ namespace AgroBase.Models } } + private void EnviarParametorsOperacao() + { + var topico = Variaveis.MqttServiceBase.Topicos.FirstOrDefault(x => x.Topico == VariaveisEquipamento.TopicoMqttParametros.Replace("", VariaveisEquipamento.Parametros.serial_number)); + var p = Variaveis.OperacaoEmAndamento.Parametros; + string msg = JsonConvert.SerializeObject(p); + Task.Run(async () => await Variaveis.MqttServiceBase.PublishAsync(topico, msg)); + } + public void ExecutaComandoDaBase(OperacaoComandoBaseModel controleBase) { if (controleBase.Dispositivo == T_Code.Mod) { var _Parametros = controleBase.Parametros; + switch (controleBase.Tecla) { case BotoesJoystick.Share: // Requisitar parametros da operacao - var topico = Variaveis.MqttServiceBase.Topicos.FirstOrDefault(x => x.Topico == VariaveisEquipamento.TopicoMqttParametros.Replace("", VariaveisEquipamento.Parametros.serial_number)); - var p = Variaveis.OperacaoEmAndamento.Parametros; - string msg = JsonConvert.SerializeObject(p); - Task.Run(async () => await Variaveis.MqttServiceBase.PublishAsync(topico, msg)); + EnviarParametorsOperacao(); break; case BotoesJoystick.Options: // Operacao nao iniciada, carrega todos os parametros compeltos Variaveis.OperacaoEmAndamento.CarregarParamerosOperacaoBase(_Parametros); + EnviarParametorsOperacao(); break; case BotoesJoystick.Touchpad: // Operacao em andamento, atualiza apenas os dados de controle if (_Parametros.Modo != null) Variaveis.OperacaoEmAndamento.Parametros.Modo = _Parametros.Modo; @@ -1521,6 +1536,7 @@ namespace AgroBase.Models } HealthWorkerService.AtualizarDadosOperacao(true); + EnviarParametorsOperacao(); break; case BotoesJoystick.L1: // Inicia o modo simulador if (!Variaveis.OperacaoEmAndamento.Iniciado) @@ -1533,6 +1549,8 @@ namespace AgroBase.Models case BotoesJoystick.L3: // Finaliza a operacao if (Variaveis.OperacaoEmAndamento.Iniciado) Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao()); + else + ReiniciarOperacao(true); break; case BotoesJoystick.R1: // Libera a operacao interrompida mediante supervisao humana if (!(Variaveis.OperacaoEmAndamento.Trajetoria?.AutonomiaCorredor?.Liberado ?? false)) @@ -2592,8 +2610,8 @@ namespace AgroBase.Models DadosPerformance = dadosPerformance, DadosLoRa = dadosLora, LivoxLidar = dadosLivox, - ModulosMandatorios = new List(Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios), - ParametrosMandatorios = new List(Variaveis.OperacaoEmAndamento.Parametros.ParametrosMandatorios), + ModulosMandatorios = new List(Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios ?? new List()), + ParametrosMandatorios = new List(Variaveis.OperacaoEmAndamento.Parametros.ParametrosMandatorios ?? new List()), ModulosSaude = HealthWorkerService.ModulosSaude.ToList(), DispositivosMapeados = new List(SerialService.DispositivosMapeados), ModsCalibragem = new Dictionary>(Variaveis.OperacaoEmAndamento.ModsCalibragem), diff --git a/AgroBase/AgroBase/Models/Operadores/VisualWorkerModel.cs b/AgroBase/AgroBase/Models/Operadores/VisualWorkerModel.cs index 767d79eda..e0e0dc874 100644 --- a/AgroBase/AgroBase/Models/Operadores/VisualWorkerModel.cs +++ b/AgroBase/AgroBase/Models/Operadores/VisualWorkerModel.cs @@ -70,7 +70,7 @@ namespace AgroBase.Models.Operadores StatusCarro = Sonar?.Analises?.segmentacao?.status_corredor ?? StatusCarroMapa.Indefinido; ErroLateral = Sonar?.Analises?.segmentacao?.erro_angular ?? 0; - if (!Variaveis.OperacaoEmAndamento.Parametros.Controle.SonarAtivado) + if (!Variaveis.OperacaoEmAndamento.Parametros.Controle?.SonarAtivado ?? false) { _comandoParadaEnviado = false; DeveParar = false; @@ -83,7 +83,7 @@ namespace AgroBase.Models.Operadores Direcao _ultimaDirecaoControle = Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov)?.UltimaDirecao ?? Direcao.Parado; bool _carroEmMovimento = _direcoesInterromperMovimento.Contains(_ultimaDirecaoControle); bool emMovimento = consideraEmMovimento ? _carroEmMovimento : true; - DeveParar = Sonar.Status == StatusModulo.Operante && ObstaculoDetectado; + DeveParar = Sonar?.Status == StatusModulo.Operante && ObstaculoDetectado; EnviarComandoParada = DeveParar && emMovimento; if (EnviarComandoParada) {