Merge branch 'op_control' of http://zendioninc.com.br:3000/Zendion/agrobot_base into op_control

This commit is contained in:
Diego Freitas 2026-03-17 16:45:58 -03:00
commit c0f539d5e2
2 changed files with 39 additions and 21 deletions

View File

@ -363,6 +363,11 @@ namespace AgroBase.Models
DispAtu = AtuConectado,
DispSen = SenConectado,
DispMvd = MvdConectado,
Simulando = false,
Mapa = new MapasModel(),
GPSTrajetoria = new List<GPSModel>(),
Sensoriamento = new OperacaoSensoriamentoLogModel(),
Trajetoria = new TrajetoriaMapaOperacaoModel(new List<List<GPSModel>>())
};
}
@ -835,8 +840,6 @@ namespace AgroBase.Models
{
Variaveis.OperacaoEmAndamento.Parametros = p;
Variaveis.OperacaoEmAndamento.DefinirComponentesEmUso();
Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List<List<GPSModel>>());
Variaveis.OperacaoEmAndamento.Sensoriamento = new OperacaoSensoriamentoLogModel();
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
}
@ -986,6 +989,7 @@ namespace AgroBase.Models
p.Controle = Parametros.Controle;
p.QtdBicos = Parametros.QtdBicos;
p.QtdCamerasSolo = Parametros.QtdCamerasSolo;
p.Mapa = Parametros.Mapa;
p.RuasPercorrer = Parametros.RuasPercorrer;
p.ModulosMandatorios = Parametros.ModulosMandatorios;
p.ParametrosMandatorios = Parametros.ParametrosMandatorios;
@ -1077,6 +1081,20 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Trajetoria?.AutonomiaCorredor?.Parar();
}
public void ReiniciarOperacao(bool daBase)
{
RedisService.AtualizarCampos(
CtxKey.DadosOperacao,
("status", StatusOperacao.Parametrizando),
("iniciado", false)
);
CarregarParamerosOperacaoBase(Variaveis.OperacaoEmAndamento.Parametros);
if (daBase)
EnviarParametorsOperacao();
}
public async Task RealizarCalibragemInicialAsync(bool forcar)
{
bool modsCalibrados = Variaveis.OperacaoEmAndamento.ModsCalibragem.All(x => x.Value.Values.Count > 0 && x.Value.Values.All(y => y == true));
@ -1177,17 +1195,7 @@ namespace AgroBase.Models
public void ReiniciarSimulacao()
{
RedisService.AtualizarCampos(
CtxKey.DadosOperacao,
("status", StatusOperacao.Parametrizando),
("iniciado", false)
);
Variaveis.OperacaoEmAndamento.Iniciado = false;
Variaveis.OperacaoEmAndamento.Simulando = false;
Variaveis.OperacaoEmAndamento.Mapa = new MapasModel();
Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List<List<GPSModel>>());
Variaveis.OperacaoEmAndamento.GPSTrajetoria = new List<GPSModel>();
ReiniciarOperacao(false);
var Topico = Variaveis.MqttServiceLocal.Topicos.FirstOrDefault(x => x.Topico == MapasVariaveisModel.TopicoSelecaoRuasMapa);
Topico.Mensagens.Add(new MqttService.MqttTopicosMensagensModel()
@ -1488,22 +1496,29 @@ namespace AgroBase.Models
}
}
private void EnviarParametorsOperacao()
{
var topico = Variaveis.MqttServiceBase.Topicos.FirstOrDefault(x => x.Topico == VariaveisEquipamento.TopicoMqttParametros.Replace("<id>", VariaveisEquipamento.Parametros.serial_number));
var p = Variaveis.OperacaoEmAndamento.Parametros;
string msg = JsonConvert.SerializeObject(p);
Task.Run(async () => await Variaveis.MqttServiceBase.PublishAsync(topico, msg));
}
public void ExecutaComandoDaBase(OperacaoComandoBaseModel controleBase)
{
if (controleBase.Dispositivo == T_Code.Mod)
{
var _Parametros = controleBase.Parametros;
switch (controleBase.Tecla)
{
case BotoesJoystick.Share: // Requisitar parametros da operacao
var topico = Variaveis.MqttServiceBase.Topicos.FirstOrDefault(x => x.Topico == VariaveisEquipamento.TopicoMqttParametros.Replace("<id>", VariaveisEquipamento.Parametros.serial_number));
var p = Variaveis.OperacaoEmAndamento.Parametros;
string msg = JsonConvert.SerializeObject(p);
Task.Run(async () => await Variaveis.MqttServiceBase.PublishAsync(topico, msg));
EnviarParametorsOperacao();
break;
case BotoesJoystick.Options: // Operacao nao iniciada, carrega todos os parametros compeltos
Variaveis.OperacaoEmAndamento.CarregarParamerosOperacaoBase(_Parametros);
EnviarParametorsOperacao();
break;
case BotoesJoystick.Touchpad: // Operacao em andamento, atualiza apenas os dados de controle
if (_Parametros.Modo != null) Variaveis.OperacaoEmAndamento.Parametros.Modo = _Parametros.Modo;
@ -1521,6 +1536,7 @@ namespace AgroBase.Models
}
HealthWorkerService.AtualizarDadosOperacao(true);
EnviarParametorsOperacao();
break;
case BotoesJoystick.L1: // Inicia o modo simulador
if (!Variaveis.OperacaoEmAndamento.Iniciado)
@ -1533,6 +1549,8 @@ namespace AgroBase.Models
case BotoesJoystick.L3: // Finaliza a operacao
if (Variaveis.OperacaoEmAndamento.Iniciado)
Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao());
else
ReiniciarOperacao(true);
break;
case BotoesJoystick.R1: // Libera a operacao interrompida mediante supervisao humana
if (!(Variaveis.OperacaoEmAndamento.Trajetoria?.AutonomiaCorredor?.Liberado ?? false))
@ -2592,8 +2610,8 @@ namespace AgroBase.Models
DadosPerformance = dadosPerformance,
DadosLoRa = dadosLora,
LivoxLidar = dadosLivox,
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>(Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios),
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>(Variaveis.OperacaoEmAndamento.Parametros.ParametrosMandatorios),
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>(Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios ?? new List<OperacaoModulosMandatoriosModel>()),
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>(Variaveis.OperacaoEmAndamento.Parametros.ParametrosMandatorios ?? new List<OperacaoParametrosMandatoriosModel>()),
ModulosSaude = HealthWorkerService.ModulosSaude.ToList(),
DispositivosMapeados = new List<DispositivoDetalhesModel>(SerialService.DispositivosMapeados),
ModsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>(Variaveis.OperacaoEmAndamento.ModsCalibragem),

View File

@ -70,7 +70,7 @@ namespace AgroBase.Models.Operadores
StatusCarro = Sonar?.Analises?.segmentacao?.status_corredor ?? StatusCarroMapa.Indefinido;
ErroLateral = Sonar?.Analises?.segmentacao?.erro_angular ?? 0;
if (!Variaveis.OperacaoEmAndamento.Parametros.Controle.SonarAtivado)
if (!Variaveis.OperacaoEmAndamento.Parametros.Controle?.SonarAtivado ?? false)
{
_comandoParadaEnviado = false;
DeveParar = false;
@ -83,7 +83,7 @@ namespace AgroBase.Models.Operadores
Direcao _ultimaDirecaoControle = Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov)?.UltimaDirecao ?? Direcao.Parado;
bool _carroEmMovimento = _direcoesInterromperMovimento.Contains(_ultimaDirecaoControle);
bool emMovimento = consideraEmMovimento ? _carroEmMovimento : true;
DeveParar = Sonar.Status == StatusModulo.Operante && ObstaculoDetectado;
DeveParar = Sonar?.Status == StatusModulo.Operante && ObstaculoDetectado;
EnviarComandoParada = DeveParar && emMovimento;
if (EnviarComandoParada)
{