Ajustes camera e carregamento de parametros operacao padrao

This commit is contained in:
Diego Freitas 2026-03-16 16:22:06 -03:00
parent 88d5ac701e
commit 286e5a62c4
10 changed files with 529 additions and 520 deletions

View File

@ -44,7 +44,7 @@ namespace AgroBase.Forms.IHM
});
FuncoesGlobais.DefinirEventosPicBtn(picManual, "Erro ao carregar modo de controle manual!", async () =>
{
OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.Manual);
OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.Manual, true);
if (Variaveis.OperacaoEmAndamento.OperacaoLiberada)
{
frmDialogoMapa frm = new frmDialogoMapa();

View File

@ -206,7 +206,7 @@ namespace AgroBase
private void cmbModoOperacao_SelectedIndexChanged(object sender, EventArgs e)
{
OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModoOperacao.SelectedIndex);
OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModoOperacao.SelectedIndex, true);
}
private void btnIniciarOperacao_Click(object sender, EventArgs e)

View File

@ -291,7 +291,7 @@ namespace AgroBase.Models
if (Parametros.Modo == null) return (false, new List<string>());
CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo);
CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo, true);
Variaveis.OperacaoEmAndamento.Parametros = Parametros;
@ -333,521 +333,512 @@ namespace AgroBase.Models
}
public static void CarregarParametrosOperacaoPadrao(ModoOperacao Modo)
public static OperacaoParametrosModel CarregarParametrosOperacaoPadrao(ModoOperacao Modo, bool isagrobase)
{
var SenConectado = (DispositivosService<SensoriamentoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Sen);
var AtuConectado = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Atu);
var MvdConectado = (DispositivosService<MovimentacaoUnificadaModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mvd);
tmrLogs?.Stop();
Variaveis.OperacaoEmAndamento = new OperacaoModel(Modo)
OperacaoParametrosModel p = new OperacaoParametrosModel()
{
Iniciado = false,
DataInicio = DateTime.MinValue,
DataFim = DateTime.MinValue,
DispAtu = AtuConectado,
DispSen = SenConectado,
DispMvd = MvdConectado,
Modo = Modo,
QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo,
QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores,
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
RoverId = VariaveisEquipamento.Parametros.serial_number,
RuasPercorrer = null,
Mapa = null,
DadosLeitura = new OperacaoParametrosDadosModel(),
};
if (isagrobase)
{
var SenConectado = (DispositivosService<SensoriamentoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Sen);
var AtuConectado = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Atu);
var MvdConectado = (DispositivosService<MovimentacaoUnificadaModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mvd);
tmrLogs?.Stop();
Variaveis.OperacaoEmAndamento = new OperacaoModel(Modo)
{
Iniciado = false,
DataInicio = DateTime.MinValue,
DataFim = DateTime.MinValue,
DispAtu = AtuConectado,
DispSen = SenConectado,
DispMvd = MvdConectado,
};
}
switch (Modo)
{
case ModoOperacao.Manual:
Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel()
p.Controle = new OperacaoParametrosControleModel()
{
Modo = Modo,
QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo,
QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores,
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
RoverId = VariaveisEquipamento.Parametros.serial_number,
RuasPercorrer = null,
Mapa = null,
Controle = new OperacaoParametrosControleModel()
{
MovimentoAutomatico = false,
DirecionalAutomatico = false,
PulverizadorAutomatico = false,
FrenagemAutomaticaAoParar = true,
MovVelocidadeSErvasPercent = 100,
MovVelocidadeCErvasPercent = 15,
DirAnguloMaximo = 25,
DirVelocidadeMovimento = 40,
SonarAtivado = false,
DirTipoMovimento = TiposControladorDirecional.Manual,
RegistrarDadosPosProcessamento = false,
AtuAlturaAreaPulverizacao = 10,
AtuDuracaoAtuacao = 200,
AtuPercentualErvasBicoOff = 2,
AtuPercentualErvasBicoOn = 1,
AtuPercentualInicioPulverizacao = 70,
AtuPressaoLinha = 85,
},
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>()
MovimentoAutomatico = false,
DirecionalAutomatico = false,
PulverizadorAutomatico = false,
SonarAtivado = false,
FrenagemAutomaticaAoParar = false,
ImuParadaPorInclinacao = false,
OakParadaPorObstaculo = false,
MpcMatrizCusto = false,
MpcHorizonte = 4.0,
MovVelocidadeSErvasPercent = 100,
MovVelocidadeCErvasPercent = 15,
DirAnguloMaximo = 25,
DirVelocidadeMovimento = 40,
DirTipoMovimento = TiposControladorDirecional.Manual,
AtuAlturaAreaPulverizacao = 10,
AtuDuracaoAtuacao = 200,
AtuPercentualErvasBicoOff = 2,
AtuPercentualErvasBicoOn = 1,
AtuPercentualInicioPulverizacao = 70,
AtuPressaoLinha = 85,
};
p.ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>()
{
new OperacaoModulosMandatoriosModel()
{
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Mov,
Mandatorio = false,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Dir,
Mandatorio = false,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Atu,
Mandatorio = false,
Utilizar = true,
}
Dispositivo = T_Code.Mov,
Mandatorio = false,
Utilizar = true,
},
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
new OperacaoModulosMandatoriosModel()
{
new OperacaoParametrosMandatoriosModel()
{
Parametro = ParametrosOperacao.Joystick,
Mandatorio = false,
Utilizar = true,
},
//new OperacaoParametrosMandatoriosModel()
//{
// Parametro = ParametrosOperacao.LoRa,
// Mandatorio = false,
// Utilizar = true,
//},
Dispositivo = T_Code.Dir,
Mandatorio = false,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Atu,
Mandatorio = false,
Utilizar = true,
}
};
Variaveis.OperacaoEmAndamento.frmOperacao = new frmOperacaoManual();
Variaveis.OperacaoEmAndamento.ControleAnterior = new OperacaoControleModel();
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
p.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
{
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 25,
Direcao = Direcao.Parado,
EmFreio = false,
PercentualVelocidadeSP = 20,
AlturaBarra = 50,
TiposControle = new List<OperacaoControleTipoModel>()
new OperacaoParametrosMandatoriosModel()
{
new OperacaoControleTipoModel()
{
Tipo = T_Code.Mov,
DelayEnvioComandoBase = 10,
DelayEnvioComando = 10,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Dir,
DelayEnvioComandoBase = 10,
DelayEnvioComando = 10,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Atu,
DelayEnvioComandoBase = 10,
DelayEnvioComando = 10,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
Parametro = ParametrosOperacao.Joystick,
Mandatorio = false,
Utilizar = true,
},
};
if (isagrobase)
{
Variaveis.OperacaoEmAndamento.frmOperacao = new frmOperacaoManual();
Variaveis.OperacaoEmAndamento.ControleAnterior = new OperacaoControleModel();
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
{
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 25,
Direcao = Direcao.Parado,
EmFreio = false,
PercentualVelocidadeSP = 20,
AlturaBarra = 50,
TiposControle = new List<OperacaoControleTipoModel>()
{
new OperacaoControleTipoModel()
{
Tipo = T_Code.Mov,
DelayEnvioComandoBase = 10,
DelayEnvioComando = 10,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Dir,
DelayEnvioComandoBase = 10,
DelayEnvioComando = 10,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Atu,
DelayEnvioComandoBase = 10,
DelayEnvioComando = 10,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
},
};
}
break;
case ModoOperacao.MapaGPS:
Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel()
p.Controle = new OperacaoParametrosControleModel()
{
Modo = Modo,
QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo,
QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores,
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
RoverId = VariaveisEquipamento.Parametros.serial_number,
RuasPercorrer = null,
Mapa = null,
Controle = new OperacaoParametrosControleModel()
{
MovimentoAutomatico = true,
DirecionalAutomatico = true,
PulverizadorAutomatico = true,
FrenagemAutomaticaAoParar = true,
MovVelocidadeSErvasPercent = 50,
MovVelocidadeCErvasPercent = 20,
DirAnguloMaximo = 30,
DirVelocidadeMovimento = 50,
SonarAtivado = true,
DirTipoMovimento = TiposControladorDirecional.MPC,
RegistrarDadosPosProcessamento = false,
AtuAlturaAreaPulverizacao = 10,
AtuDuracaoAtuacao = 200,
AtuPercentualErvasBicoOff = 2,
AtuPercentualErvasBicoOn = 1,
AtuPercentualInicioPulverizacao = 70,
AtuPressaoLinha = 85,
},
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>()
{
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Mov,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Dir,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Sen,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Atu,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Gps,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Cam,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Snr,
Mandatorio = false,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Lvx,
Mandatorio = false,
Utilizar = true,
}
},
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
{
//new OperacaoParametrosMandatoriosModel()
//{
// Parametro = ParametrosOperacao.CameraSolo,
// Mandatorio = true,
// Utilizar = true,
//},
//new OperacaoParametrosMandatoriosModel()
//{
// Parametro = ParametrosOperacao.Sonar,
// Mandatorio = false,
// Utilizar = true,
//},
new OperacaoParametrosMandatoriosModel()
{
Parametro = ParametrosOperacao.Mapa,
Mandatorio = true,
Utilizar = true,
},
//new OperacaoParametrosMandatoriosModel()
//{
// Parametro = ParametrosOperacao.LoRa,
// Mandatorio = true,
// Utilizar = true,
//}
}
MovimentoAutomatico = true,
DirecionalAutomatico = true,
PulverizadorAutomatico = true,
SonarAtivado = false,
FrenagemAutomaticaAoParar = true,
ImuParadaPorInclinacao = true,
OakParadaPorObstaculo = true,
MpcMatrizCusto = false,
MpcHorizonte = 4.0,
MovVelocidadeSErvasPercent = 50,
MovVelocidadeCErvasPercent = 20,
DirAnguloMaximo = 30,
DirVelocidadeMovimento = 50,
DirTipoMovimento = TiposControladorDirecional.MPC,
AtuAlturaAreaPulverizacao = 10,
AtuDuracaoAtuacao = 200,
AtuPercentualErvasBicoOff = 2,
AtuPercentualErvasBicoOn = 1,
AtuPercentualInicioPulverizacao = 70,
AtuPressaoLinha = 85,
};
Variaveis.OperacaoEmAndamento.frmOperacao = new frmOperacaoMapaGPS();
Variaveis.OperacaoEmAndamento.ControleAnterior = new OperacaoControleModel();
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
p.ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>()
{
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 0,
Direcao = Direcao.Parado,
EmFreio = false,
PercentualVelocidadeSP = 0,
AlturaBarra = 50,
TiposControle = new List<OperacaoControleTipoModel>()
new OperacaoModulosMandatoriosModel()
{
new OperacaoControleTipoModel()
{
Tipo = T_Code.Mov,
DelayEnvioComandoBase = 500,
DelayEnvioComando = 500,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Dir,
DelayEnvioComandoBase = 300,
DelayEnvioComando = 300,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Atu,
DelayEnvioComandoBase = 200,
DelayEnvioComando = 200,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
Dispositivo = T_Code.Mov,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Dir,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Sen,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Atu,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Gps,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Cam,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Snr,
Mandatorio = true,
Utilizar = true,
},
};
p.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
{
new OperacaoParametrosMandatoriosModel()
{
Parametro = ParametrosOperacao.Mapa,
Mandatorio = true,
Utilizar = true,
},
};
if (isagrobase)
{
Variaveis.OperacaoEmAndamento.frmOperacao = new frmOperacaoMapaGPS();
Variaveis.OperacaoEmAndamento.ControleAnterior = new OperacaoControleModel();
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
{
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 0,
Direcao = Direcao.Parado,
EmFreio = false,
PercentualVelocidadeSP = 0,
AlturaBarra = 50,
TiposControle = new List<OperacaoControleTipoModel>()
{
new OperacaoControleTipoModel()
{
Tipo = T_Code.Mov,
DelayEnvioComandoBase = 500,
DelayEnvioComando = 500,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Dir,
DelayEnvioComandoBase = 300,
DelayEnvioComando = 300,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Atu,
DelayEnvioComandoBase = 200,
DelayEnvioComando = 200,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
},
};
}
break;
case ModoOperacao.TreinamentoIA:
Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel()
p.Controle = new OperacaoParametrosControleModel()
{
Modo = Modo,
QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo,
QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores,
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
RoverId = VariaveisEquipamento.Parametros.serial_number,
RuasPercorrer = null,
Mapa = null,
Controle = new OperacaoParametrosControleModel()
{
MovimentoAutomatico = true,
DirecionalAutomatico = true,
PulverizadorAutomatico = false,
FrenagemAutomaticaAoParar = false,
MovVelocidadeSErvasPercent = 50,
MovVelocidadeCErvasPercent = 20,
DirAnguloMaximo = 30,
DirVelocidadeMovimento = 50,
SonarAtivado = false,
DirTipoMovimento = TiposControladorDirecional.IA,
RegistrarDadosPosProcessamento = false,
AtuAlturaAreaPulverizacao = 10,
AtuDuracaoAtuacao = 200,
AtuPercentualErvasBicoOff = 2,
AtuPercentualErvasBicoOn = 1,
AtuPercentualInicioPulverizacao = 70,
AtuPressaoLinha = 85,
},
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>()
MovimentoAutomatico = true,
DirecionalAutomatico = true,
PulverizadorAutomatico = false,
SonarAtivado = false,
FrenagemAutomaticaAoParar = false,
ImuParadaPorInclinacao = false,
OakParadaPorObstaculo = false,
MpcMatrizCusto = false,
MpcHorizonte = 4.0,
MovVelocidadeSErvasPercent = 50,
MovVelocidadeCErvasPercent = 20,
DirAnguloMaximo = 30,
DirVelocidadeMovimento = 50,
DirTipoMovimento = TiposControladorDirecional.IA,
AtuAlturaAreaPulverizacao = 10,
AtuDuracaoAtuacao = 200,
AtuPercentualErvasBicoOff = 2,
AtuPercentualErvasBicoOn = 1,
AtuPercentualInicioPulverizacao = 70,
AtuPressaoLinha = 85,
};
p.ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>()
{
new OperacaoModulosMandatoriosModel()
{
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Mov,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Dir,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Atu,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Gps,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Sen,
Mandatorio = false,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Wit,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Pzm,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Lra,
Mandatorio = true,
}
Dispositivo = T_Code.Mov,
Mandatorio = true,
},
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
new OperacaoModulosMandatoriosModel()
{
new OperacaoParametrosMandatoriosModel()
{
Parametro = ParametrosOperacao.CameraSolo,
Mandatorio = true,
},
new OperacaoParametrosMandatoriosModel()
{
Parametro = ParametrosOperacao.Sonar,
Mandatorio = true,
},
new OperacaoParametrosMandatoriosModel()
{
Parametro = ParametrosOperacao.Mapa,
Mandatorio = true,
}
Dispositivo = T_Code.Dir,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Atu,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Gps,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Sen,
Mandatorio = false,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Wit,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Pzm,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Lra,
Mandatorio = true,
}
};
Variaveis.OperacaoEmAndamento.ControleAnterior = new OperacaoControleModel();
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
p.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
{
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 0,
Direcao = Direcao.Parado,
EmFreio = false,
PercentualVelocidadeSP = 0,
TiposControle = new List<OperacaoControleTipoModel>()
new OperacaoParametrosMandatoriosModel()
{
new OperacaoControleTipoModel()
{
Tipo = T_Code.Mov,
DelayEnvioComandoBase = 500,
DelayEnvioComando = 500,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Dir,
DelayEnvioComandoBase = 1000,
DelayEnvioComando = 1000,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Atu,
DelayEnvioComandoBase = 500,
DelayEnvioComando = 500,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
Parametro = ParametrosOperacao.CameraSolo,
Mandatorio = true,
},
new OperacaoParametrosMandatoriosModel()
{
Parametro = ParametrosOperacao.Sonar,
Mandatorio = true,
},
new OperacaoParametrosMandatoriosModel()
{
Parametro = ParametrosOperacao.Mapa,
Mandatorio = true,
}
};
if (isagrobase)
{
Variaveis.OperacaoEmAndamento.ControleAnterior = new OperacaoControleModel();
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
{
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 0,
Direcao = Direcao.Parado,
EmFreio = false,
PercentualVelocidadeSP = 0,
TiposControle = new List<OperacaoControleTipoModel>()
{
new OperacaoControleTipoModel()
{
Tipo = T_Code.Mov,
DelayEnvioComandoBase = 500,
DelayEnvioComando = 500,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Dir,
DelayEnvioComandoBase = 1000,
DelayEnvioComando = 1000,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Atu,
DelayEnvioComandoBase = 500,
DelayEnvioComando = 500,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
},
};
}
break;
case ModoOperacao.MapeamentoVisual:
Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel()
p.Controle = new OperacaoParametrosControleModel()
{
Modo = Modo,
QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo,
QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores,
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
RoverId = VariaveisEquipamento.Parametros.serial_number,
RuasPercorrer = null,
Mapa = null,
Controle = new OperacaoParametrosControleModel()
{
MovimentoAutomatico = true,
DirecionalAutomatico = true,
PulverizadorAutomatico = false,
FrenagemAutomaticaAoParar = true,
MovVelocidadeSErvasPercent = 40,
MovVelocidadeCErvasPercent = 20,
DirAnguloMaximo = 30,
DirVelocidadeMovimento = 50,
SonarAtivado = true,
DirTipoMovimento = TiposControladorDirecional.PID,
RegistrarDadosPosProcessamento = false,
AtuAlturaAreaPulverizacao = 10,
AtuDuracaoAtuacao = 200,
AtuPercentualErvasBicoOff = 2,
AtuPercentualErvasBicoOn = 1,
AtuPercentualInicioPulverizacao = 70,
AtuPressaoLinha = 85,
},
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>()
MovimentoAutomatico = true,
DirecionalAutomatico = true,
PulverizadorAutomatico = false,
SonarAtivado = false,
FrenagemAutomaticaAoParar = true,
ImuParadaPorInclinacao = true,
OakParadaPorObstaculo = true,
MpcMatrizCusto = false,
MpcHorizonte = 4.0,
MovVelocidadeSErvasPercent = 40,
MovVelocidadeCErvasPercent = 20,
DirAnguloMaximo = 30,
DirVelocidadeMovimento = 50,
DirTipoMovimento = TiposControladorDirecional.PID,
AtuAlturaAreaPulverizacao = 10,
AtuDuracaoAtuacao = 200,
AtuPercentualErvasBicoOff = 2,
AtuPercentualErvasBicoOn = 1,
AtuPercentualInicioPulverizacao = 70,
AtuPressaoLinha = 85,
};
p.ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>()
{
new OperacaoModulosMandatoriosModel()
{
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Mov,
Mandatorio = true,
Utilizar = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Dir,
Mandatorio = true,
Utilizar = true,
}
Dispositivo = T_Code.Mov,
Mandatorio = true,
Utilizar = true,
},
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
new OperacaoModulosMandatoriosModel()
{
new OperacaoParametrosMandatoriosModel()
{
Parametro = ParametrosOperacao.Sonar,
Mandatorio = true,
Utilizar = true,
}
Dispositivo = T_Code.Dir,
Mandatorio = true,
Utilizar = true,
}
};
Variaveis.OperacaoEmAndamento.ControleAnterior = new OperacaoControleModel();
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
p.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
{
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 0,
Direcao = Direcao.Parado,
EmFreio = false,
PercentualVelocidadeSP = 0,
TiposControle = new List<OperacaoControleTipoModel>()
new OperacaoParametrosMandatoriosModel()
{
new OperacaoControleTipoModel()
{
Tipo = T_Code.Mov,
DelayEnvioComandoBase = 500,
DelayEnvioComando = 500,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Dir,
DelayEnvioComandoBase = 200,
DelayEnvioComando = 200,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
}
},
Parametro = ParametrosOperacao.Sonar,
Mandatorio = true,
Utilizar = true,
}
};
if (isagrobase)
{
Variaveis.OperacaoEmAndamento.ControleAnterior = new OperacaoControleModel();
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
{
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 0,
Direcao = Direcao.Parado,
EmFreio = false,
PercentualVelocidadeSP = 0,
TiposControle = new List<OperacaoControleTipoModel>()
{
new OperacaoControleTipoModel()
{
Tipo = T_Code.Mov,
DelayEnvioComandoBase = 500,
DelayEnvioComando = 500,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
},
new OperacaoControleTipoModel()
{
Tipo = T_Code.Dir,
DelayEnvioComandoBase = 200,
DelayEnvioComando = 200,
DelayEnvioComandoExtra = 0,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
}
},
};
}
break;
}
Variaveis.OperacaoEmAndamento.Parametros.RoverId = VariaveisEquipamento.Parametros.serial_number;
Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Npc, Mandatorio = true, Utilizar = true });
Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Can, Mandatorio = true, Utilizar = true });
Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Ipb, Mandatorio = true, Utilizar = true });
Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Bat, Mandatorio = true, Utilizar = true });
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Npc, Mandatorio = true, Utilizar = true });
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Can, Mandatorio = true, Utilizar = true });
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Ipb, Mandatorio = true, Utilizar = true });
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Bat, Mandatorio = true, Utilizar = true });
p.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = Variaveis.OperacaoEmAndamento.PreencherComponentesEmUso(m.Dispositivo));
Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = Variaveis.OperacaoEmAndamento.PreencherComponentesEmUso(m.Dispositivo));
if (isagrobase)
{
Variaveis.OperacaoEmAndamento.Parametros = p;
Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List<List<GPSModel>>());
Variaveis.OperacaoEmAndamento.Sensoriamento = new OperacaoSensoriamentoLogModel();
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
}
Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List<List<GPSModel>>());
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = new OperacaoParametrosDadosModel();
Variaveis.OperacaoEmAndamento.Sensoriamento = new OperacaoSensoriamentoLogModel();
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
return p;
}
private Dictionary<string, (bool, bool)> PreencherComponentesEmUso(T_Code Modulo)
@ -980,7 +971,7 @@ namespace AgroBase.Models
{
if (Parametros.Modo == null) return (false, new List<string>());
CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo);
CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo, true);
Variaveis.OperacaoEmAndamento.Parametros = Parametros;
Variaveis.OperacaoEmAndamento.Parametros.RoverId = VariaveisEquipamento.Parametros.serial_number;

View File

@ -379,7 +379,7 @@ namespace AgroBase.Services
});
if (PrimeiraExecucao)
{
OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.MapaGPS);
OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.MapaGPS, true);
}
//DispositivosMapeados.ForEach(d => d.AtualizarDados());

View File

@ -16,6 +16,7 @@ class CameraManager:
def __init__(self, mostrar_log):
self.mostrar_log = mostrar_log
self.mx_id = None
self.model_svc = None
self.reiniciar_status()
def reiniciar_status(self):
@ -151,16 +152,17 @@ class CameraManager:
def get_selected_frame(self, _frame_type: TipoFrameCamera):
_frame = None
if (_frame_type in [TipoFrameCamera.Rgb, TipoFrameCamera.Segmentacao, TipoFrameCamera.Overlay, TipoFrameCamera.Debug]):
rgb_frame, seg_frame, overlay_frame, _, _ = self.model_svc.preview_infer_cached(self._ultimo_raw_input, self._ultimo_predictions, alpha=0.5)
if _frame_type == TipoFrameCamera.Rgb:
_frame = rgb_frame
elif _frame_type == TipoFrameCamera.Segmentacao:
_frame = seg_frame
elif _frame_type == TipoFrameCamera.Overlay:
_frame = overlay_frame
elif _frame_type == TipoFrameCamera.Debug:
self.weed_detector._mostrar_debug_bicos_overlay(overlay_frame, [], self._ultimo_controle, show=False)
_frame = self.weed_detector._dbg_img
if self.model_svc is not None:
rgb_frame, seg_frame, overlay_frame, _, _ = self.model_svc.preview_infer_cached(self._ultimo_raw_input, self._ultimo_predictions, alpha=0.5)
if _frame_type == TipoFrameCamera.Rgb:
_frame = rgb_frame
elif _frame_type == TipoFrameCamera.Segmentacao:
_frame = seg_frame
elif _frame_type == TipoFrameCamera.Overlay:
_frame = overlay_frame
elif _frame_type == TipoFrameCamera.Debug:
self.weed_detector._mostrar_debug_bicos_overlay(overlay_frame, [], self._ultimo_controle, show=False)
_frame = self.weed_detector._dbg_img
elif _frame_type == TipoFrameCamera.Raw4:
_frame = self._ultimo_raw_base
return _frame

View File

@ -198,7 +198,7 @@ namespace OperationControl.Models
}
((App)Application.Current).Shell.Main?.AtualizarDadosTela_ParametrosOperacao(obj.Controle);
((App)Application.Current).Shell.Main?.MAP?.CarregarDadosMapa(obj.Mapa, obj.RuasPercorrer);
((App)Application.Current).Shell.Dock?._vm?.AtualizarDadosMapa(obj);
((App)Application.Current).Shell.Dock?._vm?.AtualizarParametrosRover(obj);
}
catch (Exception ex)
{

View File

@ -1,4 +1,5 @@
using AgroBase.Models.Operacoes;
using AgroBase.Models;
using AgroBase.Models.Operacoes;
using OperationControl.Helpers;
using OperationControl.Models;
using OperationControl.Models.Operacao;
@ -17,7 +18,20 @@ namespace OperationControl.ViewModels.Views.Operacao
private bool _isCollapsed;
private RoverCardModel _roverSelecionado;
public ResumoOperacionalModel Resumo { get; } = new ResumoOperacionalModel();
public OperacaoParametrosModel Parametros { get; } = new OperacaoParametrosModel();
private OperacaoParametrosModel _parametros = new OperacaoParametrosModel();
public OperacaoParametrosModel Parametros
{
get => _parametros;
set
{
if (_parametros != value)
{
_parametros = value;
OnPropertyChanged(nameof(Parametros));
}
}
}
public OperacaoRightViewModel()
{
@ -33,6 +47,7 @@ namespace OperationControl.ViewModels.Views.Operacao
SelecionarSecao(secaoParseada);
});
AcaoBotaoTopoCommand = new RelayCommand(_ => ExecutarAcaoBotaoTopo());
CarregarParametrosPadraoCommand = new RelayCommand(p => CarregarParametrosPadrao((AgroBase.Models.Enums.ModoOperacao)p));
LerParametrosCommand = new RelayCommand(_ => LerParametrosSolicitado?.Invoke());
SalvarParametrosCommand = new RelayCommand(_ => SalvarParametrosSolicitado?.Invoke(Parametros));
}
@ -51,6 +66,7 @@ namespace OperationControl.ViewModels.Views.Operacao
public ICommand AcaoBotaoTopoCommand { get; }
public ICommand LerParametrosCommand { get; }
public ICommand SalvarParametrosCommand { get; }
public ICommand CarregarParametrosPadraoCommand { get; }
public bool IsCollapsed
{
@ -115,6 +131,8 @@ namespace OperationControl.ViewModels.Views.Operacao
public string TextoBotaoTopo => BotaoTopoEhVoltar ? "◀ Voltar" : "Trocar Rover";
public Array ModosOperacaoDisponiveis { get; } = Enum.GetValues(typeof(AgroBase.Models.Enums.ModoOperacao));
private void ExecutarAcaoBotaoTopo()
{
if (BotaoTopoEhVoltar)
@ -127,6 +145,12 @@ namespace OperationControl.ViewModels.Views.Operacao
}
}
private void CarregarParametrosPadrao(AgroBase.Models.Enums.ModoOperacao modo)
{
var p = OperacaoModel.CarregarParametrosOperacaoPadrao(modo, false);
p.Descricao = $"{p.Modo} - Padrão";
Parametros = p;
}
public void ToggleCollapse()
{
@ -226,45 +250,7 @@ namespace OperationControl.ViewModels.Views.Operacao
public void AtualizarParametros(OperacaoParametrosModel origem)
{
if (origem == null) return;
Parametros.Modo = origem.Modo;
Parametros.Descricao = origem.Descricao;
Parametros.QtdBicos = origem.QtdBicos;
Parametros.QtdCamerasSolo = origem.QtdCamerasSolo;
Parametros.CapacidadeReservatorio = origem.CapacidadeReservatorio;
var controle_o = origem.Controle;
if (controle_o == null) return;
if (Parametros.Controle == null) Parametros.Controle = new OperacaoParametrosControleModel();
var controle_p = Parametros.Controle;
controle_p.MovimentoAutomatico = controle_o.MovimentoAutomatico;
controle_p.DirecionalAutomatico = controle_o.DirecionalAutomatico;
controle_p.PulverizadorAutomatico = controle_o.PulverizadorAutomatico;
controle_p.SonarAtivado = controle_o.SonarAtivado;
controle_p.OakParadaPorObstaculo = controle_o.OakParadaPorObstaculo;
controle_p.ImuParadaPorInclinacao = controle_o.ImuParadaPorInclinacao;
controle_p.FrenagemAutomaticaAoParar = controle_o.FrenagemAutomaticaAoParar;
controle_p.RegistrarDadosPosProcessamento = controle_o.RegistrarDadosPosProcessamento;
controle_p.MovVelocidadeSErvasPercent = controle_o.MovVelocidadeSErvasPercent;
controle_p.MovVelocidadeCErvasPercent = controle_o.MovVelocidadeCErvasPercent;
controle_p.DirAnguloMaximo = controle_o.DirAnguloMaximo;
controle_p.DirVelocidadeMovimento = controle_o.DirVelocidadeMovimento;
controle_p.DirTipoMovimento = controle_o.DirTipoMovimento;
controle_p.AtuPressaoLinha = controle_o.AtuPressaoLinha;
controle_p.AtuDuracaoAtuacao = controle_o.AtuDuracaoAtuacao;
controle_p.AtuPercentualInicioPulverizacao = controle_o.AtuPercentualInicioPulverizacao;
controle_p.AtuAlturaAreaPulverizacao = controle_o.AtuAlturaAreaPulverizacao;
controle_p.AtuPercentualErvasBicoOn = controle_o.AtuPercentualErvasBicoOn;
controle_p.AtuPercentualErvasBicoOff = controle_o.AtuPercentualErvasBicoOff;
controle_p.MpcMatrizCusto = controle_o.MpcMatrizCusto;
controle_p.MpcHorizonte = controle_o.MpcHorizonte;
OnPropertyChanged(nameof(Parametros));
Parametros = origem;
}
private void OnPropertyChanged(string nome)

View File

@ -614,6 +614,12 @@ namespace OperationControl.ViewModels
Mapa?.markers?.UpdateMarkerPosition(VariaveisControleOperacao.BaseMarkerID, lat: dados?.Latitude, lon: dados?.Longitude, heading: dados?.OrientacaoReal);
}
public void AtualizarParametrosRover(OperacaoParametrosModel? rover)
{
_viewOperacaoRight?._vm?.AtualizarParametros(rover);
AtualizarDadosMapa(rover);
}
public void AtualizarDadosMapa(OperacaoParametrosModel? dados)
{
_viewOperacaoCenter?.Mapa?.LoadMapFile(_ultimoMapaCarregado);
@ -956,8 +962,6 @@ namespace OperationControl.ViewModels
return;
VariaveisControleOperacao.RequisitarParametrosOperacao();
_viewOperacaoRight?._vm?.AtualizarParametros(VariaveisControleOperacao.RoverEmFoco);
}
private void OnSalvarParametrosSolicitado(OperacaoParametrosModel parametros)
{
@ -968,7 +972,7 @@ namespace OperationControl.ViewModels
var novosParametros = new OperacaoParametrosModel()
{
Modo = parametros.Modo ?? AgroBase.Models.Enums.ModoOperacao.NaoDefinido,
Modo = parametros.Modo,
Descricao = parametros.Descricao,
QtdCamerasSolo = parametros.QtdCamerasSolo,
QtdBicos = parametros.QtdBicos,
@ -976,8 +980,8 @@ namespace OperationControl.ViewModels
Controle = parametros.Controle,
ModulosMandatorios = rover?.ModulosMandatorios,
ParametrosMandatorios = rover?.ParametrosMandatorios,
ModulosMandatorios = parametros?.ModulosMandatorios,
ParametrosMandatorios = parametros?.ParametrosMandatorios,
RuasPercorrer = _viewOperacaoCenter?.Mapa?.RuasMapaCarregado?.Where(x => x.Selected)?.Select(x => x.Id)?.ToList(),
Mapa = _viewOperacaoCenter?.Mapa?.CriarDadosMapa()
@ -990,9 +994,22 @@ namespace OperationControl.ViewModels
VariaveisControleOperacao.RoverEmFoco.QtdCamerasSolo = novosParametros.QtdCamerasSolo;
VariaveisControleOperacao.RoverEmFoco.QtdBicos = novosParametros.QtdBicos;
VariaveisControleOperacao.RoverEmFoco.CapacidadeReservatorio = novosParametros.CapacidadeReservatorio;
VariaveisControleOperacao.RoverEmFoco.Controle = novosParametros.Controle;
VariaveisControleOperacao.RoverEmFoco.ModulosMandatorios = novosParametros.ModulosMandatorios;
VariaveisControleOperacao.RoverEmFoco.ParametrosMandatorios = novosParametros.ParametrosMandatorios;
VariaveisControleOperacao.RoverEmFoco.RuasPercorrer = novosParametros.RuasPercorrer;
VariaveisControleOperacao.RoverEmFoco.Mapa = novosParametros.Mapa;
VariaveisControleOperacao.RequisitarParametrosOperacao();
Task.Run(async () =>
{
await Task.Delay(1000);
_viewOperacaoRight?._vm?.SelecionarSecao(SecaoRightBar.Diagnostico);
});
}

View File

@ -3,7 +3,9 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:OperationControl.Views.Operacao"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
mc:Ignorable="d">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
@ -360,6 +362,8 @@
<StackPanel>
<TextBlock Text="Operação" Foreground="White" FontSize="15" FontWeight="SemiBold" Margin="0,0,0,12"/>
<TextBlock Text="Modo" Style="{StaticResource ParamLabelStyle}"/>
<ComboBox ItemsSource="{Binding ModosOperacaoDisponiveis}" SelectedItem="{Binding Parametros.Modo, Mode=TwoWay}" SelectionChanged="cmbModoOperacao_SelectionChanged" />
<TextBlock Text="Descrição" Style="{StaticResource ParamLabelStyle}"/>
<TextBox Text="{Binding Parametros.Descricao}" Style="{StaticResource ParamTextBoxStyle}" Margin="0,0,0,0"/>
</StackPanel>

View File

@ -36,5 +36,14 @@ namespace OperationControl.Views.Operacao
_vm = vm;
DataContext = _vm;
}
private void cmbModoOperacao_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (DataContext is OperacaoRightViewModel vm && sender is System.Windows.Controls.ComboBox combo && combo.SelectedItem is AgroBase.Models.Enums.ModoOperacao modo)
{
if (vm.CarregarParametrosPadraoCommand?.CanExecute(modo) == true)
vm.CarregarParametrosPadraoCommand.Execute(modo);
}
}
}
}