diff --git a/AgroBase/AgroBase/Models/GeneralJoystick.cs b/AgroBase/AgroBase/Models/GeneralJoystick.cs index 855116622..6806f60ef 100644 --- a/AgroBase/AgroBase/Models/GeneralJoystick.cs +++ b/AgroBase/AgroBase/Models/GeneralJoystick.cs @@ -743,7 +743,7 @@ namespace AgroBase if (!Forcar) { if (!Variaveis.OperacaoEmAndamento.Iniciado) return; - bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Atu && x.ComponentesEmUso[ID]); + bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Atu && x.ComponentesEmUso[ID].Item2); if (!componente_em_uso && (Status ?? false)) return; // Impede execucao de comandos que liguem componentes quando estiver marcado para nao utilizar } @@ -790,7 +790,7 @@ namespace AgroBase { if (!Forcar) { - bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Sen && x.ComponentesEmUso[ID]); + bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Sen && x.ComponentesEmUso[ID].Item2); if (!componente_em_uso) { // Impede execucao de comandos que liguem componentes quando estiver marcado para nao utilizar diff --git a/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs b/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs index 69d618781..e5fa5cf7f 100644 --- a/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs +++ b/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs @@ -2578,7 +2578,7 @@ namespace AgroBase.Models.Modules } } public int _AnguloControle { get; set; } - public int _AnguloLeiutra => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraAngulo)?.atual?.valor ?? -1; + public int _AnguloLeiutra => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.ServoAnguloLeitura)?.atual?.valor ?? -1; public bool Inicializado { get; set; } public DateTime UltimaLeitura { diff --git a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs index 52859e243..05105c783 100644 --- a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs +++ b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs @@ -866,39 +866,39 @@ namespace AgroBase.Models Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados(); } - private Dictionary PreencherComponentesEmUso(T_Code Modulo) + private Dictionary PreencherComponentesEmUso(T_Code Modulo) { - Dictionary d = new Dictionary(); + Dictionary d = new Dictionary(); switch (Modulo) { case T_Code.Mov: if (Variaveis.OperacaoEmAndamento.DispMvd != null) { - Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(m => d.Add(m.MovMotor.Mod_ID, m.MovMotor.Comandar)); + Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(m => d.Add(m.MovMotor.Mod_ID, (true, m.MovMotor.Comandar))); } break; case T_Code.Dir: if (Variaveis.OperacaoEmAndamento.DispMvd != null) { - Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(m => d.Add(m.DirMotor.Mod_ID, m.DirMotor.Comandar)); + Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(m => d.Add(m.DirMotor.Mod_ID, (true, m.DirMotor.Comandar))); } break; case T_Code.Atu: if (Variaveis.OperacaoEmAndamento.DispAtu != null) { - Variaveis.OperacaoEmAndamento.DispAtu.Dados.Sensores.ForEach(s => d.Add(s.ID, s.Aferir)); - Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.ForEach(b => d.Add(b.ID, b.Comandar)); - Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores.ForEach(b => d.Add(b.ID, b.Comandar)); - Variaveis.OperacaoEmAndamento.DispAtu.Dados.Servos.ForEach(s => d.Add(s.ID, s.Controlar)); + Variaveis.OperacaoEmAndamento.DispAtu.Dados.Sensores.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir))); + Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar))); + Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar))); + Variaveis.OperacaoEmAndamento.DispAtu.Dados.Servos.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar))); } break; case T_Code.Sen: if (Variaveis.OperacaoEmAndamento.DispSen != null) { - Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.ForEach(s => d.Add(s.ID, s.Aferir)); - Variaveis.OperacaoEmAndamento.DispSen.Dados.Sinaleiros.ForEach(s => d.Add(s.ID, true)); - Variaveis.OperacaoEmAndamento.DispSen.Dados.Servos.ForEach(s => d.Add(s.ID, s.Controlar)); - Variaveis.OperacaoEmAndamento.DispSen.Dados.Reles.ForEach(r => d.Add(r.ID, r.Controlar)); + Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir))); + Variaveis.OperacaoEmAndamento.DispSen.Dados.Sinaleiros.ForEach(s => d.Add(s.ID, (true, true))); + Variaveis.OperacaoEmAndamento.DispSen.Dados.Servos.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar))); + Variaveis.OperacaoEmAndamento.DispSen.Dados.Reles.ForEach(r => d.Add(r.ID, (r.Mandatorio, r.Controlar))); } break; } @@ -914,13 +914,15 @@ namespace AgroBase.Models case T_Code.Mov: foreach (var c in m.ComponentesEmUso) { - Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.Mod_ID == c.Key).MovMotor.Comandar = c.Value; + var d = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.Mod_ID == c.Key).MovMotor; + d.Comandar = c.Value.Item2; } break; case T_Code.Dir: foreach (var c in m.ComponentesEmUso) { - Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.DirMotor.Mod_ID == c.Key).DirMotor.Comandar = c.Value; + var d = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.DirMotor.Mod_ID == c.Key).DirMotor; + d.Comandar = c.Value.Item2; } break; case T_Code.Atu: @@ -929,19 +931,22 @@ namespace AgroBase.Models var s = Variaveis.OperacaoEmAndamento.DispAtu.Dados.Sensores.FirstOrDefault(x => x.ID == c.Key); if (s != null) { - s.Aferir = c.Value; + s.Mandatorio = c.Value.Item1; + s.Aferir = c.Value.Item2; continue; } var bc = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == c.Key); if (bc != null) { - bc.Comandar = c.Value; + bc.Mandatorio = c.Value.Item1; + bc.Comandar = c.Value.Item2; continue; } var bo = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.FirstOrDefault(x => x.ID == c.Key); if (bo != null) { - bo.Comandar = c.Value; + bo.Mandatorio = c.Value.Item1; + bo.Comandar = c.Value.Item2; continue; } } @@ -952,19 +957,22 @@ namespace AgroBase.Models var s = Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == c.Key); if (s != null) { - s.Aferir = c.Value; + s.Mandatorio = c.Value.Item1; + s.Aferir = c.Value.Item2; continue; } var sv = Variaveis.OperacaoEmAndamento.DispSen.Dados.Servos.FirstOrDefault(x => x.ID == c.Key); if (sv != null) { - sv.Controlar = c.Value; + sv.Mandatorio = c.Value.Item1; + sv.Controlar = c.Value.Item2; continue; } var rl = Variaveis.OperacaoEmAndamento.DispSen.Dados.Reles.FirstOrDefault(x => x.ID == c.Key); if (rl != null) { - rl.Controlar = c.Value; + rl.Mandatorio = c.Value.Item1; + rl.Controlar = c.Value.Item2; continue; } } @@ -2192,7 +2200,7 @@ namespace AgroBase.Models public bool Mandatorio { get; set; } public bool Utilizar { get; set; } public bool Conectado { get; set; } - public Dictionary ComponentesEmUso { get; set; } + public Dictionary ComponentesEmUso { get; set; } } public class OperacaoParametrosMandatoriosModel diff --git a/AgroBase/OperationControl/Windows/MainWindow.xaml.cs b/AgroBase/OperationControl/Windows/MainWindow.xaml.cs index 4cbba2472..6d3563f91 100644 --- a/AgroBase/OperationControl/Windows/MainWindow.xaml.cs +++ b/AgroBase/OperationControl/Windows/MainWindow.xaml.cs @@ -228,7 +228,7 @@ namespace OperationControl.Windows { var simulacao = dados_leitura.Controle?.SimulacaoMPC?.Select(x => new double[] { x.longitude, x.latitude })?.ToList(); MAP.markers.UpdateMarkerPosition(rover_id, lat: dados_leitura.Gnss?.Latitude, lon: dados_leitura.Gnss?.Longitude, heading: dados_leitura.Gnss?.OrientacaoReal, predict: simulacao); - MAP.markers.UpdateMarkerInfo(rover_id, status: dados_leitura.Operacao.Status); + MAP.markers.UpdateMarkerInfo(rover_id, status: dados_leitura.Operacao?.Status ?? AgroBase.Models.Enums.StatusOperacao.NaoIniciado); } if (rover != null && dados_leitura?.ModulosSaude != null) @@ -421,7 +421,7 @@ namespace OperationControl.Windows var individual = _saude?.saude_individual?.FirstOrDefault(x => x.label == mod_label); - bool em_uso = mod_label != "" ? dados.DadosLeitura.Operacao.ModulosMandatorios?.FirstOrDefault(x => x.Dispositivo == modulo)?.ComponentesEmUso?.Any(x => x.Key == mod_label && x.Value) ?? false : dados.ModulosMandatorios?.Any(x => x.Dispositivo == modulo && x.Utilizar) ?? false; + bool em_uso = mod_label != "" ? dados.DadosLeitura.Operacao.ModulosMandatorios?.FirstOrDefault(x => x.Dispositivo == modulo)?.ComponentesEmUso?.Any(x => x.Key == mod_label && x.Value.Item2) ?? false : dados.ModulosMandatorios?.Any(x => x.Dispositivo == modulo && x.Utilizar) ?? false; // Aplica cor de acordo com o status AplicarStatusModuloNaLabel(lbl, individual?.status ?? _saude?.status ?? AgroBase.Models.Enums.StatusModulo.Desconectado, em_uso); @@ -683,7 +683,7 @@ namespace OperationControl.Windows //var cu = rover?.ModulosMandatorios?.FirstOrDefault(x => x.Dispositivo == modulo)?.ComponentesEmUso.FirstOrDefault(x => x.Key == label); //bool em_uso = individual?.em_uso ?? (cu?.Key != null ? cu?.Value : null) ?? rover?.ModulosMandatorios?.Any(x => x.Dispositivo == modulo && x.Utilizar) ?? false; //bool em_uso = rover?.ModulosMandatorios?.FirstOrDefault(x => x.Dispositivo == modulo)?.ComponentesEmUso?.Any(x => x.Key == label) ?? false; - bool em_uso = label != "" ? rover?.ModulosMandatorios?.FirstOrDefault(x => x.Dispositivo == modulo)?.ComponentesEmUso?.Any(x => x.Key == label && x.Value) ?? false : rover?.ModulosMandatorios?.Any(x => x.Dispositivo == modulo && x.Utilizar) ?? false; + bool em_uso = label != "" ? rover?.ModulosMandatorios?.FirstOrDefault(x => x.Dispositivo == modulo)?.ComponentesEmUso?.Any(x => x.Key == label && x.Value.Item2) ?? false : rover?.ModulosMandatorios?.Any(x => x.Dispositivo == modulo && x.Utilizar) ?? false; chbSaude_Mandatorio.IsChecked = mandatorio; chbSaude_EmUso.IsChecked = em_uso; @@ -1493,7 +1493,7 @@ namespace OperationControl.Windows private void btnServo_Enviar_Click(object sender, RoutedEventArgs e) { (var modulo, var label, var s_code, var iniciado) = GetModuleData(_labelModuloSelecionado); - if (s_code != AgroBase.Models.Enums.S_Code.sFRO) + if (s_code != AgroBase.Models.Enums.S_Code.sSRV) return; if (modulo == AgroBase.Models.Enums.T_Code.Sen) @@ -1581,7 +1581,7 @@ namespace OperationControl.Windows mod = new AgroBase.Models.OperacaoModulosMandatoriosModel() { Dispositivo = modulo, - ComponentesEmUso = new Dictionary() + ComponentesEmUso = new Dictionary() }; rover.ModulosMandatorios.Add(mod); } @@ -1592,7 +1592,7 @@ namespace OperationControl.Windows } else { - mod.ComponentesEmUso[label] = chbSaude_EmUso.IsChecked ?? false; + mod.ComponentesEmUso[label] = (chbSaude_Mandatorio.IsChecked ?? false, chbSaude_EmUso.IsChecked ?? false); } VariaveisControleOperacao.EnviarParametrosOperacao(new AgroBase.Models.Operacoes.OperacaoParametrosModel()