From 6b87783f43b379b7bff09a7b08ebf174ff1efda3 Mon Sep 17 00:00:00 2001 From: Diego Freitas Date: Fri, 13 Mar 2026 16:30:21 -0300 Subject: [PATCH] Tratamentos e alerta de NCP desconectado --- .../Models/TrajetoriaMapaOperacaoModel.cs | 30 ++++++++----- .../Services/Operadores/OperadoresService.cs | 44 ++++++++++++------- .../Views/Operacao/OperacaoTopViewModel.cs | 4 +- .../ViewModels/Windows/DockWindowViewModel.cs | 18 +++++++- 4 files changed, 64 insertions(+), 32 deletions(-) diff --git a/AgroBase/AgroBase/Models/TrajetoriaMapaOperacaoModel.cs b/AgroBase/AgroBase/Models/TrajetoriaMapaOperacaoModel.cs index 1e34a1f0e..591df7b0d 100644 --- a/AgroBase/AgroBase/Models/TrajetoriaMapaOperacaoModel.cs +++ b/AgroBase/AgroBase/Models/TrajetoriaMapaOperacaoModel.cs @@ -1083,21 +1083,27 @@ namespace AgroBase.Models { if (_Controle.ticks_sem_resposta.AddMilliseconds(max_ticks_sem_resposta) < agora) { - Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Falha, 0, "Muito tempo sem receber novo comando do Manager Worker! Parando Movimento!"); - Console.WriteLine("Muito tempo sem receber novo comando do Manager Worker! Parando Movimento!"); - RedisService.AtualizarCampos( - CtxKey.DadosControle, - ("velocidade_sp", 0) - ); + if (Variaveis.OperacaoEmAndamento?.Sensoriamento?.Controle?.RPM_SP > 0) + { + Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Falha, 0, "Muito tempo sem receber novo comando do Manager Worker! Parando Movimento!"); + Console.WriteLine("Muito tempo sem receber novo comando do Manager Worker! Parando Movimento!"); + RedisService.AtualizarCampos( + CtxKey.DadosControle, + ("velocidade_sp", 0) + ); + } } else if (_Controle.ticks_sem_resposta.AddMilliseconds(min_ticks_sem_resposta) < agora) { - Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Alerta, 80, "Muito tempo sem receber novo comando do Manager Worker! Reduzindo Velocidade!"); - Console.WriteLine("Muito tempo sem receber novo comando do Manager Worker! Reduzindo Velocidade!"); - RedisService.AtualizarCampos( - CtxKey.DadosControle, - ("velocidade_sp", Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent) - ); + if (Variaveis.OperacaoEmAndamento?.Sensoriamento?.Controle?.RPM_SP > Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent) + { + Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Alerta, 80, "Muito tempo sem receber novo comando do Manager Worker! Reduzindo Velocidade!"); + Console.WriteLine("Muito tempo sem receber novo comando do Manager Worker! Reduzindo Velocidade!"); + RedisService.AtualizarCampos( + CtxKey.DadosControle, + ("velocidade_sp", Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent) + ); + } } } } diff --git a/AgroBase/AgroBase/Services/Operadores/OperadoresService.cs b/AgroBase/AgroBase/Services/Operadores/OperadoresService.cs index 0f1f23a78..05bc138bf 100644 --- a/AgroBase/AgroBase/Services/Operadores/OperadoresService.cs +++ b/AgroBase/AgroBase/Services/Operadores/OperadoresService.cs @@ -91,29 +91,39 @@ namespace AgroBase.Services.Operadores var _Controle = Variaveis.OperacaoEmAndamento.Controle; if (Variaveis.OperacaoEmAndamento.Parametros.Controle.MovimentoAutomatico) { - _Controle.PercentualVelocidadeSP = 0; - RedisService.AtualizarCampos( - CtxKey.DadosControle, - ("velocidade_sp", _Controle.PercentualVelocidadeSP) - ); + if (_Controle.PercentualVelocidadeSP > 0) + { + _Controle.PercentualVelocidadeSP = 0; + RedisService.AtualizarCampos( + CtxKey.DadosControle, + ("velocidade_sp", _Controle.PercentualVelocidadeSP) + ); + } } if (Variaveis.OperacaoEmAndamento.Parametros.Controle.DirecionalAutomatico) { - _Controle.Angulo = 0; - RedisService.AtualizarCampos( - CtxKey.DadosControle, - ("angulo_sp", _Controle.Angulo) - ); + if (_Controle.Angulo != 0) + { + _Controle.Angulo = 0; + RedisService.AtualizarCampos( + CtxKey.DadosControle, + ("angulo_sp", _Controle.Angulo) + ); + } } - _Controle.Bicos.ForEach(x => x.ComandoAtuar = false); - RedisService.AtualizarCampos( - CtxKey.DadosControle, - ("angulo_sp", _Controle.Angulo), - ("velocidade_sp", _Controle.PercentualVelocidadeSP), - ("controle_bicos", _Controle.Bicos.ToDictionary(x => x.Posicao - 1, x => x.ComandoAtuar)) - ); + if (Variaveis.OperacaoEmAndamento.Parametros.Controle.PulverizadorAutomatico) + { + if (_Controle.Bicos.Any(x => x.ComandoAtuar)) + { + _Controle.Bicos.ForEach(x => x.ComandoAtuar = false); + RedisService.AtualizarCampos( + CtxKey.DadosControle, + ("controle_bicos", _Controle.Bicos.ToDictionary(x => x.Posicao - 1, x => x.ComandoAtuar)) + ); + } + } Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao(); } diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoTopViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoTopViewModel.cs index 7ed390648..33d6237cd 100644 --- a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoTopViewModel.cs +++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoTopViewModel.cs @@ -88,9 +88,9 @@ namespace OperationControl.ViewModels.Views.Operacao } - public void AtualizarStatus(StatusModulo status, string titulo, string linha1, string linha2, string status_str, string resumo) + public void AtualizarStatus(StatusModulo status, string titulo, StatusOperacao status_op, string linha1, string linha2, string status_str, string resumo) { - ContextoSelecionado = titulo; + ContextoSelecionado = $"{titulo} • {status_op}"; TituloStatus = linha1; MotivoPrincipal = linha2; BadgeTexto = status_str; diff --git a/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs b/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs index f5c8cdea5..59e1bdee1 100644 --- a/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs +++ b/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs @@ -370,6 +370,21 @@ namespace OperationControl.ViewModels var eventos = new List(); + if (obj.ModulosSaude?.All(x => (x?.status ?? StatusModulo.Desconectado) == StatusModulo.Desconectado) ?? false) + { + // ============================ + // 0) NCP desconectado + // ============================ + eventos.Add(new MotivoTopBarModel + { + Prioridade = 1100, + Fonte = "Núcleo Central de Processamento", + Titulo = "NÚCLEO CENTRAL DE PROCESSAMENTO DESCONECTADO", + Descricao = "O núcleo central de processamento foi desconectado, tentando reconectar...", + StatusVisual = StatusModulo.Falha + }); + } + // ============================ // 1) Emergência // ============================ @@ -567,6 +582,7 @@ namespace OperationControl.ViewModels _viewOperacaoTop?._vm.AtualizarStatus( statusVisual, rover.RoverId, + obj?.Operacao?.Status ?? StatusOperacao.NaoIniciado, linha1, linha2, badge, @@ -579,7 +595,7 @@ namespace OperationControl.ViewModels { System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => { - _viewOperacaoTop?._vm.AtualizarStatus(status, titulo, linha1, linha2.Replace("\n\n", " • "), status_str, resumo); + _viewOperacaoTop?._vm.AtualizarStatus(status, titulo, StatusOperacao.Parametrizando, linha1, linha2.Replace("\n\n", " • "), status_str, resumo); })); }