diff --git a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs index ccd404b89..7d703c2ce 100644 --- a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs +++ b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs @@ -1335,7 +1335,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBomba( bomba, CanMessagePosicaoDados.Command2, - true, + setarControle: true, + status: true, modo: bomba.Controle.Modo, potenciaMinPid: bomba.Controle.PotenciaMinPID, Kp: bomba.Controle.Kp, @@ -1361,7 +1362,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBomba( agitador, CanMessagePosicaoDados.Command2, - true, + setarControle: true, + status: true, modo: agitador.Controle.Modo, potenciaMinPid: agitador.Controle.PotenciaMinPID, Kp: agitador.Controle.Kp, @@ -1431,7 +1433,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBomba( bomba, CanMessagePosicaoDados.Command1, - statusDesejado, + setarControle: false, + status: statusDesejado, potencia: potenciaEfetiva, pressao: pressaoEfetiva ); @@ -1738,7 +1741,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBico( bico, CanMessagePosicaoDados.Command1, - statusDesejado, + setarControle: false, + status: statusDesejado, angulo: anguloDesejado ); } @@ -1826,12 +1830,13 @@ namespace AgroBase.Models.Modules bool pressaoDivergente = bomba.Sensor_ID_Num > -1 && Math.Abs(bomba._PressaoSP - pressaoEfetiva) > 0.05; - if (potenciaDivergente || pressaoDivergente) // estadoDivergente || + if (estadoDivergente || potenciaDivergente || pressaoDivergente) { EnviarComandoFisicoBomba( bomba, CanMessagePosicaoDados.Command1, - statusDesejado, + setarControle: false, + status: statusDesejado, potencia: potenciaEfetiva, pressao: pressaoEfetiva ); @@ -1851,9 +1856,10 @@ namespace AgroBase.Models.Modules } public void EnviarComandoFisicoBico( - AtuadorBicoModel bico, + AtuadorBicoModel bico, CanMessagePosicaoDados dado, - bool status, + bool setarControle, + bool status, double? angulo = null ) { @@ -1862,20 +1868,46 @@ namespace AgroBase.Models.Modules if (dispAtu?.Dados?.Conectado != true || bico == null) return; - bico.ComandoAtuar = status; - if (angulo.HasValue) bico.AnguloControle = angulo.Value; + bool comandoControle = bico.ComandoAtuar; + double anguloControle = bico.AnguloControle; - (_, _, byte[] data) = bico.ProtocoloComando(); + try + { + bico.ComandoAtuar = status; - dispAtu.AdicionarMensagemFila(bico.ID_Num, dado, dado, data, false); - bico.UltimoComandoEnviado = DateTime.Now; - bico.UltimoStatusDesejado = status; - if (angulo.HasValue) bico.UltimoAnguloDesejado = angulo.Value; + if (angulo.HasValue) + bico.AnguloControle = angulo.Value; + + (_, _, byte[] data) = bico.ProtocoloComando(); + + dispAtu.AdicionarMensagemFila( + bico.ID_Num, + dado, + dado, + data, + false + ); + + bico.UltimoComandoEnviado = DateTime.Now; + bico.UltimoStatusDesejado = status; + + if (angulo.HasValue) + bico.UltimoAnguloDesejado = angulo.Value; + } + finally + { + if (!setarControle) + { + bico.ComandoAtuar = comandoControle; + bico.AnguloControle = anguloControle; + } + } } public void EnviarComandoFisicoBomba( AtuadorBombaModel bomba, CanMessagePosicaoDados dado, + bool setarControle, bool status, double? potencia = null, double? pressao = null, @@ -1891,9 +1923,24 @@ namespace AgroBase.Models.Modules if (dispAtu?.Dados?.Conectado != true || bomba == null) return; - bomba.ComandoAtuar = status; - if (potencia.HasValue) bomba.PotenciaSP = potencia.Value; - if (pressao.HasValue) bomba.PressaoSP = pressao.Value; + bool comandoControle = bomba.ComandoAtuar; + double potenciaControle = bomba.PotenciaSP; + double pressaoControle = bomba.PressaoSP; + var modoControle = bomba.Controle.Modo; + double potenciaMinPidControle = bomba.Controle.PotenciaMinPID; + double kpControle = bomba.Controle.Kp; + double kiControle = bomba.Controle.Ki; + double kdControle = bomba.Controle.Kd; + + bool ehComandoEstado = dado == CanMessagePosicaoDados.Command1; + + if (ehComandoEstado) + { + bomba.ComandoAtuar = status; + if (potencia.HasValue) bomba.PotenciaSP = potencia.Value; + if (pressao.HasValue) bomba.PressaoSP = pressao.Value; + } + if (modo.HasValue) bomba.Controle.Modo = modo.Value; if (potenciaMinPid.HasValue) bomba.Controle.PotenciaMinPID = potenciaMinPid.Value; if (Kp.HasValue) bomba.Controle.Kp = Kp.Value; @@ -1908,6 +1955,18 @@ namespace AgroBase.Models.Modules bomba.UltimoStatusDesejado = status; if (potencia.HasValue) bomba.UltimaPotenciaDesejada = potencia.Value; if (pressao.HasValue) bomba.UltimaPressaoDesejada = pressao.Value; + + if (!setarControle) + { + bomba.ComandoAtuar = comandoControle; + bomba.PotenciaSP = potenciaControle; + bomba.PressaoSP = pressaoControle; + bomba.Controle.Modo = modoControle; + bomba.Controle.PotenciaMinPID = potenciaMinPidControle; + bomba.Controle.Kp = kpControle; + bomba.Controle.Ki = kiControle; + bomba.Controle.Kd = kdControle; + } } @@ -1967,7 +2026,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBomba( Bomba, CanMessagePosicaoDados.Command2, - true, + setarControle: true, + status: true, modo: op.Parametros.Controle.AtuModoControle, potenciaMinPid: Bomba.Controle.PotenciaMinPID, Kp: Bomba.Controle.Kp, @@ -1977,8 +2037,9 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBomba( Bomba, - CanMessagePosicaoDados.Command1, - true, + CanMessagePosicaoDados.Command1, + setarControle: true, + status: true, potencia: 100, pressao: op.Parametros.Controle.AtuPressaoLinha ); @@ -1989,7 +2050,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBomba( Bomba, CanMessagePosicaoDados.Command1, - ligar, + setarControle: true, + status: ligar, potencia: 100, pressao: -1 ); @@ -2017,7 +2079,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBico( Bico, CanMessagePosicaoDados.Command1, - true + setarControle: true, + status: true ); } @@ -2028,7 +2091,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBico( Bico, CanMessagePosicaoDados.Command1, - false + setarControle: true, + status: false ); } @@ -2052,7 +2116,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBico( Bico, CanMessagePosicaoDados.Command1, - true + setarControle: true, + status: true ); await Task.Delay(200); @@ -2060,7 +2125,8 @@ namespace AgroBase.Models.Modules EnviarComandoFisicoBico( Bico, CanMessagePosicaoDados.Command1, - false + setarControle: true, + status: false ); await Task.Delay(200);