Adicionado controle do CoolerControl
This commit is contained in:
parent
2fddd47b02
commit
df915acae5
|
|
@ -2562,6 +2562,7 @@ namespace AgroBase.Models.Modules
|
||||||
}
|
}
|
||||||
public bool AtuacaoNivelAlto { get; set; }
|
public bool AtuacaoNivelAlto { get; set; }
|
||||||
public Estado StatusControle { get; set; }
|
public Estado StatusControle { get; set; }
|
||||||
|
public Estado StatusLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? Estado.Desligado;
|
||||||
public bool Inicializado { get; set; }
|
public bool Inicializado { get; set; }
|
||||||
public DateTime UltimaLeitura
|
public DateTime UltimaLeitura
|
||||||
{
|
{
|
||||||
|
|
@ -2620,6 +2621,7 @@ namespace AgroBase.Models.Modules
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public int _AnguloControle { get; set; }
|
public int _AnguloControle { get; set; }
|
||||||
|
public int _AnguloLeiutra => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraAngulo)?.atual?.valor ?? -1;
|
||||||
public bool Inicializado { get; set; }
|
public bool Inicializado { get; set; }
|
||||||
public DateTime UltimaLeitura
|
public DateTime UltimaLeitura
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1576,10 +1576,12 @@ namespace AgroBase.Models
|
||||||
|
|
||||||
if (controleBase.Dispositivo == T_Code.Gps)
|
if (controleBase.Dispositivo == T_Code.Gps)
|
||||||
{
|
{
|
||||||
VariaveisEquipamento.LeverArmFrontal = controleBase.LeverArmFrontal;
|
var (la_frontal, la_lateral) = ((JObject)controleBase._comp_value).ToObject<(double?, double?)>();
|
||||||
VariaveisEquipamento.LeverArmLateral = controleBase.LeverArmLateral;
|
if (la_frontal != null) VariaveisEquipamento.LeverArmFrontal = (double)la_frontal;
|
||||||
|
if (la_lateral != null) VariaveisEquipamento.LeverArmLateral = (double)la_lateral;
|
||||||
GPSService.UltimaLeitura.LeverArmFrontal = VariaveisEquipamento.LeverArmFrontal;
|
GPSService.UltimaLeitura.LeverArmFrontal = VariaveisEquipamento.LeverArmFrontal;
|
||||||
GPSService.UltimaLeitura.LeverArmLateral = VariaveisEquipamento.LeverArmLateral;
|
GPSService.UltimaLeitura.LeverArmLateral = VariaveisEquipamento.LeverArmLateral;
|
||||||
|
if (la_lateral != null || la_frontal != null)
|
||||||
GPSService.LeverArm = new GeoLeverArm(VariaveisEquipamento.LeverArmFrontal, VariaveisEquipamento.LeverArmLateral);
|
GPSService.LeverArm = new GeoLeverArm(VariaveisEquipamento.LeverArmFrontal, VariaveisEquipamento.LeverArmLateral);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1665,6 +1667,13 @@ namespace AgroBase.Models
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (controleBase.Dispositivo == T_Code.Npc)
|
||||||
|
{
|
||||||
|
var (modo, e_entrada, e_saida, t_ligar, t_turbo) = ((JObject)controleBase._comp_value).ToObject<(CoolerControlService.CoolerMode, Estado?, Estado?, double?, double?)>();
|
||||||
|
Variaveis.OperacaoEmAndamento.DispSen?.Dados?.CoolerControl?.AlterarControle(modo, entrada: e_entrada, saida: e_saida, tempOn: t_ligar, tempTurbo: t_turbo);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Variaveis.OperacaoEmAndamento.Emergencia = controleBase.Emergencia;
|
Variaveis.OperacaoEmAndamento.Emergencia = controleBase.Emergencia;
|
||||||
if (Variaveis.OperacaoEmAndamento.Emergencia) return;
|
if (Variaveis.OperacaoEmAndamento.Emergencia) return;
|
||||||
|
|
||||||
|
|
@ -2220,8 +2229,6 @@ namespace AgroBase.Models
|
||||||
public bool Pausa { get; set; }
|
public bool Pausa { get; set; }
|
||||||
public string _comp_id { get; set; }
|
public string _comp_id { get; set; }
|
||||||
public dynamic _comp_value { get; set; }
|
public dynamic _comp_value { get; set; }
|
||||||
public double LeverArmFrontal { get; set; }
|
|
||||||
public double LeverArmLateral { get; set; }
|
|
||||||
public OperacaoParametrosModel Parametros { get; set; }
|
public OperacaoParametrosModel Parametros { get; set; }
|
||||||
public OperacaoComandoBaseControleModel Controle { get; set; }
|
public OperacaoComandoBaseControleModel Controle { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -2288,10 +2295,13 @@ namespace AgroBase.Models
|
||||||
public List<ManagerWorkerMessageResponseModulosPendentesModel> ModulosSaude { get; set; }
|
public List<ManagerWorkerMessageResponseModulosPendentesModel> ModulosSaude { get; set; }
|
||||||
public List<DispositivoDetalhesModel> DispositivosMapeados { get; set; }
|
public List<DispositivoDetalhesModel> DispositivosMapeados { get; set; }
|
||||||
public Dictionary<string, double> Temperaturas { get; set; }
|
public Dictionary<string, double> Temperaturas { get; set; }
|
||||||
|
public Dictionary<string, (bool, bool)> Reles { get; set; }
|
||||||
|
public Dictionary<string, (int, int)> Servos { get; set; }
|
||||||
public Dictionary<T_Code, Dictionary<string, bool>> ModsCalibragem { get; set; }
|
public Dictionary<T_Code, Dictionary<string, bool>> ModsCalibragem { get; set; }
|
||||||
public bool CanSerialAtivado { get; set; }
|
public bool CanSerialAtivado { get; set; }
|
||||||
public Dictionary<string, bool> Iniciados { get; set; }
|
public Dictionary<string, bool> Iniciados { get; set; }
|
||||||
public List<OperacaoSensoriamentoLogErrosModel> Logs { get; set; }
|
public List<OperacaoSensoriamentoLogErrosModel> Logs { get; set; }
|
||||||
|
public CoolerControlDataModel CoolerControl { get; set; }
|
||||||
public DateTime UltimoComandoRespondido { get; set; }
|
public DateTime UltimoComandoRespondido { get; set; }
|
||||||
|
|
||||||
public void InserirLog(T_Code dispositivo, StatusModulo status, double saude, string mensagem, string id = null, string condicoes = null)
|
public void InserirLog(T_Code dispositivo, StatusModulo status, double saude, string mensagem, string id = null, string condicoes = null)
|
||||||
|
|
@ -2329,10 +2339,11 @@ namespace AgroBase.Models
|
||||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
var _Bateria = _DispSen?.Dados?.ContadorCarga;
|
var _Bateria = _DispSen?.Dados?.ContadorCarga;
|
||||||
var _Reservatorio = _DispAtu?.Dados?.ContadorCarga;
|
var _Reservatorio = _DispAtu?.Dados?.ContadorCarga;
|
||||||
|
var _Cooler = _DispSen?.Dados?.CoolerControl;
|
||||||
|
|
||||||
double tmp_max = Math.Max(Variaveis.OperacaoEmAndamento.DadosPerformance?.GPU_temp ?? 0, Variaveis.OperacaoEmAndamento.DadosPerformance?.CPU_temp ?? 0);
|
double tmp_max = Math.Max(Variaveis.OperacaoEmAndamento.DadosPerformance?.GPU_temp ?? 0, Variaveis.OperacaoEmAndamento.DadosPerformance?.CPU_temp ?? 0);
|
||||||
_DispSen?.Dados?.CoolerControl?.Atualizar(tmp_max);
|
|
||||||
_DispMvd?.Dados?.AtualizarDadosFreio();
|
_DispMvd?.Dados?.AtualizarDadosFreio();
|
||||||
|
_Cooler?.Atualizar(tmp_max, DateTime.Now);
|
||||||
_Bateria?.AtualizarConsumo(_DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0);
|
_Bateria?.AtualizarConsumo(_DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0);
|
||||||
_Reservatorio?.AtualizarConsumo(_DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0, Variaveis.OperacaoEmAndamento.TempoDecorridoSegs);
|
_Reservatorio?.AtualizarConsumo(_DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0, Variaveis.OperacaoEmAndamento.TempoDecorridoSegs);
|
||||||
_Trajetoria.AtualizarDadosAutonomiaCorredor();
|
_Trajetoria.AtualizarDadosAutonomiaCorredor();
|
||||||
|
|
@ -2521,6 +2532,8 @@ namespace AgroBase.Models
|
||||||
|
|
||||||
var dadosLivox = LivoxManagerProcess.DadosLeitura.Clone();
|
var dadosLivox = LivoxManagerProcess.DadosLeitura.Clone();
|
||||||
|
|
||||||
|
var dadosCooler = _Cooler?.GetResumo();
|
||||||
|
|
||||||
OperacaoSensoriamentoLogModel dadosAtualizados = new OperacaoSensoriamentoLogModel()
|
OperacaoSensoriamentoLogModel dadosAtualizados = new OperacaoSensoriamentoLogModel()
|
||||||
{
|
{
|
||||||
Momento = DateTime.Now,
|
Momento = DateTime.Now,
|
||||||
|
|
@ -2556,8 +2569,11 @@ namespace AgroBase.Models
|
||||||
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),
|
||||||
Temperaturas = _DispSen?.Dados?.Sensores?.Where(x => x.Componente == S_Code.sNTC)?.ToDictionary(x => x.ID, y => (double?)(y.ValoresLeituras?.FirstOrDefault(v => v.funcao == FuncoesPinout.Temperatura)?.atual?.valor) ?? -1),
|
Temperaturas = _DispSen?.Dados?.Sensores?.Where(x => x.Componente == S_Code.sNTC)?.ToDictionary(x => x.ID, y => (double?)(y.ValoresLeituras?.FirstOrDefault(v => v.funcao == FuncoesPinout.Temperatura)?.atual?.valor) ?? -1),
|
||||||
|
Reles = _DispSen?.Dados?.Reles?.ToDictionary(x => x.ID, y => (y.StatusControle == Estado.Ligado, y.StatusLeitura == Estado.Ligado)),
|
||||||
|
Servos = _DispSen?.Dados?.Servos?.ToDictionary(x => x.ID, y => (y._AnguloControle, y._AnguloLeiutra)),
|
||||||
Iniciados = _DispSen?.Dados?.Servos?.Select(s => new { s.ID, s.Inicializado }).Union(_DispSen?.Dados?.Reles?.Select(r => new { r.ID, r.Inicializado })).Union(_DispSen?.Dados?.Sinaleiros?.Select(s => new { s.ID, s.Inicializado })).Union(_DispSen?.Dados?.Sensores?.Select(s => new { s.ID, s.Inicializado })).ToDictionary(s => s.ID, s => s.Inicializado),
|
Iniciados = _DispSen?.Dados?.Servos?.Select(s => new { s.ID, s.Inicializado }).Union(_DispSen?.Dados?.Reles?.Select(r => new { r.ID, r.Inicializado })).Union(_DispSen?.Dados?.Sinaleiros?.Select(s => new { s.ID, s.Inicializado })).Union(_DispSen?.Dados?.Sensores?.Select(s => new { s.ID, s.Inicializado })).ToDictionary(s => s.ID, s => s.Inicializado),
|
||||||
Logs = new List<OperacaoSensoriamentoLogErrosModel>(Logs ?? new List<OperacaoSensoriamentoLogErrosModel>()),
|
Logs = new List<OperacaoSensoriamentoLogErrosModel>(Logs ?? new List<OperacaoSensoriamentoLogErrosModel>()),
|
||||||
|
CoolerControl = dadosCooler,
|
||||||
UltimoComandoRespondido = _DispSen?.Dados?.DadosLeitura?.UltimoComandoRespondido ?? DateTime.MinValue
|
UltimoComandoRespondido = _DispSen?.Dados?.DadosLeitura?.UltimoComandoRespondido ?? DateTime.MinValue
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -2608,8 +2624,11 @@ namespace AgroBase.Models
|
||||||
DispositivosMapeados = new List<DispositivoDetalhesModel>(DispositivosMapeados),
|
DispositivosMapeados = new List<DispositivoDetalhesModel>(DispositivosMapeados),
|
||||||
ModsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>(ModsCalibragem),
|
ModsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>(ModsCalibragem),
|
||||||
Temperaturas = new Dictionary<string, double>(Temperaturas ?? new Dictionary<string, double>()),
|
Temperaturas = new Dictionary<string, double>(Temperaturas ?? new Dictionary<string, double>()),
|
||||||
|
Reles = new Dictionary<string, (bool, bool)>(Reles ?? new Dictionary<string, (bool, bool)>()),
|
||||||
|
Servos = new Dictionary<string, (int, int)>(Servos ?? new Dictionary<string, (int, int)>()),
|
||||||
Iniciados = new Dictionary<string, bool>(Iniciados ?? new Dictionary<string, bool>()),
|
Iniciados = new Dictionary<string, bool>(Iniciados ?? new Dictionary<string, bool>()),
|
||||||
Logs = new List<OperacaoSensoriamentoLogErrosModel>(Logs ?? new List<OperacaoSensoriamentoLogErrosModel>()),
|
Logs = new List<OperacaoSensoriamentoLogErrosModel>(Logs ?? new List<OperacaoSensoriamentoLogErrosModel>()),
|
||||||
|
CoolerControl = CoolerControl?.Clone(),
|
||||||
UltimoComandoRespondido = UltimoComandoRespondido
|
UltimoComandoRespondido = UltimoComandoRespondido
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,17 @@
|
||||||
using AgroBase.Models.Modules;
|
using AgroBase.Models.Modules;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using static AgroBase.Models.Enums;
|
||||||
|
using static AgroBase.Services.CoolerControlService;
|
||||||
|
|
||||||
namespace AgroBase.Services
|
namespace AgroBase.Services
|
||||||
{
|
{
|
||||||
public class CoolerControlService
|
public class CoolerControlService
|
||||||
{
|
{
|
||||||
// Config
|
// Config
|
||||||
public double TempOn { get; set; } = 30.0; // Liga ventilação básica
|
public double TempOn { get; set; } = 55.0; // Liga ventilação básica
|
||||||
public double TempTurbo { get; set; } = 35.0; // Liga entrada+saída
|
public double TempTurbo { get; set; } = 65.0; // Liga entrada+saída
|
||||||
public double TempCritical { get; set; } = 45.0; // Acima disso, alerta
|
public double TempCritical { get; set; } = 75.0; // Acima disso, alerta
|
||||||
public double Histerese { get; set; } = 1.5; // Para evitar chattering
|
public double Histerese { get; set; } = 1.5; // Para evitar chattering
|
||||||
|
|
||||||
public TimeSpan MinOnTime { get; set; } = TimeSpan.FromSeconds(30);
|
public TimeSpan MinOnTime { get; set; } = TimeSpan.FromSeconds(30);
|
||||||
|
|
@ -21,8 +23,10 @@ namespace AgroBase.Services
|
||||||
|
|
||||||
// Estado interno
|
// Estado interno
|
||||||
public CoolerMode ModoAtual { get; private set; } = CoolerMode.Off;
|
public CoolerMode ModoAtual { get; private set; } = CoolerMode.Off;
|
||||||
public Enums.Estado CoolerEntradaEstado => ModoAtual == CoolerMode.IntakeAndExhaust ? Enums.Estado.Ligado : Enums.Estado.Desligado;
|
public Estado CoolerEntradaEstado { get; private set; } = Estado.Desligado;
|
||||||
public Enums.Estado CoolerSaidaEstado => ModoAtual == CoolerMode.ExhaustOnly || ModoAtual == CoolerMode.IntakeAndExhaust ? Enums.Estado.Ligado : Enums.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 double? TemperaturaFiltrada { get; private set; }
|
public double? TemperaturaFiltrada { get; private set; }
|
||||||
public DateTime UltimaMudancaModo { get; private set; } = DateTime.MinValue;
|
public DateTime UltimaMudancaModo { get; private set; } = DateTime.MinValue;
|
||||||
|
|
@ -57,15 +61,29 @@ namespace AgroBase.Services
|
||||||
TemperaturaFiltrada = null;
|
TemperaturaFiltrada = null;
|
||||||
UltimaMudancaModo = DateTime.MinValue;
|
UltimaMudancaModo = DateTime.MinValue;
|
||||||
AlertaTemperaturaCritica = false;
|
AlertaTemperaturaCritica = false;
|
||||||
|
CoolerEntradaEstado = Estado.Desligado;
|
||||||
|
CoolerSaidaEstado = Estado.Desligado;
|
||||||
|
|
||||||
|
EnviarComando();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AlterarControle(CoolerMode modo, Estado? entrada = null, Estado? saida = null, double? tempOn = null, double? tempTurbo = null)
|
||||||
|
{
|
||||||
|
ModoAtual = modo;
|
||||||
|
|
||||||
|
if (entrada != null) CoolerEntradaEstado = (Estado)entrada;
|
||||||
|
if (saida != null) CoolerSaidaEstado = (Estado)saida;
|
||||||
|
if (tempOn != null) TempOn = (double)tempOn;
|
||||||
|
if (tempTurbo != null) TempTurbo = (double)tempTurbo;
|
||||||
|
|
||||||
|
EnviarComando();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Chamar a cada tick de atualização com a temperatura interna atual
|
/// Chamar a cada tick de atualização com a temperatura interna atual
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Atualizar(double temperaturaAtual_C)
|
public void Atualizar(double temperaturaAtual_C, DateTime agora)
|
||||||
{
|
{
|
||||||
DateTime agora = DateTime.Now;
|
|
||||||
|
|
||||||
// 1) Filtrar temperatura (EMA)
|
// 1) Filtrar temperatura (EMA)
|
||||||
if (TemperaturaFiltrada == null)
|
if (TemperaturaFiltrada == null)
|
||||||
{
|
{
|
||||||
|
|
@ -79,13 +97,22 @@ namespace AgroBase.Services
|
||||||
var temp = TemperaturaFiltrada.Value;
|
var temp = TemperaturaFiltrada.Value;
|
||||||
|
|
||||||
// 2) Verificar limite crítico (para health_worker)
|
// 2) Verificar limite crítico (para health_worker)
|
||||||
|
bool _alertaAnterior = AlertaTemperaturaCritica;
|
||||||
AlertaTemperaturaCritica = temp >= TempCritical;
|
AlertaTemperaturaCritica = temp >= TempCritical;
|
||||||
|
if (!_alertaAnterior && AlertaTemperaturaCritica)
|
||||||
|
{
|
||||||
|
Variaveis.OperacaoEmAndamento.Parametros?.DadosLeitura?.InserirLog(T_Code.Npc, StatusModulo.Alerta, 50, "Temperatura limite excedida no NPC");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ModoAtual == CoolerMode.Manual)
|
||||||
|
return;
|
||||||
|
|
||||||
// 3) Respeitar permanência mínima de estado
|
// 3) Respeitar permanência mínima de estado
|
||||||
var tempoNoModoAtual = agora - UltimaMudancaModo;
|
var tempoNoModoAtual = agora - UltimaMudancaModo;
|
||||||
bool podeMudar =
|
bool podeMudar =
|
||||||
(ModoAtual == CoolerMode.Off && tempoNoModoAtual >= MinOffTime) ||
|
(ModoAtual == CoolerMode.Off && tempoNoModoAtual >= MinOffTime) ||
|
||||||
(ModoAtual != CoolerMode.Off && tempoNoModoAtual >= MinOnTime);
|
(ModoAtual != CoolerMode.Off && tempoNoModoAtual >= MinOnTime) ||
|
||||||
|
Variaveis.Fechando;
|
||||||
|
|
||||||
if (!podeMudar)
|
if (!podeMudar)
|
||||||
return;
|
return;
|
||||||
|
|
@ -113,23 +140,78 @@ namespace AgroBase.Services
|
||||||
break;
|
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;
|
||||||
|
|
||||||
if (novoModo != ModoAtual)
|
if (novoModo != ModoAtual)
|
||||||
{
|
{
|
||||||
ModoAtual = novoModo;
|
ModoAtual = novoModo;
|
||||||
UltimaMudancaModo = agora;
|
UltimaMudancaModo = agora;
|
||||||
|
|
||||||
|
EnviarComando();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EnviarComando()
|
||||||
|
{
|
||||||
if (ReleCoolerEntrada != null)
|
if (ReleCoolerEntrada != null)
|
||||||
GeneralJoystick.EnviarComandoSensoriamento(ReleCoolerEntrada.Componente, ReleCoolerEntrada.ID, CoolerEntradaEstado);
|
GeneralJoystick.EnviarComandoSensoriamento(ReleCoolerEntrada.Componente, ReleCoolerEntrada.ID, CoolerEntradaEstado);
|
||||||
if (ReleCoolerSaida != null)
|
if (ReleCoolerSaida != null)
|
||||||
GeneralJoystick.EnviarComandoSensoriamento(ReleCoolerSaida.Componente, ReleCoolerSaida.ID, CoolerSaidaEstado);
|
GeneralJoystick.EnviarComandoSensoriamento(ReleCoolerSaida.Componente, ReleCoolerSaida.ID, CoolerSaidaEstado);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CoolerControlDataModel GetResumo()
|
||||||
|
{
|
||||||
|
return new CoolerControlDataModel()
|
||||||
|
{
|
||||||
|
Modo = ModoAtual,
|
||||||
|
UltimaMudanca = UltimaMudancaModo,
|
||||||
|
EstadoEntrada = CoolerEntradaEstado,
|
||||||
|
EstadoSaida = CoolerSaidaEstado,
|
||||||
|
LeituraEntrada = CoolerEntradaLeitura,
|
||||||
|
LeituraSaida = CoolerSaidaLeitura,
|
||||||
|
Temperatura = TemperaturaFiltrada ?? 0,
|
||||||
|
Alerta = AlertaTemperaturaCritica
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CoolerMode
|
public enum CoolerMode
|
||||||
{
|
{
|
||||||
Off,
|
Off,
|
||||||
|
Manual,
|
||||||
ExhaustOnly,
|
ExhaustOnly,
|
||||||
IntakeAndExhaust
|
IntakeAndExhaust
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class CoolerControlDataModel
|
||||||
|
{
|
||||||
|
public CoolerMode Modo { get; set; }
|
||||||
|
public DateTime UltimaMudanca { get; set; }
|
||||||
|
public Estado EstadoEntrada { get; set; }
|
||||||
|
public Estado EstadoSaida { get; set; }
|
||||||
|
public Estado LeituraEntrada { get; set; }
|
||||||
|
public Estado LeituraSaida { get; set; }
|
||||||
|
public double Temperatura { get; set; }
|
||||||
|
public bool Alerta { get; set; }
|
||||||
|
|
||||||
|
public CoolerControlDataModel Clone()
|
||||||
|
{
|
||||||
|
return new CoolerControlDataModel()
|
||||||
|
{
|
||||||
|
Modo = Modo,
|
||||||
|
UltimaMudanca = UltimaMudanca,
|
||||||
|
EstadoEntrada = EstadoEntrada,
|
||||||
|
EstadoSaida = EstadoSaida,
|
||||||
|
LeituraEntrada = LeituraEntrada,
|
||||||
|
LeituraSaida = LeituraSaida,
|
||||||
|
Temperatura = Temperatura,
|
||||||
|
Alerta = Alerta,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -308,12 +308,9 @@ namespace OperationControl.Models
|
||||||
var cmd = new OperacaoComandoBaseModel()
|
var cmd = new OperacaoComandoBaseModel()
|
||||||
{
|
{
|
||||||
Momento = DateTime.Now,
|
Momento = DateTime.Now,
|
||||||
Dispositivo = AgroBase.Models.Enums.T_Code.Gps
|
Dispositivo = AgroBase.Models.Enums.T_Code.Gps,
|
||||||
|
_comp_value = (lateral, frontal)
|
||||||
};
|
};
|
||||||
if (lateral != null)
|
|
||||||
cmd.LeverArmLateral = Math.Round((double)lateral, 0);
|
|
||||||
if (frontal != null)
|
|
||||||
cmd.LeverArmFrontal = Math.Round((double)frontal, 0);
|
|
||||||
EnviarDadosControle(SelectedRoverId, cmd);
|
EnviarDadosControle(SelectedRoverId, cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -342,6 +339,16 @@ namespace OperationControl.Models
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void EnviarComandoCoolerControl(AgroBase.Services.CoolerControlService.CoolerMode modo, AgroBase.Models.Enums.Estado? entrada = null, AgroBase.Models.Enums.Estado? saida = null, double? temp_on = null, double? temp_turbo = null)
|
||||||
|
{
|
||||||
|
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
||||||
|
{
|
||||||
|
Momento = DateTime.Now,
|
||||||
|
Dispositivo = AgroBase.Models.Enums.T_Code.Npc,
|
||||||
|
_comp_value = (modo, entrada, saida, temp_on, temp_turbo)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public static void RequisitarParametrosOperacao()
|
public static void RequisitarParametrosOperacao()
|
||||||
{
|
{
|
||||||
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
||||||
|
|
|
||||||
|
|
@ -151,6 +151,8 @@
|
||||||
<Label x:Name="lblDiagnosticos_GPS" Content="🔒GPS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="192" HorizontalAlignment="Center" VerticalAlignment="Top"/>
|
<Label x:Name="lblDiagnosticos_GPS" Content="🔒GPS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="192" HorizontalAlignment="Center" VerticalAlignment="Top"/>
|
||||||
<Label x:Name="lblDiagnosticos_SEN" Tag="sMOD" Content="🔒SEN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="218" HorizontalAlignment="Center" VerticalAlignment="Top"/>
|
<Label x:Name="lblDiagnosticos_SEN" Tag="sMOD" Content="🔒SEN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="218" HorizontalAlignment="Center" VerticalAlignment="Top"/>
|
||||||
<Label x:Name="lblDiagnosticos_NPC" Content="🔒NCP" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="244" HorizontalAlignment="Center" VerticalAlignment="Top"/>
|
<Label x:Name="lblDiagnosticos_NPC" Content="🔒NCP" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="244" HorizontalAlignment="Center" VerticalAlignment="Top"/>
|
||||||
|
<Label x:Name="lblDiagnosticos_SEN_RLCIN" Tag="sRLE" Content="🔒CLE" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="112" Canvas.Top="218" HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
||||||
|
<Label x:Name="lblDiagnosticos_SEN_RLCOUT" Tag="sRLE" Content="🔒CLS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="287" Canvas.Top="218" HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
||||||
<Label x:Name="lblDiagnosticos_CAN" Content="🔒CAN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="398" Canvas.Top="192" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
<Label x:Name="lblDiagnosticos_CAN" Content="🔒CAN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="398" Canvas.Top="192" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||||
<Label x:Name="lblDiagnosticos_IPB" Content="🔒LAN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="398" Canvas.Top="218" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
<Label x:Name="lblDiagnosticos_IPB" Content="🔒LAN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="398" Canvas.Top="218" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||||
<Label x:Name="lblDiagnosticos_TRJ" Content="🔒TRAJ" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="398" Canvas.Top="244" HorizontalAlignment="Center" VerticalAlignment="Top"/>
|
<Label x:Name="lblDiagnosticos_TRJ" Content="🔒TRAJ" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="398" Canvas.Top="244" HorizontalAlignment="Center" VerticalAlignment="Top"/>
|
||||||
|
|
@ -580,6 +582,106 @@
|
||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
|
<!-- Painel específico de Rele (SEN) -->
|
||||||
|
<StackPanel x:Name="panelOpcoes_Rele" Grid.Row="0" Visibility="Collapsed">
|
||||||
|
|
||||||
|
<!-- Título / identificação -->
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<Label Content="Controle"/>
|
||||||
|
|
||||||
|
<Button x:Name="btnRele_Ligar" Content="Ligar" Width="80" Margin="0,0,5,0" Click="btnRele_Ligar_Click"/>
|
||||||
|
|
||||||
|
<Button x:Name="btnRele_Desligar" Content="Desligar" Width="80" Margin="0,0,5,0" Click="btnRele_Desligar_Click"/>
|
||||||
|
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<!-- Título / identificação -->
|
||||||
|
<TextBlock x:Name="txtRele_Titulo" FontWeight="Bold" FontSize="11" Text="Relé X - Testes" Margin="0,0,0,5"/>
|
||||||
|
|
||||||
|
<!-- “Cartõezinhos” de status -->
|
||||||
|
<UniformGrid Grid.Row="2" Rows="1" Columns="2" Margin="0,0,0,0">
|
||||||
|
|
||||||
|
<!-- Comando enviado -->
|
||||||
|
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="Comando enviado" FontSize="9" FontWeight="Bold"/>
|
||||||
|
<TextBlock x:Name="txtRele_Comando" FontSize="10" Text="—"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
|
||||||
|
<!-- Status real -->
|
||||||
|
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="Status real" FontSize="9" FontWeight="Bold"/>
|
||||||
|
<TextBlock x:Name="txtRele_StatusReal" FontSize="10" Text="—"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
|
||||||
|
</UniformGrid>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<!-- Painel específico de NPC -->
|
||||||
|
<StackPanel x:Name="panelOpcoes_NPC" Grid.Row="0" Visibility="Collapsed">
|
||||||
|
|
||||||
|
<!-- Título / identificação -->
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<Label Content="Modo de Controle" Margin="0 5 0 0"/>
|
||||||
|
<ComboBox x:Name="cmbNpc_CoolerModo" Width="80" Margin="5" SelectionChanged="cmbNpc_CoolerModo_SelectionChanged"/>
|
||||||
|
<CheckBox x:Name="chbNpc_CoolerEntrada" Content="Entrada" Margin="10"/>
|
||||||
|
<CheckBox x:Name="chbNpc_CoolerSaida" Content="Saida" Margin="10"/>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<!-- Título / identificação -->
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<Label Content="Temperatura Ligar"/>
|
||||||
|
<TextBox x:Name="txtNpc_CoolerTempOn" Width="30" Margin="5"/>
|
||||||
|
<Label Content="Temperatura Turbo"/>
|
||||||
|
<TextBox x:Name="txtNpc_CoolerTempTurbo" Width="30" Margin="5"/>
|
||||||
|
|
||||||
|
<Button x:Name="btnNpc_CoolerEnviar" Content="Enviar" Width="80" Margin="5" Click="btnNpc_CoolerEnviar_Click"/>
|
||||||
|
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<!-- “Cartõezinhos” de status -->
|
||||||
|
<UniformGrid Grid.Row="2" Rows="2" Columns="2" Margin="0,0,0,0">
|
||||||
|
|
||||||
|
<!-- Modo Controle -->
|
||||||
|
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="Modo Controle" FontSize="9" FontWeight="Bold"/>
|
||||||
|
<TextBlock x:Name="txtNpc_CoolerModo" FontSize="10" Text="—"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
|
||||||
|
<!-- Temperatura -->
|
||||||
|
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="Temperatura" FontSize="9" FontWeight="Bold"/>
|
||||||
|
<TextBlock x:Name="txtNpc_CoolerTemperatura" FontSize="10" Text="—"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
|
||||||
|
<!-- Cooler Entrada -->
|
||||||
|
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="Cooler Entrada" FontSize="9" FontWeight="Bold"/>
|
||||||
|
<TextBlock x:Name="txtNpc_CoolerEntrada" FontSize="10" Text="—"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
|
||||||
|
<!-- Cooler Saida -->
|
||||||
|
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="Cooler Saída" FontSize="9" FontWeight="Bold"/>
|
||||||
|
<TextBlock x:Name="txtNpc_CoolerSaida" FontSize="10" Text="—"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
|
||||||
|
</UniformGrid>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ using AgroBase.Models.Operadores;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using AgroBase.Models.Operacoes;
|
|
||||||
|
|
||||||
namespace OperationControl.Windows
|
namespace OperationControl.Windows
|
||||||
{
|
{
|
||||||
|
|
@ -49,6 +48,11 @@ namespace OperationControl.Windows
|
||||||
cmbDir_Movimento.Items.Add(m);
|
cmbDir_Movimento.Items.Add(m);
|
||||||
cmbDir_Movimento.SelectedIndex = 0;
|
cmbDir_Movimento.SelectedIndex = 0;
|
||||||
|
|
||||||
|
cmbNpc_CoolerModo.Items.Clear();
|
||||||
|
foreach (var m in Enum.GetNames(typeof(AgroBase.Services.CoolerControlService.CoolerMode)))
|
||||||
|
cmbNpc_CoolerModo.Items.Add(m);
|
||||||
|
cmbNpc_CoolerModo.SelectedIndex = 0;
|
||||||
|
|
||||||
AtualizarListaDispositivos(new List<string>() { VariaveisControleOperacao.SelectedRoverId });
|
AtualizarListaDispositivos(new List<string>() { VariaveisControleOperacao.SelectedRoverId });
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -741,6 +745,43 @@ namespace OperationControl.Windows
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case AgroBase.Models.Enums.S_Code.sRLE:
|
||||||
|
//var (cmd, leitura) = ((JObject)controleBase._comp_value).ToObject<(double?, double?)>();
|
||||||
|
var rle = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Reles?.FirstOrDefault(x => x.Key == label).Value;
|
||||||
|
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
|
||||||
|
{
|
||||||
|
new GraficoModel.GraficoParametrosModel()
|
||||||
|
{
|
||||||
|
Label = "Comando",
|
||||||
|
Unidade = "",
|
||||||
|
Valor = rle.Value.Item1 == true ? 1 : 0,
|
||||||
|
},
|
||||||
|
new GraficoModel.GraficoParametrosModel()
|
||||||
|
{
|
||||||
|
Label = "Leitura",
|
||||||
|
Unidade = "",
|
||||||
|
Valor = rle.Value.Item2 == true ? 1 : 0,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case AgroBase.Models.Enums.S_Code.sFRO:
|
||||||
|
var fro = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Servos?.FirstOrDefault(x => x.Key == label).Value;
|
||||||
|
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
|
||||||
|
{
|
||||||
|
new GraficoModel.GraficoParametrosModel()
|
||||||
|
{
|
||||||
|
Label = "Comando",
|
||||||
|
Unidade = "°",
|
||||||
|
Valor = fro.Value.Item1,
|
||||||
|
},
|
||||||
|
new GraficoModel.GraficoParametrosModel()
|
||||||
|
{
|
||||||
|
Label = "Leitura",
|
||||||
|
Unidade = "°",
|
||||||
|
Valor = fro.Value.Item2,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AgroBase.Models.Enums.T_Code.Atu:
|
case AgroBase.Models.Enums.T_Code.Atu:
|
||||||
|
|
@ -1008,6 +1049,8 @@ namespace OperationControl.Windows
|
||||||
panelOpcoes_Direcional.Visibility = Visibility.Collapsed;
|
panelOpcoes_Direcional.Visibility = Visibility.Collapsed;
|
||||||
panelOpcoes_GPS.Visibility = Visibility.Collapsed;
|
panelOpcoes_GPS.Visibility = Visibility.Collapsed;
|
||||||
panelOpcoes_Trajetoria.Visibility = Visibility.Collapsed;
|
panelOpcoes_Trajetoria.Visibility = Visibility.Collapsed;
|
||||||
|
panelOpcoes_Rele.Visibility = Visibility.Collapsed;
|
||||||
|
panelOpcoes_NPC.Visibility = Visibility.Collapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (modulo)
|
switch (modulo)
|
||||||
|
|
@ -1067,6 +1110,29 @@ namespace OperationControl.Windows
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case AgroBase.Models.Enums.T_Code.Sen:
|
||||||
|
{
|
||||||
|
switch (s_code)
|
||||||
|
{
|
||||||
|
case AgroBase.Models.Enums.S_Code.sRLE:
|
||||||
|
{
|
||||||
|
panelOpcoes_Rele.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
var rele = rover?.Reles?.FirstOrDefault(x => x.Key == label).Value;
|
||||||
|
bool comando = rele?.Item1 ?? false;
|
||||||
|
bool leitura = rele?.Item2 ?? false;
|
||||||
|
txtRele_Titulo.Text = $"Relé {label} - Testes";
|
||||||
|
txtRele_Comando.Text = comando ? "Ligado" : "Desligado";
|
||||||
|
txtRele_StatusReal.Text = leitura ? "Ligado" : "Desligado";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
txtOpcoes_SemDados.Visibility = Visibility.Visible;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AgroBase.Models.Enums.T_Code.Dir:
|
case AgroBase.Models.Enums.T_Code.Dir:
|
||||||
|
|
@ -1123,6 +1189,30 @@ namespace OperationControl.Windows
|
||||||
btnTrajetoria_Confirmar.IsEnabled = !(dados?.Liberado ?? false);
|
btnTrajetoria_Confirmar.IsEnabled = !(dados?.Liberado ?? false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case AgroBase.Models.Enums.T_Code.Npc:
|
||||||
|
{
|
||||||
|
panelOpcoes_NPC.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
var dados = rover?.CoolerControl;
|
||||||
|
|
||||||
|
var modo = dados?.Modo ?? AgroBase.Services.CoolerControlService.CoolerMode.Off;
|
||||||
|
double tmp = dados?.Temperatura ?? 0;
|
||||||
|
var entrada = dados?.LeituraEntrada ?? AgroBase.Models.Enums.Estado.Desligado;
|
||||||
|
var saida = dados?.LeituraSaida ?? AgroBase.Models.Enums.Estado.Desligado;
|
||||||
|
|
||||||
|
txtNpc_CoolerModo.Text = $"{modo}";
|
||||||
|
txtNpc_CoolerTemperatura.Text = $"{tmp:0.00} °C";
|
||||||
|
txtNpc_CoolerEntrada.Text = $"{entrada}";
|
||||||
|
txtNpc_CoolerSaida.Text = $"{saida}";
|
||||||
|
|
||||||
|
if (inicial)
|
||||||
|
{
|
||||||
|
cmbNpc_CoolerModo.SelectedIndex = (int)modo;
|
||||||
|
chbNpc_CoolerEntrada.IsChecked = entrada == AgroBase.Models.Enums.Estado.Ligado;
|
||||||
|
chbNpc_CoolerSaida.IsChecked = saida == AgroBase.Models.Enums.Estado.Ligado;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
txtOpcoes_SemDados.Visibility = Visibility.Visible;
|
txtOpcoes_SemDados.Visibility = Visibility.Visible;
|
||||||
break;
|
break;
|
||||||
|
|
@ -1303,6 +1393,79 @@ namespace OperationControl.Windows
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Rele
|
||||||
|
|
||||||
|
private void btnRele_Ligar_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
(var modulo, var label, var s_code, var iniciado) = GetModuleData(_labelModuloSelecionado);
|
||||||
|
if (modulo != AgroBase.Models.Enums.T_Code.Sen && s_code != AgroBase.Models.Enums.S_Code.sRLE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
VariaveisControleOperacao.EnviarComandoSensoriamento(label, status: AgroBase.Models.Enums.Estado.Ligado);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnRele_Desligar_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
(var modulo, var label, var s_code, var iniciado) = GetModuleData(_labelModuloSelecionado);
|
||||||
|
if (modulo != AgroBase.Models.Enums.T_Code.Sen && s_code != AgroBase.Models.Enums.S_Code.sRLE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
VariaveisControleOperacao.EnviarComandoSensoriamento(label, status: AgroBase.Models.Enums.Estado.Desligado);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Cooler Control
|
||||||
|
|
||||||
|
private void btnNpc_CoolerEnviar_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
(var modulo, var label, var s_code, var iniciado) = GetModuleData(_labelModuloSelecionado);
|
||||||
|
if (modulo != AgroBase.Models.Enums.T_Code.Npc)
|
||||||
|
return;
|
||||||
|
|
||||||
|
AgroBase.Services.CoolerControlService.CoolerMode Modo = (AgroBase.Services.CoolerControlService.CoolerMode)cmbNpc_CoolerModo.SelectedIndex;
|
||||||
|
AgroBase.Models.Enums.Estado Entrada = chbNpc_CoolerEntrada.IsChecked == true ? AgroBase.Models.Enums.Estado.Ligado : AgroBase.Models.Enums.Estado.Desligado;
|
||||||
|
AgroBase.Models.Enums.Estado Saida = chbNpc_CoolerSaida.IsChecked == true ? AgroBase.Models.Enums.Estado.Ligado : AgroBase.Models.Enums.Estado.Desligado;
|
||||||
|
double TemperaturaLigar = double.Parse(txtNpc_CoolerTempOn.Text);
|
||||||
|
double TemperaturaTurbo = double.Parse(txtNpc_CoolerTempTurbo.Text);
|
||||||
|
VariaveisControleOperacao.EnviarComandoCoolerControl(Modo, entrada: Entrada, saida: Saida, temp_on: TemperaturaLigar, temp_turbo: TemperaturaTurbo);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cmbNpc_CoolerModo_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
var cmb = sender as ComboBox;
|
||||||
|
|
||||||
|
switch ((AgroBase.Services.CoolerControlService.CoolerMode)cmb.SelectedIndex)
|
||||||
|
{
|
||||||
|
case AgroBase.Services.CoolerControlService.CoolerMode.Off:
|
||||||
|
chbNpc_CoolerEntrada.IsEnabled = false;
|
||||||
|
chbNpc_CoolerSaida.IsEnabled = false;
|
||||||
|
chbNpc_CoolerEntrada.IsChecked = false;
|
||||||
|
chbNpc_CoolerSaida.IsChecked = false;
|
||||||
|
break;
|
||||||
|
case AgroBase.Services.CoolerControlService.CoolerMode.Manual:
|
||||||
|
chbNpc_CoolerEntrada.IsEnabled = true;
|
||||||
|
chbNpc_CoolerSaida.IsEnabled = true;
|
||||||
|
chbNpc_CoolerEntrada.IsChecked = false;
|
||||||
|
chbNpc_CoolerSaida.IsChecked = false;
|
||||||
|
break;
|
||||||
|
case AgroBase.Services.CoolerControlService.CoolerMode.ExhaustOnly:
|
||||||
|
chbNpc_CoolerEntrada.IsEnabled = false;
|
||||||
|
chbNpc_CoolerSaida.IsEnabled = false;
|
||||||
|
chbNpc_CoolerEntrada.IsChecked = false;
|
||||||
|
chbNpc_CoolerSaida.IsChecked = true;
|
||||||
|
break;
|
||||||
|
case AgroBase.Services.CoolerControlService.CoolerMode.IntakeAndExhaust:
|
||||||
|
chbNpc_CoolerEntrada.IsEnabled = false;
|
||||||
|
chbNpc_CoolerSaida.IsEnabled = false;
|
||||||
|
chbNpc_CoolerEntrada.IsChecked = true;
|
||||||
|
chbNpc_CoolerSaida.IsChecked = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
private void btnSaude_Salvar_Click(object sender, RoutedEventArgs e)
|
private void btnSaude_Salvar_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
(var modulo, var label, var s_code, var iniciado) = GetModuleData(_labelModuloSelecionado);
|
(var modulo, var label, var s_code, var iniciado) = GetModuleData(_labelModuloSelecionado);
|
||||||
|
|
@ -1936,6 +2099,8 @@ namespace OperationControl.Windows
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue