pequenos ajustes na instancia geral OperacaoEmAndamento
This commit is contained in:
parent
afc3f41b5f
commit
1e82065e91
|
|
@ -12,6 +12,8 @@ namespace AgroBase.Models
|
|||
{
|
||||
public class LivoxModel
|
||||
{
|
||||
public DateTime Momento { get; set; }
|
||||
|
||||
public long timestamp { get; set; }
|
||||
public bool conectado { get; set; }
|
||||
public bool executando { get; set; }
|
||||
|
|
@ -31,6 +33,7 @@ namespace AgroBase.Models
|
|||
{
|
||||
return new LivoxModel()
|
||||
{
|
||||
Momento = Momento,
|
||||
timestamp = timestamp,
|
||||
conectado = conectado,
|
||||
executando = executando,
|
||||
|
|
|
|||
|
|
@ -270,6 +270,8 @@ namespace AgroBase.Models.Modules
|
|||
{
|
||||
return new ModuloIMUModel
|
||||
{
|
||||
Momento = Momento,
|
||||
|
||||
valido = valido,
|
||||
modo = modo,
|
||||
|
||||
|
|
|
|||
|
|
@ -61,39 +61,11 @@ namespace AgroBase.Models
|
|||
public OperacaoSensoriamentoConjuntoModel Sensoriamento { get; set; } = new OperacaoSensoriamentoConjuntoModel();
|
||||
public Form frmOperacao { get; set; }
|
||||
|
||||
#region STATUS DE CONTEXTO
|
||||
//public StatusOperacao StatusAtual { get; private set; } = StatusOperacao.NaoIniciado;
|
||||
//public StatusOperacao StatusAnterior { get; private set; } = StatusOperacao.NaoIniciado;
|
||||
//public bool Emergencia { get; set; } = false;
|
||||
//public bool Pausa { get; set; } = false;
|
||||
//public bool OperacaoLiberada { get; private set; } = false;
|
||||
//public bool OperacaoConfigurada { get; private set; } = false;
|
||||
//public string ErroOperacaoLiberada { get; set; }
|
||||
//public DateTime TempoAguardando { get; private set; } = DateTime.Now;
|
||||
//public double TempoAguardandoSegs => (TempoAguardando.AddSeconds(TempoIniciarOperacao) - DateTime.Now).TotalSeconds;
|
||||
//public bool Iniciado { get; set; }
|
||||
//public bool Finalizando { get; set; } = false;
|
||||
//public bool Calibrando { get; set; } = false;
|
||||
//public DateTime DataInicio { get; set; } = DateTime.MinValue;
|
||||
//public DateTime DataFim { get; set; } = DateTime.MinValue;
|
||||
//public double TempoDecorridoSegs
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return (StatusAtual == StatusOperacao.Parametrizando ? 0 : ((Variaveis.OperacaoEmAndamento.DataFim != DateTime.MinValue ? Variaveis.OperacaoEmAndamento.DataFim : DateTime.Now) - Variaveis.OperacaoEmAndamento.DataInicio).TotalSeconds);
|
||||
// }
|
||||
//}
|
||||
#endregion
|
||||
|
||||
|
||||
public bool Treinando { get; set; } = false;
|
||||
public bool Simulando { get; set; } = false;
|
||||
public double SimulacaoAnguloControle { get; set; } = 0;
|
||||
public double SimulacaoRpmControle { get; set; } = 0;
|
||||
|
||||
//public Dictionary<T_Code, Dictionary<string, bool>> ModsCalibragem { get; set; } = new Dictionary<T_Code, Dictionary<string, bool>>();
|
||||
//public List<OperacaoModulosMandatoriosModel> ModulosMandatorios { get; set; } = new List<OperacaoModulosMandatoriosModel>();
|
||||
//public List<OperacaoParametrosMandatoriosModel> ParametrosMandatorios { get; set; } = new List<OperacaoParametrosMandatoriosModel>();
|
||||
public int TempoIniciarOperacao { get; set; } = 10;
|
||||
public string ID { get; set; }
|
||||
public double tmrLogsInterval
|
||||
|
|
@ -233,8 +205,10 @@ namespace AgroBase.Models
|
|||
if (Parametros.Modo == null) return (false, new List<string>());
|
||||
|
||||
CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo, true);
|
||||
op = Variaveis.OperacaoEmAndamento;
|
||||
|
||||
op.Parametros = Parametros;
|
||||
op.DefinirComponentesEmUso();
|
||||
|
||||
op.Descricao = Parametros.Descricao;
|
||||
op.OprPath = opr_path;
|
||||
|
|
@ -955,44 +929,55 @@ namespace AgroBase.Models
|
|||
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Npc, Mandatorio = true, Utilizar = true });
|
||||
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Can, Mandatorio = true, Utilizar = true });
|
||||
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Bat, Mandatorio = true, Utilizar = true });
|
||||
p.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = op?.PreencherComponentesEmUso(m.Dispositivo));
|
||||
|
||||
if (isagrobase)
|
||||
{
|
||||
op.Parametros = p;
|
||||
Variaveis.OperacaoEmAndamento = op;
|
||||
p.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = op?.PreencherComponentesEmUso(m.Dispositivo));
|
||||
op.DefinirComponentesEmUso();
|
||||
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
|
||||
op.Sensoriamento.AtualizarDados();
|
||||
|
||||
Variaveis.OperacaoEmAndamento = op;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
p.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = op?.PreencherComponentesEmUso(m.Dispositivo));
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
private Dictionary<string, (bool, bool)> PreencherComponentesEmUso(T_Code Modulo)
|
||||
{
|
||||
var op = Variaveis.OperacaoEmAndamento;
|
||||
var op = this;
|
||||
|
||||
Dictionary<string, (bool, bool)> d = new Dictionary<string, (bool, bool)>();
|
||||
switch (Modulo)
|
||||
{
|
||||
case T_Code.Mov:
|
||||
op.DispMvd?.Dados?.Modulos?.ForEach(m => d.Add(m.MovMotor.Mod_ID, (true, m.MovMotor.Comandar)));
|
||||
if (op.DispMvd != null)
|
||||
op.DispMvd?.Dados?.Modulos?.ForEach(m => d.Add(m.MovMotor.Mod_ID, (true, m.MovMotor.Comandar)));
|
||||
break;
|
||||
case T_Code.Dir:
|
||||
op.DispMvd?.Dados?.Modulos?.ForEach(m => d.Add(m.DirMotor.Mod_ID, (true, m.DirMotor.Comandar)));
|
||||
if (op.DispMvd != null)
|
||||
op.DispMvd?.Dados?.Modulos?.ForEach(m => d.Add(m.DirMotor.Mod_ID, (true, m.DirMotor.Comandar)));
|
||||
break;
|
||||
case T_Code.Atu:
|
||||
op.DispAtu?.Dados?.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
|
||||
op.DispAtu?.Dados?.BombasPressurizadoras?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
|
||||
op.DispAtu?.Dados?.BicosPulverizadores?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
|
||||
if (op.DispAtu != null)
|
||||
{
|
||||
op.DispAtu?.Dados?.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
|
||||
op.DispAtu?.Dados?.BombasPressurizadoras?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
|
||||
op.DispAtu?.Dados?.BicosPulverizadores?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
|
||||
}
|
||||
break;
|
||||
case T_Code.Sen:
|
||||
op.DispSen?.Dados?.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
|
||||
op.DispSen?.Dados?.Sinaleiros?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
|
||||
op.DispSen?.Dados?.Servos?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
|
||||
op.DispSen?.Dados?.Reles?.ForEach(r => d.Add(r.ID, (r.Mandatorio, r.Controlar)));
|
||||
if (op.DispSen != null)
|
||||
{
|
||||
op.DispSen?.Dados?.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
|
||||
op.DispSen?.Dados?.Sinaleiros?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
|
||||
op.DispSen?.Dados?.Servos?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
|
||||
op.DispSen?.Dados?.Reles?.ForEach(r => d.Add(r.ID, (r.Mandatorio, r.Controlar)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
return d;
|
||||
|
|
@ -1000,14 +985,15 @@ namespace AgroBase.Models
|
|||
|
||||
private void DefinirComponentesEmUso()
|
||||
{
|
||||
var op = Variaveis.OperacaoEmAndamento;
|
||||
var op = this;
|
||||
|
||||
op.Parametros.ModulosMandatorios?.ForEach(m =>
|
||||
{
|
||||
var comp = m.ComponentesEmUso ?? new Dictionary<string, (bool, bool)>();
|
||||
switch (m.Dispositivo)
|
||||
{
|
||||
case T_Code.Mov:
|
||||
foreach (var c in m.ComponentesEmUso)
|
||||
foreach (var c in comp)
|
||||
{
|
||||
var d = op.DispMvd?.Dados?.Modulos?.FirstOrDefault(x => x?.MovMotor?.Mod_ID == c.Key)?.MovMotor;
|
||||
if (d != null)
|
||||
|
|
@ -1015,7 +1001,7 @@ namespace AgroBase.Models
|
|||
}
|
||||
break;
|
||||
case T_Code.Dir:
|
||||
foreach (var c in m.ComponentesEmUso)
|
||||
foreach (var c in comp)
|
||||
{
|
||||
var d = op.DispMvd?.Dados?.Modulos?.FirstOrDefault(x => x?.DirMotor?.Mod_ID == c.Key)?.DirMotor;
|
||||
if (d != null)
|
||||
|
|
@ -1024,7 +1010,7 @@ namespace AgroBase.Models
|
|||
break;
|
||||
case T_Code.Atu:
|
||||
var da = op.DispAtu?.Dados;
|
||||
foreach (var c in m.ComponentesEmUso)
|
||||
foreach (var c in comp)
|
||||
{
|
||||
var s = da?.Sensores?.FirstOrDefault(x => x.ID == c.Key);
|
||||
if (s != null)
|
||||
|
|
@ -1051,7 +1037,7 @@ namespace AgroBase.Models
|
|||
break;
|
||||
case T_Code.Sen:
|
||||
var ds = op.DispSen?.Dados;
|
||||
foreach (var c in m.ComponentesEmUso)
|
||||
foreach (var c in comp)
|
||||
{
|
||||
var s = ds?.Sensores?.FirstOrDefault(x => x.ID == c.Key);
|
||||
if (s != null)
|
||||
|
|
@ -1091,9 +1077,8 @@ namespace AgroBase.Models
|
|||
{
|
||||
if (Parametros.Modo == null) return (false, new List<string>());
|
||||
|
||||
var op = Variaveis.OperacaoEmAndamento;
|
||||
|
||||
CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo, true);
|
||||
var op = Variaveis.OperacaoEmAndamento;
|
||||
|
||||
op.Descricao = Parametros.Descricao;
|
||||
op.OprPath = $"Base ({VariaveisEquipamento.Parametros.base_ip})";
|
||||
|
|
@ -1110,6 +1095,8 @@ namespace AgroBase.Models
|
|||
p.ModulosMandatorios = Parametros.ModulosMandatorios;
|
||||
p.ParametrosMandatorios = Parametros.ParametrosMandatorios;
|
||||
|
||||
op.DefinirComponentesEmUso();
|
||||
|
||||
List<string> ruasSelecionadas = Parametros.RuasPercorrer ?? new List<string>();
|
||||
if (Parametros.Mapa != null)
|
||||
{
|
||||
|
|
@ -1243,8 +1230,30 @@ namespace AgroBase.Models
|
|||
if (op.Sensoriamento.Operacao.Calibrando) return;
|
||||
|
||||
var modsCalibragem = op.Sensoriamento.Operacao.ModsCalibragem;
|
||||
if (modsCalibragem == null)
|
||||
{
|
||||
modsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>();
|
||||
op.Sensoriamento.Operacao.ModsCalibragem = modsCalibragem;
|
||||
}
|
||||
|
||||
if (!modsCalibragem.ContainsKey(T_Code.Mov))
|
||||
modsCalibragem[T_Code.Mov] = new Dictionary<string, bool>();
|
||||
|
||||
if (!modsCalibragem.ContainsKey(T_Code.Dir))
|
||||
modsCalibragem[T_Code.Dir] = new Dictionary<string, bool>();
|
||||
|
||||
if (!modsCalibragem.ContainsKey(T_Code.Atu))
|
||||
modsCalibragem[T_Code.Atu] = new Dictionary<string, bool>();
|
||||
|
||||
bool modsCalibrados =
|
||||
modsCalibragem != null &&
|
||||
modsCalibragem.Any() &&
|
||||
modsCalibragem.All(x =>
|
||||
x.Value != null &&
|
||||
x.Value.Values.Count > 0 &&
|
||||
x.Value.Values.All(y => y == true)
|
||||
);
|
||||
|
||||
bool modsCalibrados = modsCalibragem.All(x => x.Value.Values.Count > 0 && x.Value.Values.All(y => y == true));
|
||||
if (!forcar && modsCalibrados)
|
||||
{
|
||||
op.Sensoriamento.InserirLog(T_Code.Mod, StatusModulo.Operante, 100, "Todos os módulos já foram calibrados anteriormente, não irá calibrar novamente.");
|
||||
|
|
@ -2827,27 +2836,6 @@ namespace AgroBase.Models
|
|||
);
|
||||
}
|
||||
|
||||
private void SalvarLog<T>(string Arquivo, T Objeto, bool Fim)
|
||||
{
|
||||
var Caminho = Variaveis.CaminhoOperacoes + Variaveis.OperacaoEmAndamento.ID;
|
||||
if (!Directory.Exists(Caminho))
|
||||
{
|
||||
Directory.CreateDirectory(Caminho);
|
||||
}
|
||||
|
||||
Caminho += "/" + Arquivo + ".json";
|
||||
string jsonLog = JsonConvert.SerializeObject(Objeto, Formatting.None);
|
||||
|
||||
if (!File.Exists(Caminho))
|
||||
{
|
||||
File.WriteAllText(Caminho, "[" + jsonLog);
|
||||
}
|
||||
else
|
||||
{
|
||||
File.AppendAllText(Caminho, "," + jsonLog + (Fim ? "]" : ""));
|
||||
}
|
||||
}
|
||||
|
||||
private void SalvarLogCameraSolo()
|
||||
{
|
||||
var cameras = CameraWorkerService.CamerasSolo.ToList();
|
||||
|
|
@ -3146,6 +3134,7 @@ namespace AgroBase.Models
|
|||
|
||||
public class OperacaoControleModel
|
||||
{
|
||||
public DateTime Momento { get; set; }
|
||||
public double Angulo { get; set; }
|
||||
public int heartbeat { get; set; } = 1;
|
||||
public DateTime ticks_sem_resposta { get; set; } = DateTime.MinValue;
|
||||
|
|
@ -3257,23 +3246,37 @@ namespace AgroBase.Models
|
|||
|
||||
public OperacaoControleModel Clone()
|
||||
{
|
||||
return new OperacaoControleModel()
|
||||
var clone = new OperacaoControleModel()
|
||||
{
|
||||
Momento = Momento,
|
||||
|
||||
Angulo = Angulo,
|
||||
PercentualVelocidadeSP = PercentualVelocidadeSP,
|
||||
_tipoMovimento = _tipoMovimento,
|
||||
TipoMovimento = TipoMovimento,
|
||||
TiposControle = new List<OperacaoControleTipoModel>(TiposControle),
|
||||
SimulacaoMPC = new List<MPCSimulacaoModel>(SimulacaoMPC),
|
||||
PercentualVelocidadeSP = PercentualVelocidadeSP,
|
||||
AlturaBarra = AlturaBarra,
|
||||
heartbeat = heartbeat,
|
||||
ticks_sem_resposta = ticks_sem_resposta,
|
||||
Latencia = Latencia,
|
||||
EmFreio = EmFreio,
|
||||
ErroLateral = ErroLateral,
|
||||
TiposControle = TiposControle?.Select(x => new OperacaoControleTipoModel()
|
||||
{
|
||||
Tipo = x.Tipo,
|
||||
DelayEnvioComandoBase = x.DelayEnvioComandoBase,
|
||||
DelayEnvioComando = x.DelayEnvioComando,
|
||||
DelayEnvioComandoExtra = x.DelayEnvioComandoExtra,
|
||||
UltimoComando = x.UltimoComando,
|
||||
Comandos = new List<string>(x.Comandos ?? new List<string>()),
|
||||
DirecaoAtual = x.DirecaoAtual,
|
||||
UltimaDirecao = x.UltimaDirecao
|
||||
}).ToList() ?? new List<OperacaoControleTipoModel>(),
|
||||
SimulacaoMPC = new List<MPCSimulacaoModel>(SimulacaoMPC ?? new List<MPCSimulacaoModel>()),
|
||||
DebugCustoMpc = new Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel>(DebugCustoMpc ?? new Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel>()),
|
||||
Motivos = new List<string>(Motivos ?? new List<string>())
|
||||
};
|
||||
|
||||
clone._tipoMovimento = _tipoMovimento;
|
||||
|
||||
return clone;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3356,6 +3359,18 @@ namespace AgroBase.Models
|
|||
var op = Variaveis.OperacaoEmAndamento;
|
||||
op.Controle.Motivos = RedisService.GetField<List<string>>(CtxKey.DadosControle, "motivos", new List<string>());
|
||||
|
||||
double tempoDecorridoSeg = 0;
|
||||
|
||||
if (Operacao.DataInicio != DateTime.MinValue)
|
||||
{
|
||||
DateTime fim =
|
||||
Operacao.DataFim != DateTime.MinValue
|
||||
? Operacao.DataFim
|
||||
: agora;
|
||||
|
||||
tempoDecorridoSeg = Math.Max(0, (fim - Operacao.DataInicio).TotalSeconds);
|
||||
}
|
||||
|
||||
var operacaoAtualizada = new OperacaoSensoriamentoLogModel()
|
||||
{
|
||||
Momento = agora,
|
||||
|
|
@ -3370,7 +3385,7 @@ namespace AgroBase.Models
|
|||
Finalizando = Operacao.Finalizando,
|
||||
DataInicio = Operacao.DataInicio,
|
||||
DataFim = Operacao.DataFim,
|
||||
TempoDecorridoSeg = Operacao.TempoDecorridoSeg,
|
||||
TempoDecorridoSeg = tempoDecorridoSeg,
|
||||
TipoCanAtivo = CanManager.TipoServico,
|
||||
|
||||
OperacaoLiberada = RedisService.GetField(CtxKey.DadosOperacao, "liberado", false),
|
||||
|
|
@ -4292,24 +4307,40 @@ namespace AgroBase.Models
|
|||
public ModuloIMUModel IMU { get; set; } = new ModuloIMUModel();
|
||||
public void AtualizarImu(DateTime agora)
|
||||
{
|
||||
string imu = RedisService.Get(RedisService.ModKey(T_Code.Imu)) ?? "";
|
||||
var sIMU = JsonConvert.DeserializeObject<ModuloIMUModel>(imu);
|
||||
sIMU.Momento = agora;
|
||||
IMU = sIMU;
|
||||
try
|
||||
{
|
||||
string imu = RedisService.Get(RedisService.ModKey(T_Code.Imu)) ?? "";
|
||||
var sIMU = JsonConvert.DeserializeObject<ModuloIMUModel>(imu) ?? new ModuloIMUModel();
|
||||
|
||||
sIMU.Momento = agora;
|
||||
IMU = sIMU;
|
||||
}
|
||||
catch
|
||||
{
|
||||
IMU = new ModuloIMUModel()
|
||||
{
|
||||
Momento = agora
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// Gps
|
||||
public GPSModel Gps { get; set; } = new GPSModel();
|
||||
public void AtualizarGps(DateTime agora)
|
||||
{
|
||||
Gps = GPSService.GetSnapshot();
|
||||
Gps = GPSService.GetSnapshot() ?? new GPSModel();
|
||||
Gps.Momento = agora;
|
||||
|
||||
if (VariaveisOperacao.PosicaoBase != null)
|
||||
VariaveisOperacao.PosicaoBase.Momento = agora;
|
||||
}
|
||||
|
||||
// Lvx
|
||||
public LivoxModel LivoxLidar { get; set; } = new LivoxModel();
|
||||
public void AtualizarLivox(DateTime agora)
|
||||
{
|
||||
LivoxLidar = LivoxManagerProcess.DadosLeitura?.Clone();
|
||||
LivoxLidar = LivoxManagerProcess.DadosLeitura?.Clone() ?? new LivoxModel();
|
||||
LivoxLidar.Momento = agora;
|
||||
}
|
||||
|
||||
// Bat
|
||||
|
|
@ -4526,7 +4557,8 @@ namespace AgroBase.Models
|
|||
var dadosVisualWorker = OperadorVisual?.Clone();
|
||||
var dadosHealthWorker = OperadorSaude?.Clone();
|
||||
var dadosLivox = LivoxLidar?.Clone();
|
||||
var dadosCooler = _Cooler?.GetResumo();
|
||||
var dadosCooler = _Cooler?.GetResumo(agora);
|
||||
op.Controle.Momento = agora;
|
||||
|
||||
OperacaoSensoriamentoConjuntoModel dadosAtualizados = new OperacaoSensoriamentoConjuntoModel()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -163,10 +163,11 @@ namespace AgroBase.Services
|
|||
}
|
||||
}
|
||||
|
||||
public CoolerControlDataModel GetResumo()
|
||||
public CoolerControlDataModel GetResumo(DateTime agora)
|
||||
{
|
||||
return new CoolerControlDataModel()
|
||||
{
|
||||
Momento = agora,
|
||||
Modo = ModoAtual,
|
||||
UltimaMudanca = UltimaMudancaModo,
|
||||
TemperaturaLigar = TempOn,
|
||||
|
|
@ -191,6 +192,7 @@ namespace AgroBase.Services
|
|||
|
||||
public class CoolerControlDataModel
|
||||
{
|
||||
public DateTime Momento { get; set; }
|
||||
public CoolerMode Modo { get; set; }
|
||||
public DateTime UltimaMudanca { get; set; }
|
||||
public double TemperaturaLigar { get; set; }
|
||||
|
|
@ -206,6 +208,7 @@ namespace AgroBase.Services
|
|||
{
|
||||
return new CoolerControlDataModel()
|
||||
{
|
||||
Momento = Momento,
|
||||
Modo = Modo,
|
||||
UltimaMudanca = UltimaMudanca,
|
||||
TemperaturaLigar = TemperaturaLigar,
|
||||
|
|
|
|||
Loading…
Reference in New Issue