Ajustes liberacao da operacao mediante autonomia
This commit is contained in:
parent
9a638aa7a6
commit
3df756a69d
|
|
@ -17,6 +17,7 @@ using static AgroBase.Services.OIDCanService.OidHandler;
|
|||
using AgroBase.Models.Operadores;
|
||||
using AgroBase.Services.Operadores;
|
||||
using AgroMonitor;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace AgroBase.Models
|
||||
{
|
||||
|
|
@ -843,6 +844,8 @@ namespace AgroBase.Models
|
|||
Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Bat, Mandatorio = true, Utilizar = true });
|
||||
|
||||
Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = Variaveis.OperacaoEmAndamento.PreencherComponentesEmUso(m.Dispositivo));
|
||||
|
||||
Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List<List<GPSModel>>());
|
||||
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = new OperacaoSensoriamentoLogModel();
|
||||
|
||||
if (Variaveis.OperacaoEmAndamento.DispSen != null)
|
||||
|
|
@ -1563,8 +1566,8 @@ namespace AgroBase.Models
|
|||
case BotoesJoystick.R1: // Libera a operacao interrompida mediante supervisao humana
|
||||
if (!(Variaveis.OperacaoEmAndamento.Trajetoria?.AutonomiaCorredor?.Liberado ?? false))
|
||||
{
|
||||
(bool b_liberada, bool h_liberado) = ((bool, bool))controleBase._comp_value;
|
||||
Variaveis.OperacaoEmAndamento.Trajetoria?.AtualizarDadosAutonomiaCorredor(bat_liberada: b_liberada, herb_liberado: h_liberado);
|
||||
var (idx_corredor, b_liberada, h_liberado) = ((JObject)controleBase._comp_value).ToObject<(int, bool, bool)>();
|
||||
Variaveis.OperacaoEmAndamento.Trajetoria?.AtualizarDadosAutonomiaCorredor(idxCorredor: idx_corredor, bat_liberada: b_liberada, herb_liberado: h_liberado);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -2312,10 +2315,12 @@ namespace AgroBase.Models
|
|||
public void AtualizarDados()
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.AtualizarDadosContexto();
|
||||
Variaveis.OperacaoEmAndamento.DadosPerformance.AtualizarDadosPerformance();
|
||||
VisualWorkerService.AtualizarAnalise();
|
||||
WeedWorkerService.AtualizarAnalise();
|
||||
GPSService.AtualizaDadosRedis();
|
||||
LivoxManagerProcess.AtualizarLeitura();
|
||||
MovimentacaoMovimentoCompensadoModel.AtualizarDados();
|
||||
|
||||
var _Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria;
|
||||
var _DispMvd = Variaveis.OperacaoEmAndamento.DispMvd;
|
||||
|
|
@ -2325,12 +2330,10 @@ namespace AgroBase.Models
|
|||
var _Bateria = _DispSen?.Dados?.ContadorCarga;
|
||||
var _Reservatorio = _DispAtu?.Dados?.ContadorCarga;
|
||||
|
||||
Variaveis.OperacaoEmAndamento.DadosPerformance.AtualizarDadosPerformance();
|
||||
|
||||
MovimentacaoMovimentoCompensadoModel.AtualizarDados();
|
||||
_DispMvd?.Dados?.AtualizarDadosFreio();
|
||||
_Bateria?.AtualizarConsumo(_DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0);
|
||||
_Reservatorio?.AtualizarConsumo(_DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0, Variaveis.OperacaoEmAndamento.TempoDecorridoSegs);
|
||||
_Trajetoria.AtualizarDadosAutonomiaCorredor();
|
||||
|
||||
var sIMU = LivoxManagerProcess.DadosLeitura.imu;
|
||||
var dadosIMU = sIMU != null ? new OperacaoSensoriamentoLogImuModel()
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ namespace AgroBase.Models
|
|||
public TrajetoriaMapaOperacaoModel(List<List<GPSModel>> RuasMapa)
|
||||
{
|
||||
RuasPlantacao = new List<List<GPSModel>>(RuasMapa);
|
||||
AutonomiaCorredor = new AutonomiaCorredorModel();
|
||||
}
|
||||
|
||||
#region PARAMETROS
|
||||
|
|
@ -32,7 +33,7 @@ namespace AgroBase.Models
|
|||
#endregion
|
||||
|
||||
public DateTime UltimaAtualizacaoDados { get; set; } = DateTime.MinValue;
|
||||
public AutonomiaCorredorModel AutonomiaCorredor = new AutonomiaCorredorModel();
|
||||
public AutonomiaCorredorModel AutonomiaCorredor { get; set; }
|
||||
|
||||
[JsonProperty]
|
||||
public double TempoEntreLeituras { get; private set; }
|
||||
|
|
@ -640,8 +641,6 @@ namespace AgroBase.Models
|
|||
{
|
||||
if (!_TrajetoriaFixaDefinida) return;
|
||||
|
||||
AtualizarDadosAutonomiaCorredor();
|
||||
|
||||
AtualizarTempoEntreLeituras();
|
||||
AtualizarDistanciaMaximaEntreLeituras();
|
||||
|
||||
|
|
@ -849,8 +848,8 @@ namespace AgroBase.Models
|
|||
public void AtualizarDadosAutonomiaCorredor(int? idxCorredor = null, bool? bat_liberada = null, bool? herb_liberado = null)
|
||||
{
|
||||
if (idxCorredor == null) idxCorredor = CorredorAtual?.Idx ?? 0;
|
||||
if (bat_liberada == null) bat_liberada = Variaveis.OperacaoEmAndamento.Simulando;
|
||||
if (herb_liberado == null) herb_liberado = Variaveis.OperacaoEmAndamento.Simulando;
|
||||
if (bat_liberada == null) bat_liberada = false;
|
||||
if (herb_liberado == null) herb_liberado = false;
|
||||
AutonomiaCorredor.AtualizarDados((int)idxCorredor, (bool)bat_liberada, (bool)herb_liberado);
|
||||
}
|
||||
|
||||
|
|
@ -1429,6 +1428,8 @@ namespace AgroBase.Models
|
|||
|
||||
DistanciaTotal = GPSUtils.DistanciaDoTrecho(_trajetoriaFixa.Where(x => x.Tipo != TipoPontoRua.PosicaoRobo).Select(x => x.Posicao).ToList());
|
||||
|
||||
AutonomiaCorredor.Iniciar();
|
||||
|
||||
AtualizarDadosTrajetoria();
|
||||
|
||||
LoopAtualizaDados();
|
||||
|
|
@ -1864,14 +1865,21 @@ namespace AgroBase.Models
|
|||
|
||||
public class AutonomiaCorredorModel
|
||||
{
|
||||
[JsonProperty]
|
||||
public bool Iniciado { get; private set; }
|
||||
[JsonProperty]
|
||||
public AutonomiaCorredorStatus Status { get; private set; }
|
||||
private bool _liberado =>
|
||||
Status == AutonomiaCorredorStatus.OkCompleto ||
|
||||
Status == AutonomiaCorredorStatus.OkSomenteTransito ||
|
||||
Status == AutonomiaCorredorStatus.OkSupervisionado;
|
||||
[JsonProperty]
|
||||
public bool Liberado { get; private set; }
|
||||
[JsonProperty]
|
||||
public double DistanciaCorredor_m { get; private set; }
|
||||
[JsonProperty]
|
||||
public double DistanciaSeguraBateria_m { get; private set; }
|
||||
[JsonProperty]
|
||||
public double DistanciaSeguraHerbicida_m { get; private set; }
|
||||
private Dictionary<int, AutonomiaCorredorModel> CorredoresLiberados { get; set; } = new Dictionary<int, AutonomiaCorredorModel>();
|
||||
|
||||
|
|
@ -1880,13 +1888,30 @@ namespace AgroBase.Models
|
|||
public bool HerbicidaSuficiente => DistanciaSeguraHerbicida_m >= DistanciaCorredor_m;
|
||||
|
||||
// Texto pra UI/log
|
||||
[JsonProperty]
|
||||
public string Motivo { get; private set; } = "";
|
||||
|
||||
public void Iniciar()
|
||||
{
|
||||
Iniciado = true;
|
||||
}
|
||||
|
||||
public void AtualizarDados(int idxCorredor, bool bateria_liberada, bool reservatorio_liberado)
|
||||
{
|
||||
if (!Iniciado)
|
||||
{
|
||||
Liberado = true;
|
||||
Motivo = "Não iniciado";
|
||||
Status = AutonomiaCorredorStatus.Desconhecido;
|
||||
return;
|
||||
}
|
||||
|
||||
if (Variaveis.OperacaoEmAndamento.Trajetoria?._Corredores?.Count <= idxCorredor)
|
||||
return;
|
||||
|
||||
if (CorredoresLiberados.ContainsKey(idxCorredor) && CorredoresLiberados[idxCorredor].Liberado)
|
||||
return;
|
||||
|
||||
double distanciaCorredor = Variaveis.OperacaoEmAndamento.Trajetoria._Corredores[idxCorredor]?.DistanciaTotal ?? 0;
|
||||
|
||||
var _Bateria = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ContadorCarga;
|
||||
|
|
|
|||
|
|
@ -139,6 +139,7 @@ namespace AgroBase.Services
|
|||
double deltaEnergia_Wh = potenciaInst_W * _dt / 3600.0; // Wh
|
||||
|
||||
EnergiaConsumida_Wh += deltaEnergia_Wh;
|
||||
//EnergiaConsumida_Wh = Sensor.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Energia)?.atual?.valor ?? 0;
|
||||
|
||||
// --- HISTÓRICO P/ TEMPO ESTIMADO ---
|
||||
_historicoCorrente.Enqueue(CorrenteInstantanea);
|
||||
|
|
|
|||
|
|
@ -144,10 +144,10 @@ namespace AgroBase.Services.Operadores
|
|||
dist_dir = _t.DistanciaDireita,
|
||||
angulo = _t.AnguloMedioCorredor,
|
||||
pontos_restantes = _t.CorredorAtual.QtdPontos - pontoComparar.idxPontoCorredor,
|
||||
liberado = _t.AutonomiaCooredor.Liberado,
|
||||
motivo = _t.AutonomiaCooredor.Motivo,
|
||||
bateria_ok = _t.AutonomiaCooredor.BateriaSuficiente,
|
||||
herbicida_ok = _t.AutonomiaCooredor.HerbicidaSuficiente
|
||||
liberado = _t.AutonomiaCooredor?.Liberado ?? false,
|
||||
motivo = _t.AutonomiaCooredor?.Motivo ?? "",
|
||||
bateria_ok = _t.AutonomiaCooredor?.BateriaSuficiente ?? false,
|
||||
herbicida_ok = _t.AutonomiaCooredor?.HerbicidaSuficiente ?? false
|
||||
},
|
||||
} : null
|
||||
),
|
||||
|
|
@ -601,7 +601,7 @@ namespace AgroBase.Services.Operadores
|
|||
var DadosTrj = _Sensoriamento?.Trajetoria;
|
||||
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Trj),
|
||||
("timestamp", agora),
|
||||
("carregado", DadosTrj?.QtdPontos > 0),
|
||||
("iniciado", DadosTrj?.AutonomiaCooredor?.Iniciado ?? false),
|
||||
("liberado", DadosTrj?.AutonomiaCooredor?.Liberado ?? false),
|
||||
("bateria_ok", DadosTrj?.AutonomiaCooredor?.BateriaSuficiente ?? false),
|
||||
("herbicida_ok", DadosTrj?.AutonomiaCooredor?.HerbicidaSuficiente ?? false),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import time
|
||||
from shared.contexto_global_redis import ContextoGlobalRedis
|
||||
from shared.enums import StatusModulo, T_Code
|
||||
from health_worker.modulos.base import ModuloDiagnosticoBase
|
||||
|
|
@ -12,12 +11,10 @@ class ModuloTrajetorira(ModuloDiagnosticoBase):
|
|||
def atualizar_saude(self):
|
||||
try:
|
||||
m = ContextoGlobalRedis.get_modulo(self.t_code) or {}
|
||||
_operacao = ContextoGlobalRedis.get_operacao()
|
||||
|
||||
|
||||
SAUDE_MIN_ALERTA = 50
|
||||
|
||||
op_iniciada = bool(_operacao.get("iniciado", False))
|
||||
carregado = bool(m.get("carregado", False))
|
||||
iniciado = bool(m.get("iniciado", False))
|
||||
liberado = bool(m.get("liberado", False))
|
||||
bateria_ok = bool(m.get("bateria_ok", False))
|
||||
herbicida_ok = bool(m.get("herbicida_ok", False))
|
||||
|
|
@ -26,27 +23,23 @@ class ModuloTrajetorira(ModuloDiagnosticoBase):
|
|||
saude = 100
|
||||
motivos = []
|
||||
|
||||
if op_iniciada:
|
||||
if not carregado:
|
||||
saude -= 100
|
||||
motivos.append("mapa não carregado")
|
||||
else:
|
||||
if not bateria_ok:
|
||||
saude -= 50
|
||||
if not herbicida_ok:
|
||||
saude -= 50
|
||||
motivos.append(motivo)
|
||||
if iniciado:
|
||||
if not bateria_ok:
|
||||
saude -= 50
|
||||
if not herbicida_ok:
|
||||
saude -= 50
|
||||
motivos.append(motivo)
|
||||
|
||||
saude = max(saude, 0)
|
||||
|
||||
status = StatusModulo.OPERANTE
|
||||
if op_iniciada and not carregado:
|
||||
if not iniciado:
|
||||
status = StatusModulo.DESCONECTADO
|
||||
elif saude < SAUDE_MIN_ALERTA:
|
||||
status = StatusModulo.ALERTA
|
||||
|
||||
payload = {
|
||||
"carregado": carregado,
|
||||
"conectado": iniciado,
|
||||
"status": status.value,
|
||||
"saude": saude,
|
||||
"motivos": motivos,
|
||||
|
|
|
|||
|
|
@ -380,7 +380,7 @@ class ContextoGlobalRedis:
|
|||
if _motivo_traj:
|
||||
motivos_dos_modulos_mandatorios.append(_motivo_traj)
|
||||
|
||||
liberou = (base_ok and parametros_ok and emergencia_ok and pausa_ok and trajetoria_ok) or debug_mode
|
||||
liberou = ((base_ok and parametros_ok and emergencia_ok and pausa_ok) or debug_mode) and trajetoria_ok
|
||||
|
||||
cls.atualizar_ctx_dict(
|
||||
CtxKey.DadosOperacao,
|
||||
|
|
|
|||
|
|
@ -331,14 +331,14 @@ namespace OperationControl.Models
|
|||
});
|
||||
}
|
||||
|
||||
public static void EnviarConfirmacaoHumanaTrajetoria(bool bat_liberada, bool herb_liberado)
|
||||
public static void EnviarConfirmacaoHumanaTrajetoria(int idx_corredor, bool bat_liberada, bool herb_liberado)
|
||||
{
|
||||
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
||||
{
|
||||
Momento = DateTime.Now,
|
||||
Dispositivo = AgroBase.Models.Enums.T_Code.Mod,
|
||||
Tecla = AgroBase.Models.Enums.BotoesJoystick.R1,
|
||||
_comp_value = (bat_liberada, herb_liberado)
|
||||
_comp_value = (idx_corredor, bat_liberada, herb_liberado)
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -422,7 +422,7 @@ namespace OperationControl.Windows
|
|||
// Aplica cor de acordo com o status
|
||||
AplicarStatusModuloNaLabel(lbl, individual?.status ?? _saude?.status ?? AgroBase.Models.Enums.StatusModulo.Desconectado, em_uso);
|
||||
|
||||
if (lbl.Name == _labelModuloSelecionado.Name)
|
||||
if (lbl.Name == _labelModuloSelecionado?.Name)
|
||||
{
|
||||
PreencherAbaAcompanhamento(false);
|
||||
PreencherAbaOpcoes(false);
|
||||
|
|
@ -1289,14 +1289,16 @@ namespace OperationControl.Windows
|
|||
if (modulo != AgroBase.Models.Enums.T_Code.Trj)
|
||||
return;
|
||||
|
||||
var _Trajetoria = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Trajetoria;
|
||||
int idx_corredor = (_Trajetoria?.PontoAtual?.idxCorredor ?? 0);
|
||||
bool bat_liberada = chbTrajetoria_BatLiberada.IsChecked ?? false;
|
||||
bool herb_liberado = chbTrajetoria_HerbLiberado.IsChecked ?? false;
|
||||
string motivo = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Trajetoria?.AutonomiaCooredor?.Motivo ?? "";
|
||||
string motivo = _Trajetoria?.AutonomiaCooredor?.Motivo ?? "";
|
||||
|
||||
if ((bat_liberada || herb_liberado) && MessageBox.Show("Confirmação", $"Tem certeza que deseja liberar a entrada do equipamento na próxima rua?\r\n{motivo}", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
|
||||
if ((bat_liberada || herb_liberado) && MessageBox.Show($"Tem certeza que deseja liberar a entrada do equipamento na próxima rua?\r\n{motivo}", "Confirmação", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
|
||||
return;
|
||||
|
||||
VariaveisControleOperacao.EnviarConfirmacaoHumanaTrajetoria(bat_liberada, herb_liberado);
|
||||
VariaveisControleOperacao.EnviarConfirmacaoHumanaTrajetoria(idx_corredor, bat_liberada, herb_liberado);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
@ -1558,7 +1560,7 @@ namespace OperationControl.Windows
|
|||
private void AtualizarDadosTela_Mapa(AgroBase.Models.OperacaoSensoriamentoLogTrajetoriaModel Trajetoria)
|
||||
{
|
||||
lblMapaInfo_Debug.Content = $"" +
|
||||
$"Status: {Trajetoria.AutonomiaCooredor.Status} | " +
|
||||
$"Status: {Trajetoria.AutonomiaCooredor?.Status ?? AgroBase.Models.AutonomiaCorredorStatus.Desconhecido} | " +
|
||||
$"Próximo Ponto: {Trajetoria.ProximoPonto.idxPonto} | " +
|
||||
(Trajetoria.ProximoPonto.Aproximando ? "Aproximando" : "Afastando") + " | " +
|
||||
$"Distância próximo ponto: {Trajetoria.ProximoPonto.DistanciaAtual.ToString("0.00")} m | " +
|
||||
|
|
|
|||
Loading…
Reference in New Issue