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, DispAtu = AtuConectado,
DispSen = SenConectado, DispSen = SenConectado,
DispMvd = MvdConectado, 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.Parametros = p;
Variaveis.OperacaoEmAndamento.DefinirComponentesEmUso(); Variaveis.OperacaoEmAndamento.DefinirComponentesEmUso();
Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List<List<GPSModel>>());
Variaveis.OperacaoEmAndamento.Sensoriamento = new OperacaoSensoriamentoLogModel();
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false)); RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados(); Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
} }
@ -986,6 +989,7 @@ namespace AgroBase.Models
p.Controle = Parametros.Controle; p.Controle = Parametros.Controle;
p.QtdBicos = Parametros.QtdBicos; p.QtdBicos = Parametros.QtdBicos;
p.QtdCamerasSolo = Parametros.QtdCamerasSolo; p.QtdCamerasSolo = Parametros.QtdCamerasSolo;
p.Mapa = Parametros.Mapa;
p.RuasPercorrer = Parametros.RuasPercorrer; p.RuasPercorrer = Parametros.RuasPercorrer;
p.ModulosMandatorios = Parametros.ModulosMandatorios; p.ModulosMandatorios = Parametros.ModulosMandatorios;
p.ParametrosMandatorios = Parametros.ParametrosMandatorios; p.ParametrosMandatorios = Parametros.ParametrosMandatorios;
@ -1077,6 +1081,20 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Trajetoria?.AutonomiaCorredor?.Parar(); 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) 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)); 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() public void ReiniciarSimulacao()
{ {
RedisService.AtualizarCampos( ReiniciarOperacao(false);
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>();
var Topico = Variaveis.MqttServiceLocal.Topicos.FirstOrDefault(x => x.Topico == MapasVariaveisModel.TopicoSelecaoRuasMapa); var Topico = Variaveis.MqttServiceLocal.Topicos.FirstOrDefault(x => x.Topico == MapasVariaveisModel.TopicoSelecaoRuasMapa);
Topico.Mensagens.Add(new MqttService.MqttTopicosMensagensModel() 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) public void ExecutaComandoDaBase(OperacaoComandoBaseModel controleBase)
{ {
if (controleBase.Dispositivo == T_Code.Mod) if (controleBase.Dispositivo == T_Code.Mod)
{ {
var _Parametros = controleBase.Parametros; var _Parametros = controleBase.Parametros;
switch (controleBase.Tecla) switch (controleBase.Tecla)
{ {
case BotoesJoystick.Share: // Requisitar parametros da operacao case BotoesJoystick.Share: // Requisitar parametros da operacao
var topico = Variaveis.MqttServiceBase.Topicos.FirstOrDefault(x => x.Topico == VariaveisEquipamento.TopicoMqttParametros.Replace("<id>", VariaveisEquipamento.Parametros.serial_number)); EnviarParametorsOperacao();
var p = Variaveis.OperacaoEmAndamento.Parametros;
string msg = JsonConvert.SerializeObject(p);
Task.Run(async () => await Variaveis.MqttServiceBase.PublishAsync(topico, msg));
break; break;
case BotoesJoystick.Options: // Operacao nao iniciada, carrega todos os parametros compeltos case BotoesJoystick.Options: // Operacao nao iniciada, carrega todos os parametros compeltos
Variaveis.OperacaoEmAndamento.CarregarParamerosOperacaoBase(_Parametros); Variaveis.OperacaoEmAndamento.CarregarParamerosOperacaoBase(_Parametros);
EnviarParametorsOperacao();
break; break;
case BotoesJoystick.Touchpad: // Operacao em andamento, atualiza apenas os dados de controle case BotoesJoystick.Touchpad: // Operacao em andamento, atualiza apenas os dados de controle
if (_Parametros.Modo != null) Variaveis.OperacaoEmAndamento.Parametros.Modo = _Parametros.Modo; if (_Parametros.Modo != null) Variaveis.OperacaoEmAndamento.Parametros.Modo = _Parametros.Modo;
@ -1521,6 +1536,7 @@ namespace AgroBase.Models
} }
HealthWorkerService.AtualizarDadosOperacao(true); HealthWorkerService.AtualizarDadosOperacao(true);
EnviarParametorsOperacao();
break; break;
case BotoesJoystick.L1: // Inicia o modo simulador case BotoesJoystick.L1: // Inicia o modo simulador
if (!Variaveis.OperacaoEmAndamento.Iniciado) if (!Variaveis.OperacaoEmAndamento.Iniciado)
@ -1533,6 +1549,8 @@ namespace AgroBase.Models
case BotoesJoystick.L3: // Finaliza a operacao case BotoesJoystick.L3: // Finaliza a operacao
if (Variaveis.OperacaoEmAndamento.Iniciado) if (Variaveis.OperacaoEmAndamento.Iniciado)
Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao()); Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao());
else
ReiniciarOperacao(true);
break; break;
case BotoesJoystick.R1: // Libera a operacao interrompida mediante supervisao humana case BotoesJoystick.R1: // Libera a operacao interrompida mediante supervisao humana
if (!(Variaveis.OperacaoEmAndamento.Trajetoria?.AutonomiaCorredor?.Liberado ?? false)) if (!(Variaveis.OperacaoEmAndamento.Trajetoria?.AutonomiaCorredor?.Liberado ?? false))
@ -2592,8 +2610,8 @@ namespace AgroBase.Models
DadosPerformance = dadosPerformance, DadosPerformance = dadosPerformance,
DadosLoRa = dadosLora, DadosLoRa = dadosLora,
LivoxLidar = dadosLivox, LivoxLidar = dadosLivox,
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>(Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios), ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>(Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios ?? new List<OperacaoModulosMandatoriosModel>()),
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>(Variaveis.OperacaoEmAndamento.Parametros.ParametrosMandatorios), ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>(Variaveis.OperacaoEmAndamento.Parametros.ParametrosMandatorios ?? new List<OperacaoParametrosMandatoriosModel>()),
ModulosSaude = HealthWorkerService.ModulosSaude.ToList(), ModulosSaude = HealthWorkerService.ModulosSaude.ToList(),
DispositivosMapeados = new List<DispositivoDetalhesModel>(SerialService.DispositivosMapeados), DispositivosMapeados = new List<DispositivoDetalhesModel>(SerialService.DispositivosMapeados),
ModsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>(Variaveis.OperacaoEmAndamento.ModsCalibragem), 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; StatusCarro = Sonar?.Analises?.segmentacao?.status_corredor ?? StatusCarroMapa.Indefinido;
ErroLateral = Sonar?.Analises?.segmentacao?.erro_angular ?? 0; ErroLateral = Sonar?.Analises?.segmentacao?.erro_angular ?? 0;
if (!Variaveis.OperacaoEmAndamento.Parametros.Controle.SonarAtivado) if (!Variaveis.OperacaoEmAndamento.Parametros.Controle?.SonarAtivado ?? false)
{ {
_comandoParadaEnviado = false; _comandoParadaEnviado = false;
DeveParar = 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; Direcao _ultimaDirecaoControle = Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov)?.UltimaDirecao ?? Direcao.Parado;
bool _carroEmMovimento = _direcoesInterromperMovimento.Contains(_ultimaDirecaoControle); bool _carroEmMovimento = _direcoesInterromperMovimento.Contains(_ultimaDirecaoControle);
bool emMovimento = consideraEmMovimento ? _carroEmMovimento : true; bool emMovimento = consideraEmMovimento ? _carroEmMovimento : true;
DeveParar = Sonar.Status == StatusModulo.Operante && ObstaculoDetectado; DeveParar = Sonar?.Status == StatusModulo.Operante && ObstaculoDetectado;
EnviarComandoParada = DeveParar && emMovimento; EnviarComandoParada = DeveParar && emMovimento;
if (EnviarComandoParada) if (EnviarComandoParada)
{ {