Ajustes mods mandatorios

This commit is contained in:
Diego Freitas 2025-12-18 08:45:51 -03:00
parent 1ee323cace
commit d79eb55179
4 changed files with 38 additions and 30 deletions

View File

@ -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

View File

@ -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
{

View File

@ -866,39 +866,39 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
}
private Dictionary<string, bool> PreencherComponentesEmUso(T_Code Modulo)
private Dictionary<string, (bool, bool)> PreencherComponentesEmUso(T_Code Modulo)
{
Dictionary<string, bool> d = new Dictionary<string, bool>();
Dictionary<string, (bool, bool)> d = new Dictionary<string, (bool, bool)>();
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<string, bool> ComponentesEmUso { get; set; }
public Dictionary<string, (bool, bool)> ComponentesEmUso { get; set; }
}
public class OperacaoParametrosMandatoriosModel

View File

@ -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<string, bool>()
ComponentesEmUso = new Dictionary<string, (bool, bool)>()
};
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()