ajustes de fluxo

This commit is contained in:
Diego Freitas 2026-03-06 08:50:42 -03:00
parent 23852cd6c4
commit bc9fc9a0b8
7 changed files with 81 additions and 53 deletions

View File

@ -1636,9 +1636,9 @@ namespace AgroBase.Forms.Operacoes
var logVent = LogsOperacao[idxMomentoAtual].CoolerControl;
lblVentilacaoModo.Text = $"Modo: {logVent?.Modo ?? CoolerControlService.CoolerMode.Off}";
lblVentilacaoModo.Text = $"Temperatura: {logVent?.Temperatura ?? 0:F2} ºC";
lblVentilacaoTemperatura.Text = $"Temperatura: {logVent?.Temperatura ?? 0:F2} ºC";
lblVentilacaoRLIN.Text = $"RLIN: {logVent?.EstadoEntrada ?? Enums.Estado.Desligado} ({logVent?.LeituraEntrada ?? Enums.Estado.Desligado})";
lblVentilacaoRLIN.Text = $"RLOUT: {logVent?.EstadoSaida ?? Enums.Estado.Desligado} ({logVent?.LeituraSaida ?? Enums.Estado.Desligado})";
lblVentilacaoRLOUT.Text = $"RLOUT: {logVent?.EstadoSaida ?? Enums.Estado.Desligado} ({logVent?.LeituraSaida ?? Enums.Estado.Desligado})";
}
private void AtualizarInformacoesComandos()

View File

@ -740,14 +740,17 @@ namespace AgroBase
public static void EnviarComandoAtuador(S_Code Componente, string ID, bool? Status = null, double? Valor = null, bool Forcar = false)
{
var DispAtu = Variaveis.OperacaoEmAndamento.DispAtu;
if (!DispAtu.Dados.Conectado)
return;
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].Item2);
bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Atu && x.ComponentesEmUso != null && x.ComponentesEmUso[ID].Item2);
if (!componente_em_uso && (Status ?? false)) return; // Impede execucao de comandos que liguem componentes quando estiver marcado para nao utilizar
}
var DispAtu = Variaveis.OperacaoEmAndamento.DispAtu;
int id_num = -1;
CanMessagePosicaoDados posicao = CanMessagePosicaoDados.Command1;
byte[] data = null;
@ -794,9 +797,13 @@ namespace AgroBase
public static void EnviarComandoSensoriamento(S_Code Componente, string ID, dynamic Status, bool Forcar = false)
{
var DispSen = Variaveis.OperacaoEmAndamento.DispSen;
if (!DispSen.Dados.Conectado)
return;
if (!Forcar)
{
bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Sen && x.ComponentesEmUso[ID].Item2);
bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Sen && x.ComponentesEmUso != null && x.ComponentesEmUso[ID].Item2);
if (!componente_em_uso)
{
// Impede execucao de comandos que liguem componentes quando estiver marcado para nao utilizar
@ -805,8 +812,6 @@ namespace AgroBase
}
}
var DispSen = Variaveis.OperacaoEmAndamento.DispSen;
int id_num = -1;
CanMessagePosicaoDados posicao = CanMessagePosicaoDados.Command1;
byte[] data = null;

View File

@ -858,33 +858,33 @@ namespace AgroBase.Models
case T_Code.Mov:
if (Variaveis.OperacaoEmAndamento.DispMvd != null)
{
Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(m => d.Add(m.MovMotor.Mod_ID, (true, 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, (true, 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)
{
var da = Variaveis.OperacaoEmAndamento.DispAtu.Dados;
da.Sensores.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
da.BombasPressurizadoras.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
da.BicosPulverizadores.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
da.Servos.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
da.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
da.BombasPressurizadoras?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
da.BicosPulverizadores?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
da.Servos?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
}
break;
case T_Code.Sen:
if (Variaveis.OperacaoEmAndamento.DispSen != null)
{
var ds = Variaveis.OperacaoEmAndamento.DispSen.Dados;
ds.Sensores.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
ds.Sinaleiros.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
ds.Servos.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
ds.Reles.ForEach(r => d.Add(r.ID, (r.Mandatorio, r.Controlar)));
ds.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
ds.Sinaleiros?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
ds.Servos?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
ds.Reles?.ForEach(r => d.Add(r.ID, (r.Mandatorio, r.Controlar)));
}
break;
}

View File

@ -24,9 +24,9 @@ namespace AgroBase.Services
// Estado interno
public CoolerMode ModoAtual { get; private set; } = CoolerMode.Off;
public Estado CoolerEntradaEstado { get; private set; } = Estado.Desligado;
public Estado CoolerEntradaEstadoAnterior { get; private set; } = Estado.Desligado;
public Estado CoolerSaidaEstado { get; private set; } = Estado.Desligado;
public Estado CoolerEntradaLeitura => ReleCoolerEntrada?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? Estado.Desligado;
public Estado CoolerSaidaLeitura => ReleCoolerSaida?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? Estado.Desligado;
public Estado CoolerSaidaEstadoAnterior { get; private set; } = Estado.Desligado;
public double? TemperaturaFiltrada { get; private set; }
public DateTime UltimaMudancaModo { get; private set; } = DateTime.MinValue;
@ -103,6 +103,19 @@ namespace AgroBase.Services
{
Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Alerta, 50, "Temperatura limite excedida no NPC");
}
else if (_alertaAnterior && !AlertaTemperaturaCritica)
{
Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Alerta, 100, "Temperatura limite recuperada no NPC");
}
if (Variaveis.Fechando)
{
ModoAtual = CoolerMode.Off;
CoolerEntradaEstado = Estado.Desligado;
CoolerSaidaEstado = Estado.Desligado;
EnviarComando();
return;
}
if (ModoAtual == CoolerMode.Manual)
return;
@ -140,9 +153,6 @@ namespace AgroBase.Services
break;
}
if (Variaveis.Fechando)
novoModo = CoolerMode.Off;
CoolerEntradaEstado = novoModo == CoolerMode.IntakeAndExhaust ? Estado.Ligado : Estado.Desligado;
CoolerSaidaEstado = novoModo == CoolerMode.ExhaustOnly || novoModo == CoolerMode.IntakeAndExhaust ? Estado.Ligado : Estado.Desligado;
@ -157,10 +167,16 @@ namespace AgroBase.Services
private void EnviarComando()
{
if (ReleCoolerEntrada != null && ReleCoolerEntrada._EstadoLeitura != CoolerEntradaEstado)
if (ReleCoolerEntrada != null && CoolerEntradaEstadoAnterior != CoolerEntradaEstado)
{
GeneralJoystick.EnviarComandoSensoriamento(ReleCoolerEntrada.Componente, ReleCoolerEntrada.ID, CoolerEntradaEstado);
if (ReleCoolerSaida != null && ReleCoolerSaida._EstadoLeitura != CoolerSaidaEstado)
CoolerEntradaEstadoAnterior = CoolerEntradaEstado;
}
if (ReleCoolerSaida != null && CoolerSaidaEstadoAnterior != CoolerSaidaEstado)
{
GeneralJoystick.EnviarComandoSensoriamento(ReleCoolerSaida.Componente, ReleCoolerSaida.ID, CoolerSaidaEstado);
CoolerSaidaEstadoAnterior = CoolerSaidaEstado;
}
}
public CoolerControlDataModel GetResumo()
@ -173,8 +189,8 @@ namespace AgroBase.Services
TemperaturaTurbo = TempTurbo,
EstadoEntrada = CoolerEntradaEstado,
EstadoSaida = CoolerSaidaEstado,
LeituraEntrada = CoolerEntradaLeitura,
LeituraSaida = CoolerSaidaLeitura,
LeituraEntrada = ReleCoolerEntrada?._EstadoLeitura ?? Estado.Desligado,
LeituraSaida = ReleCoolerSaida?._EstadoLeitura ?? Estado.Desligado,
Temperatura = TemperaturaFiltrada ?? 0,
Alerta = AlertaTemperaturaCritica
};

View File

@ -1297,28 +1297,35 @@ namespace AgroBase.Services
public static void AtualizaDadosRedis()
{
GPSModel posicaoAtual = Variaveis.OperacaoEmAndamento.Simulando ? historicoPosicao.Peek() : UltimaLeitura;
try
{
GPSModel posicaoAtual = Variaveis.OperacaoEmAndamento.Simulando ? historicoPosicao.Peek() : UltimaLeitura;
RedisService.AtualizarCampos(
RedisService.ModKey(T_Code.Gps),
("conectado", Iniciado),
("freq_base", TaxaAmostragemHz),
("lat", posicaoAtual.Latitude),
("lon", posicaoAtual.Longitude),
("theta", posicaoAtual.AnguloCarroDefinido),
("fix", (int)posicaoAtual.QualidadeFix),
("rtk", posicaoAtual.IdadeCorrecao < rtk_timeout),
("hAcc", posicaoAtual.PrecisaoCm),
("nSatelites", posicaoAtual.NumeroSatelites),
("freq.posicao", posicaoAtual.TimestampPos.frequencia),
("freq.orientacao", posicaoAtual.TimestampOri.frequencia),
("latency.posicao", posicaoAtual.TimestampPos.dt),
("latency.orientacao", posicaoAtual.TimestampOri.dt),
("timestamp.posicao", posicaoAtual.TimestampPos.valor),
("timestamp.orientacao", posicaoAtual.TimestampOri.valor),
("age", posicaoAtual.IdadeCorrecao),
("heartbeat", posicaoAtual.Heartbeat)
);
RedisService.AtualizarCampos(
RedisService.ModKey(T_Code.Gps),
("conectado", Iniciado),
("freq_base", TaxaAmostragemHz),
("lat", posicaoAtual.Latitude),
("lon", posicaoAtual.Longitude),
("theta", posicaoAtual.AnguloCarroDefinido),
("fix", (int)posicaoAtual.QualidadeFix),
("rtk", posicaoAtual.IdadeCorrecao < rtk_timeout),
("hAcc", posicaoAtual.PrecisaoCm),
("nSatelites", posicaoAtual.NumeroSatelites),
("freq.posicao", posicaoAtual.TimestampPos.frequencia),
("freq.orientacao", posicaoAtual.TimestampOri.frequencia),
("latency.posicao", posicaoAtual.TimestampPos.dt),
("latency.orientacao", posicaoAtual.TimestampOri.dt),
("timestamp.posicao", posicaoAtual.TimestampPos.valor),
("timestamp.orientacao", posicaoAtual.TimestampOri.valor),
("age", posicaoAtual.IdadeCorrecao),
("heartbeat", posicaoAtual.Heartbeat)
);
}
catch (Exception e)
{
Console.WriteLine($"Erro ao salvar dados do GPS no Redis: {e.Message}");
}
}
public static Queue<GPSModel> historicoPosicao = new Queue<GPSModel>();

View File

@ -146,10 +146,10 @@ namespace AgroBase.Services.Operadores
dist_dir = _t.DistanciaDireita,
angulo = _t.AnguloMedioCorredor,
pontos_restantes = _t.CorredorAtual.QtdPontos - pontoComparar.idxPontoCorredor,
liberado = _t.AutonomiaCooredor?.Liberado ?? false,
motivo = _t.AutonomiaCooredor?.Motivo ?? "",
bateria_ok = _t.AutonomiaCooredor?.BateriaSuficiente ?? false,
herbicida_ok = _t.AutonomiaCooredor?.HerbicidaSuficiente ?? false
//liberado = _t.AutonomiaCooredor?.Liberado ?? false,
//motivo = _t.AutonomiaCooredor?.Motivo ?? "",
//bateria_ok = _t.AutonomiaCooredor?.BateriaSuficiente ?? false,
//herbicida_ok = _t.AutonomiaCooredor?.HerbicidaSuficiente ?? false
},
} : null
),

File diff suppressed because one or more lines are too long