diff --git a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs index fe1f7d49c..ebffbe9f3 100644 --- a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs +++ b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs @@ -1,5 +1,6 @@ using AgroBase.Services; using AgroBase.Services.Operadores; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Diagnostics; @@ -66,6 +67,7 @@ namespace AgroBase.Models.Modules public AtuadorMensagemJsonModel DadosLeitura { get; set; } = new AtuadorMensagemJsonModel(); public AtuHandler _AtuHandler = new AtuHandler(); + [JsonIgnore] public AtuadorBombaModel BombaPressurizadora { get @@ -74,6 +76,7 @@ namespace AgroBase.Models.Modules return Bomba; } } + [JsonIgnore] public AtuadorBombaModel AgitadorDeCalda { get @@ -83,6 +86,7 @@ namespace AgroBase.Models.Modules } } + [JsonIgnore] public SensorModel SensorMassaReservatorio { get @@ -91,6 +95,7 @@ namespace AgroBase.Models.Modules return sMAS; } } + [JsonIgnore] private SensorModel SensorAnguloBarraEsquerda { get @@ -99,6 +104,7 @@ namespace AgroBase.Models.Modules return sMAG; } } + [JsonIgnore] private SensorModel SensorAnguloBarraDireita { get @@ -112,6 +118,7 @@ namespace AgroBase.Models.Modules #region VAZAO + [JsonIgnore] private SensorModel SensorFluxoLinha => Sensores.FirstOrDefault(x => x.Componente == S_Code.sFLX && x.ID == "FLXLN"); public double VazaoMaximaSensor_LMin { get; set; } = 20.0; @@ -164,6 +171,8 @@ namespace AgroBase.Models.Modules #endregion #region PRESSAO + + [JsonIgnore] private SensorModel SensorPressaoLinha { get @@ -1004,8 +1013,8 @@ namespace AgroBase.Models.Modules Descricao = "Angulo Barra Esquerda", ID_Num = 41, Componente = S_Code.sMAG, - Aferir = true, - Mandatorio = true, + Aferir = false, + Mandatorio = false, Funcoes = new List() { FuncoesPinout.I2C, @@ -1059,8 +1068,8 @@ namespace AgroBase.Models.Modules Descricao = "Angulo Barra Direita", ID_Num = 42, Componente = S_Code.sMAG, - Aferir = true, - Mandatorio = true, + Aferir = false, + Mandatorio = false, Funcoes = new List() { FuncoesPinout.I2C, @@ -1311,6 +1320,7 @@ namespace AgroBase.Models.Modules Dados.BombasPressurizadoras.ForEach(x => x.Funcoes = x.Funcoes.Distinct().ToList()); ReiniciarLeituras(Dados); + PrepararAtuadorParaOperacao(Dados); } public void ReiniciarLeituras(AtuadorModel Dados) @@ -1376,6 +1386,34 @@ namespace AgroBase.Models.Modules } } + private void PrepararAtuadorParaOperacao(AtuadorModel Dados) + { + var dadosAtuador = Dados; + var controle = Variaveis.OperacaoEmAndamento.Parametros?.Controle; + + if (dadosAtuador == null || controle == null) + return; + + var bomba = dadosAtuador.BombaPressurizadora; + + if (bomba != null) + { + bomba.ComandoAtuar = false; + bomba.PotenciaSP = 100; + bomba.PressaoSP = controle.AtuPressaoLinha; + bomba.Controle.Modo = controle.AtuModoControle; + } + + var agitador = dadosAtuador.AgitadorDeCalda; + + if (agitador != null) + { + agitador.ComandoAtuar = false; + agitador.PotenciaSP = 0; + agitador.PressaoSP = -1; + } + } + public async Task VerificaDispositivoConectado() { if (!CanManager.CanService.IsConnected) return false; @@ -1850,109 +1888,47 @@ namespace AgroBase.Models.Modules } } - private void EnviarComandoFisicoBico( - AtuadorBicoModel bico, - bool status, - double angulo) + private void EnviarComandoFisicoBico(AtuadorBicoModel bico, bool status, double angulo) { - var dispAtu = - Variaveis.OperacaoEmAndamento?.DispAtu; + var dispAtu = Variaveis.OperacaoEmAndamento?.DispAtu; - if ( - dispAtu?.Dados?.Conectado != true || - bico == null - ) - { + if (dispAtu?.Dados?.Conectado != true || bico == null) return; - } - byte anguloByte = - (byte)Math.Round( - FuncoesMatematicas.Clamp( - angulo, - 0, - 255 - ) - ); + byte anguloByte = (byte)Math.Round(FuncoesMatematicas.Clamp(angulo, 0, 255)); byte[] data = { - (byte)( - status - ? Estado.Ligado - : Estado.Desligado - ), - anguloByte - }; + (byte)(status ? Estado.Ligado : Estado.Desligado), + anguloByte + }; - dispAtu.AdicionarMensagemFila( - bico.ID_Num, - CanMessagePosicaoDados.Command1, - CanMessagePosicaoDados.Command1, - data, - false - ); + dispAtu.AdicionarMensagemFila(bico.ID_Num, CanMessagePosicaoDados.Command1, CanMessagePosicaoDados.Command1, data, false); } - private void EnviarComandoFisicoBomba( - AtuadorBombaModel bomba, - bool status, - double potencia, - double pressao) + private void EnviarComandoFisicoBomba(AtuadorBombaModel bomba, bool status, double potencia, double pressao) { - var dispAtu = - Variaveis.OperacaoEmAndamento?.DispAtu; + var dispAtu = Variaveis.OperacaoEmAndamento?.DispAtu; - if ( - dispAtu?.Dados?.Conectado != true || - bomba == null - ) - { + if (dispAtu?.Dados?.Conectado != true || bomba == null) return; - } - byte potenciaByte = - (byte)Math.Round( - FuncoesMatematicas.Clamp( - potencia, - 0, - 100 - ) - ); + byte potenciaByte = (byte)Math.Round(FuncoesMatematicas.Clamp(potencia, 0, 100)); /* * -1 é usado para indicar ausência de sensor * de pressão. No protocolo atual, representa 255. */ - byte pressaoByte = - pressao < 0 - ? byte.MaxValue - : (byte)Math.Round( - FuncoesMatematicas.Clamp( - pressao, - 0, - 255 - ) - ); + byte pressaoByte = pressao < 0 ? byte.MaxValue : (byte)Math.Round(FuncoesMatematicas.Clamp(pressao, 0, 255)); byte[] data = { - (byte)( - status - ? Estado.Ligado - : Estado.Desligado - ), - potenciaByte, - pressaoByte - }; + (byte)(status ? Estado.Ligado : Estado.Desligado), + potenciaByte, + pressaoByte + }; - dispAtu.AdicionarMensagemFila( - bomba.ID_Num, - CanMessagePosicaoDados.Command1, - CanMessagePosicaoDados.Command1, - data, - false - ); + dispAtu.AdicionarMensagemFila(bomba.ID_Num, CanMessagePosicaoDados.Command1, CanMessagePosicaoDados.Command1, data, false); } @@ -2095,7 +2071,7 @@ namespace AgroBase.Models.Modules } if (t.IsCompleted) { - var calAtu = Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Atu]; + var calAtu = Variaveis.OperacaoEmAndamento.ModsCalibragem[Dispositivo]; var v = calAtu.Select(x => $"{x.Key} " + (x.Value ? "Sim" : "Não")); Variaveis.MostrarLog($"[AtuadorModel] [RealizarCalibragemAsync] Task de referenciamento do módulo {Modulo_ID} finalizada: " + string.Join(", ", v)); Variaveis.OperacaoEmAndamento.Sensoriamento.InserirLog(Dispositivo, StatusModulo.Operante, 100, $"Task de referenciamento do módulo {Modulo_ID} finalizada: " + string.Join(", ", v)); @@ -2172,7 +2148,7 @@ namespace AgroBase.Models.Modules } public List ValoresLeituras { get; set; } public Estado _EstadoLeitura => (Estado)(ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? 0); - public int _AnguloBicoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.ServoAnguloLeitura)?.atual? .valor ?? 0; + public double _AnguloBicoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.ServoAnguloLeitura)?.atual? .valor ?? 0; public (CanMessagePosicaoDados, byte[]) ProtocoloConfiguracao(PinoutDataModel pinout, bool conectar) diff --git a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs index a653431b7..7da2f37c7 100644 --- a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs +++ b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs @@ -1184,27 +1184,27 @@ namespace AgroBase.Models Variaveis.OperacaoEmAndamento.Sensoriamento.UltimoRegistroLog = DateTime.Now; tmrLogs?.Start(); - Iniciado = true; - Simulando = false; - Treinando = false; - Emergencia = false; - Pausa = false; - DataInicio = DateTime.Now; - DataFim = DateTime.MinValue; - idxLog = 0; + Variaveis.OperacaoEmAndamento.Iniciado = true; + Variaveis.OperacaoEmAndamento.Simulando = false; + Variaveis.OperacaoEmAndamento.Treinando = false; + Variaveis.OperacaoEmAndamento.Emergencia = false; + Variaveis.OperacaoEmAndamento.Pausa = false; + Variaveis.OperacaoEmAndamento.DataInicio = DateTime.Now; + Variaveis.OperacaoEmAndamento.DataFim = DateTime.MinValue; + Variaveis.OperacaoEmAndamento.idxLog = 0; - ID = DataInicio.ToString("dd_MM_yyyy_HH_mm_ss") + "_" + (Parametros?.Modo ?? ModoOperacao.NaoDefinido).ToString(); + Variaveis.OperacaoEmAndamento.ID = DataInicio.ToString("dd_MM_yyyy_HH_mm_ss") + "_" + (Parametros?.Modo ?? ModoOperacao.NaoDefinido).ToString(); Directory.CreateDirectory(Variaveis.CaminhoOperacoes + ID + "/"); SalvarOperacao(); - Sensoriamento.AtualizarDados(); + Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados(); - DispMvd?.Dados?.ReiniciarLeituras(DispMvd?.Dados); - DispAtu?.Dados?.ReiniciarLeituras(DispAtu?.Dados); - DispSen?.Dados?.ReiniciarLeituras(DispSen?.Dados); + Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.ReiniciarLeituras(DispMvd?.Dados); + Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ReiniciarLeituras(DispAtu?.Dados); + Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ReiniciarLeituras(DispSen?.Dados); - ModsCalibragem = new Dictionary>() + Variaveis.OperacaoEmAndamento.ModsCalibragem = new Dictionary>() { { T_Code.Mov, new Dictionary() { } }, { T_Code.Dir, new Dictionary() { } }, @@ -1215,19 +1215,19 @@ namespace AgroBase.Models WeedWorkerService.ReiniciarLeituraAnalise(); VisualWorkerService.ReiniciarLeituraAnalise(); - Controle.Reiniciar(); - ControleAnterior.Reiniciar(); + Variaveis.OperacaoEmAndamento.Controle.Reiniciar(); + Variaveis.OperacaoEmAndamento.ControleAnterior.Reiniciar(); double distanciaPercorrida = DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0; double tempoAtuado = DispAtu?.Dados?.TempoAtuado ?? 0; - DispSen?.Dados?.ContadorCarga?.AtualizarConsumo(distanciaPercorrida); - DispSen?.Dados?.ContadorCarga?.IniciarOperacao(distanciaPercorrida); - DispAtu?.Dados?.ContadorCarga?.IniciarOperacao(distanciaPercorrida, tempoAtuado); + Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ContadorCarga?.AtualizarConsumo(distanciaPercorrida); + Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ContadorCarga?.IniciarOperacao(distanciaPercorrida); + Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ContadorCarga?.IniciarOperacao(distanciaPercorrida, tempoAtuado); - GPSTrajetoria = new List(); + Variaveis.OperacaoEmAndamento.GPSTrajetoria = new List(); - Trajetoria?.ProjetarTrajetoriaFixa(); - Trajetoria.VerificacaoInicialMeioRuaConcluida = false; + Variaveis.OperacaoEmAndamento.Trajetoria?.ProjetarTrajetoriaFixa(); + Variaveis.OperacaoEmAndamento.Trajetoria.VerificacaoInicialMeioRuaConcluida = false; RedisService.Publish(CmdKey.ManagerWorkerRx, JsonConvert.SerializeObject(new { cmd = ManagerWorkerCommandType.IniciarMPC })); await RealizarCalibragemInicialAsync(true); diff --git a/AgroBase/AgroBase/Models/Operacoes/OperacaoParametrosModel.cs b/AgroBase/AgroBase/Models/Operacoes/OperacaoParametrosModel.cs index 082b6f3f3..9a169fea6 100644 --- a/AgroBase/AgroBase/Models/Operacoes/OperacaoParametrosModel.cs +++ b/AgroBase/AgroBase/Models/Operacoes/OperacaoParametrosModel.cs @@ -699,7 +699,7 @@ namespace AgroBase.Models.Operacoes Posicao = x.Posicao, AnguloAbertura = x.AnguloAbertura, ComandoAngulo = (int)x.AnguloControle, - LeituraAngulo = x._AnguloBicoLeitura, + LeituraAngulo = (int)x._AnguloBicoLeitura, ComandoEstado = x.ComandoAtuar, LeituraEstado = x._EstadoLeitura == Estado.Ligado, VazaoMediaMLs = x.VazaoMediaMLs, diff --git a/AgroBase/AgroBase/Models/Variaveis.cs b/AgroBase/AgroBase/Models/Variaveis.cs index 7ecacadf0..5275a6d7f 100644 --- a/AgroBase/AgroBase/Models/Variaveis.cs +++ b/AgroBase/AgroBase/Models/Variaveis.cs @@ -474,7 +474,7 @@ namespace AgroBase.Models public static double DistanciaEntreBicosCm { get; set; } = 50; public static double DensidadeHerbicida { get; set; } = 1.0; public static double CapacidadeReservatorio { get; set; } = 60; - public static double PressaoMinimaCavitacao { get; set; } = 30.0; + public static double PressaoMinimaCavitacao { get; set; } = 10.0; public static double ReducaoDirecional { get; set; } = 20.0; public static double PercentualVelMin {