Ajuste no contrato de dados transmitido entre rover e base

This commit is contained in:
Diego Freitas 2025-12-17 16:27:06 -03:00
parent b3b64a9aed
commit bdc70d89bf
44 changed files with 1029 additions and 427 deletions

View File

@ -1227,7 +1227,7 @@ namespace AgroBase.Forms.IHM
bool PzmConectado = SerialService.DispositivosMapeados.Any(x => x.Dispositivo == Enums.T_Code.Pzm); bool PzmConectado = SerialService.DispositivosMapeados.Any(x => x.Dispositivo == Enums.T_Code.Pzm);
idx = PreencheDadosLinha(grid, Testes, idx, PzmConectado ? 1 : 0); idx = PreencheDadosLinha(grid, Testes, idx, PzmConectado ? 1 : 0);
var S36V = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Bateria; var S36V = Variaveis.OperacaoEmAndamento.Sensoriamento.Bateria;
bool S36VInicializado = S36V.Iniciado; bool S36VInicializado = S36V.Iniciado;
idx = PreencheDadosLinha(grid, Testes, idx, S36VInicializado ? 1 : 0); idx = PreencheDadosLinha(grid, Testes, idx, S36VInicializado ? 1 : 0);
@ -1264,7 +1264,7 @@ namespace AgroBase.Forms.IHM
double Corrente12V = S12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor; double Corrente12V = S12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor;
idx = PreencheDadosLinha(grid, Testes, idx, Corrente12V); idx = PreencheDadosLinha(grid, Testes, idx, Corrente12V);
var SImu = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.IMU; var SImu = Variaveis.OperacaoEmAndamento.Sensoriamento.IMU;
double Orientacao = SImu.Iniciado ? SImu.Rotacao : -1; double Orientacao = SImu.Iniciado ? SImu.Rotacao : -1;
idx = PreencheDadosLinha(grid, Testes, idx, Orientacao); idx = PreencheDadosLinha(grid, Testes, idx, Orientacao);
@ -1274,13 +1274,13 @@ namespace AgroBase.Forms.IHM
bool GpsInicializado = GPSService.Iniciado; bool GpsInicializado = GPSService.Iniciado;
idx = PreencheDadosLinha(grid, Testes, idx, GpsInicializado ? 1 : 0); idx = PreencheDadosLinha(grid, Testes, idx, GpsInicializado ? 1 : 0);
double Precisao = GpsInicializado ? (int)Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.QualidadeFix : -1; double Precisao = GpsInicializado ? (int)Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.QualidadeFix : -1;
idx = PreencheDadosLinha(grid, Testes, idx, Precisao); idx = PreencheDadosLinha(grid, Testes, idx, Precisao);
double Satelites = GpsInicializado ? Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.NumeroSatelites : -1; double Satelites = GpsInicializado ? Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.NumeroSatelites : -1;
idx = PreencheDadosLinha(grid, Testes, idx, Satelites); idx = PreencheDadosLinha(grid, Testes, idx, Satelites);
double OrientacaoGPS = GpsInicializado ? Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.OrientacaoReal : -1; double OrientacaoGPS = GpsInicializado ? Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.OrientacaoReal : -1;
idx = PreencheDadosLinha(grid, Testes, idx, OrientacaoGPS); idx = PreencheDadosLinha(grid, Testes, idx, OrientacaoGPS);
bool A05Conectado = SerialService.DispositivosMapeados.Any(x => x.Dispositivo == Enums.T_Code.A05); bool A05Conectado = SerialService.DispositivosMapeados.Any(x => x.Dispositivo == Enums.T_Code.A05);

View File

@ -136,7 +136,7 @@ namespace AgroBase.Forms.IHM
public void AtualizarMapaDinamico() public void AtualizarMapaDinamico()
{ {
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var _Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria; var _Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria;
if (_Trajetoria != null && _Trajetoria.CorredorAtual != null) if (_Trajetoria != null && _Trajetoria.CorredorAtual != null)
@ -160,7 +160,7 @@ namespace AgroBase.Forms.IHM
pnlOrientacao.Invalidate(); pnlOrientacao.Invalidate();
pnlInclinacao.Invalidate(); pnlInclinacao.Invalidate();
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
lblUltimaLeituraSolo.Text = "Última Leitura Solo: " + _Sensoriamento.OperadorErvas.UltimaMensagem.ToString("HH:mm:ss.fff"); lblUltimaLeituraSolo.Text = "Última Leitura Solo: " + _Sensoriamento.OperadorErvas.UltimaMensagem.ToString("HH:mm:ss.fff");
lblUltimaLeituraCaminho.Text = "Última Leitura Caminho: " + _Sensoriamento.OperadorVisual.UltimaMensagem.ToString("HH:mm:ss.fff"); lblUltimaLeituraCaminho.Text = "Última Leitura Caminho: " + _Sensoriamento.OperadorVisual.UltimaMensagem.ToString("HH:mm:ss.fff");
@ -293,8 +293,8 @@ namespace AgroBase.Forms.IHM
{ {
try try
{ {
double angulo = Variaveis.OperacaoEmAndamento.Parametros?.DadosLeitura?.Gps?.AnguloCarroDefinido ?? 0; double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento?.Gps?.AnguloCarroDefinido ?? 0;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90, (float)(Variaveis.OperacaoEmAndamento.Parametros?.DadosLeitura?.Trajetoria?.AnguloCaminho ?? 0)); FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90, (float)(Variaveis.OperacaoEmAndamento.Sensoriamento?.Trajetoria?.AnguloCaminho ?? 0));
} }
catch { } catch { }
} }

View File

@ -151,7 +151,7 @@ namespace AgroBase.Forms.Operacoes
AtualizarInformacoesGerais(); AtualizarInformacoesGerais();
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
lblDistanciaEsquerda.Text = "Distancia Esq: " + _Sensoriamento.Trajetoria.DistanciaEsquerda.ToString("0.00") + " cm"; lblDistanciaEsquerda.Text = "Distancia Esq: " + _Sensoriamento.Trajetoria.DistanciaEsquerda.ToString("0.00") + " cm";
lblDistanciaDireita.Text = "Distancia Dir: " + _Sensoriamento.Trajetoria.DistanciaDireita.ToString("0.00") + " cm"; lblDistanciaDireita.Text = "Distancia Dir: " + _Sensoriamento.Trajetoria.DistanciaDireita.ToString("0.00") + " cm";
@ -173,7 +173,7 @@ namespace AgroBase.Forms.Operacoes
chbPulverizador.Checked = false; chbPulverizador.Checked = false;
} }
bool sonarAtivado = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.OperadorVisual.Status == StatusModulo.Operante; bool sonarAtivado = Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual.Status == StatusModulo.Operante;
chbSonarAtivado.Enabled = sonarAtivado; chbSonarAtivado.Enabled = sonarAtivado;
if (!sonarAtivado) if (!sonarAtivado)
{ {
@ -425,8 +425,8 @@ namespace AgroBase.Forms.Operacoes
{ {
try try
{ {
double angulo = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.OrientacaoReal; double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.OrientacaoReal;
double angulo2 = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.AnguloCarroDefinido; double angulo2 = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.AnguloCarroDefinido;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -90, (float)angulo2); FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -90, (float)angulo2);
} }
catch { } catch { }
@ -434,7 +434,7 @@ namespace AgroBase.Forms.Operacoes
private void pnlAnguloMagnetometro_Paint(object sender, PaintEventArgs e) private void pnlAnguloMagnetometro_Paint(object sender, PaintEventArgs e)
{ {
var imu = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.IMU; var imu = Variaveis.OperacaoEmAndamento.Sensoriamento.IMU;
try try
{ {
double angulo = imu.Rotacao; double angulo = imu.Rotacao;
@ -515,7 +515,7 @@ namespace AgroBase.Forms.Operacoes
private void AtualizarInformacoesGerais() private void AtualizarInformacoesGerais()
{ {
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var _Barramentos = _Sensoriamento.Bateria.Barramentos; var _Barramentos = _Sensoriamento.Bateria.Barramentos;
gridDados.Rows[0].Cells[1].Value = _Sensoriamento.TempoDecorrido.ToString("HH:mm:ss"); gridDados.Rows[0].Cells[1].Value = _Sensoriamento.TempoDecorrido.ToString("HH:mm:ss");
@ -548,8 +548,8 @@ namespace AgroBase.Forms.Operacoes
gridDados.Rows[27].Cells[1].Value = _Sensoriamento.Atuador.DistanciaEstimadaRestanteMetros.ToString("0.00"); gridDados.Rows[27].Cells[1].Value = _Sensoriamento.Atuador.DistanciaEstimadaRestanteMetros.ToString("0.00");
gridDados.Rows[28].Cells[1].Value = _Sensoriamento.Atuador.PressaoLinha.ToString("0.00"); gridDados.Rows[28].Cells[1].Value = _Sensoriamento.Atuador.PressaoLinha.ToString("0.00");
gridDados.Rows[29].Cells[1].Value = _Sensoriamento.Atuador.LeituraPotenciaBomba.ToString("0.00"); gridDados.Rows[29].Cells[1].Value = _Sensoriamento.Atuador.LeituraPotenciaBomba.ToString("0.00");
gridDados.Rows[30].Cells[1].Value = _Sensoriamento.Atuador.VazaoInstantanea.ToString("0.00"); gridDados.Rows[30].Cells[1].Value = $"{_Sensoriamento.Atuador.VazaoInstantanea:0.000} ({Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.VazaoFluxoMLpSInstantaneaCalc:0.000})";
gridDados.Rows[31].Cells[1].Value = $"{_Sensoriamento.Atuador.VazaoMedia:0.000} ({Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.VazaoFluxoMLpSInstantaneaCalc:0.000})"; gridDados.Rows[31].Cells[1].Value = $"{_Sensoriamento.Atuador.VazaoMedia:0.000}";
gridDados.Rows[32].Cells[1].Value = _Sensoriamento.Atuador.VolumeVazaoMl.ToString("0.00"); gridDados.Rows[32].Cells[1].Value = _Sensoriamento.Atuador.VolumeVazaoMl.ToString("0.00");
gridDados.Rows[33].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraEsquerda.ToString("0.00"); gridDados.Rows[33].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraEsquerda.ToString("0.00");
gridDados.Rows[34].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraDireita.ToString("0.00"); gridDados.Rows[34].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraDireita.ToString("0.00");
@ -629,8 +629,7 @@ namespace AgroBase.Forms.Operacoes
if (Bico != null) if (Bico != null)
{ {
bool comando = !Bico.ComandoAtuar; bool comando = !Bico.ComandoAtuar;
Variaveis.OperacaoEmAndamento.Controle.BicosAtuados.FirstOrDefault(x => x.ID == Bico.ID).ComandoAtuar = comando; GeneralJoystick.EnviarComandoAtuador(Bico.Componente, Bico.ID, Status: comando, Forcar: true);
GeneralJoystick.EnviarComandoAtuador(S_Code.sBIC, Bico.ID, Status: comando);
pnlAtuadores.Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: " + (comando ? "Ligado" : "Desligado"); pnlAtuadores.Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: " + (comando ? "Ligado" : "Desligado");
btn.Text = comando ? "Desligar" : "Ligar"; btn.Text = comando ? "Desligar" : "Ligar";
@ -640,29 +639,25 @@ namespace AgroBase.Forms.Operacoes
private void btnLigarBomba_Click(object sender, EventArgs e) private void btnLigarBomba_Click(object sender, EventArgs e)
{ {
var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.FirstOrDefault(); var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.FirstOrDefault();
Variaveis.OperacaoEmAndamento.Controle.BombaAtuada = true; GeneralJoystick.EnviarComandoAtuador(Bomba.Componente, Bomba.ID, Status: true, Valor: Convert.ToInt32(nudPressaoSP.Value), Forcar: true);
GeneralJoystick.EnviarComandoAtuador(S_Code.sBMB, Bomba.ID, Status: true);
} }
private void btnDesligarBomba_Click(object sender, EventArgs e) private void btnDesligarBomba_Click(object sender, EventArgs e)
{ {
var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.FirstOrDefault(); var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.FirstOrDefault();
Variaveis.OperacaoEmAndamento.Controle.BombaAtuada = false; GeneralJoystick.EnviarComandoAtuador(Bomba.Componente, Bomba.ID, Status: false, Valor: Convert.ToInt32(nudPressaoSP.Value), Forcar: true);
GeneralJoystick.EnviarComandoAtuador(S_Code.sBMB, Bomba.ID, Status: false);
} }
private void nudPressaoSP_ValueChanged(object sender, EventArgs e) private void nudPressaoSP_ValueChanged(object sender, EventArgs e)
{ {
var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.FirstOrDefault();
Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha = Convert.ToInt32(((NumericUpDown)sender).Value); Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha = Convert.ToInt32(((NumericUpDown)sender).Value);
GeneralJoystick.EnviarComandoAtuador(S_Code.sBMB, Bomba.ID, Status: Bomba.ComandoAtuar);
} }
private void pnlAtuadores_Paint(object sender, PaintEventArgs e) private void pnlAtuadores_Paint(object sender, PaintEventArgs e)
{ {
var Atuador = Variaveis.OperacaoEmAndamento.DispAtu.Dados; var Atuador = Variaveis.OperacaoEmAndamento.DispAtu.Dados;
bool ligado = Atuador.BombasPressurizadoras.FirstOrDefault()?._Potencia > 0; bool ligado = Atuador.BombasPressurizadoras.FirstOrDefault()?._BombaLigada ?? false;
AtuadorFuncoesGerais.DesenharAtuadores( AtuadorFuncoesGerais.DesenharAtuadores(
pnlAtuadores, pnlAtuadores,
e, e,

View File

@ -68,7 +68,7 @@ namespace AgroBase.Forms.Operacoes
pnlCaminho.Invalidate(); pnlCaminho.Invalidate();
pnlAnguloCamera.Invalidate(); pnlAnguloCamera.Invalidate();
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
/*var ultimaLeitura = Variaveis.OperacaoEmAndamento.CamerasSolo.OrderByDescending(x => x.Leitura.timestamp).FirstOrDefault(); /*var ultimaLeitura = Variaveis.OperacaoEmAndamento.CamerasSolo.OrderByDescending(x => x.Leitura.timestamp).FirstOrDefault();
if (ultimaLeitura != null) if (ultimaLeitura != null)
@ -180,7 +180,7 @@ namespace AgroBase.Forms.Operacoes
Posicao = x.Posicao, Posicao = x.Posicao,
StatusBico = x._EstadoLeitura == Enums.Estado.Ligado, StatusBico = x._EstadoLeitura == Enums.Estado.Ligado,
TempoAtuado = x.TempoAtuado, TempoAtuado = x.TempoAtuado,
}).ToList(), Atuador.BombasPressurizadoras.FirstOrDefault()._Potencia > 0, Atuador.PressaoLinha, Atuador.TempoAtuado); }).ToList(), Atuador.BombasPressurizadoras.FirstOrDefault()?._BombaLigada ?? false, Atuador.PressaoLinha, Atuador.TempoAtuado);
} }
private void pnlCaminho_Paint(object sender, PaintEventArgs e) private void pnlCaminho_Paint(object sender, PaintEventArgs e)
@ -282,7 +282,7 @@ namespace AgroBase.Forms.Operacoes
{ {
try try
{ {
double angulo = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.AnguloCarroDefinido; double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.AnguloCarroDefinido;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -90); FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -90);
} }
catch { } catch { }

View File

@ -1274,7 +1274,8 @@ namespace AgroBase.Forms.Operacoes
private void AtualizarInformacoesMotorDirecional(string ID) private void AtualizarInformacoesMotorDirecional(string ID)
{ {
var Log = LogsDirecional.Where(x => x.Modulo_ID == ID).FirstOrDefault(x => x.Momento == MomentoAtual); //var Log = LogsDirecional.Where(x => x.Mod_ID == ID).FirstOrDefault(x => x.Momento == MomentoAtual);
var Log = LogsDirecional.Where(x => x.Mod_ID == ID).FirstOrDefault();
var LogSen = LogsSensoriamento.FirstOrDefault(x => x.Momento == MomentoAtual); var LogSen = LogsSensoriamento.FirstOrDefault(x => x.Momento == MomentoAtual);
double Angulo = Log?.AnguloLeitura ?? 0; double Angulo = Log?.AnguloLeitura ?? 0;
@ -1295,7 +1296,7 @@ namespace AgroBase.Forms.Operacoes
pic.Image = FuncoesGlobais.RotacionarImagem(img, Angulo * Multiplicador); pic.Image = FuncoesGlobais.RotacionarImagem(img, Angulo * Multiplicador);
Label lbl = FuncoesGlobais.FindControlRecursive<Label>(tabDirecional, "lblDIR_" + ID); Label lbl = FuncoesGlobais.FindControlRecursive<Label>(tabDirecional, "lblDIR_" + ID);
lbl.ForeColor = Log.Inicializado ? Color.Green : Color.Red; lbl.ForeColor = Log.Iniciado ? Color.Green : Color.Red;
TextBox txtAnguloSP = FuncoesGlobais.FindControlRecursive<TextBox>(tabDirecional, "txtDIR_AnguloSP_" + ID); TextBox txtAnguloSP = FuncoesGlobais.FindControlRecursive<TextBox>(tabDirecional, "txtDIR_AnguloSP_" + ID);
txtAnguloSP.Text = (Log?.Angulo_SP ?? 0).ToString(); txtAnguloSP.Text = (Log?.Angulo_SP ?? 0).ToString();

View File

@ -116,7 +116,7 @@ namespace AgroBase.Forms
return; return;
AtualizandoTela = true; AtualizandoTela = true;
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var _Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria; var _Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria;
if (_Trajetoria == null) if (_Trajetoria == null)
@ -265,7 +265,7 @@ namespace AgroBase.Forms
// Obtém os parâmetros // Obtém os parâmetros
double anguloAtual = double.Parse(txtAnguloGPS.Text); double anguloAtual = double.Parse(txtAnguloGPS.Text);
var _Gps = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps; var _Gps = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps;
double anguloControle = 0.0; double anguloControle = 0.0;
TipoMovimentoDirecional tipoMovimento = Variaveis.OperacaoEmAndamento.Controle.TipoMovimento; TipoMovimentoDirecional tipoMovimento = Variaveis.OperacaoEmAndamento.Controle.TipoMovimento;
@ -327,7 +327,7 @@ namespace AgroBase.Forms
AtualizarPosicaoGPS(); AtualizarPosicaoGPS();
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.AtualizarDados(); Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
if (!chbAutomatico.Checked) if (!chbAutomatico.Checked)
{ {
@ -453,7 +453,7 @@ namespace AgroBase.Forms
{ {
try try
{ {
double angulo = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura?.Gps?.AnguloCarroDefinido ?? 0; double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento?.Gps?.AnguloCarroDefinido ?? 0;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90); FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90);
} }
catch { } catch { }
@ -464,7 +464,7 @@ namespace AgroBase.Forms
try try
{ {
double angulo = Variaveis.OperacaoEmAndamento.SimulacaoAnguloControle; double angulo = Variaveis.OperacaoEmAndamento.SimulacaoAnguloControle;
double dif = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura?.Trajetoria?.ErroOrientacaoAngularProximoPonto ?? 0; double dif = Variaveis.OperacaoEmAndamento.Sensoriamento?.Trajetoria?.ErroOrientacaoAngularProximoPonto ?? 0;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90, (float)dif); FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90, (float)dif);
} }
catch { } catch { }

View File

@ -69,7 +69,7 @@ namespace AgroBase.Forms.Simuladores
Task.Run(async () => Task.Run(async () =>
{ {
OAKCameraFrameModel frame = await VisualWorkerService.GetCameraFrame(CameraFrameType.Segmentacao); OAKCameraFrameModel frame = await VisualWorkerService.GetCameraFrame(CameraFrameType.Segmentacao);
var dadosSeg = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.OperadorVisual.Analises.segmentacao; var dadosSeg = Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual.Analises.segmentacao;
DesenharCorredor(frame?.image(), dadosSeg.centros_corredor, dadosSeg.width, dadosSeg.height, 80); DesenharCorredor(frame?.image(), dadosSeg.centros_corredor, dadosSeg.width, dadosSeg.height, 80);
this.Invoke((MethodInvoker)(() => this.Invoke((MethodInvoker)(() =>

View File

@ -214,7 +214,7 @@ namespace AgroBase.Forms
{ {
try try
{ {
double angulo = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.AnguloCarroDefinido; double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.AnguloCarroDefinido;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90); FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90);
} }
catch { } catch { }
@ -476,7 +476,7 @@ namespace AgroBase.Forms
{ {
Latitude = GPSService.UltimaLeitura.Latitude, Latitude = GPSService.UltimaLeitura.Latitude,
Longitude = GPSService.UltimaLeitura.Longitude, Longitude = GPSService.UltimaLeitura.Longitude,
Orientation = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.AnguloCarroDefinido Orientation = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.AnguloCarroDefinido
}); });
_robotState.UpdateCurrentRobotState(); _robotState.UpdateCurrentRobotState();

View File

@ -69,9 +69,9 @@ namespace AgroBase.Forms
AtualizarDadosSensorCorrente("AB36V", lblB36V); AtualizarDadosSensorCorrente("AB36V", lblB36V);
} }
lblMagnetometro.ForeColor = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.IMU.Iniciado ? Color.Green : Color.Red; lblMagnetometro.ForeColor = Variaveis.OperacaoEmAndamento.Sensoriamento.IMU.Iniciado ? Color.Green : Color.Red;
var Gps = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps; var Gps = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps;
lblGPS.ForeColor = Gps.Inicializado ? Color.Green : Color.Red; lblGPS.ForeColor = Gps.Inicializado ? Color.Green : Color.Red;
if (Gps.Inicializado) if (Gps.Inicializado)
{ {
@ -395,7 +395,7 @@ namespace AgroBase.Forms
private void pnlOrientacaoGPS_Paint(object sender, PaintEventArgs e) private void pnlOrientacaoGPS_Paint(object sender, PaintEventArgs e)
{ {
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
double Angulo = _Sensoriamento.Gps.OrientacaoReal; double Angulo = _Sensoriamento.Gps.OrientacaoReal;
double AnguloMovimento = _Sensoriamento.Gps.OrientacaoMovimento; double AnguloMovimento = _Sensoriamento.Gps.OrientacaoMovimento;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, -90, (float)AnguloMovimento); FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, -90, (float)AnguloMovimento);
@ -403,7 +403,7 @@ namespace AgroBase.Forms
private void pnlOrientacaoMagnetometro_Paint(object sender, PaintEventArgs e) private void pnlOrientacaoMagnetometro_Paint(object sender, PaintEventArgs e)
{ {
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
double Angulo = _Sensoriamento.IMU.Rotacao; double Angulo = _Sensoriamento.IMU.Rotacao;
double AnguloCorrigido = _Sensoriamento.IMU.RotacaoCorrigida; double AnguloCorrigido = _Sensoriamento.IMU.RotacaoCorrigida;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, -90, (float)AnguloCorrigido); FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, -90, (float)AnguloCorrigido);

View File

@ -41,7 +41,7 @@ namespace AgroBase.Forms
private async Task tmrLeitura_Tick() private async Task tmrLeitura_Tick()
{ {
var Gps = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps; var Gps = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps;
lblAltitude.Text = "Altitude: " + Gps.Altitude.ToString("0.0") + " m"; lblAltitude.Text = "Altitude: " + Gps.Altitude.ToString("0.0") + " m";
lblDatahora.Text = "Ultima Leitura: " + Gps.DataHora.ToString("HH:mm:ss"); lblDatahora.Text = "Ultima Leitura: " + Gps.DataHora.ToString("HH:mm:ss");

View File

@ -62,7 +62,7 @@ namespace AgroBase.Forms
private void btnRegistrarPontos_Click(object sender, EventArgs e) private void btnRegistrarPontos_Click(object sender, EventArgs e)
{ {
GPSModel P1 = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.Clone(); GPSModel P1 = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.Clone();
if (Pontos[idxRua].Count == 0) if (Pontos[idxRua].Count == 0)
{ {
@ -127,8 +127,8 @@ namespace AgroBase.Forms
{ {
try try
{ {
double angulo = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.AnguloCarroDefinido; double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.AnguloCarroDefinido;
double anguloCorredor = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.OrientacaoMovimento; double anguloCorredor = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.OrientacaoMovimento;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90, (float)anguloCorredor); FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90, (float)anguloCorredor);
} }
catch { } catch { }
@ -180,7 +180,7 @@ namespace AgroBase.Forms
ultimoPonto = Pontos[Pontos.Count - 2][Pontos[Pontos.Count - 2].Count - 1]; ultimoPonto = Pontos[Pontos.Count - 2][Pontos[Pontos.Count - 2].Count - 1];
} }
var Gps = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps; var Gps = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps;
pnlOrientacaoGps.Invalidate(); pnlOrientacaoGps.Invalidate();
lblStatusGPS.Text = $"GPS - Precisão: {Gps.PrecisaoCm} cm, " + lblStatusGPS.Text = $"GPS - Precisão: {Gps.PrecisaoCm} cm, " +

View File

@ -59,7 +59,7 @@ namespace AgroBase.Forms
private async Task tmrLeitura_Tick() private async Task tmrLeitura_Tick()
{ {
var Imu = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.IMU; var Imu = Variaveis.OperacaoEmAndamento.Sensoriamento.IMU;
AnguloX = Imu.InclinacaoFrontal; AnguloX = Imu.InclinacaoFrontal;
AnguloY = Imu.InclinacaoLateral; AnguloY = Imu.InclinacaoLateral;
AnguloZ = Imu.Rotacao; AnguloZ = Imu.Rotacao;

View File

@ -1,4 +1,5 @@
using AgroBase.Services; using AgroBase.Models.Operacoes;
using AgroBase.Services;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
@ -113,6 +114,31 @@ namespace AgroBase.Models
Y = Y Y = Y
}; };
} }
public OperacaoParametrosDadosGNSSModel ToGnssModel()
{
return new OperacaoParametrosDadosGNSSModel()
{
Altitude = Altitude,
Distancia = Distancia,
IdadeCorrecao = IdadeCorrecao,
Iniciado = Inicializado,
Latitude = Latitude,
LeverArmFrontal = LeverArmFrontal,
LeverArmLateral= LeverArmLateral,
Longitude = Longitude,
NtripAtivado = Ntrip_ativado,
NumeroSatelites = NumeroSatelites,
OrientacaoMovimento = OrientacaoMovimento,
OrientacaoReal = OrientacaoReal,
PrecisaoCm = PrecisaoCm,
PrecisaoHorizontal = PrecisaoHorizontal,
QualidadeFix = QualidadeFix,
UltimoComandoRespondido = UltimoComandoRespondido,
Velocidade = Velocidade
};
}
} }
public class GPSSatelitesEmVistaModel public class GPSSatelitesEmVistaModel

View File

@ -759,6 +759,7 @@ namespace AgroBase
if (Bomba != null) if (Bomba != null)
{ {
if (Status != null) Bomba.ComandoAtuar = (bool)Status; if (Status != null) Bomba.ComandoAtuar = (bool)Status;
if (Valor != null) Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha = (double)Valor;
(id_num, posicao, data) = Bomba.ProtocoloComando(); (id_num, posicao, data) = Bomba.ProtocoloComando();
} }
break; break;
@ -766,14 +767,8 @@ namespace AgroBase
var Bico = DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == ID); var Bico = DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == ID);
if (Bico != null) if (Bico != null)
{ {
//Console.WriteLine($"Bico {Bico.Posicao} atualizado de {Bico.ComandoAtuar} para {Status}"); if (Status != null) Bico.ComandoAtuar = (bool)Status;
if (Valor != null) Bico.AnguloControle = (int)Valor; if (Valor != null) Bico.AnguloControle = (int)Valor;
if (Status != null)
{
Bico.ComandoAtuar = (bool)Status;
if (Bico.ComandoAtuar) Bico.Atuacoes++;
Bico.AnguloControle = (int)Valor;
}
(id_num, posicao, data) = Bico.ProtocoloComando(); (id_num, posicao, data) = Bico.ProtocoloComando();
} }
break; break;
@ -781,7 +776,7 @@ namespace AgroBase
var Servo = DispAtu?.Dados?.Servos?.FirstOrDefault(x => x.ID == ID && x.Inicializado); var Servo = DispAtu?.Dados?.Servos?.FirstOrDefault(x => x.ID == ID && x.Inicializado);
if (Servo != null) if (Servo != null)
{ {
Servo._AnguloControle = (int)Valor; if (Valor != null) Servo._AnguloControle = (int)Valor;
(id_num, posicao, data) = Servo.ProtocoloComando(); (id_num, posicao, data) = Servo.ProtocoloComando();
} }
break; break;
@ -859,7 +854,7 @@ namespace AgroBase
private static bool VerificaComandoValidoSonar(Keys Comando) private static bool VerificaComandoValidoSonar(Keys Comando)
{ {
List<Keys> ComandosImpedidos = new List<Keys>(); List<Keys> ComandosImpedidos = new List<Keys>();
var Sonar = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.OperadorVisual; var Sonar = Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual;
Sonar?.Resumo?.AtualizarStatusBloqueio(false); Sonar?.Resumo?.AtualizarStatusBloqueio(false);
var DeveParar = Sonar?.Resumo?.DeveParar ?? false; var DeveParar = Sonar?.Resumo?.DeveParar ?? false;
if (DeveParar) if (DeveParar)

View File

@ -101,7 +101,7 @@ public class MPCController
_dt = (EnviadoEm - _ultimaAtualizacao).TotalSeconds; _dt = (EnviadoEm - _ultimaAtualizacao).TotalSeconds;
double dtCalc = Math.Max(tempoMinimo, Math.Min(tempoMaximo, _dt)); double dtCalc = Math.Max(tempoMinimo, Math.Min(tempoMaximo, _dt));
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var dadosEnvio = new var dadosEnvio = new
{ {

View File

@ -52,7 +52,7 @@ public class MPCControllerSimple
List<(double steering, Enums.TipoMovimentoDirecional mode)> candidates = GenerateControlCandidates(); List<(double steering, Enums.TipoMovimentoDirecional mode)> candidates = GenerateControlCandidates();
double bestCost = double.MaxValue; double bestCost = double.MaxValue;
(double steeringAngle, Enums.TipoMovimentoDirecional mode) bestControl = (0, Enums.TipoMovimentoDirecional.RodasDianteiras); (double steeringAngle, Enums.TipoMovimentoDirecional mode) bestControl = (0, Enums.TipoMovimentoDirecional.RodasDianteiras);
bool insideStreet = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Trajetoria.CorredorAtual.Dentro; bool insideStreet = Variaveis.OperacaoEmAndamento.Sensoriamento.Trajetoria.CorredorAtual.Dentro;
double velocity = FuncoesMatematicas.CalculaVelocidadeMsPercentual(currentVelocity); double velocity = FuncoesMatematicas.CalculaVelocidadeMsPercentual(currentVelocity);
double distanciaPasso = dt * velocity; double distanciaPasso = dt * velocity;

View File

@ -666,7 +666,7 @@ namespace AgroBase.Models
private void DrawObstacle(Graphics g, float xRobot, float yRobot, Color pointColor, Color borderColor, float angle, Obstaculo obstaculo, float PxToCm) private void DrawObstacle(Graphics g, float xRobot, float yRobot, Color pointColor, Color borderColor, float angle, Obstaculo obstaculo, float PxToCm)
{ {
GPSModel posicaoRobo = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps; GPSModel posicaoRobo = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps;
GPSModel posicaoObstaculo = GPSUtils.GerarPontoDeslocado(posicaoRobo, angle, obstaculo.DistanciaMedia_mm / 1000); GPSModel posicaoObstaculo = GPSUtils.GerarPontoDeslocado(posicaoRobo, angle, obstaculo.DistanciaMedia_mm / 1000);
float x = xRobot + (float)((posicaoObstaculo.Longitude - posicaoRobo.Longitude) * _zoom); float x = xRobot + (float)((posicaoObstaculo.Longitude - posicaoRobo.Longitude) * _zoom);

View File

@ -155,8 +155,8 @@ namespace AgroBase.Models.Modules
} }
public void AtualizaPercentualErvas() public void AtualizaPercentualErvas()
{ {
//double tempoTotalOperacao = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.TempoDecorridoSeg * 1000.0; //double tempoTotalOperacao = Variaveis.OperacaoEmAndamento.Sensoriamento.TempoDecorridoSeg * 1000.0;
double tempoTotalOperacao = (Variaveis.OperacaoEmAndamento.Parametros?.DadosLeitura?.Movimentacao?.TempoMovimentoSegs ?? 0) * 1000.0; double tempoTotalOperacao = (Variaveis.OperacaoEmAndamento.Sensoriamento?.Movimentacao?.TempoMovimentoSegs ?? 0) * 1000.0;
if (tempoTotalOperacao > 0) if (tempoTotalOperacao > 0)
{ {
@ -193,7 +193,7 @@ namespace AgroBase.Models.Modules
_contadorLeituras++; _contadorLeituras++;
} }
VazaoFluxoMLpSMedia = _contadorLeituras > 0 ? _somaVazao / _contadorLeituras : 0; VazaoFluxoMLpSMedia = TempoAtuado == 0 ? 0 : VolumeVazaoML / TempoAtuado;
var BicosAtuados = BicosPulverizadores.Where(x => x.Inicializado && x.ComandoAtuar).ToList(); var BicosAtuados = BicosPulverizadores.Where(x => x.Inicializado && x.ComandoAtuar).ToList();
double vazaoInstantaneaBico = vazaoInstantanea / ((double)BicosAtuados.Count()); double vazaoInstantaneaBico = vazaoInstantanea / ((double)BicosAtuados.Count());
@ -736,9 +736,7 @@ namespace AgroBase.Models.Modules
Servo_ID_Num = 90 + posicao, Servo_ID_Num = 90 + posicao,
Componente = S_Code.sBIC, Componente = S_Code.sBIC,
Posicao = posicao, Posicao = posicao,
Atuacoes = 0,
Inicializado = false, Inicializado = false,
TempoAtuado = 0,
AnguloControle = 0, AnguloControle = 0,
AnguloAbertura = 110, AnguloAbertura = 110,
Comandar = true, Comandar = true,
@ -801,9 +799,7 @@ namespace AgroBase.Models.Modules
Dados.BicosPulverizadores.ForEach(x => Dados.BicosPulverizadores.ForEach(x =>
{ {
x.ComandoAtuar = false; x.ComandoAtuar = false;
x.Atuacoes = 0; x.ReiniciarDados();
x.TempoAtuado = 0;
x.InicioAtuacao = DateTime.MinValue;
x.ValoresLeituras.ForEach(l => x.ValoresLeituras.ForEach(l =>
{ {
l.atual = new CanCommandFreqModel<dynamic>(); l.atual = new CanCommandFreqModel<dynamic>();
@ -1057,45 +1053,49 @@ namespace AgroBase.Models.Modules
private void VerificaControleLeitura() private void VerificaControleLeitura()
{ {
if (true) // !frmDiagnosticos.Diagnosticando foreach (var bico in BicosPulverizadores.Where(x => x.Comandar && x.Inicializado))
{ {
foreach (var bico in BicosPulverizadores.Where(x => x.Comandar && x.Inicializado)) Estado comandoEstado = bico.ComandoAtuar ? Estado.Ligado : Estado.Desligado;
if (comandoEstado != bico._EstadoLeitura || bico.AnguloControle != bico._AnguloBicoLeitura)
{ {
Estado comandoEstado = bico.ComandoAtuar ? Estado.Ligado : Estado.Desligado; GeneralJoystick.EnviarComandoAtuador(bico.Componente, bico.ID, Status: bico.ComandoAtuar, Valor: bico.AnguloControle);
if (bico._EstadoLeitura != comandoEstado || bico.AnguloControle != bico._AnguloBicoLeitura) }
}
foreach (var bomba in BombasPressurizadoras.Where(x => x.Comandar && x.Inicializado))
{
// Desligar a bomba caso nao tenha herbicida suficiente no recipiente
if (!ContadorCarga.PulverizadorLiberado)
{
if (bomba._EstadoLeitura == Estado.Ligado)
{ {
GeneralJoystick.EnviarComandoAtuador(bico.Componente, bico.ID, Status: bico.ComandoAtuar, Valor: bico.AnguloControle); GeneralJoystick.EnviarComandoAtuador(bomba.Componente, bomba.ID, Status: false);
} }
} }
else
var bomba = BombasPressurizadoras.FirstOrDefault(x => x.Comandar && x.Inicializado);
if (bomba != null)
{ {
bool leituraEstado = bomba._Potencia > 0; if (Variaveis.OperacaoEmAndamento.Iniciado && Variaveis.OperacaoEmAndamento.Parametros.Controle.PulverizadorAutomatico)
// Desliga a bomba caso esteja ligada e o nivel de herbicida caiu
if (ContadorCarga.PercentualAtual < VariaveisEquipamento.PercentualReservatorioMin && leituraEstado == true)
{ {
bomba.ComandoAtuar = false; if (bomba._EstadoLeitura == Estado.Desligado)
} {
// Religa a bomba caso esteja desligada, o nivel de herbicida esta estavel e o pulverizador automatico esta ligado GeneralJoystick.EnviarComandoAtuador(bomba.Componente, bomba.ID, Status: true);
else if (ContadorCarga.PercentualAtual >= VariaveisEquipamento.PercentualReservatorioMin && leituraEstado == false && Variaveis.OperacaoEmAndamento.Parametros.Controle.PulverizadorAutomatico) }
{
bomba.ComandoAtuar = true;
} }
if (bomba.ComandoAtuar != leituraEstado) Estado comandoEstado = bomba.ComandoAtuar ? Estado.Ligado : Estado.Desligado;
double pressaoSp = Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha;
if (comandoEstado != bomba._EstadoLeitura || pressaoSp != bomba._PressaoSP)
{ {
GeneralJoystick.EnviarComandoAtuador(bomba.Componente, bomba.ID, Status: bomba.ComandoAtuar); GeneralJoystick.EnviarComandoAtuador(bomba.Componente, bomba.ID, Status: bomba.ComandoAtuar, Valor: pressaoSp);
} }
} }
}
foreach (var servo in Servos.Where(x => x.Controlar && x.Inicializado)) foreach (var servo in Servos.Where(x => x.Controlar && x.Inicializado))
{
if (servo._AnguloControle != servo._AnguloLeiutra)
{ {
if (servo._AnguloLeiutra != servo._AnguloControle) GeneralJoystick.EnviarComandoAtuador(servo.Componente, servo.ID, Valor: servo._AnguloControle);
{
GeneralJoystick.EnviarComandoAtuador(servo.Componente, servo.ID, Valor: servo._AnguloControle);
}
} }
} }
} }
@ -1145,7 +1145,6 @@ namespace AgroBase.Models.Modules
break; break;
} }
Variaveis.OperacaoEmAndamento.Controle.BombaAtuada = true;
GeneralJoystick.EnviarComandoAtuador(Bomba.Componente, Bomba.ID, Status: true); GeneralJoystick.EnviarComandoAtuador(Bomba.Componente, Bomba.ID, Status: true);
await FuncoesGlobais.AguardarCondicaoAsync(Bomba.AtingiuPressao, 3000, 200); await FuncoesGlobais.AguardarCondicaoAsync(Bomba.AtingiuPressao, 3000, 200);
@ -1246,6 +1245,8 @@ namespace AgroBase.Models.Modules
case S_Code.sMAG: case S_Code.sMAG:
{ {
var sensor = Sensores.FirstOrDefault(x => x.ID_Num == id_num); var sensor = Sensores.FirstOrDefault(x => x.ID_Num == id_num);
if (sensor == null) return;
double angulo = sensor.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraAngulo)?.atual?.valor ?? double.NaN; double angulo = sensor.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraAngulo)?.atual?.valor ?? double.NaN;
if (sensor.ID_Num == SensorAnguloBarraEsquerda.ID_Num) if (sensor.ID_Num == SensorAnguloBarraEsquerda.ID_Num)
AnguloBarraEsquerda = angulo; AnguloBarraEsquerda = angulo;
@ -1255,6 +1256,17 @@ namespace AgroBase.Models.Modules
AnguloBarraAltura = angulo; AnguloBarraAltura = angulo;
} }
break; break;
case S_Code.sBIC:
{
var bico = BicosPulverizadores.FirstOrDefault(x => x.ID_Num == id_num);
if (bico == null) return;
if (bico._estadoLeituraAnterior != bico._EstadoLeitura)
{
bico.AtualizaTempoAtuado();
}
}
break;
} }
} }
@ -1270,20 +1282,7 @@ namespace AgroBase.Models.Modules
public int Servo_ID_Num { get; set; } public int Servo_ID_Num { get; set; }
public double AnguloControle { get; set; } public double AnguloControle { get; set; }
public double AnguloAbertura { get; set; } public double AnguloAbertura { get; set; }
private bool _atuado; public bool ComandoAtuar { get; set; }
public bool ComandoAtuar
{
get
{
return _atuado;
}
set
{
_atuado = value;
AtualizaTempoAtuado();
}
}
public bool Comandar { get; set; } public bool Comandar { get; set; }
public bool Mandatorio { get; set; } public bool Mandatorio { get; set; }
public bool Liberado public bool Liberado
@ -1304,7 +1303,8 @@ namespace AgroBase.Models.Modules
} }
} }
public List<SensorValoresLeituraModel> ValoresLeituras { get; set; } public List<SensorValoresLeituraModel> ValoresLeituras { get; set; }
public Estado _EstadoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? Estado.Desligado; public Estado _estadoLeituraAnterior { get; private set; } = Estado.Desligado;
public Estado _EstadoLeitura => (Estado)(ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? 0);
public int _AnguloBicoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraAngulo)?.atual?.valor ?? 0; public int _AnguloBicoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraAngulo)?.atual?.valor ?? 0;
@ -1339,35 +1339,43 @@ namespace AgroBase.Models.Modules
} }
public int Atuacoes { get; set; } = 0; public List<List<double[]>> TrechosAtuado { get; set; } = new List<List<double[]>>();
public DateTime InicioAtuacao { get; set; } = DateTime.MinValue; public int Atuacoes { get; private set; } = 0;
public double TempoAtuado { get; set; } = 0; private DateTime InicioAtuacao { get; set; } = DateTime.MinValue;
private void AtualizaTempoAtuado() public double TempoAtuado { get; private set; } = 0;
public void ReiniciarDados()
{ {
if (!Variaveis.OperacaoEmAndamento.Iniciado) return; Atuacoes = 0;
InicioAtuacao = DateTime.MinValue;
TempoAtuado = 0;
}
public void AtualizaTempoAtuado()
{
//if (!Variaveis.OperacaoEmAndamento.Iniciado) return;
Estado estado_atual = _EstadoLeitura;
DateTime agora = DateTime.Now;
if (_atuado) if (estado_atual == Estado.Ligado)
{ {
if (InicioAtuacao == DateTime.MinValue) InicioAtuacao = agora;
{ TrechosAtuado.Add(new List<double[]>());
InicioAtuacao = DateTime.Now; Atuacoes++;
}
else
{
TempoAtuado += (DateTime.Now - InicioAtuacao).TotalMilliseconds;
InicioAtuacao = DateTime.Now;
}
} }
else if (InicioAtuacao != DateTime.MinValue) else if (estado_atual == Estado.Desligado)
{ {
TempoAtuado += (DateTime.Now - InicioAtuacao).TotalMilliseconds; if (InicioAtuacao != DateTime.MinValue)
InicioAtuacao = DateTime.MinValue; {
TempoAtuado += (agora - InicioAtuacao).TotalMilliseconds;
InicioAtuacao = DateTime.MinValue;
}
} }
if (Variaveis.OperacaoEmAndamento.DispAtu != null) if (Variaveis.OperacaoEmAndamento.DispAtu != null)
{ {
Variaveis.OperacaoEmAndamento.DispAtu.Dados.AtualizaTempoAtuadoGeral(); Variaveis.OperacaoEmAndamento.DispAtu.Dados.AtualizaTempoAtuadoGeral();
} }
_estadoLeituraAnterior = estado_atual;
} }
@ -1426,6 +1434,8 @@ namespace AgroBase.Models.Modules
public List<SensorValoresLeituraModel> ValoresLeituras { get; set; } public List<SensorValoresLeituraModel> ValoresLeituras { get; set; }
public Estado _EstadoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? Estado.Desligado; public Estado _EstadoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? Estado.Desligado;
public double _Potencia => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0; public double _Potencia => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0;
public bool _BombaLigada => _Potencia > 0;
public double _PressaoSP => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.PressaoSP)?.atual?.valor ?? 0;

View File

@ -512,7 +512,7 @@ namespace AgroBase.Models.Modules
} }
private double VelocidadeAtual => private double VelocidadeAtual =>
FuncoesMatematicas.CalculaVelocidadePercentualMs(Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura?.Movimentacao?.VelocidadeMedia ?? 0); FuncoesMatematicas.CalculaVelocidadePercentualMs(Variaveis.OperacaoEmAndamento.Sensoriamento?.Movimentacao?.VelocidadeMedia ?? 0);
private bool StatusControleEmFreio => private bool StatusControleEmFreio =>
(Variaveis.OperacaoEmAndamento.Controle?.TiposControle? (Variaveis.OperacaoEmAndamento.Controle?.TiposControle?
@ -637,9 +637,22 @@ namespace AgroBase.Models.Modules
EnviarComando = transicao || alvoMudou || !atingiu; EnviarComando = transicao || alvoMudou || !atingiu;
UltimoControle = emFreio; UltimoControle = emFreio;
EnviarComandoModulo();
} }
private static int Clamp(int v, int lo, int hi) => (v < lo) ? lo : (v > hi ? hi : v); private static int Clamp(int v, int lo, int hi) => (v < lo) ? lo : (v > hi ? hi : v);
private void EnviarComandoModulo()
{
if (EnviarComando && UltimoEnvio.AddMilliseconds(DelayEnvio) < DateTime.Now)
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sSRV, Servo.ID, AnguloControle);
UltimoEnvio = DateTime.Now;
}
}
} }
public class MvdMotorMOVSensorimanetoGrafico public class MvdMotorMOVSensorimanetoGrafico

View File

@ -481,13 +481,7 @@ namespace AgroBase.Models.Modules
{ {
foreach (var Mod in Modulos) foreach (var Mod in Modulos)
{ {
var Freio = Mod.MovMotor.ConfigFreio; Mod.MovMotor?.ConfigFreio?.AtualizarDados();
Freio.AtualizarDados();
if (Freio.EnviarComando && Freio.UltimoEnvio.AddMilliseconds(Freio.DelayEnvio) < DateTime.Now)
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sSRV, Freio.Servo.ID, Freio.AnguloControle);
Freio.UltimoEnvio = DateTime.Now;
}
} }
} }

View File

@ -2320,7 +2320,7 @@ namespace AgroBase.Models.Modules
foreach (var rele in Reles.Where(x => x.Controlar && x.Inicializado)) foreach (var rele in Reles.Where(x => x.Controlar && x.Inicializado))
{ {
if (rele._EstadoLeitura != rele.StatusControle) if (rele.StatusControle != rele._EstadoLeitura)
{ {
GeneralJoystick.EnviarComandoSensoriamento(rele.Componente, rele.ID, rele.StatusControle); GeneralJoystick.EnviarComandoSensoriamento(rele.Componente, rele.ID, rele.StatusControle);
} }
@ -2328,7 +2328,7 @@ namespace AgroBase.Models.Modules
foreach (var servo in Servos.Where(x => x.Controlar && x.Inicializado)) foreach (var servo in Servos.Where(x => x.Controlar && x.Inicializado))
{ {
if (servo._AnguloLeiutra != servo._AnguloControle) if (servo._AnguloControle != servo._AnguloLeiutra)
{ {
GeneralJoystick.EnviarComandoSensoriamento(servo.Componente, servo.ID, servo._AnguloControle); GeneralJoystick.EnviarComandoSensoriamento(servo.Componente, servo.ID, servo._AnguloControle);
} }

View File

@ -58,7 +58,7 @@ namespace AgroBase.Models
public TrajetoriaMapaOperacaoModel Trajetoria { get; set; } public TrajetoriaMapaOperacaoModel Trajetoria { get; set; }
public List<GPSModel> GPSTrajetoria { get; set; } = new List<GPSModel>(); public List<GPSModel> GPSTrajetoria { get; set; } = new List<GPSModel>();
public OperacaoParametrosModel Parametros { get; set; } = new OperacaoParametrosModel(); public OperacaoParametrosModel Parametros { get; set; } = new OperacaoParametrosModel();
//public OperacaoSensoriamentoLogModel Sensoriamento { get; set; } = new OperacaoSensoriamentoLogModel(); public OperacaoSensoriamentoLogModel Sensoriamento { get; set; } = new OperacaoSensoriamentoLogModel();
public PerformanceModel DadosPerformance { get; set; } = new PerformanceModel(); public PerformanceModel DadosPerformance { get; set; } = new PerformanceModel();
public Form frmOperacao { get; set; } public Form frmOperacao { get; set; }
@ -114,7 +114,7 @@ namespace AgroBase.Models
{ {
string msg = mod.motivos.Any() ? string.Join("; ", mod.motivos) : $"{mod.status} ({mod.saude:0}%)"; string msg = mod.motivos.Any() ? string.Join("; ", mod.motivos) : $"{mod.status} ({mod.saude:0}%)";
string msg2 = mod.condicoes_operacionais.Any() ? string.Join("; ", mod.condicoes_operacionais.Select(x => x.descricao)) : null; string msg2 = mod.condicoes_operacionais.Any() ? string.Join("; ", mod.condicoes_operacionais.Select(x => x.descricao)) : null;
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.InserirLog(mod.modulo, mod.status, mod.saude, msg, condicoes: msg2); Variaveis.OperacaoEmAndamento.Sensoriamento.InserirLog(mod.modulo, mod.status, mod.saude, msg, condicoes: msg2);
} }
if (mod.saude_individual.Any()) if (mod.saude_individual.Any())
{ {
@ -125,7 +125,7 @@ namespace AgroBase.Models
{ {
string msg = ind.motivos.Any() ? string.Join("; ", ind.motivos) : $"{ind.status} ({ind.saude:0}%)"; string msg = ind.motivos.Any() ? string.Join("; ", ind.motivos) : $"{ind.status} ({ind.saude:0}%)";
string msg2 = ind.condicoes_operacionais.Any() ? string.Join("; ", ind.condicoes_operacionais.Select(x => x.descricao)) : null; string msg2 = ind.condicoes_operacionais.Any() ? string.Join("; ", ind.condicoes_operacionais.Select(x => x.descricao)) : null;
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.InserirLog(mod.modulo, ind.status, ind.saude, msg, condicoes: msg2, id: ind.label); Variaveis.OperacaoEmAndamento.Sensoriamento.InserirLog(mod.modulo, ind.status, ind.saude, msg, condicoes: msg2, id: ind.label);
} }
} }
} }
@ -355,7 +355,6 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel() Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel()
{ {
Modo = Modo, Modo = Modo,
DadosLeitura = new OperacaoSensoriamentoLogModel(),
QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo, QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo,
QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores, QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores,
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio, CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
@ -424,12 +423,10 @@ namespace AgroBase.Models
{ {
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras, TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 25, Angulo = 25,
BicosAtuados = new List<AtuadorBicoModel>(),
Direcao = Direcao.Parado, Direcao = Direcao.Parado,
EmFreio = false, EmFreio = false,
PercentualVelocidadeSP = 20, PercentualVelocidadeSP = 20,
AlturaBarra = 50, AlturaBarra = 50,
BombaAtuada = false,
TiposControle = new List<OperacaoControleTipoModel>() TiposControle = new List<OperacaoControleTipoModel>()
{ {
new OperacaoControleTipoModel() new OperacaoControleTipoModel()
@ -466,7 +463,6 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel() Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel()
{ {
Modo = Modo, Modo = Modo,
DadosLeitura = new OperacaoSensoriamentoLogModel(),
QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo, QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo,
QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores, QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores,
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio, CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
@ -577,12 +573,10 @@ namespace AgroBase.Models
{ {
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras, TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 0, Angulo = 0,
BicosAtuados = new List<AtuadorBicoModel>(),
Direcao = Direcao.Parado, Direcao = Direcao.Parado,
EmFreio = false, EmFreio = false,
PercentualVelocidadeSP = 0, PercentualVelocidadeSP = 0,
AlturaBarra = 50, AlturaBarra = 50,
BombaAtuada = true,
TiposControle = new List<OperacaoControleTipoModel>() TiposControle = new List<OperacaoControleTipoModel>()
{ {
new OperacaoControleTipoModel() new OperacaoControleTipoModel()
@ -619,7 +613,6 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel() Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel()
{ {
Modo = Modo, Modo = Modo,
DadosLeitura = new OperacaoSensoriamentoLogModel(),
QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo, QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo,
QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores, QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores,
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio, CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
@ -712,7 +705,6 @@ namespace AgroBase.Models
{ {
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras, TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 0, Angulo = 0,
BicosAtuados = new List<AtuadorBicoModel>(),
Direcao = Direcao.Parado, Direcao = Direcao.Parado,
EmFreio = false, EmFreio = false,
PercentualVelocidadeSP = 0, PercentualVelocidadeSP = 0,
@ -752,7 +744,6 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel() Variaveis.OperacaoEmAndamento.Parametros = new OperacaoParametrosModel()
{ {
Modo = Modo, Modo = Modo,
DadosLeitura = new OperacaoSensoriamentoLogModel(),
QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo, QtdCamerasSolo = VariaveisEquipamento.QuantidadeCamerasSolo,
QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores, QtdBicos = VariaveisEquipamento.QuantidadeBicosPulverizadores,
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio, CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
@ -808,7 +799,6 @@ namespace AgroBase.Models
{ {
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras, TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
Angulo = 0, Angulo = 0,
BicosAtuados = new List<AtuadorBicoModel>(),
Direcao = Direcao.Parado, Direcao = Direcao.Parado,
EmFreio = false, EmFreio = false,
PercentualVelocidadeSP = 0, PercentualVelocidadeSP = 0,
@ -846,7 +836,8 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = Variaveis.OperacaoEmAndamento.PreencherComponentesEmUso(m.Dispositivo)); Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = Variaveis.OperacaoEmAndamento.PreencherComponentesEmUso(m.Dispositivo));
Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List<List<GPSModel>>()); Variaveis.OperacaoEmAndamento.Trajetoria = new TrajetoriaMapaOperacaoModel(new List<List<GPSModel>>());
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = new OperacaoSensoriamentoLogModel(); Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = new OperacaoParametrosDadosModel();
Variaveis.OperacaoEmAndamento.Sensoriamento = new OperacaoSensoriamentoLogModel();
if (Variaveis.OperacaoEmAndamento.DispSen != null) if (Variaveis.OperacaoEmAndamento.DispSen != null)
{ {
@ -865,19 +856,14 @@ namespace AgroBase.Models
//OperacaoCarregar.DispSen.Dados.Sinaleiros.ForEach(x => OperacaoCarregar.DispSen.AdicionarMensagemFila(OperacaoCarregar.DispSen.Dados.Modulo_ID, x.ProtocoloComando(), true, false)); //OperacaoCarregar.DispSen.Dados.Sinaleiros.ForEach(x => OperacaoCarregar.DispSen.AdicionarMensagemFila(OperacaoCarregar.DispSen.Dados.Modulo_ID, x.ProtocoloComando(), true, false));
foreach (var Sinaleiro in Variaveis.OperacaoEmAndamento.DispSen.Dados.Sinaleiros) foreach (var Sinaleiro in Variaveis.OperacaoEmAndamento.DispSen.Dados.Sinaleiros)
{ {
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, Sinaleiro.ID, Sinaleiro.Comportamento); GeneralJoystick.EnviarComandoSensoriamento(Sinaleiro.Componente, Sinaleiro.ID, Sinaleiro.Comportamento);
} }
} }
} }
if (Variaveis.OperacaoEmAndamento.DispAtu != null)
{
Variaveis.OperacaoEmAndamento.Controle.BicosAtuados = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores?.Select(x => x.Clone())?.ToList() ?? new List<AtuadorBicoModel>();
}
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false)); RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.AtualizarDados(); Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
} }
private Dictionary<string, bool> PreencherComponentesEmUso(T_Code Modulo) private Dictionary<string, bool> PreencherComponentesEmUso(T_Code Modulo)
@ -903,6 +889,7 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.DispAtu.Dados.Sensores.ForEach(s => d.Add(s.ID, s.Aferir)); Variaveis.OperacaoEmAndamento.DispAtu.Dados.Sensores.ForEach(s => d.Add(s.ID, s.Aferir));
Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.ForEach(b => d.Add(b.ID, b.Comandar)); Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.ForEach(b => d.Add(b.ID, b.Comandar));
Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores.ForEach(b => d.Add(b.ID, b.Comandar)); Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores.ForEach(b => d.Add(b.ID, b.Comandar));
Variaveis.OperacaoEmAndamento.DispAtu.Dados.Servos.ForEach(s => d.Add(s.ID, s.Controlar));
} }
break; break;
case T_Code.Sen: case T_Code.Sen:
@ -994,8 +981,8 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Parametros = Parametros; Variaveis.OperacaoEmAndamento.Parametros = Parametros;
Variaveis.OperacaoEmAndamento.Parametros.RoverId = VariaveisEquipamento.Parametros.serial_number; Variaveis.OperacaoEmAndamento.Parametros.RoverId = VariaveisEquipamento.Parametros.serial_number;
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = new OperacaoSensoriamentoLogModel(); Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = new OperacaoParametrosDadosModel();
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.AtualizarDados(); Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
Variaveis.OperacaoEmAndamento.DefinirComponentesEmUso(); Variaveis.OperacaoEmAndamento.DefinirComponentesEmUso();
Variaveis.OperacaoEmAndamento.Descricao = Parametros.Descricao; Variaveis.OperacaoEmAndamento.Descricao = Parametros.Descricao;
@ -1032,7 +1019,7 @@ namespace AgroBase.Models
SalvarOperacao(); SalvarOperacao();
Parametros.DadosLeitura.AtualizarDados(); Sensoriamento.AtualizarDados();
DispMvd?.Dados?.ReiniciarLeituras(DispMvd?.Dados); DispMvd?.Dados?.ReiniciarLeituras(DispMvd?.Dados);
DispAtu?.Dados?.ReiniciarLeituras(DispAtu?.Dados); DispAtu?.Dados?.ReiniciarLeituras(DispAtu?.Dados);
@ -1049,22 +1036,8 @@ namespace AgroBase.Models
WeedWorkerService.ReiniciarLeituraAnalise(); WeedWorkerService.ReiniciarLeituraAnalise();
VisualWorkerService.ReiniciarLeituraAnalise(); VisualWorkerService.ReiniciarLeituraAnalise();
if (Parametros.Controle.MovimentoAutomatico) Controle.Reiniciar();
{ ControleAnterior.Reiniciar();
Controle.Angulo = 0;
Controle.PercentualVelocidadeSP = 0;
}
else
{
Controle.Angulo = Parametros.Controle.DirAnguloMaximo;
Controle.PercentualVelocidadeSP = Parametros.Controle.MovVelocidadeCErvasPercent;
}
ControleAnterior.Angulo = 0;
ControleAnterior.PercentualVelocidadeSP = 0;
Controle.TiposControle.ForEach(x => x.UltimaDirecao = Direcao.Parado);
Controle.BicosAtuados = DispAtu?.Dados?.BicosPulverizadores?.Select(x => x.Clone())?.ToList() ?? new List<AtuadorBicoModel>();
Controle.BicosAtuados.ForEach(x => x.ComandoAtuar = false);
ControleAnterior.BicosAtuados = Controle.BicosAtuados.Select(x => x.Clone()).ToList();
GPSTrajetoria = new List<GPSModel>(); GPSTrajetoria = new List<GPSModel>();
@ -1083,9 +1056,6 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Finalizando = true; Variaveis.OperacaoEmAndamento.Finalizando = true;
Variaveis.OperacaoEmAndamento.Controle.BombaAtuada = false;
GeneralJoystick.EnviarComandoAtuador(S_Code.sBMB, Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.FirstOrDefault()?.ID ?? "", Status: false, Forcar: true);
Variaveis.OperacaoEmAndamento.Trajetoria?.LoopAtualizaDados(); Variaveis.OperacaoEmAndamento.Trajetoria?.LoopAtualizaDados();
await Task.Delay(2000); await Task.Delay(2000);
@ -1181,7 +1151,7 @@ namespace AgroBase.Models
ID = ""; ID = "";
Parametros.DadosLeitura.AtualizarDados(); Sensoriamento.AtualizarDados();
DispMvd?.Dados?.ReiniciarLeituras(DispMvd.Dados); DispMvd?.Dados?.ReiniciarLeituras(DispMvd.Dados);
DispAtu?.Dados?.ReiniciarLeituras(DispAtu.Dados); DispAtu?.Dados?.ReiniciarLeituras(DispAtu.Dados);
@ -1191,19 +1161,13 @@ namespace AgroBase.Models
WeedWorkerService.ReiniciarLeituraAnalise(); WeedWorkerService.ReiniciarLeituraAnalise();
VisualWorkerService.ReiniciarLeituraAnalise(); VisualWorkerService.ReiniciarLeituraAnalise();
Controle.Angulo = 0; Controle.Reiniciar();
Controle.PercentualVelocidadeSP = 0; ControleAnterior.Reiniciar();
Controle.BicosAtuados = DispAtu?.Dados?.BicosPulverizadores?.Select(x => x.Clone())?.ToList() ?? new List<AtuadorBicoModel>();
Controle.BicosAtuados.ForEach(x => x.ComandoAtuar = false);
ControleAnterior.BicosAtuados = Controle.BicosAtuados.Select(x => x.Clone()).ToList();
GPSTrajetoria = new List<GPSModel>(); GPSTrajetoria = new List<GPSModel>();
Trajetoria?.ProjetarTrajetoriaFixa(); Trajetoria?.ProjetarTrajetoriaFixa();
RedisService.Publish(CmdKey.ManagerWorkerRx, JsonConvert.SerializeObject(new { cmd = ManagerWorkerCommandType.IniciarMPC })); RedisService.Publish(CmdKey.ManagerWorkerRx, JsonConvert.SerializeObject(new { cmd = ManagerWorkerCommandType.IniciarMPC }));
Controle.BicosAtuados = DispAtu.Dados.BicosPulverizadores.Select(x => x.Clone()).ToList();
ControleAnterior.BicosAtuados = DispAtu.Dados.BicosPulverizadores.Select(x => x.Clone()).ToList();
} }
public void ReiniciarSimulacao() public void ReiniciarSimulacao()
@ -1442,37 +1406,32 @@ namespace AgroBase.Models
} }
case T_Code.Atu: case T_Code.Atu:
{ {
if (ControleAnterior.BicosAtuados.Count != Controle.BicosAtuados.Count)
{
ControleAnterior.BicosAtuados = Controle.BicosAtuados.Select(x => x.Clone()).ToList();
}
bool enviarComando = false; bool enviarComando = false;
for (int i = 0; i < _Controle.BicosAtuados.Count; i++) for (int i = 0; i < _Controle.Bicos.Count; i++)
{ {
if (ForcarEnvio || _Controle.BicosAtuados[i].ComandoAtuar != _ControleAnterior.BicosAtuados[i].ComandoAtuar) Estado comandoEstado = _Controle.Bicos[i].ComandoAtuar ? Estado.Ligado : Estado.Desligado;
if (ForcarEnvio || comandoEstado != _Controle.Bicos[i]._EstadoLeitura)
{ {
GeneralJoystick.EnviarComandoAtuador(S_Code.sBIC, _Controle.BicosAtuados[i].ID, Status: _Controle.BicosAtuados[i].ComandoAtuar); GeneralJoystick.EnviarComandoAtuador(_Controle.Bicos[i].Componente, _Controle.Bicos[i].ID, Status: _Controle.Bicos[i].ComandoAtuar);
_ControleAnterior.BicosAtuados[i].ComandoAtuar = _Controle.BicosAtuados[i].ComandoAtuar;
enviarComando = true; enviarComando = true;
} }
} }
if (enviarComando) // Ligar a bomba caso esteja desligada e tenha herbicida suficiente no reservatorio
if ((Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ContadorCarga?.PulverizadorLiberado ?? false) && enviarComando)
{ {
foreach (var Bomba in Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras) foreach (var Bomba in Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras)
{ {
bool Ligado = Bomba._Potencia > 0; if (Bomba._EstadoLeitura == Estado.Desligado)
if (!Ligado)
{ {
Variaveis.OperacaoEmAndamento.Controle.BombaAtuada = true; GeneralJoystick.EnviarComandoAtuador(Bomba.Componente, Bomba.ID, Status: true);
GeneralJoystick.EnviarComandoAtuador(S_Code.sBMB, Bomba.ID, Status: true);
} }
} }
} }
Protocolos = new List<string>() Protocolos = new List<string>()
{ {
string.Join(";", _Controle.BicosAtuados.Select(x => x.ComandoAtuar ? "1" : "0")) + ";" + (ForcarEnvio ? "1": "0") string.Join(";", _Controle.Bicos.Select(x => x.ComandoAtuar ? "1" : "0")) + ";" + (ForcarEnvio ? "1": "0")
}; };
break; break;
} }
@ -1488,12 +1447,12 @@ namespace AgroBase.Models
return; return;
} }
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.AtualizarDados(); Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
//Variaveis.LoraService?.EnviarDadosParaBase(); //Variaveis.LoraService?.EnviarDadosParaBase();
if (Variaveis.OperacaoEmAndamento.Modo == ModoOperacao.Manual) if (Variaveis.OperacaoEmAndamento.Modo == ModoOperacao.Manual)
{ {
var Sonar = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.OperadorVisual; var Sonar = Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual;
Sonar?.Resumo?.AtualizarStatusBloqueio(true); Sonar?.Resumo?.AtualizarStatusBloqueio(true);
if (Sonar?.Resumo?.EnviarComandoParada ?? false) if (Sonar?.Resumo?.EnviarComandoParada ?? false)
{ {
@ -1606,6 +1565,8 @@ namespace AgroBase.Models
if (controleBase.Dispositivo == T_Code.Atu && Variaveis.OperacaoEmAndamento.DispAtu != null) if (controleBase.Dispositivo == T_Code.Atu && Variaveis.OperacaoEmAndamento.DispAtu != null)
{ {
if (controleBase.Controle == null) return;
S_Code get_comp(string id) S_Code get_comp(string id)
{ {
if (id == "") return S_Code.sMOD; if (id == "") return S_Code.sMOD;
@ -1618,34 +1579,25 @@ namespace AgroBase.Models
} }
S_Code comp = get_comp(controleBase._comp_id); S_Code comp = get_comp(controleBase._comp_id);
switch (comp) switch (comp)
{ {
case S_Code.sMOD: case S_Code.sMOD:
if (controleBase.Controle == null) return; if (controleBase.Controle.Altura != null) Variaveis.OperacaoEmAndamento.Controle.AlturaBarra = (double)controleBase.Controle.Altura;
Variaveis.OperacaoEmAndamento.Controle.AlturaBarra = (double)controleBase.Controle.Altura;
break; break;
case S_Code.sBIC: case S_Code.sBIC:
var bico = Variaveis.OperacaoEmAndamento.Controle.BicosAtuados.FirstOrDefault(x => x.ID == controleBase._comp_id); if (controleBase._comp_value != null)
if (bico != null)
{ {
if (controleBase._comp_value != null) bico.AnguloAbertura = (int)controleBase._comp_value; var bico = Variaveis.OperacaoEmAndamento.Controle.Bicos.FirstOrDefault(x => x.ID == controleBase._comp_id);
if (bico != null)
if (controleBase.Controle == null) return; {
if (controleBase.Controle.Estado != null) bico.ComandoAtuar = (bool)controleBase.Controle.Estado; bico.AnguloAbertura = (int)controleBase._comp_value;
if (controleBase.Controle.AnguloSP != null) bico.AnguloControle = (int)controleBase.Controle.AnguloSP; }
GeneralJoystick.EnviarComandoAtuador(comp, controleBase._comp_id, Status: controleBase.Controle.Estado, Valor: controleBase.Controle.AnguloSP, Forcar: true);
} }
break; break;
case S_Code.sBMB:
if (controleBase.Controle == null) return;
Variaveis.OperacaoEmAndamento.Controle.BombaAtuada = (bool)controleBase.Controle.Estado;
GeneralJoystick.EnviarComandoAtuador(comp, controleBase._comp_id, Status: controleBase.Controle.Estado, Forcar: true);
break;
case S_Code.sSRV:
if (controleBase.Controle == null) return;
GeneralJoystick.EnviarComandoAtuador(comp, controleBase._comp_id, Valor: controleBase.Controle.AnguloSP, Forcar: true);
break;
} }
GeneralJoystick.EnviarComandoAtuador(comp, controleBase._comp_id, Status: controleBase.Controle.Estado, Valor: controleBase.Controle.AnguloSP, Forcar: true);
return; return;
} }
@ -1720,6 +1672,7 @@ namespace AgroBase.Models
else else
{ {
topico = Variaveis.MqttServiceBase.Topicos.FirstOrDefault(x => x.Topico == VariaveisEquipamento.TopicoMqttTelemetria.Replace("<id>", VariaveisEquipamento.Parametros.serial_number)); topico = Variaveis.MqttServiceBase.Topicos.FirstOrDefault(x => x.Topico == VariaveisEquipamento.TopicoMqttTelemetria.Replace("<id>", VariaveisEquipamento.Parametros.serial_number));
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Atualizar();
var data = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Clone(); var data = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Clone();
msg = JsonConvert.SerializeObject(data); msg = JsonConvert.SerializeObject(data);
} }
@ -1761,7 +1714,7 @@ namespace AgroBase.Models
{ {
DateTime Agora = DateTime.Now; DateTime Agora = DateTime.Now;
OperacaoSensoriamentoLogModel logGeral = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Clone(); OperacaoSensoriamentoLogModel logGeral = Variaveis.OperacaoEmAndamento.Sensoriamento.Clone();
logGeral.Momento = Agora; logGeral.Momento = Agora;
SalvarLog("operacao", logGeral, Fim); SalvarLog("operacao", logGeral, Fim);
Variaveis.OperacaoEmAndamento.Controle.TiposControle.ForEach(x => x.Comandos.Clear()); Variaveis.OperacaoEmAndamento.Controle.TiposControle.ForEach(x => x.Comandos.Clear());
@ -1797,9 +1750,8 @@ namespace AgroBase.Models
DirSensoriamentoLogModel logDir = new DirSensoriamentoLogModel() DirSensoriamentoLogModel logDir = new DirSensoriamentoLogModel()
{ {
Momento = Agora, Mod_ID = Modulo.Modulo_ID,
Modulo_ID = Modulo.Modulo_ID, Iniciado = Modulo.DirMotor.Inicializado,
Inicializado = Modulo.DirMotor.Inicializado,
AnguloDriver = Modulo.DirMotor.AnguloDriver, AnguloDriver = Modulo.DirMotor.AnguloDriver,
Angulo_SP = Modulo.DirMotor.Angulo_SP, Angulo_SP = Modulo.DirMotor.Angulo_SP,
Controlar = Modulo.DirMotor.Comandar, Controlar = Modulo.DirMotor.Comandar,
@ -2126,7 +2078,7 @@ namespace AgroBase.Models
} }
public bool EmFreio { get; set; } = false; public bool EmFreio { get; set; } = false;
public Direcao Direcao { get; set; } = Direcao.Parado; public Direcao Direcao { get; set; } = Direcao.Parado;
public bool BombaAtuada { get; set; } public List<AtuadorBicoModel> Bicos => Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores;
public double AlturaBarra { get; set; } public double AlturaBarra { get; set; }
private TipoMovimentoDirecional _tipoMovimento = TipoMovimentoDirecional.Diagnostico; private TipoMovimentoDirecional _tipoMovimento = TipoMovimentoDirecional.Diagnostico;
public TipoMovimentoDirecional TipoMovimento public TipoMovimentoDirecional TipoMovimento
@ -2175,26 +2127,43 @@ namespace AgroBase.Models
_tipoMovimento = value; _tipoMovimento = value;
} }
} }
public List<AtuadorBicoModel> BicosAtuados { get; set; } = new List<AtuadorBicoModel>();
public List<OperacaoControleTipoModel> TiposControle { get; set; } = new List<OperacaoControleTipoModel>(); public List<OperacaoControleTipoModel> TiposControle { get; set; } = new List<OperacaoControleTipoModel>();
public List<MPCSimulacaoModel> SimulacaoMPC { get; set; } = new List<MPCSimulacaoModel>(); public List<MPCSimulacaoModel> SimulacaoMPC { get; set; } = new List<MPCSimulacaoModel>();
public double Latencia { get; set; } public double Latencia { get; set; }
public double ErroLateral { get; set; } = 0.0; public double ErroLateral { get; set; } = 0.0;
public Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel> DebugCustoMpc { get; set; } = new Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel>(); public Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel> DebugCustoMpc { get; set; } = new Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel>();
public void Reiniciar()
{
var _Parametros = Variaveis.OperacaoEmAndamento.Parametros.Controle;
if (_Parametros.MovimentoAutomatico)
{
Angulo = 0;
PercentualVelocidadeSP = 0;
}
else
{
Angulo = _Parametros.DirAnguloMaximo;
PercentualVelocidadeSP = _Parametros.MovVelocidadeCErvasPercent;
}
EmFreio = false;
Direcao = Direcao.Parado;
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras;
TiposControle.ForEach(x => x.UltimaDirecao = Direcao.Parado);
}
public OperacaoControleModel Clone() public OperacaoControleModel Clone()
{ {
return new OperacaoControleModel() return new OperacaoControleModel()
{ {
Angulo = Angulo, Angulo = Angulo,
BicosAtuados = new List<AtuadorBicoModel>(BicosAtuados ?? new List<AtuadorBicoModel>()),
Direcao = Direcao, Direcao = Direcao,
PercentualVelocidadeSP = PercentualVelocidadeSP, PercentualVelocidadeSP = PercentualVelocidadeSP,
_tipoMovimento = _tipoMovimento, _tipoMovimento = _tipoMovimento,
TipoMovimento = TipoMovimento, TipoMovimento = TipoMovimento,
TiposControle = new List<OperacaoControleTipoModel>(TiposControle), TiposControle = new List<OperacaoControleTipoModel>(TiposControle),
SimulacaoMPC = new List<MPCSimulacaoModel>(SimulacaoMPC), SimulacaoMPC = new List<MPCSimulacaoModel>(SimulacaoMPC),
BombaAtuada = BombaAtuada,
AlturaBarra = AlturaBarra, AlturaBarra = AlturaBarra,
heartbeat = heartbeat, heartbeat = heartbeat,
ticks_sem_resposta = ticks_sem_resposta, ticks_sem_resposta = ticks_sem_resposta,
@ -2432,7 +2401,8 @@ namespace AgroBase.Models
Dir_Status = _DispMvd.Dados.StatusModulosMOV(Direcao.Direita), Dir_Status = _DispMvd.Dados.StatusModulosMOV(Direcao.Direita),
Dados = _DispMvd.Dados.Modulos.Select(x => new OperacaoSensoriamentoLogMovDadosModel() Dados = _DispMvd.Dados.Modulos.Select(x => new OperacaoSensoriamentoLogMovDadosModel()
{ {
ID = x.MovMotor.Mod_ID, Mod_ID = x.MovMotor.Mod_ID,
ID = byte.Parse(x.MovMotor.ID),
Iniciado = x.MovMotor.Inicializado, Iniciado = x.MovMotor.Inicializado,
Tensao = x.MovMotor.Tensao, Tensao = x.MovMotor.Tensao,
Corrente_Barramento = x.MovMotor.Corrente_Barramento, Corrente_Barramento = x.MovMotor.Corrente_Barramento,
@ -2442,7 +2412,7 @@ namespace AgroBase.Models
TemperaturaDriver = x.MovMotor.TemperaturaDriver, TemperaturaDriver = x.MovMotor.TemperaturaDriver,
RPM_Motor = x.MovMotor.RPM_Motor, RPM_Motor = x.MovMotor.RPM_Motor,
RPM_Roda = x.MovMotor.RPM_Roda, RPM_Roda = x.MovMotor.RPM_Roda,
VelocidadeInstantanea = x.MovMotor.VelocidadeInstantanea, VelocidadeInstantaneaMs = x.MovMotor.VelocidadeInstantanea,
UltimoComandoRespondido = x.MovMotor.Leitura?.UltimoComandoRecebido ?? DateTime.MinValue, UltimoComandoRespondido = x.MovMotor.Leitura?.UltimoComandoRecebido ?? DateTime.MinValue,
}).ToList(), }).ToList(),
} : new OperacaoSensoriamentoLogMovModel(); } : new OperacaoSensoriamentoLogMovModel();
@ -2453,8 +2423,9 @@ namespace AgroBase.Models
Status = _DispMvd.Dados.StatusModulosDIR(_Controle.TipoMovimento), Status = _DispMvd.Dados.StatusModulosDIR(_Controle.TipoMovimento),
Dados = _DispMvd.Dados.Modulos.Select(x => new DirSensoriamentoLogModel() Dados = _DispMvd.Dados.Modulos.Select(x => new DirSensoriamentoLogModel()
{ {
Modulo_ID = x.DirMotor.Mod_ID, Mod_ID = x.DirMotor.Mod_ID,
Inicializado = x.DirMotor.Inicializado, ID = byte.Parse(x.DirMotor.ID),
Iniciado = x.DirMotor.Inicializado,
AnguloDriver = x.DirMotor.AnguloDriver, AnguloDriver = x.DirMotor.AnguloDriver,
AnguloReal = x.DirMotor.AnguloReal, AnguloReal = x.DirMotor.AnguloReal,
Angulo_SP = x.DirMotor.Angulo_SP, Angulo_SP = x.DirMotor.Angulo_SP,
@ -2596,7 +2567,7 @@ namespace AgroBase.Models
UltimoComandoRespondido = _DispSen?.Dados?.DadosLeitura?.UltimoComandoRespondido ?? DateTime.MinValue UltimoComandoRespondido = _DispSen?.Dados?.DadosLeitura?.UltimoComandoRespondido ?? DateTime.MinValue
}; };
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = dadosAtualizados; Variaveis.OperacaoEmAndamento.Sensoriamento = dadosAtualizados;
} }
public OperacaoSensoriamentoLogModel Clone(bool comSonar = false) public OperacaoSensoriamentoLogModel Clone(bool comSonar = false)
@ -2792,8 +2763,10 @@ namespace AgroBase.Models
public class OperacaoSensoriamentoLogMovDadosModel public class OperacaoSensoriamentoLogMovDadosModel
{ {
public string ID { get; set; } public string Mod_ID { get; set; }
public byte ID { get; set; }
public bool Iniciado { get; set; } public bool Iniciado { get; set; }
public bool Controlar { get; set; }
public double RPM_Roda { get; set; } public double RPM_Roda { get; set; }
public double TemperaturaDriver { get; set; } public double TemperaturaDriver { get; set; }
public double Tensao { get; set; } public double Tensao { get; set; }
@ -2802,7 +2775,7 @@ namespace AgroBase.Models
public double Potencia { get; set; } public double Potencia { get; set; }
public double CicloTrabalho { get; set; } public double CicloTrabalho { get; set; }
public double RPM_Motor { get; set; } public double RPM_Motor { get; set; }
public double VelocidadeInstantanea { get; set; } public double VelocidadeInstantaneaMs { get; set; }
public DateTime UltimoComandoRespondido { get; set; } public DateTime UltimoComandoRespondido { get; set; }
} }
@ -2951,9 +2924,9 @@ namespace AgroBase.Models
public class DirSensoriamentoLogModel public class DirSensoriamentoLogModel
{ {
public DateTime Momento { get; set; } public string Mod_ID { get; set; }
public string Modulo_ID { get; set; } public byte ID { get; set; }
public bool Inicializado { get; set; } public bool Iniciado { get; set; }
public bool Controlar { get; set; } public bool Controlar { get; set; }
public double Angulo_SP { get; set; } public double Angulo_SP { get; set; }
public double AnguloDriver { get; set; } public double AnguloDriver { get; set; }

View File

@ -1,5 +1,9 @@
using System; using AgroBase.Models.Modules;
using AgroBase.Models.Operadores;
using AgroBase.Services;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using static AgroBase.Models.Enums; using static AgroBase.Models.Enums;
namespace AgroBase.Models.Operacoes namespace AgroBase.Models.Operacoes
@ -22,7 +26,7 @@ namespace AgroBase.Models.Operacoes
public MapaFeatureCollectionModel Mapa { get; set; } public MapaFeatureCollectionModel Mapa { get; set; }
public List<string> RuasPercorrer { get; set; } public List<string> RuasPercorrer { get; set; }
public OperacaoSensoriamentoLogModel DadosLeitura { get; set; } public OperacaoParametrosDadosModel DadosLeitura { get; set; }
} }
public class OperacaoParametrosControleModel public class OperacaoParametrosControleModel
@ -58,4 +62,489 @@ namespace AgroBase.Models.Operacoes
public double AtuPercentualErvasBicoOn { get; set; } public double AtuPercentualErvasBicoOn { get; set; }
public double AtuPercentualErvasBicoOff { get; set; } public double AtuPercentualErvasBicoOff { get; set; }
} }
public class OperacaoParametrosDadosModel
{
public DateTime Momento { get; set; }
public StatusModulo StatusRover { get; set; }
public bool CanSerial { get; set; }
public OperacaoParametrosDadosOperacaoModel Operacao { get; set; }
public OperacaoSensoriamentoLogTrajetoriaModel Trajetoria { get; set; }
public OperacaoControleModel Controle { get; set; }
public List<ManagerWorkerMessageResponseModulosPendentesModel> ModulosSaude { get; set; }
public List<DispositivoDetalhesModel> DispositivosMapeados { get; set; }
public OperacaoSensoriamentoLogImuModel Imu { get; set; }
public OperacaoParametrosDadosAtuadorModel Atuador { get; set; }
public OperacaoParametrosDadosSensoriamentoModel Sensoriamento { get; set; }
public OperacaoParametrosDadosMovimentacaoModel Movimentacao { get; set; }
public OperacaoParametrosDadosDirecionalModel Direcional { get; set; }
public OperacaoSensoriamentoLogBateriaModel Bateria { get; set; }
public CoolerControlDataModel Refrigeracao { get; set; }
public OperacaoParametrosDadosGNSSModel Gnss { get; set; }
public PerformanceModel PerformanceNcp { get; set; }
public LivoxModel LivoxLidar { get; set; }
public List<OperacaoSensoriamentoLogErrosModel> Logs { get; set; }
public void Atualizar()
{
var op = Variaveis.OperacaoEmAndamento;
var sen = op.Sensoriamento;
var dAtu = op.DispAtu?.Dados;
var dSen = op.DispSen?.Dados;
var dMvd = op.DispMvd?.Dados;
Momento = DateTime.Now;
StatusRover = op.Status;
CanSerial = CanManager.UseCanSerial;
Operacao = new OperacaoParametrosDadosOperacaoModel()
{
Iniciada = op.Iniciado,
Liberada = op.OperacaoLiberada,
Status = op.StatusAtual,
Modo = op.Modo,
ImpedimentoErro = op.ErroOperacaoLiberada,
TempoAguardandoSegs = op.TempoAguardandoSegs,
TempoDecorridoSegs = op.TempoDecorridoSegs,
Emergencia = op.Emergencia,
Pausa = op.Pausa,
IniciadoEm = op.DataInicio,
FinalizadoEm = op.DataFim,
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>(op.Parametros.ModulosMandatorios ?? new List<OperacaoModulosMandatoriosModel>()),
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>(op.Parametros.ParametrosMandatorios ?? new List<OperacaoParametrosMandatoriosModel>())
};
Trajetoria = sen?.Trajetoria?.Clone();
Controle = op.Controle?.Clone();
ModulosSaude = new List<ManagerWorkerMessageResponseModulosPendentesModel>(sen?.ModulosSaude ?? new List<ManagerWorkerMessageResponseModulosPendentesModel>());
DispositivosMapeados = new List<DispositivoDetalhesModel>(sen?.DispositivosMapeados ?? new List<DispositivoDetalhesModel>());
Imu = sen?.IMU?.Clone();
Atuador = new OperacaoParametrosDadosAtuadorModel()
{
Iniciado = dAtu?.Conectado ?? false,
AnguloBarraAltura = sen?.Atuador?.AnguloBarraAltura ?? 0,
AnguloBarraDireita = sen?.Atuador?.AnguloBarraDireita ?? 0,
AnguloBarraEsquerda = sen?.Atuador?.AnguloBarraEsquerda ?? 0,
CapacidadeReservatorio = sen?.Atuador?.CapacidadeReservatorio ?? 0,
ErvasNoRadar = sen?.Atuador?.ErvasNoRadar ?? false,
DistanciaEstimadaRestanteMetros = sen?.Atuador?.DistanciaEstimadaRestanteMetros ?? 0,
HerbicidaConsumidoMl = sen?.Atuador?.HerbicidaConsumido ?? 0,
HerbicidaPorAtuacaoMl = sen?.Atuador?.HerbicidaPorErva ?? 0,
LPorMetro = sen?.Atuador?.LPorMetro ?? 0,
LPorMinuto = sen?.Atuador?.LPorMinuto ?? 0,
MassaReservatorioKg = sen?.Atuador?.MassaReservatorio ?? 0,
VolumeReservatorioL = sen?.Atuador?.VolumeReservatorio ?? 0,
VolumeVazaoMl = sen?.Atuador?.VolumeVazaoMl ?? 0,
VazaoMediaMLs = sen?.Atuador?.VazaoMedia ?? 0,
VazaoInstantaneaMLs = sen?.Atuador?.VazaoInstantanea ?? 0,
TempoEstimadoRestanteMinutos = sen?.Atuador?.TempoEstimadoRestanteMinutos ?? 0,
QtdCamerasSolo = sen?.Atuador?.QtdCamerasSolo ?? 0,
PercentualErvasNoRadar = sen?.Atuador?.PercentualErvasNoRadar ?? 0,
PercentualErvasTerreno = sen?.Atuador?.PercentualErvasTerreno ?? 0,
PercentualReservatorio = sen?.Atuador?.PercentualReservatorio ?? 0,
PressaoLinhaPsi = sen?.Atuador?.PressaoLinha ?? 0,
Bicos = dAtu?.BicosPulverizadores?.Select(x => new OperacaoParametrosDadosBicoModel()
{
ID = x.ID,
ID_Num = x.ID_Num,
Servo_ID_Num = x.Servo_ID_Num,
Inicializado = x.Inicializado,
Posicao = x.Posicao,
AnguloAbertura = x.AnguloAbertura,
ComandoAngulo = (int)x.AnguloControle,
LeituraAngulo = x._AnguloBicoLeitura,
ComandoEstado = x.ComandoAtuar,
LeituraEstado = x._EstadoLeitura == Estado.Ligado,
MediaVazaoMLs = x.MediaNivelFluxo,
QtdAtuacoes = x.Atuacoes,
TempoAtuado = x.TempoAtuado,
TrechosPulverizando = new List<List<double[]>>(x.TrechosAtuado ?? new List<List<double[]>>()),
UltimoComandoRespondido = x.UltimaLeitura
}).ToList(),
Bombas = dAtu?.BombasPressurizadoras?.Select(x => new OperacaoParametrosDadosBombaModel()
{
ID = x.ID,
ID_Num = x.ID_Num,
Sensor_ID_Num = x.Sensor_ID_Num,
Inicializado = x.Inicializado,
ComandoEstado = x.ComandoAtuar,
LeituraEstado = x._EstadoLeitura == Estado.Ligado,
Potencia = x._Potencia,
TempoAtuado = dAtu?.TempoAtuado ?? 0,
UltimoComandoRespondido = x.UltimaLeitura,
}).ToList(),
Servos = dAtu?.Servos?.Select(x => new OperacaoParametrosDadosServoModel()
{
ID = x.ID,
ID_Num = x.ID_Num,
Inicializado = x.Inicializado,
Incremental = x.Incremental,
ComandoAngulo = x._AnguloControle,
LeituraAngulo = x._AnguloLeiutra,
UltimoComandoRespondido = x.UltimaLeitura,
}).ToList(),
Sensores = dAtu?.Sensores?.Select(x => new OperacaoParametrosDadosSensorModel()
{
Componente = x.Componente,
ID = x.ID,
ID_Num = x.ID_Num,
Inicializado = x.Inicializado,
Valores = x.ValoresLeituras?.Where(y => y.funcao != FuncoesPinout.Iniciado)?.Select(y => y.atual?.valor).ToList(),
UltimoComandoRespondido = x.UltimaLeitura,
}).ToList(),
UltimoComandoRespondido = dAtu.DadosLeitura.UltimoComandoRespondido,
};
Sensoriamento = new OperacaoParametrosDadosSensoriamentoModel()
{
Iniciado = dSen?.Conectado ?? false,
Sensores = dSen?.Sensores?.Select(x => new OperacaoParametrosDadosSensorModel()
{
Componente = x.Componente,
ID = x.ID,
ID_Num = x.ID_Num,
Inicializado = x.Inicializado,
Valores = x.ValoresLeituras?.Where(y => y.funcao != FuncoesPinout.Iniciado)?.Select(y => y.atual?.valor).ToList(),
UltimoComandoRespondido = x.UltimaLeitura,
}).ToList(),
Servos = dSen?.Servos?.Select(x => new OperacaoParametrosDadosServoModel()
{
ID = x.ID,
ID_Num = x.ID_Num,
Inicializado = x.Inicializado,
Incremental = x.Incremental,
ComandoAngulo = x._AnguloControle,
LeituraAngulo = x._AnguloLeiutra,
UltimoComandoRespondido = x.UltimaLeitura,
}).ToList(),
Reles = dSen?.Reles?.Select(x => new OperacaoParametrosDadosReleModel()
{
ID = x.ID,
ID_Num = x.ID_Num,
Inicializado = x.Inicializado,
ComandoEstado = x.StatusControle == Estado.Ligado,
LeituraEstado = x._EstadoLeitura == Estado.Ligado,
UltimoComandoRespondido = x.UltimaLeitura,
}).ToList(),
Sinaleiros = dSen?.Sinaleiros?.Select(x => new OperacaoParametrosDadosSinaleiroModel()
{
ID = x.ID,
ID_Num = x.ID_Num,
Inicializado = x.Inicializado,
Comportamento = x.Comportamento,
UltimoComandoRespondido = x.UltimaLeitura
}).ToList(),
UltimoComandoRespondido = dSen.DadosLeitura.UltimoComandoRespondido
};
Movimentacao = new OperacaoParametrosDadosMovimentacaoModel()
{
VelocidadeMediaMs = sen?.Movimentacao?.VelocidadeMedia ?? 0,
RPMMedio = sen?.Movimentacao?.RPMMedio ?? 0,
TemperaturaMedia = sen?.Movimentacao?.TemperaturaMedia ?? 0,
TempoMovimentoSegs = sen?.Movimentacao?.TempoMovimentoSegs ?? 0,
DistanciaPercorridaParcial = sen?.Movimentacao?.DistanciaPercorridaParcial ?? 0,
DistanciaPercorridaTotal = sen?.Movimentacao?.DistanciaPercorridaTotal ?? 0,
Modulos = dMvd?.Modulos?.Select(x => new OperacaoSensoriamentoLogMovDadosModel()
{
Mod_ID = x.MovMotor.Mod_ID,
ID = byte.Parse(x.MovMotor.ID),
Iniciado = x.MovMotor.Inicializado,
Controlar = x.MovMotor.Comandar,
CicloTrabalho = x.MovMotor.CicloTrabalho,
Corrente_Barramento = x.MovMotor.Corrente_Barramento,
Corrente_Motor = x.MovMotor.Corrente_Motor,
Potencia = x.MovMotor.Potencia,
RPM_Motor = x.MovMotor.RPM_Motor,
RPM_Roda = x.MovMotor.RPM_Roda,
TemperaturaDriver = x.MovMotor.TemperaturaDriver,
Tensao = x.MovMotor.Tensao,
VelocidadeInstantaneaMs = x.MovMotor.VelocidadeInstantanea,
UltimoComandoRespondido = x.MovMotor.Leitura?.UltimoComandoRecebido ?? DateTime.MinValue,
}).ToList(),
UltimoComandoRespondido = dMvd.Modulos.Max(x => x.MovMotor.Leitura?.UltimoComandoRecebido ?? DateTime.MinValue)
};
Direcional = new OperacaoParametrosDadosDirecionalModel()
{
AnguloMedio = sen?.Direcional?.AnguloMedio ?? 0,
Modulos = dMvd.Modulos.Select(x => new DirSensoriamentoLogModel()
{
Mod_ID = x.DirMotor.Mod_ID,
ID = byte.Parse(x.DirMotor.ID),
Iniciado = x.DirMotor.Inicializado,
Controlar = x.DirMotor.Comandar,
AnguloDriver = x.DirMotor.AnguloDriver,
AnguloFolgaCompensar = x.DirMotor.AnguloFolgaCompensar,
AnguloLeitura = x.DirMotor.AnguloLeitura,
AnguloReal = x.DirMotor.AnguloReal,
Angulo_SP = x.DirMotor.Angulo_SP,
FolgaMecanica = x.DirMotor.FolgaMecanica,
Sentido = x.DirMotor.Sentido,
SentidoReal = x.DirMotor.SentidoReal,
Sentido_SP = x.DirMotor.Sentido_SP,
Velocidade = x.DirMotor.Velocidade,
UltimoComandoRespondido = x.DirMotor.Leitura?.UltimoComandoRecebido ?? DateTime.MinValue,
}).ToList(),
UltimoComandoRespondido = dMvd.Modulos.Max(x => x.DirMotor.Leitura?.UltimoComandoRecebido ?? DateTime.MinValue)
};
Bateria = sen?.Bateria?.Clone();
Refrigeracao = sen?.CoolerControl?.Clone();
Gnss = new OperacaoParametrosDadosGNSSModel()
{
Iniciado = sen?.Gps?.Inicializado ?? false,
Altitude = sen?.Gps?.Altitude ?? 0,
Distancia = sen?.Gps?.Distancia ?? 0,
IdadeCorrecao = sen?.Gps?.IdadeCorrecao ?? 0,
Latitude = sen?.Gps?.Latitude ?? 0,
Longitude = sen?.Gps?.Longitude ?? 0,
LeverArmFrontal = sen?.Gps?.LeverArmFrontal ?? 0,
LeverArmLateral = sen?.Gps?.LeverArmLateral ?? 0,
NtripAtivado = sen?.Gps?.Ntrip_ativado ?? false,
NumeroSatelites = sen?.Gps?.NumeroSatelites ?? 0,
OrientacaoMovimento = sen?.Gps?.OrientacaoMovimento ?? 0,
OrientacaoReal = sen?.Gps?.OrientacaoReal ?? 0,
PrecisaoCm = sen?.Gps?.PrecisaoCm ?? 0,
PrecisaoHorizontal = sen?.Gps?.PrecisaoHorizontal ?? 0,
QualidadeFix = sen?.Gps?.QualidadeFix ?? TiposCorrecaoGPS.SemCorrecao,
Velocidade = sen?.Gps?.Velocidade ?? 0,
UltimoComandoRespondido = sen?.Gps?.UltimoComandoRespondido ?? DateTime.MinValue,
};
PerformanceNcp = sen?.DadosPerformance?.Clone();
LivoxLidar = sen?.LivoxLidar?.Clone();
Logs = new List<OperacaoSensoriamentoLogErrosModel>(sen?.Logs ?? new List<OperacaoSensoriamentoLogErrosModel>());
}
public OperacaoParametrosDadosModel Clone()
{
return new OperacaoParametrosDadosModel()
{
Momento = Momento,
StatusRover = StatusRover,
CanSerial = CanSerial,
Operacao = Operacao,
Trajetoria = Trajetoria?.Clone(),
Controle = Controle?.Clone(),
ModulosSaude = new List<ManagerWorkerMessageResponseModulosPendentesModel>(ModulosSaude ?? new List<ManagerWorkerMessageResponseModulosPendentesModel>()),
DispositivosMapeados = new List<DispositivoDetalhesModel>(DispositivosMapeados ?? new List<DispositivoDetalhesModel>()),
Imu = Imu?.Clone(),
Atuador = Atuador,
Sensoriamento = Sensoriamento,
Movimentacao = Movimentacao,
Direcional = Direcional,
Bateria = Bateria?.Clone(),
Refrigeracao = Refrigeracao?.Clone(),
Gnss = Gnss,
PerformanceNcp = PerformanceNcp?.Clone(),
LivoxLidar = LivoxLidar?.Clone(),
Logs = new List<OperacaoSensoriamentoLogErrosModel>(Logs ?? new List<OperacaoSensoriamentoLogErrosModel>())
};
}
}
public class OperacaoParametrosDadosOperacaoModel
{
public ModoOperacao Modo { get; set; }
public StatusOperacao Status { get; set; }
public string ImpedimentoErro { get; set; }
public bool Liberada { get; set; }
public bool Iniciada { get; set; }
public bool Emergencia { get; set; }
public bool Pausa { get; set; }
public DateTime IniciadoEm { get; set; }
public DateTime FinalizadoEm { get; set; }
public double TempoAguardandoSegs { get; set; }
public double TempoDecorridoSegs { get; set; }
public List<OperacaoModulosMandatoriosModel> ModulosMandatorios { get; set; }
public List<OperacaoParametrosMandatoriosModel> ParametrosMandatorios { get; set; }
}
public class OperacaoParametrosDadosAtuadorModel
{
public bool Iniciado { get; set; }
public double CapacidadeReservatorio { get; set; }
public int QtdCamerasSolo { get; set; }
public bool ErvasNoRadar { get; set; }
public double PercentualErvasNoRadar { get; set; }
public double PercentualErvasTerreno { get; set; }
public double HerbicidaConsumidoMl { get; set; }
public double HerbicidaPorAtuacaoMl { get; set; }
public double MassaReservatorioKg { get; set; }
public double VolumeReservatorioL { get; set; }
public double PercentualReservatorio { get; set; }
public double PressaoLinhaPsi { get; set; }
public double VazaoInstantaneaMLs { get; set; }
public double VazaoMediaMLs { get; set; }
public double VolumeVazaoMl { get; set; }
public double LPorMetro { get; set; }
public double LPorMinuto { get; set; }
public double TempoEstimadoRestanteMinutos { get; set; }
public double DistanciaEstimadaRestanteMetros { get; set; }
public double AnguloBarraEsquerda { get; set; }
public double AnguloBarraDireita { get; set; }
public double AnguloBarraAltura { get; set; }
public List<OperacaoParametrosDadosBicoModel> Bicos { get; set; }
public List<OperacaoParametrosDadosBombaModel> Bombas { get; set; }
public List<OperacaoParametrosDadosServoModel> Servos{ get; set; }
public List<OperacaoParametrosDadosSensorModel> Sensores { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosBombaModel
{
public string ID { get; set; }
public int ID_Num { get; set; }
public int Sensor_ID_Num { get; set; }
public bool Inicializado { get; set; }
public bool ComandoEstado { get; set; }
public bool LeituraEstado { get; set; }
public double TempoAtuado { get; set; }
public double Potencia { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosBicoModel
{
public string ID { get; set; }
public int ID_Num { get; set; }
public int Servo_ID_Num { get; set; }
public bool Inicializado { get; set; }
public int Posicao { get; set; }
public bool ComandoEstado { get; set; }
public bool LeituraEstado { get; set; }
public int ComandoAngulo { get; set; }
public int LeituraAngulo { get; set; }
public int QtdAtuacoes { get; set; }
public double TempoAtuado { get; set; }
public double MediaVazaoMLs { get; set; }
public double AnguloAbertura { get; set; }
public List<List<double[]>> TrechosPulverizando { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosServoModel
{
public string ID { get; set; }
public int ID_Num { get; set; }
public bool Inicializado { get; set; }
public bool Incremental { get; set; }
public int ComandoAngulo { get; set; }
public int LeituraAngulo { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosReleModel
{
public string ID { get; set; }
public int ID_Num { get; set; }
public bool Inicializado { get; set; }
public bool ComandoEstado { get; set; }
public bool LeituraEstado { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosSensorModel
{
public S_Code Componente { get; set; }
public string ID { get; set; }
public int ID_Num { get; set; }
public bool Inicializado { get; set; }
public List<dynamic> Valores { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosSinaleiroModel
{
public string ID { get; set; }
public int ID_Num { get; set; }
public bool Inicializado { get; set; }
public SensorSinaleiroComportamentoModel Comportamento { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosMovimentacaoModel
{
public double VelocidadeMediaMs { get; set; }
public double RPMMedio { get; set; }
public double TempoMovimentoSegs { get; set; }
public double DistanciaPercorridaTotal { get; set; }
public double DistanciaPercorridaParcial { get; set; }
public double TemperaturaMedia { get; set; }
public List<OperacaoSensoriamentoLogMovDadosModel> Modulos { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosDirecionalModel
{
public double AnguloMedio { get; set; }
public List<DirSensoriamentoLogModel> Modulos { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosSensoriamentoModel
{
public bool Iniciado { get; set; }
public List<OperacaoParametrosDadosSinaleiroModel> Sinaleiros { get; set; }
public List<OperacaoParametrosDadosSensorModel> Sensores { get; set; }
public List<OperacaoParametrosDadosServoModel> Servos { get; set; }
public List<OperacaoParametrosDadosReleModel> Reles { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
}
public class OperacaoParametrosDadosGNSSModel
{
public bool Iniciado { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public double Altitude { get; set; }
public double Velocidade { get; set; }
public double Distancia { get; set; }
public double OrientacaoMovimento { get; set; }
public double OrientacaoReal { get; set; }
public int NumeroSatelites { get; set; }
public double PrecisaoHorizontal { get; set; }
public double PrecisaoCm { get; set; }
public TiposCorrecaoGPS QualidadeFix { get; set; }
public bool NtripAtivado { get; set; }
public double IdadeCorrecao { get; set; }
public double LeverArmLateral { get; set; }
public double LeverArmFrontal { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
public GPSModel ToGpsModel()
{
return new GPSModel()
{
Inicializado = Iniciado,
Latitude = Latitude,
Longitude = Longitude,
Altitude = Altitude,
Velocidade = Velocidade,
Distancia = Distancia,
OrientacaoMovimento = OrientacaoMovimento,
OrientacaoReal = OrientacaoReal,
NumeroSatelites = NumeroSatelites,
PrecisaoHorizontal = PrecisaoHorizontal,
QualidadeFix = QualidadeFix,
Ntrip_ativado = NtripAtivado,
IdadeCorrecao = IdadeCorrecao,
LeverArmFrontal = LeverArmFrontal,
LeverArmLateral = LeverArmLateral,
UltimoComandoRespondido = UltimoComandoRespondido
};
}
}
} }

View File

@ -61,7 +61,7 @@ namespace AgroBase.Models.Operadores
public void AtualizarStatusBloqueio(bool consideraEmMovimento) public void AtualizarStatusBloqueio(bool consideraEmMovimento)
{ {
var Sonar = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.OperadorVisual; var Sonar = Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual;
ObstaculoDetectado = (Sonar.Analises?.matriz_confianca?.block?.decision?.parar ?? false); ObstaculoDetectado = (Sonar.Analises?.matriz_confianca?.block?.decision?.parar ?? false);
if (!Variaveis.OperacaoEmAndamento.Parametros.Controle.SonarAtivado) if (!Variaveis.OperacaoEmAndamento.Parametros.Controle.SonarAtivado)

View File

@ -601,7 +601,7 @@ namespace AgroBase.Models
{ {
get get
{ {
return DistanciaMedia / FuncoesMatematicas.ConverteKmhParaMs(Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Movimentacao.VelocidadeMedia); return DistanciaMedia / FuncoesMatematicas.ConverteKmhParaMs(Variaveis.OperacaoEmAndamento.Sensoriamento.Movimentacao.VelocidadeMedia);
} }
} }
public double DeslocamentoNecessarioDesvio public double DeslocamentoNecessarioDesvio
@ -769,18 +769,18 @@ namespace AgroBase.Models
{ {
get get
{ {
double anguloAbsolutoObstaculo = (Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.AnguloCarroDefinido + AnguloInicial + AnguloFinal) / 2.0; double anguloAbsolutoObstaculo = (Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.AnguloCarroDefinido + AnguloInicial + AnguloFinal) / 2.0;
double anguloRad = anguloAbsolutoObstaculo * (Math.PI / 180.0); double anguloRad = anguloAbsolutoObstaculo * (Math.PI / 180.0);
// Supondo que a distância seja em metros e utilizando uma aproximação simples da Terra como esfera // Supondo que a distância seja em metros e utilizando uma aproximação simples da Terra como esfera
// para converter distância e ângulo em mudança de latitude/longitude. // para converter distância e ângulo em mudança de latitude/longitude.
double deltaLatitude = (DistanciaMedia * Math.Cos(anguloRad)) / 111111; // Dividindo por 111111 para converter metros em graus double deltaLatitude = (DistanciaMedia * Math.Cos(anguloRad)) / 111111; // Dividindo por 111111 para converter metros em graus
double deltaLongitude = (DistanciaMedia * Math.Sin(anguloRad)) / (111111 * Math.Cos(Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.Latitude * (Math.PI / 180.0))); double deltaLongitude = (DistanciaMedia * Math.Sin(anguloRad)) / (111111 * Math.Cos(Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.Latitude * (Math.PI / 180.0)));
return new GPSModel return new GPSModel
{ {
Latitude = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.Latitude + deltaLatitude, Latitude = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.Latitude + deltaLatitude,
Longitude = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.Longitude + deltaLongitude Longitude = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.Longitude + deltaLongitude
}; };
} }
} }

View File

@ -40,7 +40,7 @@ namespace AgroBase.Models
public double TempoEntreLeituras { get; private set; } public double TempoEntreLeituras { get; private set; }
private void AtualizarTempoEntreLeituras() private void AtualizarTempoEntreLeituras()
{ {
DateTime leitura_gps = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps?.Momento ?? DateTime.MinValue; DateTime leitura_gps = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps?.Momento ?? DateTime.MinValue;
double t_min = (1.0 / GPSService.TaxaAmostragemHz); double t_min = (1.0 / GPSService.TaxaAmostragemHz);
double dt = (leitura_gps - UltimaAtualizacaoDados).TotalSeconds; double dt = (leitura_gps - UltimaAtualizacaoDados).TotalSeconds;
TempoEntreLeituras = Math.Min(t_min, dt); TempoEntreLeituras = Math.Min(t_min, dt);
@ -87,8 +87,8 @@ namespace AgroBase.Models
{ {
get get
{ {
double distPP = GPSUtils.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, PrimeiroPontoRuaMapa); double distPP = GPSUtils.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.Sensoriamento.Gps, PrimeiroPontoRuaMapa);
double distUP = GPSUtils.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, UltimoPontoRuaMapa); double distUP = GPSUtils.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.Sensoriamento.Gps, UltimoPontoRuaMapa);
// 0 para mais próximo do primeiro ponto da rua (ENTRANDO) // 0 para mais próximo do primeiro ponto da rua (ENTRANDO)
// 1 para mais próximo do último ponto da rua (SAINDO) // 1 para mais próximo do último ponto da rua (SAINDO)
@ -128,7 +128,7 @@ namespace AgroBase.Models
{ {
new PontoTrajetoriaModel(TipoPontoRua.PosicaoRobo) new PontoTrajetoriaModel(TipoPontoRua.PosicaoRobo)
{ {
Posicao = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, Posicao = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps,
LarguraCorredor = 1.0, LarguraCorredor = 1.0,
idxCorredor = CorredorAtual?.Idx ?? 0, idxCorredor = CorredorAtual?.Idx ?? 0,
Visitado = true Visitado = true
@ -225,7 +225,7 @@ namespace AgroBase.Models
private void AtualizarAnguloCaminho() private void AtualizarAnguloCaminho()
{ {
PontoTrajetoriaModel pontoComparar = PontoAtual.Aproximando ? PontoAtual : ProximoPonto != null ? ProximoPonto : PontoAtual; PontoTrajetoriaModel pontoComparar = PontoAtual.Aproximando ? PontoAtual : ProximoPonto != null ? ProximoPonto : PontoAtual;
AnguloCaminho = GPSUtils.CalcularOrientacao(Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, pontoComparar.Posicao); AnguloCaminho = GPSUtils.CalcularOrientacao(Variaveis.OperacaoEmAndamento.Sensoriamento.Gps, pontoComparar.Posicao);
} }
[JsonProperty] [JsonProperty]
public double DistanciaEsquerda { get; private set; } public double DistanciaEsquerda { get; private set; }
@ -233,8 +233,8 @@ namespace AgroBase.Models
public double DistanciaDireita { get; private set; } public double DistanciaDireita { get; private set; }
private void AtualizarDistanciasLaterais() private void AtualizarDistanciasLaterais()
{ {
DistanciaEsquerda = CalcularDistanciaLateral(true, Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, CorredorAtual?.idxRuaEsquerda ?? 0, PontoAtual?.Direcao ?? DirecaoCarroRua.Ida); DistanciaEsquerda = CalcularDistanciaLateral(true, Variaveis.OperacaoEmAndamento.Sensoriamento.Gps, CorredorAtual?.idxRuaEsquerda ?? 0, PontoAtual?.Direcao ?? DirecaoCarroRua.Ida);
DistanciaDireita = CalcularDistanciaLateral(false, Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, CorredorAtual?.idxRuaDireita ?? 0, PontoAtual?.Direcao ?? DirecaoCarroRua.Ida); DistanciaDireita = CalcularDistanciaLateral(false, Variaveis.OperacaoEmAndamento.Sensoriamento.Gps, CorredorAtual?.idxRuaDireita ?? 0, PontoAtual?.Direcao ?? DirecaoCarroRua.Ida);
} }
public double CalcularDistanciaLateral(bool ladoEsquerdo, GPSModel posicaoAtual, int idxRua, DirecaoCarroRua direcaoAtual) public double CalcularDistanciaLateral(bool ladoEsquerdo, GPSModel posicaoAtual, int idxRua, DirecaoCarroRua direcaoAtual)
@ -554,12 +554,12 @@ namespace AgroBase.Models
if (CorredorAtual.Idx > 0) return; if (CorredorAtual.Idx > 0) return;
if (!CorredorAtual.Dentro) return; if (!CorredorAtual.Dentro) return;
GPSModel posicaoAtual = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps.Clone(); GPSModel posicaoAtual = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.Clone();
if (PrimeiroPontoDentroMapa == null) PrimeiroPontoDentroMapa = posicaoAtual; if (PrimeiroPontoDentroMapa == null) PrimeiroPontoDentroMapa = posicaoAtual;
var OpVisual = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura?.OperadorVisual ?? new VisualWorkerModel(); var OpVisual = Variaveis.OperacaoEmAndamento.Sensoriamento?.OperadorVisual ?? new VisualWorkerModel();
StatusModulo OpVisualStatus = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.ModulosSaude.FirstOrDefault(x => x.modulo == T_Code.Snr)?.status ?? StatusModulo.Desconectado; StatusModulo OpVisualStatus = Variaveis.OperacaoEmAndamento.Sensoriamento.ModulosSaude.FirstOrDefault(x => x.modulo == T_Code.Snr)?.status ?? StatusModulo.Desconectado;
if (OpVisualStatus != StatusModulo.Operante) return; if (OpVisualStatus != StatusModulo.Operante) return;
@ -591,7 +591,7 @@ namespace AgroBase.Models
private void AtualizarErroCombinado() private void AtualizarErroCombinado()
{ {
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
//double anguloCamera = _Sensoriamento.OperadorVisual.Leitura.obj?.segmentacao?.angulo_rua ?? 0; //double anguloCamera = _Sensoriamento.OperadorVisual.Leitura.obj?.segmentacao?.angulo_rua ?? 0;
double anguloCorredor = AnguloMedioCorredor; double anguloCorredor = AnguloMedioCorredor;
@ -775,9 +775,9 @@ namespace AgroBase.Models
double limiarDistanciaMargem = DistanciaErroMapaPlantacao > -1 ? DistanciaErroMapaPlantacao : 5.0; double limiarDistanciaMargem = DistanciaErroMapaPlantacao > -1 ? DistanciaErroMapaPlantacao : 5.0;
double distanciaCorredor = CorredorAtual.DistanciaTotal; double distanciaCorredor = CorredorAtual.DistanciaTotal;
double distanciaRestanteCorredor = CorredorAtual.DistanciaRestante; double distanciaRestanteCorredor = CorredorAtual.DistanciaRestante;
double distanciaUltimoPontoCorredor = GPSUtils.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, CorredorAtual.Pontos.LastOrDefault().Posicao); double distanciaUltimoPontoCorredor = GPSUtils.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.Sensoriamento.Gps, CorredorAtual.Pontos.LastOrDefault().Posicao);
var OpVisual = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura?.OperadorVisual ?? new VisualWorkerModel(); var OpVisual = Variaveis.OperacaoEmAndamento.Sensoriamento?.OperadorVisual ?? new VisualWorkerModel();
StatusModulo OpVisualStatus = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.ModulosSaude.FirstOrDefault(x => x.modulo == T_Code.Snr)?.status ?? StatusModulo.Desconectado; StatusModulo OpVisualStatus = Variaveis.OperacaoEmAndamento.Sensoriamento.ModulosSaude.FirstOrDefault(x => x.modulo == T_Code.Snr)?.status ?? StatusModulo.Desconectado;
var DadosSegmentacao = OpVisual.Analises?.segmentacao ?? new VisualWorkerMessageSegmentacaoSemanticaModel(); var DadosSegmentacao = OpVisual.Analises?.segmentacao ?? new VisualWorkerMessageSegmentacaoSemanticaModel();
if (OpVisualStatus == StatusModulo.Operante || Variaveis.OperacaoEmAndamento.Simulando) //OpVisual.Iniciado && if (OpVisualStatus == StatusModulo.Operante || Variaveis.OperacaoEmAndamento.Simulando) //OpVisual.Iniciado &&
@ -855,7 +855,12 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Controle.TipoMovimento = TipoMovimentoDirecional.MovimentoArco; Variaveis.OperacaoEmAndamento.Controle.TipoMovimento = TipoMovimentoDirecional.MovimentoArco;
Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Dir).DelayEnvioComandoExtra = 1500; Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Dir).DelayEnvioComandoExtra = 1500;
Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov).DelayEnvioComandoExtra = 2000; Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov).DelayEnvioComandoExtra = 2000;
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(true, new List<T_Code>() { T_Code.Mov, T_Code.Dir });
var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
if (pControle.MovimentoAutomatico)
{
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false, new List<T_Code>() { T_Code.Mov, T_Code.Dir });
}
} }
} }
} }
@ -949,7 +954,12 @@ namespace AgroBase.Models
_Controle.Latencia = novoComando.latencia; _Controle.Latencia = novoComando.latencia;
_Controle.ErroLateral = novoComando.erro_lateral; _Controle.ErroLateral = novoComando.erro_lateral;
_Controle.DebugCustoMpc = novoComando.debug_custo; _Controle.DebugCustoMpc = novoComando.debug_custo;
Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao();
var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
if (pControle.MovimentoAutomatico)
{
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false, new List<T_Code>() { T_Code.Mov, T_Code.Dir });
}
} }
if (novoComando != null && novoComando.heartbeat == _Controle.heartbeat) if (novoComando != null && novoComando.heartbeat == _Controle.heartbeat)
@ -1226,7 +1236,7 @@ namespace AgroBase.Models
idxCorredor = 0, idxCorredor = 0,
idxPonto = 0, idxPonto = 0,
idxPontoCorredor = 0, idxPontoCorredor = 0,
Posicao = posicaoRobo ?? Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, Posicao = posicaoRobo ?? Variaveis.OperacaoEmAndamento.Sensoriamento.Gps,
Orientacao = 0, Orientacao = 0,
Direcao = direcaoAtual, Direcao = direcaoAtual,
Visitado = true, Visitado = true,
@ -1527,7 +1537,7 @@ namespace AgroBase.Models
public void AjustarTrajetoriaParaDesvio(Obstaculo obstaculo) public void AjustarTrajetoriaParaDesvio(Obstaculo obstaculo)
{ {
GPSModel posicaoAtual = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps; GPSModel posicaoAtual = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps;
double distanciaObstaculo = ((double)obstaculo.DistanciaMedia_mm / 1000); double distanciaObstaculo = ((double)obstaculo.DistanciaMedia_mm / 1000);
double larguraObstaculo = ((double)obstaculo.Largura_mm / 1000); double larguraObstaculo = ((double)obstaculo.Largura_mm / 1000);
@ -1643,7 +1653,7 @@ namespace AgroBase.Models
} }
if (!valido || pontosRetorno == null || pontosRetorno.Count < 1) if (!valido || pontosRetorno == null || pontosRetorno.Count < 1)
Variaveis.OperacaoEmAndamento.Parametros?.DadosLeitura?.InserirLog(T_Code.Trj, StatusModulo.Falha, 0, "Trajetória de retorno inválida."); Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Trj, StatusModulo.Falha, 0, "Trajetória de retorno inválida.");
else else
AplicarTrajetoriaFixaRetorno(pontosRetorno, "RetornoBase"); AplicarTrajetoriaFixaRetorno(pontosRetorno, "RetornoBase");
} }
@ -1658,7 +1668,7 @@ namespace AgroBase.Models
idxCorredor = 0, idxCorredor = 0,
idxPonto = 0, idxPonto = 0,
idxPontoCorredor = 0, idxPontoCorredor = 0,
Posicao = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, Posicao = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps,
Visitado = true, Visitado = true,
LarguraCorredor = 1.0 LarguraCorredor = 1.0
}); });
@ -1691,7 +1701,7 @@ namespace AgroBase.Models
_TrajetoriaFixa = traj; _TrajetoriaFixa = traj;
Variaveis.OperacaoEmAndamento.Parametros?.DadosLeitura?.InserirLog(T_Code.Trj, StatusModulo.Operante, 100, $"[RETORNO] Trajetória aplicada ({motivo}) - Pontos: {traj.Count}"); Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Trj, StatusModulo.Operante, 100, $"[RETORNO] Trajetória aplicada ({motivo}) - Pontos: {traj.Count}");
AutonomiaCorredor.Parar(); AutonomiaCorredor.Parar();
@ -1706,7 +1716,7 @@ namespace AgroBase.Models
{ {
var pontos = new List<GPSModel>(); var pontos = new List<GPSModel>();
GPSModel posicaoAtual = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps; GPSModel posicaoAtual = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps;
// ========================= // =========================
// REGRA 0 – Está dentro de corredor? // REGRA 0 – Está dentro de corredor?
@ -2379,7 +2389,7 @@ namespace AgroBase.Models
private void AtualizarOrientacaoAtual() private void AtualizarOrientacaoAtual()
{ {
OrientacaoAtual = GPSUtils.CalcularOrientacao(Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, Posicao); OrientacaoAtual = GPSUtils.CalcularOrientacao(Variaveis.OperacaoEmAndamento.Sensoriamento.Gps, Posicao);
} }
private void AtualizarOrientacaoAnterior() private void AtualizarOrientacaoAnterior()
@ -2434,7 +2444,7 @@ namespace AgroBase.Models
private void AtualizarDistanciaAtual() private void AtualizarDistanciaAtual()
{ {
DistanciaAtual = GPSUtils.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Gps, Posicao); DistanciaAtual = GPSUtils.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.Sensoriamento.Gps, Posicao);
} }
private void AtualizarDistanciaAnterior() private void AtualizarDistanciaAnterior()
@ -2615,7 +2625,7 @@ namespace AgroBase.Models
if (addLog) if (addLog)
{ {
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.InserirLog(T_Code.Trj, _liberado ? StatusModulo.Operante : StatusModulo.Alerta, _liberado ? 100 : 0, res.Motivo); Variaveis.OperacaoEmAndamento.Sensoriamento.InserirLog(T_Code.Trj, _liberado ? StatusModulo.Operante : StatusModulo.Alerta, _liberado ? 100 : 0, res.Motivo);
} }
Liberado = CorredoresLiberados[idxCorredor].Liberado; Liberado = CorredoresLiberados[idxCorredor].Liberado;

View File

@ -226,6 +226,7 @@ namespace AgroBase.Models
public static double CorrenteMaximaBateria { get; set; } = 20.0; public static double CorrenteMaximaBateria { get; set; } = 20.0;
public static double PercentualTensaoBateriaMin { get; set; } = 25.0; public static double PercentualTensaoBateriaMin { get; set; } = 25.0;
public static double PercentualReservatorioMin { get; set; } = 8.0; public static double PercentualReservatorioMin { get; set; } = 8.0;
public static double PercentualReservatorioMinCritio { get; set; } = 5.0;
public static double PercentualToleranciaPressaoLinha { get; set; } = 0.15; public static double PercentualToleranciaPressaoLinha { get; set; } = 0.15;
public static int QuantidadeCamerasSolo { get; set; } = 1; public static int QuantidadeCamerasSolo { get; set; } = 1;
public static int QuantidadeBicosPulverizadores { get; set; } = 3; public static int QuantidadeBicosPulverizadores { get; set; } = 3;
@ -609,7 +610,7 @@ namespace AgroBase.Models
{ {
if (!Variaveis.IsAgroMonitor && Variaveis.OperacaoEmAndamento.DispAtu != null) if (!Variaveis.IsAgroMonitor && Variaveis.OperacaoEmAndamento.DispAtu != null)
{ {
return (Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Atuador?.PercentualErvasTerreno ?? 0) / 100.0; return (Variaveis.OperacaoEmAndamento.Sensoriamento.Atuador?.PercentualErvasTerreno ?? 0) / 100.0;
} }
return 0.3; return 0.3;
} }
@ -620,7 +621,7 @@ namespace AgroBase.Models
{ {
if (!Variaveis.IsAgroMonitor && Variaveis.OperacaoEmAndamento.DispAtu != null) if (!Variaveis.IsAgroMonitor && Variaveis.OperacaoEmAndamento.DispAtu != null)
{ {
return (100.0 - (Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Atuador?.PercentualErvasTerreno ?? 0)) / 100.0; return (100.0 - (Variaveis.OperacaoEmAndamento.Sensoriamento.Atuador?.PercentualErvasTerreno ?? 0)) / 100.0;
} }
return 0.7; return 0.7;
} }

View File

@ -101,7 +101,7 @@ namespace AgroBase.Services
AlertaTemperaturaCritica = temp >= TempCritical; AlertaTemperaturaCritica = temp >= TempCritical;
if (!_alertaAnterior && AlertaTemperaturaCritica) if (!_alertaAnterior && AlertaTemperaturaCritica)
{ {
Variaveis.OperacaoEmAndamento.Parametros?.DadosLeitura?.InserirLog(T_Code.Npc, StatusModulo.Alerta, 50, "Temperatura limite excedida no NPC"); Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Alerta, 50, "Temperatura limite excedida no NPC");
} }
if (ModoAtual == CoolerMode.Manual) if (ModoAtual == CoolerMode.Manual)

View File

@ -991,6 +991,14 @@ namespace AgroBase.Services
} }
} }
foreach (var bico in Variaveis.OperacaoEmAndamento.Controle?.Bicos?.Where(x => x.Inicializado && x.Comandar))
{
if (bico._EstadoLeitura == Estado.Ligado)
{
bico.TrechosAtuado[bico.TrechosAtuado.Count - 1].Add(new double[] { UltimaLeitura.Latitude, UltimaLeitura.Longitude });
}
}
Variaveis.OperacaoEmAndamento.Trajetoria?.LoopAtualizaDados(); Variaveis.OperacaoEmAndamento.Trajetoria?.LoopAtualizaDados();
AtualizarTrajetoriaDinamica(); AtualizarTrajetoriaDinamica();
@ -1139,7 +1147,7 @@ namespace AgroBase.Services
{ {
double anguloFinal = 0.0; double anguloFinal = 0.0;
bool imuIniciado = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura?.IMU?.Iniciado ?? false; bool imuIniciado = Variaveis.OperacaoEmAndamento.Sensoriamento?.IMU?.Iniciado ?? false;
bool gpsIniciado = Iniciado; bool gpsIniciado = Iniciado;
if (imuIniciado) if (imuIniciado)
@ -1159,7 +1167,7 @@ namespace AgroBase.Services
double heading = UltimaLeitura.OrientacaoReal; double heading = UltimaLeitura.OrientacaoReal;
double angMov = UltimaLeitura.OrientacaoMovimento; double angMov = UltimaLeitura.OrientacaoMovimento;
double distJan = UltimaLeitura.Distancia; double distJan = UltimaLeitura.Distancia;
double velPercent = Variaveis.OperacaoEmAndamento.Simulando ? Variaveis.OperacaoEmAndamento.Controle.RPM_SP : Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura?.Movimentacao?.RPMMedio ?? 0; double velPercent = Variaveis.OperacaoEmAndamento.Simulando ? Variaveis.OperacaoEmAndamento.Controle.RPM_SP : Variaveis.OperacaoEmAndamento.Sensoriamento?.Movimentacao?.RPMMedio ?? 0;
bool rtkFix = UltimaLeitura.QualidadeFix == TiposCorrecaoGPS.RTKFixo; bool rtkFix = UltimaLeitura.QualidadeFix == TiposCorrecaoGPS.RTKFixo;
double angAnterior = UltimaLeitura.AnguloCarroDefinido; double angAnterior = UltimaLeitura.AnguloCarroDefinido;
@ -1170,7 +1178,7 @@ namespace AgroBase.Services
else if (imuIniciado) else if (imuIniciado)
{ {
// Apenas o WT901C está disponível // Apenas o WT901C está disponível
anguloFinal = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.IMU.RotacaoCorrigida; anguloFinal = Variaveis.OperacaoEmAndamento.Sensoriamento.IMU.RotacaoCorrigida;
} }
else else
{ {

View File

@ -146,6 +146,9 @@ namespace AgroBase.Services
private bool _inicializado; private bool _inicializado;
private SensorModel SensorMassaReservatorio = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.Sensores?.FirstOrDefault(x => x.Componente == S_Code.sMAS && x.ID == "MASRS");
public bool PulverizadorLiberado { get; set; }
/// <summary> /// <summary>
/// Atualiza o estado do sistema de herbicida. /// Atualiza o estado do sistema de herbicida.
/// ///
@ -157,22 +160,20 @@ namespace AgroBase.Services
/// </summary> /// </summary>
public void AtualizarConsumo(double distanciaTotalMetrosAtual, double tempoTotalSegundosAtual) public void AtualizarConsumo(double distanciaTotalMetrosAtual, double tempoTotalSegundosAtual)
{ {
var Sensor = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.Sensores?.FirstOrDefault(x => x.Componente == S_Code.sMAS && x.ID == "MASRS"); Iniciado = SensorMassaReservatorio?.Inicializado ?? false;
Iniciado = Sensor?.Inicializado ?? false;
if (!Iniciado) if (!Iniciado)
return; return;
bool pulverizando = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores?.Any(x => x.Inicializado && x._EstadoLeitura == Estado.Ligado) ?? false; bool pulverizando = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores?.Any(x => x.Inicializado && x._EstadoLeitura == Estado.Ligado) ?? false;
double massaLida_Kg = Sensor?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Massa)?.atual?.valor ?? 0; double massaLida_Kg = SensorMassaReservatorio?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Massa)?.atual?.valor ?? 0;
double massaLida_Kg_bruto = Sensor?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraBruta)?.atual?.valor ?? 0; double massaLida_Kg_bruto = SensorMassaReservatorio?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraBruta)?.atual?.valor ?? 0;
double.TryParse(Sensor.Parametros.FirstOrDefault(x => x.Descricao == "Offset")?.Valor ?? "0", out double offset); double.TryParse(SensorMassaReservatorio.Parametros.FirstOrDefault(x => x.Descricao == "Offset")?.Valor ?? "0", out double offset);
double massa_calc = (massaLida_Kg_bruto * -1) + offset; double massa_calc = (massaLida_Kg_bruto * -1) + offset;
double volumeMedido_L = massa_calc / DensidadeProduto; double volumeMedido_L = massa_calc / DensidadeProduto;
int qtd_atuacoes = Variaveis.OperacaoEmAndamento.Controle?.BicosAtuados?.Sum(x => x.Atuacoes) ?? 0; int qtd_atuacoes = Variaveis.OperacaoEmAndamento.Controle?.Bicos?.Sum(x => x.Atuacoes) ?? 0;
// Sanitiza volume // Sanitiza volume
if (volumeMedido_L < 0) volumeMedido_L = 0; if (volumeMedido_L < 0) volumeMedido_L = 0;
@ -196,6 +197,8 @@ namespace AgroBase.Services
MassaAtual_Kg_Calc = massa_calc; MassaAtual_Kg_Calc = massa_calc;
VolumeAtual_L = volumeMedido_L; VolumeAtual_L = volumeMedido_L;
PulverizadorLiberado = PercentualAtual >= VariaveisEquipamento.PercentualReservatorioMinCritio;
// --- Cálculo de deltas básicos --- // --- Cálculo de deltas básicos ---
double deltaVolume_L = 0.0; double deltaVolume_L = 0.0;

View File

@ -137,7 +137,7 @@ namespace AgroBase.Services
if (ageRxMs > beaconPeriodoMs + 2000) return; if (ageRxMs > beaconPeriodoMs + 2000) return;
// --- ENVIO (ideal: agregue em 1-2 frames) --- // --- ENVIO (ideal: agregue em 1-2 frames) ---
var s = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var s = Variaveis.OperacaoEmAndamento.Sensoriamento;
foreach (var dado in LoRaSerializer.SerializeGPS(s.Gps)) foreach (var dado in LoRaSerializer.SerializeGPS(s.Gps))
Variaveis.LoraService?.EnviarDadosLoRaViaCAN(dado); Variaveis.LoraService?.EnviarDadosLoRaViaCAN(dado);

View File

@ -108,7 +108,7 @@ namespace AgroBase.Services.Operadores
AtualizarDadosModulos(); AtualizarDadosModulos();
AtualizarDadosControleOperacao(); AtualizarDadosControleOperacao();
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
if (_Sensoriamento == null) if (_Sensoriamento == null)
{ {
@ -296,7 +296,7 @@ namespace AgroBase.Services.Operadores
{ {
if (Variaveis.OperacaoEmAndamento.DispMvd == null) return; if (Variaveis.OperacaoEmAndamento.DispMvd == null) return;
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var agora = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); var agora = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
//Console.WriteLine(RedisService.Get(RedisService.ModKey(Enums.T_Code.Gps))); //Console.WriteLine(RedisService.Get(RedisService.ModKey(Enums.T_Code.Gps)));

View File

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using static AgroBase.Models.Enums;
using static AgroBase.Models.Operadores.OperadoresModels; using static AgroBase.Models.Operadores.OperadoresModels;
namespace AgroBase.Services.Operadores namespace AgroBase.Services.Operadores
@ -83,7 +84,12 @@ namespace AgroBase.Services.Operadores
_Controle.PercentualVelocidadeSP = novoComando.percentual_velocidade; _Controle.PercentualVelocidadeSP = novoComando.percentual_velocidade;
_Controle.EmFreio = novoComando.em_freio; _Controle.EmFreio = novoComando.em_freio;
_Controle.SimulacaoMPC = novoComando.simulacao?.Select(x => new MPCSimulacaoModel() { latitude = x[0], longitude = x[1], orientacao = x[2] }).ToList() ?? new List<MPCSimulacaoModel>(); _Controle.SimulacaoMPC = novoComando.simulacao?.Select(x => new MPCSimulacaoModel() { latitude = x[0], longitude = x[1], orientacao = x[2] }).ToList() ?? new List<MPCSimulacaoModel>();
Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao();
var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
if (pControle.MovimentoAutomatico)
{
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false, new List<T_Code>() { T_Code.Mov, T_Code.Dir });
}
} }
} }

View File

@ -92,12 +92,12 @@ namespace AgroBase.Services.Operadores
_Controle.Angulo = 0; _Controle.Angulo = 0;
_Controle.PercentualVelocidadeSP = 0; _Controle.PercentualVelocidadeSP = 0;
_Controle.BicosAtuados.ForEach(x => x.ComandoAtuar = false); _Controle.Bicos.ForEach(x => x.ComandoAtuar = false);
RedisService.AtualizarCampos( RedisService.AtualizarCampos(
CtxKey.DadosControle, CtxKey.DadosControle,
("angulo_sp", _Controle.Angulo), ("angulo_sp", _Controle.Angulo),
("velocidade_sp", _Controle.PercentualVelocidadeSP), ("velocidade_sp", _Controle.PercentualVelocidadeSP),
("controle_bicos", _Controle.BicosAtuados.ToDictionary(x => x.Posicao - 1, x => x.ComandoAtuar)) ("controle_bicos", _Controle.Bicos.ToDictionary(x => x.Posicao - 1, x => x.ComandoAtuar))
); );
Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao(); Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao();

View File

@ -7,6 +7,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using static AgroBase.Models.Operadores.OperadoresModels; using static AgroBase.Models.Operadores.OperadoresModels;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using static AgroBase.Models.Enums;
namespace AgroBase.Services.Operadores namespace AgroBase.Services.Operadores
{ {
@ -61,15 +62,20 @@ namespace AgroBase.Services.Operadores
bool comandoMudou = false; bool comandoMudou = false;
var _Controle = Variaveis.OperacaoEmAndamento.Controle; var _Controle = Variaveis.OperacaoEmAndamento.Controle;
foreach (var bico in _Controle.BicosAtuados) foreach (var bico in _Controle.Bicos)
{ {
novoComando.TryGetValue(bico.Posicao, out bool atuado); novoComando.TryGetValue(bico.Posicao, out bool atuado);
if (!(Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ContadorCarga?.PulverizadorLiberado ?? false)) atuado = false;
if (!comandoMudou) comandoMudou = atuado != bico.ComandoAtuar; if (!comandoMudou) comandoMudou = atuado != bico.ComandoAtuar;
bico.ComandoAtuar = atuado; bico.ComandoAtuar = atuado;
} }
if (comandoMudou) if (comandoMudou)
{ {
Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao(); var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
if (pControle.PulverizadorAutomatico)
{
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false, new List<T_Code>() { T_Code.Atu });
}
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -300,7 +300,7 @@ namespace OperationControl.Controls
private void ManualControlPad_PauseClicked(object? sender, EventArgs e) private void ManualControlPad_PauseClicked(object? sender, EventArgs e)
{ {
if (VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.OperacaoIniciada ?? false) if (VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Operacao?.Iniciada ?? false)
{ {
//PauseActivated = !PauseActivated; //PauseActivated = !PauseActivated;
//VariaveisControleOperacao.EnviarComandoParada(pausa: PauseActivated); //VariaveisControleOperacao.EnviarComandoParada(pausa: PauseActivated);

View File

@ -487,7 +487,7 @@ namespace OperationControl.Controls
} }
else if (info?.Layer == MapaPlantacao_Layer && feat is MIFeature roadFeature) else if (info?.Layer == MapaPlantacao_Layer && feat is MIFeature roadFeature)
{ {
if (!(VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.OperacaoIniciada ?? false)) if (!(VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Operacao?.Iniciada ?? false))
HighlightRoad(roadFeature); HighlightRoad(roadFeature);
} }
else else

View File

@ -102,7 +102,7 @@ namespace OperationControl.Models
RoverId = device_id, RoverId = device_id,
Configurado = false, Configurado = false,
Alive = true, Alive = true,
DadosLeitura = new OperacaoSensoriamentoLogModel() DadosLeitura = new OperacaoParametrosDadosModel()
{ {
Momento = DateTime.Now Momento = DateTime.Now
} }
@ -123,7 +123,7 @@ namespace OperationControl.Models
{ {
string json = message.Mensagem; string json = message.Mensagem;
if (string.IsNullOrEmpty(json)) return; if (string.IsNullOrEmpty(json)) return;
var obj = JsonConvert.DeserializeObject<OperacaoSensoriamentoLogModel>(json); var obj = JsonConvert.DeserializeObject<OperacaoParametrosDadosModel>(json);
if (obj == null) return; if (obj == null) return;
lock (_RoversLock) lock (_RoversLock)
{ {
@ -205,9 +205,9 @@ namespace OperationControl.Models
if (!rover.Alive) if (!rover.Alive)
{ {
//((App)Application.Current).Shell.Main?.MAP?.markers?.UpdateMarkerInfo(rover.RoverId, status: AgroBase.Models.Enums.StatusOperacao.Erro); //((App)Application.Current).Shell.Main?.MAP?.markers?.UpdateMarkerInfo(rover.RoverId, status: AgroBase.Models.Enums.StatusOperacao.Erro);
rover.DadosLeitura = new OperacaoSensoriamentoLogModel(); rover.DadosLeitura = new OperacaoParametrosDadosModel();
rover.DadosLeitura.Momento = DateTime.Now; rover.DadosLeitura.Momento = DateTime.Now;
rover.DadosLeitura.StatusOperacao = AgroBase.Models.Enums.StatusOperacao.Erro; rover.DadosLeitura.Operacao.Status = AgroBase.Models.Enums.StatusOperacao.Erro;
((App)Application.Current).Shell.Main?.AtualizarDadosTela_Telemetria(rover.RoverId); ((App)Application.Current).Shell.Main?.AtualizarDadosTela_Telemetria(rover.RoverId);
((App)Application.Current).Shell.Main?.AdicionarAlerta(rover.RoverId, AgroBase.Models.Enums.T_Code.Ipb, SeveridadeAlerta.Critical, "Perda de comunicação com o equipamento!"); ((App)Application.Current).Shell.Main?.AdicionarAlerta(rover.RoverId, AgroBase.Models.Enums.T_Code.Ipb, SeveridadeAlerta.Critical, "Perda de comunicação com o equipamento!");
} }
@ -316,7 +316,7 @@ namespace OperationControl.Models
public static void EnviarParametrosOperacao(OperacaoParametrosModel parametros) public static void EnviarParametrosOperacao(OperacaoParametrosModel parametros)
{ {
bool operacao_iniciada = (RoverEmFoco?.DadosLeitura?.OperacaoIniciada ?? false); bool operacao_iniciada = (RoverEmFoco?.DadosLeitura?.Operacao?.Iniciada ?? false);
bool parametros_parciais = parametros.Modo == null; bool parametros_parciais = parametros.Modo == null;
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel() EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()

View File

@ -1098,7 +1098,7 @@ namespace OperationControl.Services
{ {
try try
{ {
((App)Application.Current).Shell.Main.AtualizarDadosTela_GNSS(UltimaLeitura, marker_id: VariaveisControleOperacao.BaseMarkerID, progresso: BaseFix.Progresso); ((App)Application.Current).Shell.Main.AtualizarDadosTela_GNSS(UltimaLeitura.ToGnssModel(), marker_id: VariaveisControleOperacao.BaseMarkerID, progresso: BaseFix.Progresso);
((App)Application.Current).Shell.Main.AtualizarDadosTela_Heading(UltimaLeitura.AnguloCarroDefinido); ((App)Application.Current).Shell.Main.AtualizarDadosTela_Heading(UltimaLeitura.AnguloCarroDefinido);
} }
catch (Exception exUi) catch (Exception exUi)

View File

@ -127,22 +127,22 @@
<Label x:Name="lblDiagnosticos_SEN_AB36V" Tag="sCOR" Content="🔒B36V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="366" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_AB36V" Tag="sCOR" Content="🔒B36V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="366" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_DIR_DF" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="102" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_DIR_DF" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="102" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_MOV_DF" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_MOV_DF" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FRODF" Tag="sFRO" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_FRODF" Tag="sSRV" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_MAGDF" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_MAGDF" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVDF" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_TMVDF" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_DIR_EF" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="102" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_DIR_EF" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="102" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_MOV_EF" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_MOV_EF" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FROEF" Tag="sFRO" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_FROEF" Tag="sSRV" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_MAGEF" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_MAGEF" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVEF" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_TMVEF" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_DIR_ET" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="280" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_DIR_ET" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="280" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_MOV_ET" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_MOV_ET" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FROET" Tag="sFRO" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_FROET" Tag="sSRV" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_MAGET" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_MAGET" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVET" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_TMVET" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_DIR_DT" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="280" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_DIR_DT" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="280" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_MOV_DT" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_MOV_DT" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FRODT" Tag="sFRO" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_FRODT" Tag="sSRV" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_MAGDT" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_MAGDT" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVDT" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_TMVDT" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SNR" Content="🔒SNR" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="102" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SNR" Content="🔒SNR" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="102" HorizontalAlignment="Center" VerticalAlignment="Top"/>
@ -156,16 +156,20 @@
<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"/>
<Label x:Name="lblDiagnosticos_ATU_BOMBA" Tag="sBMB" Content="🔒BMB" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="309" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU_BOMBA" Tag="sBMB" Content="🔒BMB" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="157" Canvas.Top="360" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU" Tag="sMOD" Content="🔒ATU" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="349" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU" Tag="sMOD" Content="🔒ATU" Style="{StaticResource RoundedLabel}" Height="22" Width="40" Canvas.Left="202" Canvas.Top="333" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_PRSLN" Tag="sPRS" Content="🔒PRS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU_PRSLN" Tag="sPRS" Content="🔒PRS" Style="{StaticResource RoundedLabel}" Height="22" Width="40" Canvas.Left="157" Canvas.Top="333" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_FLXLN" Tag="sFLX" Content="🔒FLX" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="155" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU_FLXLN" Tag="sFLX" Content="🔒FLX" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="247" Canvas.Top="334" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_MASRS" Tag="sMAS" Content="🔒MAS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="249" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU_MASRS" Tag="sMAS" Content="🔒MAS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="247" Canvas.Top="360" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B01" Tag="sBIC" Content="🔒B01" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="75" Canvas.Top="411" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU_B01" Tag="sBIC" Content="🔒B01" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="79" Canvas.Top="411" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<Label x:Name="lblDiagnosticos_ATU_B02" Tag="sBIC" Content="🔒B02" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="143" Canvas.Top="412" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU_SRVB1" Tag="sSRV" Content="🔒SVB1" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="79" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B03" Tag="sBIC" Content="🔒B03" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="254" Canvas.Top="412" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU_B02" Tag="sBIC" Content="🔒B02" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="411" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<Label x:Name="lblDiagnosticos_ATU_B04" Tag="sBIC" Content="🔒B04" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="322" Canvas.Top="411" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU_B03" Tag="sBIC" Content="🔒B03" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="324" Canvas.Top="412" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<Label x:Name="lblDiagnosticos_CAM" Content="🔒CAM" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="204" Canvas.Top="411" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_ATU_SRVB3" Tag="sSRV" Content="🔒SVB3" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="324" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_MAGESQ" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="22" Width="40" Canvas.Left="140" Canvas.Top="400" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<Label x:Name="lblDiagnosticos_ATU_MAGDIR" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="22" Width="40" Canvas.Left="262" Canvas.Top="400" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_MAGALT" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="22" Width="40" Canvas.Left="202" Canvas.Top="388" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_CAM" Content="🔒CAM" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="360" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_LEDOP" Tag="sLED" Content="🔒OP" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="192" HorizontalAlignment="Left" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_LEDOP" Tag="sLED" Content="🔒OP" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="192" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_LEDMN" Tag="sLED" Content="🔒MN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="218" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_LEDMN" Tag="sLED" Content="🔒MN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="218" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_LEDAT" Tag="sLED" Content="🔒AT" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="244" HorizontalAlignment="Center" VerticalAlignment="Top"/> <Label x:Name="lblDiagnosticos_SEN_LEDAT" Tag="sLED" Content="🔒AT" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="244" HorizontalAlignment="Center" VerticalAlignment="Top"/>

View File

@ -145,9 +145,9 @@ namespace OperationControl.Windows
MAP.markers.AddMarker( MAP.markers.AddMarker(
d, d,
false, false,
lat: rover.DadosLeitura?.Gps?.Latitude ?? 0, lat: rover.DadosLeitura?.Gnss?.Latitude ?? 0,
lon: rover.DadosLeitura?.Gps?.Longitude ?? 0, lon: rover.DadosLeitura?.Gnss?.Longitude ?? 0,
heading: rover.DadosLeitura?.Gps?.AnguloCarroDefinido ?? 0 heading: rover.DadosLeitura?.Gnss?.OrientacaoReal ?? 0
); );
} }
} }
@ -227,8 +227,8 @@ namespace OperationControl.Windows
else if (dados_leitura != null) else if (dados_leitura != null)
{ {
var simulacao = dados_leitura.Controle?.SimulacaoMPC?.Select(x => new double[] { x.longitude, x.latitude })?.ToList(); var simulacao = dados_leitura.Controle?.SimulacaoMPC?.Select(x => new double[] { x.longitude, x.latitude })?.ToList();
MAP.markers.UpdateMarkerPosition(rover_id, lat: dados_leitura.Gps?.Latitude, lon: dados_leitura.Gps?.Longitude, heading: dados_leitura.Gps?.OrientacaoReal, predict: simulacao); MAP.markers.UpdateMarkerPosition(rover_id, lat: dados_leitura.Gnss?.Latitude, lon: dados_leitura.Gnss?.Longitude, heading: dados_leitura.Gnss?.OrientacaoReal, predict: simulacao);
MAP.markers.UpdateMarkerInfo(rover_id, status: dados_leitura.StatusOperacao); MAP.markers.UpdateMarkerInfo(rover_id, status: dados_leitura.Operacao.Status);
} }
if (rover != null && dados_leitura?.ModulosSaude != null) if (rover != null && dados_leitura?.ModulosSaude != null)
@ -294,7 +294,7 @@ namespace OperationControl.Windows
lblDispositivos_Status.Content = VariaveisControleOperacao.StatusBase.ToString(); lblDispositivos_Status.Content = VariaveisControleOperacao.StatusBase.ToString();
AplicarStatusModuloNaLabel(lblDispositivos_Status, VariaveisControleOperacao.StatusBase, true, false); AplicarStatusModuloNaLabel(lblDispositivos_Status, VariaveisControleOperacao.StatusBase, true, false);
AtualizarDadosTela_GNSS(Variaveis.GpsService?.UltimaLeitura ?? new AgroBase.Models.GPSModel(), marker_id: VariaveisControleOperacao.BaseMarkerID); AtualizarDadosTela_GNSS(Variaveis.GpsService?.UltimaLeitura?.ToGnssModel() ?? new AgroBase.Models.Operacoes.OperacaoParametrosDadosGNSSModel(), marker_id: VariaveisControleOperacao.BaseMarkerID);
AtualizarDadosTela_Heading(Variaveis.GpsService?.UltimaLeitura?.AnguloCarroDefinido ?? 0); AtualizarDadosTela_Heading(Variaveis.GpsService?.UltimaLeitura?.AnguloCarroDefinido ?? 0);
} }
else else
@ -302,24 +302,24 @@ namespace OperationControl.Windows
if (dados_leitura == null) return; if (dados_leitura == null) return;
Variaveis.MostrarLog($"Atualizando dados da tela para o dispositivo {rover_id}"); Variaveis.MostrarLog($"Atualizando dados da tela para o dispositivo {rover_id}");
lblDispositivos_Status.Content = (rover?.DadosLeitura?.Status ?? AgroBase.Models.Enums.StatusModulo.Desconectado).ToString(); lblDispositivos_Status.Content = (rover?.DadosLeitura?.StatusRover ?? AgroBase.Models.Enums.StatusModulo.Desconectado).ToString();
AplicarStatusModuloNaLabel(lblDispositivos_Status, rover?.DadosLeitura?.Status ?? AgroBase.Models.Enums.StatusModulo.Desconectado, true, false); AplicarStatusModuloNaLabel(lblDispositivos_Status, rover?.DadosLeitura?.StatusRover ?? AgroBase.Models.Enums.StatusModulo.Desconectado, true, false);
AtualizarDadosTela_Diagnosticos(rover); AtualizarDadosTela_Diagnosticos(rover);
AtualizarDadosTela_Resumo_Conexao(dados_leitura); AtualizarDadosTela_Resumo_Conexao(dados_leitura);
if (dados_leitura.Trajetoria != null) if (dados_leitura.Trajetoria != null)
AtualizarDadosTela_Resumo(dados_leitura); AtualizarDadosTela_Resumo(dados_leitura);
if (dados_leitura.Gps != null) if (dados_leitura.Gnss != null)
AtualizarDadosTela_GNSS(dados_leitura.Gps, marker_id: rover_id); AtualizarDadosTela_GNSS(dados_leitura.Gnss, marker_id: rover_id);
if (dados_leitura.Controle != null) if (dados_leitura.Controle != null)
AtualizarDadosTela_Controle(dados_leitura.Controle, dados_leitura.Direcional.AnguloMedio, dados_leitura.Movimentacao.VelocidadeMedia, dados_leitura.Emergencia, !dados_leitura.OperacaoIniciada, dados_leitura.StatusOperacao == AgroBase.Models.Enums.StatusOperacao.Calibrando); AtualizarDadosTela_Controle(dados_leitura.Controle, dados_leitura.Direcional.AnguloMedio, dados_leitura.Movimentacao.VelocidadeMediaMs, dados_leitura.Operacao.Emergencia, !dados_leitura.Operacao.Iniciada, dados_leitura.Operacao.Status == AgroBase.Models.Enums.StatusOperacao.Calibrando);
//if (rover.Value.Controle != null) //if (rover.Value.Controle != null)
// AtualizarDadosTela_ParametrosOperacao(rover.Value.Controle); // AtualizarDadosTela_ParametrosOperacao(rover.Value.Controle);
if (dados_leitura.Trajetoria != null) if (dados_leitura.Trajetoria != null)
AtualizarDadosTela_Mapa(dados_leitura.Trajetoria); AtualizarDadosTela_Mapa(dados_leitura.Trajetoria);
if (dados_leitura.Gps != null) if (dados_leitura.Gnss != null)
AtualizarDadosTela_Heading(dados_leitura.Gps.AnguloCarroDefinido, dados_leitura.Modo == AgroBase.Models.Enums.ModoOperacao.Manual ? double.NaN : dados_leitura.Trajetoria.AnguloCaminho); AtualizarDadosTela_Heading(dados_leitura.Gnss.OrientacaoReal, dados_leitura.Operacao.Modo == AgroBase.Models.Enums.ModoOperacao.Manual ? double.NaN : dados_leitura.Trajetoria.AnguloCaminho);
if (dados_leitura.IMU != null) if (dados_leitura.Imu != null)
AtualizarDadosTela_IMU(dados_leitura.IMU.InclinacaoLateral, dados_leitura.IMU.InclinacaoFrontal); AtualizarDadosTela_IMU(dados_leitura.Imu.InclinacaoLateral, dados_leitura.Imu.InclinacaoFrontal);
if (rover.Controle != null) if (rover.Controle != null)
AtualizarDadosTela_Pulverizador(dados_leitura); AtualizarDadosTela_Pulverizador(dados_leitura);
if (dados_leitura.LivoxLidar != null) if (dados_leitura.LivoxLidar != null)
@ -339,7 +339,7 @@ namespace OperationControl.Windows
#region RESUMO OPERACIONAL #region RESUMO OPERACIONAL
public void AtualizarDadosTela_Resumo(AgroBase.Models.OperacaoSensoriamentoLogModel dados) public void AtualizarDadosTela_Resumo(AgroBase.Models.Operacoes.OperacaoParametrosDadosModel dados)
{ {
Application.Current.Dispatcher.BeginInvoke(new Action(() => Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{ {
@ -352,16 +352,16 @@ namespace OperationControl.Windows
pgbResumo_Bateria.Value = dados.Bateria.PercentualBateria; pgbResumo_Bateria.Value = dados.Bateria.PercentualBateria;
lblResumo_Bateria.Content = $"{dados.Bateria.TensaoInstantanea:0.00} V ({TimeSpan.FromMinutes(dados.Bateria.TempoEstimadoRestanteMinutos).ToString(@"dd\.hh\:mm\:ss")} {dados.Bateria.DistanciaEstimadaRestanteMetros:0.00} m)"; lblResumo_Bateria.Content = $"{dados.Bateria.TensaoInstantanea:0.00} V ({TimeSpan.FromMinutes(dados.Bateria.TempoEstimadoRestanteMinutos).ToString(@"dd\.hh\:mm\:ss")} {dados.Bateria.DistanciaEstimadaRestanteMetros:0.00} m)";
pgbResumo_Herbicida.Value = dados.Atuador.PercentualReservatorio; pgbResumo_Herbicida.Value = dados.Atuador.PercentualReservatorio;
lblResumo_Herbicida.Content = $"{dados.Atuador.VolumeReservatorio:0.00} L ({TimeSpan.FromMinutes(dados.Atuador.TempoEstimadoRestanteMinutos).ToString(@"hh\:mm\:ss")} {dados.Atuador.DistanciaEstimadaRestanteMetros:0.00} m)"; lblResumo_Herbicida.Content = $"{dados.Atuador.VolumeReservatorioL:0.00} L ({TimeSpan.FromMinutes(dados.Atuador.TempoEstimadoRestanteMinutos).ToString(@"hh\:mm\:ss")} {dados.Atuador.DistanciaEstimadaRestanteMetros:0.00} m)";
pgbResumo_Infestacao.Value = dados.Atuador.PercentualErvasTerreno; pgbResumo_Infestacao.Value = dados.Atuador.PercentualErvasTerreno;
lblResumo_Infestacao.Content = $"{dados.Atuador.HerbicidaPorErva:0.00} mL/erva"; lblResumo_Infestacao.Content = $"{dados.Atuador.HerbicidaPorAtuacaoMl:0.00} mL/atuação";
lblResumo_OperacaoLiberada.Content = $"Operação " + (dados.OperacaoLiberada ? "🔓 Liberada" : "🔒 Bloqueada"); lblResumo_OperacaoLiberada.Content = $"Operação " + (dados.Operacao.Liberada ? "🔓 Liberada" : "🔒 Bloqueada");
lblResumo_OperacaoModo.Content = $"Modo {dados.Modo}"; lblResumo_OperacaoModo.Content = $"Modo {dados.Operacao.Modo}";
lblResumo_OperacaoStatus.Content = $"Status {dados.StatusOperacao}" + (dados.StatusOperacao == AgroBase.Models.Enums.StatusOperacao.Aguardando ? $" ({dados.TempoAguardandoSeg:0})" : ""); lblResumo_OperacaoStatus.Content = $"Status {dados.Operacao.Status}" + (dados.Operacao.Status == AgroBase.Models.Enums.StatusOperacao.Aguardando ? $" ({dados.Operacao.TempoAguardandoSegs:0})" : "");
lblResumo_StatusCarro.Content = $"Carro {dados.Trajetoria.StatusCarro}"; lblResumo_StatusCarro.Content = $"Carro {dados.Trajetoria.StatusCarro}";
lblResumo_TemperaturaGeral.Content = $"Temperatura {(dados.DadosPerformance.CPU_temp ?? 0):0.00} °C"; lblResumo_TemperaturaGeral.Content = $"Temperatura {(dados.PerformanceNcp.CPU_temp ?? 0):0.00} °C";
lblResumo_OperacaoDuracao.Content = $"Duração {dados.TempoDecorrido.ToString("HH:mm:ss")} / " + (string.IsNullOrEmpty(dados.Trajetoria.TempoEstimadoOperacao) ? "00:00:00" : dados.Trajetoria.TempoEstimadoOperacao); lblResumo_OperacaoDuracao.Content = $"Duração {TimeSpan.FromSeconds(dados.Operacao.TempoDecorridoSegs).ToString(@"hh\:mm\:ss")} / " + (string.IsNullOrEmpty(dados.Trajetoria.TempoEstimadoOperacao) ? "00:00:00" : dados.Trajetoria.TempoEstimadoOperacao);
} }
catch (Exception exUi) catch (Exception exUi)
{ {
@ -370,7 +370,7 @@ namespace OperationControl.Windows
})); }));
} }
public void AtualizarDadosTela_Resumo_Conexao(AgroBase.Models.OperacaoSensoriamentoLogModel dados) public void AtualizarDadosTela_Resumo_Conexao(AgroBase.Models.Operacoes.OperacaoParametrosDadosModel dados)
{ {
Application.Current.Dispatcher.BeginInvoke(new Action(() => Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{ {
@ -400,7 +400,7 @@ namespace OperationControl.Windows
private void AtualizarDadosTela_Diagnosticos(AgroBase.Models.Operacoes.OperacaoParametrosModel dados) private void AtualizarDadosTela_Diagnosticos(AgroBase.Models.Operacoes.OperacaoParametrosModel dados)
{ {
lblDiagnosticos_Impedimento.Text = "Impedimento: " + (string.IsNullOrEmpty(dados.DadosLeitura.ErroOperacaoLiberada) ? "Nenhum" : dados.DadosLeitura.ErroOperacaoLiberada.Replace("\n\n", "; ")); lblDiagnosticos_Impedimento.Text = "Impedimento: " + (string.IsNullOrEmpty(dados.DadosLeitura.Operacao.ImpedimentoErro) ? "Nenhum" : dados.DadosLeitura.Operacao.ImpedimentoErro.Replace("\n\n", "; "));
// Canvas que está dentro do Border // Canvas que está dentro do Border
var canvas = brdDiagnostico.Child as Canvas; var canvas = brdDiagnostico.Child as Canvas;
@ -421,7 +421,7 @@ namespace OperationControl.Windows
var individual = _saude?.saude_individual?.FirstOrDefault(x => x.label == mod_label); var individual = _saude?.saude_individual?.FirstOrDefault(x => x.label == mod_label);
bool em_uso = mod_label != "" ? dados.DadosLeitura.ModulosMandatorios?.FirstOrDefault(x => x.Dispositivo == modulo)?.ComponentesEmUso?.Any(x => x.Key == mod_label && x.Value) ?? false : dados.ModulosMandatorios?.Any(x => x.Dispositivo == modulo && x.Utilizar) ?? false; bool em_uso = mod_label != "" ? dados.DadosLeitura.Operacao.ModulosMandatorios?.FirstOrDefault(x => x.Dispositivo == modulo)?.ComponentesEmUso?.Any(x => x.Key == mod_label && x.Value) ?? false : dados.ModulosMandatorios?.Any(x => x.Dispositivo == modulo && x.Utilizar) ?? false;
// Aplica cor de acordo com o status // Aplica cor de acordo com o status
AplicarStatusModuloNaLabel(lbl, individual?.status ?? _saude?.status ?? AgroBase.Models.Enums.StatusModulo.Desconectado, em_uso); AplicarStatusModuloNaLabel(lbl, individual?.status ?? _saude?.status ?? AgroBase.Models.Enums.StatusModulo.Desconectado, em_uso);
@ -524,25 +524,53 @@ namespace OperationControl.Windows
switch (modulo) switch (modulo)
{ {
case AgroBase.Models.Enums.T_Code.Mov: case AgroBase.Models.Enums.T_Code.Mov:
iniciado = rover.DadosLeitura?.Movimentacao?.Dados?.FirstOrDefault(x => x.ID == mod_label)?.Iniciado ?? false; iniciado = rover.DadosLeitura?.Movimentacao?.Modulos?.FirstOrDefault(x => x.Mod_ID == mod_label)?.Iniciado ?? false;
break; break;
case AgroBase.Models.Enums.T_Code.Dir: case AgroBase.Models.Enums.T_Code.Dir:
iniciado = rover.DadosLeitura?.Direcional?.Dados?.FirstOrDefault(x => x.Modulo_ID == mod_label)?.Inicializado ?? false; iniciado = rover.DadosLeitura?.Direcional?.Modulos?.FirstOrDefault(x => x.Mod_ID == mod_label)?.Iniciado ?? false;
break; break;
case AgroBase.Models.Enums.T_Code.Atu: case AgroBase.Models.Enums.T_Code.Atu:
if (string.IsNullOrEmpty(mod_label)) if (string.IsNullOrEmpty(mod_label))
iniciado = rover.DadosLeitura?.DispositivosMapeados?.FirstOrDefault(x => x.Dispositivo == modulo)?.Saude > 0; iniciado = rover.DadosLeitura?.Atuador?.Iniciado ?? false;
else else
rover.DadosLeitura?.Atuador?.Iniciados?.TryGetValue(mod_label, out iniciado); switch (s_code)
{
case AgroBase.Models.Enums.S_Code.sBIC:
iniciado = rover.DadosLeitura?.Atuador?.Bicos?.FirstOrDefault(x => x.ID == mod_label)?.Inicializado ?? false;
break;
case AgroBase.Models.Enums.S_Code.sBMB:
iniciado = rover.DadosLeitura?.Atuador?.Bombas?.FirstOrDefault(x => x.ID == mod_label)?.Inicializado ?? false;
break;
case AgroBase.Models.Enums.S_Code.sSRV:
iniciado = rover.DadosLeitura?.Atuador?.Servos?.FirstOrDefault(x => x.ID == mod_label)?.Inicializado ?? false;
break;
default:
iniciado = rover.DadosLeitura?.Atuador?.Sensores?.FirstOrDefault(x => x.ID == mod_label && x.Componente == s_code)?.Inicializado ?? false;
break;
}
break; break;
case AgroBase.Models.Enums.T_Code.Sen: case AgroBase.Models.Enums.T_Code.Sen:
if (string.IsNullOrEmpty(mod_label)) if (string.IsNullOrEmpty(mod_label))
iniciado = rover.DadosLeitura?.DispositivosMapeados?.FirstOrDefault(x => x.Dispositivo == modulo)?.Saude > 0; iniciado = rover.DadosLeitura?.Sensoriamento?.Iniciado ?? false;
else else
rover.DadosLeitura.Iniciados?.TryGetValue(mod_label, out iniciado); switch (s_code)
{
case AgroBase.Models.Enums.S_Code.sLED:
iniciado = rover.DadosLeitura?.Sensoriamento?.Sinaleiros?.FirstOrDefault(x => x.ID == mod_label)?.Inicializado ?? false;
break;
case AgroBase.Models.Enums.S_Code.sRLE:
iniciado = rover.DadosLeitura?.Sensoriamento?.Reles?.FirstOrDefault(x => x.ID == mod_label)?.Inicializado ?? false;
break;
case AgroBase.Models.Enums.S_Code.sSRV:
iniciado = rover.DadosLeitura?.Atuador?.Servos?.FirstOrDefault(x => x.ID == mod_label)?.Inicializado ?? false;
break;
default:
iniciado = rover.DadosLeitura?.Atuador?.Sensores?.FirstOrDefault(x => x.ID == mod_label && x.Componente == s_code)?.Inicializado ?? false;
break;
}
break; break;
case AgroBase.Models.Enums.T_Code.Imu: case AgroBase.Models.Enums.T_Code.Imu:
iniciado = rover.DadosLeitura?.IMU?.Iniciado ?? false; iniciado = rover.DadosLeitura?.Imu?.Iniciado ?? false;
break; break;
case AgroBase.Models.Enums.T_Code.Npc: case AgroBase.Models.Enums.T_Code.Npc:
case AgroBase.Models.Enums.T_Code.Ipb: case AgroBase.Models.Enums.T_Code.Ipb:
@ -552,7 +580,7 @@ namespace OperationControl.Windows
iniciado = rover.DadosLeitura.DispositivosMapeados?.Any(x => x.Dispositivo == AgroBase.Models.Enums.T_Code.Can) ?? false; iniciado = rover.DadosLeitura.DispositivosMapeados?.Any(x => x.Dispositivo == AgroBase.Models.Enums.T_Code.Can) ?? false;
break; break;
case AgroBase.Models.Enums.T_Code.Lra: case AgroBase.Models.Enums.T_Code.Lra:
iniciado = rover.DadosLeitura?.DadosLoRa?.Conectado ?? false; //iniciado = rover.DadosLeitura?.DadosLoRa?.Conectado ?? false;
break; break;
case AgroBase.Models.Enums.T_Code.Cam: case AgroBase.Models.Enums.T_Code.Cam:
case AgroBase.Models.Enums.T_Code.Snr: case AgroBase.Models.Enums.T_Code.Snr:
@ -627,13 +655,13 @@ namespace OperationControl.Windows
DateTime ucr = DateTime.MinValue; DateTime ucr = DateTime.MinValue;
if (modulo == AgroBase.Models.Enums.T_Code.Sen) if (modulo == AgroBase.Models.Enums.T_Code.Sen)
ucr = rover?.DadosLeitura?.UltimoComandoRespondido ?? DateTime.MinValue; ucr = rover?.DadosLeitura?.Sensoriamento?.UltimoComandoRespondido ?? DateTime.MinValue;
else if (modulo == AgroBase.Models.Enums.T_Code.Atu) else if (modulo == AgroBase.Models.Enums.T_Code.Atu)
ucr = rover?.DadosLeitura?.Atuador?.UltimoComandoRespondido ?? DateTime.MinValue; ucr = rover?.DadosLeitura?.Atuador?.UltimoComandoRespondido ?? DateTime.MinValue;
else if (modulo == AgroBase.Models.Enums.T_Code.Mov) else if (modulo == AgroBase.Models.Enums.T_Code.Mov)
ucr = rover?.DadosLeitura?.Movimentacao?.Dados?.FirstOrDefault(x => x.ID == label)?.UltimoComandoRespondido ?? DateTime.MinValue; ucr = rover?.DadosLeitura?.Movimentacao?.Modulos?.FirstOrDefault(x => x.Mod_ID == label)?.UltimoComandoRespondido ?? DateTime.MinValue;
else if (modulo == AgroBase.Models.Enums.T_Code.Dir) else if (modulo == AgroBase.Models.Enums.T_Code.Dir)
ucr = rover?.DadosLeitura?.Direcional?.Dados?.FirstOrDefault(x => x.Modulo_ID == label)?.UltimoComandoRespondido ?? DateTime.MinValue; ucr = rover?.DadosLeitura?.Direcional?.Modulos?.FirstOrDefault(x => x.Mod_ID == label)?.UltimoComandoRespondido ?? DateTime.MinValue;
else else
ucr = rover.DadosLeitura?.Momento ?? DateTime.MinValue; ucr = rover.DadosLeitura?.Momento ?? DateTime.MinValue;
@ -734,7 +762,7 @@ namespace OperationControl.Windows
}); });
break; break;
case AgroBase.Models.Enums.S_Code.sNTC: case AgroBase.Models.Enums.S_Code.sNTC:
var ntc = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Temperaturas?.FirstOrDefault(x => x.Key == label).Value; var ntc = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Sensoriamento?.Sensores?.FirstOrDefault(x => x.ID == label && x.Componente == s_code)?.Valores[1];
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>() graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
{ {
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
@ -747,38 +775,38 @@ namespace OperationControl.Windows
break; break;
case AgroBase.Models.Enums.S_Code.sRLE: case AgroBase.Models.Enums.S_Code.sRLE:
//var (cmd, leitura) = ((JObject)controleBase._comp_value).ToObject<(double?, double?)>(); //var (cmd, leitura) = ((JObject)controleBase._comp_value).ToObject<(double?, double?)>();
var rle = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Reles?.FirstOrDefault(x => x.Key == label).Value; var rle = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Sensoriamento?.Reles?.FirstOrDefault(x => x.ID == label);
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>() graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
{ {
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Comando", Label = "Comando",
Unidade = "", Unidade = "",
Valor = rle.Value.Item1 == true ? 1 : 0, Valor = rle?.ComandoEstado == true ? 1 : 0,
}, },
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Leitura", Label = "Leitura",
Unidade = "", Unidade = "",
Valor = rle.Value.Item2 == true ? 1 : 0, Valor = rle?.LeituraEstado == true ? 1 : 0,
}, },
}); });
break; break;
case AgroBase.Models.Enums.S_Code.sFRO: case AgroBase.Models.Enums.S_Code.sFRO:
var fro = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Servos?.FirstOrDefault(x => x.Key == label).Value; var fro = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Sensoriamento?.Servos?.FirstOrDefault(x => x.ID == label);
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>() graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
{ {
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Comando", Label = "Comando",
Unidade = "°", Unidade = "°",
Valor = fro.Value.Item1, Valor = fro?.ComandoAngulo
}, },
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Leitura", Label = "Leitura",
Unidade = "°", Unidade = "°",
Valor = fro.Value.Item2, Valor = fro?.LeituraAngulo
}, },
}); });
break; break;
@ -789,43 +817,44 @@ namespace OperationControl.Windows
switch (s_code) switch (s_code)
{ {
case AgroBase.Models.Enums.S_Code.sBIC: case AgroBase.Models.Enums.S_Code.sBIC:
var b = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Controle?.BicosAtuados?.FirstOrDefault(x => x.ID == label); var b = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.Bicos?.FirstOrDefault(x => x.ID == label);
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>() graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
{ {
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Cmd", Label = "Cmd",
Unidade = "", Unidade = "",
Valor = (b?.ComandoAtuar ?? false) ? 100 : 0 Valor = (b?.ComandoEstado ?? false) ? 100 : 0
}, },
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Vazão", Label = "Vazão",
Unidade = "mL/s", Unidade = "mL/s",
Valor = b?.MediaNivelFluxo Valor = b?.MediaVazaoMLs
}, },
}); });
break; break;
case AgroBase.Models.Enums.S_Code.sBMB: case AgroBase.Models.Enums.S_Code.sBMB:
var bb = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.Bombas?.FirstOrDefault(x => x.ID == label);
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>() graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
{ {
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Cmd", Label = "Cmd",
Unidade = "", Unidade = "",
Valor = (atu?.ComandoBomba ?? false) ? 100 : 0 Valor = (bb?.ComandoEstado ?? false) ? 100 : 0
}, },
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Potência", Label = "Potência",
Unidade = "%", Unidade = "%",
Valor = atu?.LeituraPotenciaBomba Valor = bb?.Potencia
}, },
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Pressão", Label = "Pressão",
Unidade = "psi", Unidade = "psi",
Valor = atu?.PressaoLinha Valor = atu?.PressaoLinhaPsi
}, },
}); });
break; break;
@ -836,7 +865,7 @@ namespace OperationControl.Windows
{ {
Label = "Pressão", Label = "Pressão",
Unidade = "psi", Unidade = "psi",
Valor = atu ?.PressaoLinha Valor = atu?.PressaoLinhaPsi
}, },
}); });
break; break;
@ -847,7 +876,13 @@ namespace OperationControl.Windows
{ {
Label = "Fluxo", Label = "Fluxo",
Unidade = "mL/s", Unidade = "mL/s",
Valor = atu ?.VazaoInstantanea Valor = atu?.VazaoInstantaneaMLs
},
new GraficoModel.GraficoParametrosModel()
{
Label = "Media",
Unidade = "mL/s",
Valor = atu?.VazaoMediaMLs
}, },
}); });
break; break;
@ -858,20 +893,26 @@ namespace OperationControl.Windows
{ {
Label = "Volume", Label = "Volume",
Unidade = "L", Unidade = "L",
Valor = atu ?.VolumeReservatorio Valor = atu?.VolumeReservatorioL
},
new GraficoModel.GraficoParametrosModel()
{
Label = "Massa",
Unidade = "Kg",
Valor = atu?.MassaReservatorioKg
}, },
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Percentual", Label = "Percentual",
Unidade = "%", Unidade = "%",
Valor = atu ?.PercentualReservatorio Valor = atu?.PercentualReservatorio
}, },
}); });
break; break;
} }
break; break;
case AgroBase.Models.Enums.T_Code.Mov: case AgroBase.Models.Enums.T_Code.Mov:
var mov = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Movimentacao?.Dados?.FirstOrDefault(x => x.ID == label); var mov = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Movimentacao?.Modulos?.FirstOrDefault(x => x.Mod_ID == label);
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>() graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
{ {
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
@ -913,7 +954,7 @@ namespace OperationControl.Windows
}); });
break; break;
case AgroBase.Models.Enums.T_Code.Npc: case AgroBase.Models.Enums.T_Code.Npc:
var npc = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.DadosPerformance; var npc = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.PerformanceNcp;
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>() graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
{ {
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
@ -998,32 +1039,32 @@ namespace OperationControl.Windows
}); });
break; break;
case AgroBase.Models.Enums.T_Code.Gps: case AgroBase.Models.Enums.T_Code.Gps:
var gps = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Gps; var gps = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Gnss;
graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>() graficoAcompanhamento.Atualizar(inicial, momento, new List<GraficoModel.GraficoParametrosModel>()
{ {
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Precisão", Label = "Precisão",
Unidade = "cm", Unidade = "cm",
Valor = gps?.PrecisaoCm ?? 0 Valor = gps?.PrecisaoCm
}, },
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Altitude", Label = "Altitude",
Unidade = "m", Unidade = "m",
Valor = gps?.Altitude ?? 0 Valor = gps?.Altitude
}, },
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Idade", Label = "Idade",
Unidade = "s", Unidade = "s",
Valor = gps?.IdadeCorrecao ?? -1 Valor = gps?.IdadeCorrecao
}, },
new GraficoModel.GraficoParametrosModel() new GraficoModel.GraficoParametrosModel()
{ {
Label = "Satelites", Label = "Satelites",
Unidade = "%", Unidade = "%",
Valor = gps?.NumeroSatelites ?? 0 Valor = gps?.NumeroSatelites
}, },
}); });
break; break;
@ -1073,23 +1114,23 @@ namespace OperationControl.Windows
{ {
panelOpcoes_Bico.Visibility = Visibility.Visible; panelOpcoes_Bico.Visibility = Visibility.Visible;
var bico = rover?.Controle?.BicosAtuados?.FirstOrDefault(x => x.ID == label); var bico = rover?.Atuador?.Bicos?.FirstOrDefault(x => x.ID == label);
bool comando = bico?.ComandoAtuar ?? false; bool comando = bico?.ComandoEstado ?? false;
var leitura = bico?._EstadoLeitura; bool leitura = bico?.LeituraEstado ?? false;
txtBico_Titulo.Text = $"Bico {label} - Testes"; txtBico_Titulo.Text = $"Bico {label} - Testes";
txtBico_Comando.Text = comando ? "Ligado" : "Desligado"; txtBico_Comando.Text = comando ? "Ligado" : "Desligado";
txtBico_StatusReal.Text = leitura != null && (AgroBase.Models.Enums.Estado)Enum.Parse(typeof(AgroBase.Models.Enums.Estado), leitura.ToString(), true) == AgroBase.Models.Enums.Estado.Ligado ? "Ligado" : "Desligado"; txtBico_StatusReal.Text = leitura ? "Ligado" : "Desligado";
txtBico_TempoLigado.Text = (bico?.TempoAtuado ?? 0).ToString("0.00") + " ms"; txtBico_TempoLigado.Text = (bico?.TempoAtuado ?? 0).ToString("0.00") + " ms";
txtBico_Vazao.Text = (bico?.MediaNivelFluxo ?? 0).ToString("0.00") + " L/min"; txtBico_Vazao.Text = (bico?.MediaVazaoMLs ?? 0).ToString("0.00") + " Ml/s";
txtBico_Pressao.Text = (rover?.Atuador?.PressaoLinha ?? 0).ToString("0.00") + " psi"; txtBico_Pressao.Text = (rover?.Atuador?.PressaoLinhaPsi ?? 0).ToString("0.00") + " psi";
txtBico_Atuacoes.Text = (bico?.Atuacoes ?? 0).ToString(); txtBico_Atuacoes.Text = (bico?.QtdAtuacoes ?? 0).ToString();
if (inicial) if (inicial)
{ {
txtBico_AnguloAbertura.Text = (bico?.AnguloAbertura ?? 0).ToString(); txtBico_AnguloAbertura.Text = (bico?.AnguloAbertura ?? 0).ToString();
sldBico_Angular.Value = (bico?.AnguloControle ?? 0); sldBico_Angular.Value = (bico?.ComandoAngulo ?? 0);
} }
lblBico_Angulo.Foreground = new SolidColorBrush(Math.Round(sldBico_Angular.Value) == Math.Round(bico?.AnguloControle ?? 0, 0) ? System.Windows.Media.Colors.Black : System.Windows.Media.Colors.Red); lblBico_Angulo.Foreground = new SolidColorBrush(Math.Round(sldBico_Angular.Value) == (bico?.ComandoAngulo ?? 0) ? System.Windows.Media.Colors.Black : System.Windows.Media.Colors.Red);
txtBico_AnguloAbertura.Foreground = new SolidColorBrush(Convert.ToInt32(txtBico_AnguloAbertura.Text) == Convert.ToInt32(bico?.AnguloAbertura ?? 0) ? System.Windows.Media.Colors.Black : System.Windows.Media.Colors.Red); txtBico_AnguloAbertura.Foreground = new SolidColorBrush(Convert.ToInt32(txtBico_AnguloAbertura.Text) == Convert.ToInt32(bico?.AnguloAbertura ?? 0) ? System.Windows.Media.Colors.Black : System.Windows.Media.Colors.Red);
break; break;
} }
@ -1097,15 +1138,29 @@ namespace OperationControl.Windows
{ {
panelOpcoes_Bomba.Visibility = Visibility.Visible; panelOpcoes_Bomba.Visibility = Visibility.Visible;
bool comando = rover?.Atuador?.ComandoBomba ?? false; var bomba = rover?.Atuador?.Bombas?.FirstOrDefault(x => x.ID == label);
bool leitura = rover?.Atuador?.LeituraComandoBomba ?? false; bool comando = bomba?.ComandoEstado ?? false;
var potencia = rover?.Atuador?.LeituraPotenciaBomba ?? 0; bool leitura = bomba?.LeituraEstado ?? false;
var potencia = bomba?.Potencia ?? 0;
txtBomba_Comando.Text = comando ? "Ligado" : "Desligado"; txtBomba_Comando.Text = comando ? "Ligado" : "Desligado";
txtBomba_StatusReal.Text = leitura ? "Ligado" : "Desligado"; txtBomba_StatusReal.Text = leitura ? "Ligado" : "Desligado";
txtBomba_PressaoLinha.Text = (rover?.Atuador?.PressaoLinha ?? 0).ToString("0.00") + " psi"; txtBomba_PressaoLinha.Text = (rover?.Atuador?.PressaoLinhaPsi ?? 0).ToString("0.00") + " psi";
txtBomba_Potencia.Text = potencia.ToString("0") + " %"; txtBomba_Potencia.Text = potencia.ToString("0") + " %";
break; break;
} }
case AgroBase.Models.Enums.S_Code.sSRV:
{
panelOpcoes_Servo.Visibility = Visibility.Visible;
var servo = rover?.Sensoriamento?.Servos?.FirstOrDefault(x => x.ID == label);
int comando = servo?.ComandoAngulo ?? 0;
int leitura = servo?.LeituraAngulo ?? 0;
bool inc = servo?.Incremental ?? false;
txtServo_Comando.Text = $"{comando}°";
txtServo_Leitura.Text = $"{leitura}°";
txtServo_Incremental.Text = inc ? "Incremental" : "Decremental";
break;
}
default: default:
txtOpcoes_SemDados.Visibility = Visibility.Visible; txtOpcoes_SemDados.Visibility = Visibility.Visible;
break; break;
@ -1121,22 +1176,22 @@ namespace OperationControl.Windows
{ {
panelOpcoes_Rele.Visibility = Visibility.Visible; panelOpcoes_Rele.Visibility = Visibility.Visible;
var rele = rover?.Reles?.FirstOrDefault(x => x.Key == label).Value; var rele = rover?.Sensoriamento?.Reles?.FirstOrDefault(x => x.ID == label);
bool comando = rele?.Item1 ?? false; bool comando = rele?.ComandoEstado ?? false;
bool leitura = rele?.Item2 ?? false; bool leitura = rele?.LeituraEstado ?? false;
txtRele_Titulo.Text = $"Relé {label} - Testes"; txtRele_Titulo.Text = $"Relé {label} - Testes";
txtRele_Comando.Text = comando ? "Ligado" : "Desligado"; txtRele_Comando.Text = comando ? "Ligado" : "Desligado";
txtRele_StatusReal.Text = leitura ? "Ligado" : "Desligado"; txtRele_StatusReal.Text = leitura ? "Ligado" : "Desligado";
break; break;
} }
case AgroBase.Models.Enums.S_Code.sFRO: case AgroBase.Models.Enums.S_Code.sSRV:
{ {
panelOpcoes_Servo.Visibility = Visibility.Visible; panelOpcoes_Servo.Visibility = Visibility.Visible;
var servo = rover?.Servos?.FirstOrDefault(x => x.Key == label).Value; var servo = rover?.Sensoriamento?.Servos?.FirstOrDefault(x => x.ID == label);
int comando = servo?.Item1 ?? 0; int comando = servo?.ComandoAngulo ?? 0;
int leitura = servo?.Item2 ?? 0; int leitura = servo?.LeituraAngulo ?? 0;
bool inc = servo?.Item3 ?? false; bool inc = servo?.Incremental ?? false;
txtServo_Comando.Text = $"{comando}°"; txtServo_Comando.Text = $"{comando}°";
txtServo_Leitura.Text = $"{leitura}°"; txtServo_Leitura.Text = $"{leitura}°";
txtServo_Incremental.Text = inc ? "Incremental" : "Decremental"; txtServo_Incremental.Text = inc ? "Incremental" : "Decremental";
@ -1153,7 +1208,7 @@ namespace OperationControl.Windows
{ {
panelOpcoes_Direcional.Visibility = Visibility.Visible; panelOpcoes_Direcional.Visibility = Visibility.Visible;
var mod = rover?.Direcional?.Dados?.FirstOrDefault(x => x.Modulo_ID == label); var mod = rover?.Direcional?.Modulos?.FirstOrDefault(x => x.Mod_ID == label);
AgroBase.Models.Enums.Sentido sentido_sp = mod?.Sentido_SP ?? AgroBase.Models.Enums.Sentido.Parado; AgroBase.Models.Enums.Sentido sentido_sp = mod?.Sentido_SP ?? AgroBase.Models.Enums.Sentido.Parado;
AgroBase.Models.Enums.Sentido sentido = mod?.SentidoReal ?? AgroBase.Models.Enums.Sentido.Parado; AgroBase.Models.Enums.Sentido sentido = mod?.SentidoReal ?? AgroBase.Models.Enums.Sentido.Parado;
double angulo_sp = mod?.Angulo_SP ?? 0; double angulo_sp = mod?.Angulo_SP ?? 0;
@ -1169,7 +1224,7 @@ namespace OperationControl.Windows
{ {
panelOpcoes_GPS.Visibility = Visibility.Visible; panelOpcoes_GPS.Visibility = Visibility.Visible;
var dados = rover?.Gps; var dados = rover?.Gnss;
if (inicial) if (inicial)
{ {
sldGps_LeverArmLateral.Value = (dados?.LeverArmLateral ?? 0) / 10.0; sldGps_LeverArmLateral.Value = (dados?.LeverArmLateral ?? 0) / 10.0;
@ -1183,7 +1238,7 @@ namespace OperationControl.Windows
txtGps_Idade.Text = (dados?.IdadeCorrecao ?? -1).ToString(); txtGps_Idade.Text = (dados?.IdadeCorrecao ?? -1).ToString();
txtGps_Precisao.Text = (dados?.PrecisaoCm ?? -1).ToString(); txtGps_Precisao.Text = (dados?.PrecisaoCm ?? -1).ToString();
txtGps_NSatelites.Text = (dados?.NumeroSatelites ?? 0).ToString(); txtGps_NSatelites.Text = (dados?.NumeroSatelites ?? 0).ToString();
txtGps_DistBase.Text = (Variaveis.GpsService.IsConnected ? AgroBase.Models.GPSUtils.DistanciaEntrePontos(dados ?? new AgroBase.Models.GPSModel(), Variaveis.GpsService.UltimaLeitura) : 0).ToString(); txtGps_DistBase.Text = (Variaveis.GpsService.IsConnected ? AgroBase.Models.GPSUtils.DistanciaEntrePontos(dados?.ToGpsModel() ?? new AgroBase.Models.GPSModel(), Variaveis.GpsService.UltimaLeitura) : 0).ToString();
txtGps_Orientacao.Text = (dados?.OrientacaoReal ?? 0).ToString(); txtGps_Orientacao.Text = (dados?.OrientacaoReal ?? 0).ToString();
break; break;
@ -1207,7 +1262,7 @@ namespace OperationControl.Windows
{ {
panelOpcoes_NPC.Visibility = Visibility.Visible; panelOpcoes_NPC.Visibility = Visibility.Visible;
var dados = rover?.CoolerControl; var dados = rover?.Refrigeracao;
var modo = dados?.Modo ?? AgroBase.Services.CoolerControlService.CoolerMode.Off; var modo = dados?.Modo ?? AgroBase.Services.CoolerControlService.CoolerMode.Off;
double tmp = dados?.Temperatura ?? 0; double tmp = dados?.Temperatura ?? 0;
@ -1438,14 +1493,25 @@ namespace OperationControl.Windows
private void btnServo_Enviar_Click(object sender, RoutedEventArgs e) private void btnServo_Enviar_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);
if (modulo != AgroBase.Models.Enums.T_Code.Sen && s_code != AgroBase.Models.Enums.S_Code.sFRO) if (s_code != AgroBase.Models.Enums.S_Code.sFRO)
return; return;
var servo = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Servos?.FirstOrDefault(x => x.Key == label).Value; if (modulo == AgroBase.Models.Enums.T_Code.Sen)
double angulo = Convert.ToInt32(sldServo_Angulo.Value); {
if (!(servo?.Item3 ?? false)) angulo = 180 - angulo; var servo = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Sensoriamento?.Servos?.FirstOrDefault(x => x.ID == label);
double angulo = Convert.ToInt32(sldServo_Angulo.Value);
if (!(servo?.Incremental ?? false)) angulo = 180 - angulo;
VariaveisControleOperacao.EnviarComandoSensoriamento(label, status: angulo); VariaveisControleOperacao.EnviarComandoSensoriamento(label, status: angulo);
}
else if (modulo == AgroBase.Models.Enums.T_Code.Atu)
{
var servo = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.Servos?.FirstOrDefault(x => x.ID == label);
double angulo = Convert.ToInt32(sldServo_Angulo.Value);
if (!(servo?.Incremental ?? false)) angulo = 180 - angulo;
VariaveisControleOperacao.EnviarComandoAtuador(label, angulo_controle: (int)angulo);
}
} }
private void sldServo_Angulo_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) private void sldServo_Angulo_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
@ -1541,7 +1607,7 @@ namespace OperationControl.Windows
#region POSICAO #region POSICAO
public void AtualizarDadosTela_GNSS(AgroBase.Models.GPSModel dados, string? marker_id = null, double progresso = double.NaN) public void AtualizarDadosTela_GNSS(AgroBase.Models.Operacoes.OperacaoParametrosDadosGNSSModel dados, string? marker_id = null, double progresso = double.NaN)
{ {
Application.Current.Dispatcher.BeginInvoke(new Action(() => Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{ {
@ -1549,11 +1615,11 @@ namespace OperationControl.Windows
{ {
bool dados_base = marker_id == VariaveisControleOperacao.BaseMarkerID; bool dados_base = marker_id == VariaveisControleOperacao.BaseMarkerID;
lblGNSS_Posicao.Foreground = new SolidColorBrush(dados.Inicializado ? System.Windows.Media.Colors.Green : System.Windows.Media.Colors.Red); lblGNSS_Posicao.Foreground = new SolidColorBrush(dados.Iniciado ? System.Windows.Media.Colors.Green : System.Windows.Media.Colors.Red);
lblGNSS_Correcao.Content = $"Correção {dados.QualidadeFix} " + lblGNSS_Correcao.Content = $"Correção {dados.QualidadeFix} " +
(dados.QualidadeFix == AgroBase.Models.Enums.TiposCorrecaoGPS.BaseFix ? (dados.QualidadeFix == AgroBase.Models.Enums.TiposCorrecaoGPS.BaseFix ?
(dados.OrientacaoReal.ToString("0.00") + "°") : (dados.OrientacaoReal.ToString("0.00") + "°") :
((dados.Ntrip_ativado ? "N" : "B") + $" {dados.IdadeCorrecao.ToString("0.0")} s")); ((dados.NtripAtivado ? "N" : "B") + $" {dados.IdadeCorrecao.ToString("0.0")} s"));
lblGNSS_Satelites.Content = $"Satélites {dados.NumeroSatelites} ({dados.PrecisaoCm.ToString("0.00")} cm)"; lblGNSS_Satelites.Content = $"Satélites {dados.NumeroSatelites} ({dados.PrecisaoCm.ToString("0.00")} cm)";
lblGNSS_Altitude.Content = $"Altitude {dados.Altitude.ToString("0.00")} m"; lblGNSS_Altitude.Content = $"Altitude {dados.Altitude.ToString("0.00")} m";
@ -1902,15 +1968,17 @@ namespace OperationControl.Windows
#region PULVERIZADOR #region PULVERIZADOR
private void AtualizarDadosTela_Pulverizador(AgroBase.Models.OperacaoSensoriamentoLogModel dados) private void AtualizarDadosTela_Pulverizador(AgroBase.Models.Operacoes.OperacaoParametrosDadosModel dados)
{ {
var bomba = dados.Atuador?.Bombas?.FirstOrDefault();
ATU.ComprimentoBarraCm = AgroBase.Models.VariaveisEquipamento.ComprimentoBarraPulverizadoraCm; ATU.ComprimentoBarraCm = AgroBase.Models.VariaveisEquipamento.ComprimentoBarraPulverizadoraCm;
ATU.DistanciaEntreBicosCm = AgroBase.Models.VariaveisEquipamento.DistanciaEntreBicosCm; ATU.DistanciaEntreBicosCm = AgroBase.Models.VariaveisEquipamento.DistanciaEntreBicosCm;
ATU.AlturaBarra = dados?.Controle?.AlturaBarra ?? AgroBase.Models.VariaveisEquipamento.AlturaBarraPulverizadoraCm; ATU.AlturaBarra = dados?.Controle?.AlturaBarra ?? AgroBase.Models.VariaveisEquipamento.AlturaBarraPulverizadoraCm;
ATU.IsBombaOn = dados?.Atuador?.LeituraComandoBomba ?? false; ATU.IsBombaOn = bomba?.LeituraEstado ?? false;
ATU.PressaoLinha = dados?.Atuador?.PressaoLinha ?? 0; ATU.PressaoLinha = dados?.Atuador?.PressaoLinhaPsi ?? 0;
ATU.VazaoInstantanea = dados?.Atuador?.VazaoInstantanea ?? 0; ATU.VazaoInstantanea = dados?.Atuador?.VazaoInstantaneaMLs ?? 0;
ATU.TempoAtuado = (dados?.Atuador?.TempoBombaAtuada ?? 0) / 1000.0; ATU.TempoAtuado = (bomba?.TempoAtuado ?? 0) / 1000.0;
double erroLateral = ((dados?.Trajetoria?.DistanciaEsquerda ?? 0) - (dados?.Trajetoria?.DistanciaDireita ?? 0)) / 2.0 * 100.0; double erroLateral = ((dados?.Trajetoria?.DistanciaEsquerda ?? 0) - (dados?.Trajetoria?.DistanciaDireita ?? 0)) / 2.0 * 100.0;
ATU.LarguraRuaCm = 100.0; ATU.LarguraRuaCm = 100.0;
@ -1927,11 +1995,11 @@ namespace OperationControl.Windows
if (_bc == null) continue; if (_bc == null) continue;
bico.OpeningAngle = _bc.AnguloAbertura; bico.OpeningAngle = _bc.AnguloAbertura;
bico.AnguloControle = _bc.AnguloControle; bico.AnguloControle = _bc.ComandoAngulo;
bico.IsCommandOn = _bc.Atuado; bico.IsCommandOn = _bc.ComandoEstado;
bico.IsSpraying = _bc.StatusBico; bico.IsSpraying = _bc.LeituraEstado;
bico.Vazao = _bc.MediaNivelFluxo; bico.Vazao = _bc.MediaVazaoMLs;
bico.Atuacoes = _bc.Atuacoes; bico.Atuacoes = _bc.QtdAtuacoes;
bico.TempoAtuado = _bc.TempoAtuado / 1000.0; bico.TempoAtuado = _bc.TempoAtuado / 1000.0;
} }
} }