ajustes no fluxo principal

This commit is contained in:
Diego Freitas 2025-03-28 17:05:38 -03:00
parent 3cfb100c86
commit ec7239b9ab
17 changed files with 106 additions and 381 deletions

Binary file not shown.

View File

@ -1316,9 +1316,13 @@ namespace AgroBase.Forms.Operacoes
int dado = (cmbMOV_Temperatura_Componente.SelectedIndex) / 4; int dado = (cmbMOV_Temperatura_Componente.SelectedIndex) / 4;
txtMOV_Temperatura_Media.Text = LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && (chbMOV_Temperatura_Media.Checked ? x.Modulo_ID == ID : true)).Average(x => dado == 0 ? x.Temperatura : x.TemperaturaDriver).ToString("0.00"); double RetornaDadoTemperatura(MovSensoriamentoLogModel x) => dado == 0 ? x?.Temperatura ?? 0 : x?.TemperaturaDriver ?? 0;
txtMOV_Temperatura_Mediana.Text = FuncoesMatematicas.CalcularMediana(LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && (chbMOV_Temperatura_Moda.Checked ? x.Modulo_ID == ID : true)).Select(x => dado == 0 ? x.Temperatura : x.TemperaturaDriver).ToList()).ToString("0.00");
txtMOV_Temperatura_Moda.Text = FuncoesMatematicas.CalcularModa(LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && (chbMOV_Temperatura_Mediana.Checked ? x.Modulo_ID == ID : true)).Select(x => dado == 0 ? x.Temperatura : x.TemperaturaDriver).ToList()).ToString("0.00"); double valMin = 0;
txtMOV_Temperatura_Media.Text = LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && RetornaDadoTemperatura(x) > valMin && (chbMOV_Temperatura_Media.Checked ? x.Modulo_ID == ID : true)).DefaultIfEmpty().Average(x => RetornaDadoTemperatura(x)).ToString("0.00");
txtMOV_Temperatura_Mediana.Text = FuncoesMatematicas.CalcularMediana(LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && RetornaDadoTemperatura(x) > valMin && (chbMOV_Temperatura_Moda.Checked ? x.Modulo_ID == ID : true)).DefaultIfEmpty().Select(x => RetornaDadoTemperatura(x)).ToList()).ToString("0.00");
txtMOV_Temperatura_Moda.Text = FuncoesMatematicas.CalcularModa(LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && RetornaDadoTemperatura(x) > valMin && (chbMOV_Temperatura_Mediana.Checked ? x.Modulo_ID == ID : true)).DefaultIfEmpty().Select(x => RetornaDadoTemperatura(x)).ToList()).ToString("0.00");
} }
if (cmbMOV_AlImentacao_Componente.SelectedIndex > -1) if (cmbMOV_AlImentacao_Componente.SelectedIndex > -1)
@ -1335,9 +1339,13 @@ namespace AgroBase.Forms.Operacoes
int dado = (cmbMOV_AlImentacao_Componente.SelectedIndex) / 4; int dado = (cmbMOV_AlImentacao_Componente.SelectedIndex) / 4;
txtMOV_Alimentacao_Media.Text = LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && (chbMOV_Alimentacao_Media.Checked ? x.Modulo_ID == ID : true)).Average(x => dado == 0 ? x.Tensao : dado == 1 ? x.Corrente_Motor : dado == 2 ? x.Corrente_Barramento : dado == 3 ? x.Potencia : x.CicloTrabalho).ToString("0.00"); double RetornaDadoAlimentacao(MovSensoriamentoLogModel x) => dado == 0 ? x?.Tensao ?? 0 : dado == 1 ? x?.Corrente_Motor ?? 0 : dado == 2 ? x?.Corrente_Barramento ?? 0 : dado == 3 ? x?.Potencia ?? 0 : x?.CicloTrabalho ?? 0;
txtMOV_Alimentacao_Mediana.Text = FuncoesMatematicas.CalcularMediana(LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && (chbMOV_Alimentacao_Moda.Checked ? x.Modulo_ID == ID : true)).Select(x => dado == 0 ? x.Tensao : dado == 1 ? x.Corrente_Motor : dado == 2 ? x.Corrente_Barramento : dado == 3 ? x.Potencia : x.CicloTrabalho).ToList()).ToString("0.00");
txtMOV_Alimentacao_Moda.Text = FuncoesMatematicas.CalcularModa(LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && (chbMOV_Alimentacao_Mediana.Checked ? x.Modulo_ID == ID : true)).Select(x => dado == 0 ? x.Tensao : dado == 1 ? x.Corrente_Motor : dado == 2 ? x.Corrente_Barramento : dado == 3 ? x.Potencia : x.CicloTrabalho).ToList()).ToString("0.00"); double valMin = 0;
txtMOV_Alimentacao_Media.Text = LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && RetornaDadoAlimentacao(x) > valMin && (chbMOV_Alimentacao_Media.Checked ? x.Modulo_ID == ID : true)).DefaultIfEmpty().Average(x => RetornaDadoAlimentacao(x)).ToString("0.00");
txtMOV_Alimentacao_Mediana.Text = FuncoesMatematicas.CalcularMediana(LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && RetornaDadoAlimentacao(x) > valMin && (chbMOV_Alimentacao_Moda.Checked ? x.Modulo_ID == ID : true)).DefaultIfEmpty().Select(x => RetornaDadoAlimentacao(x)).ToList()).ToString("0.00");
txtMOV_Alimentacao_Moda.Text = FuncoesMatematicas.CalcularModa(LogsMovimentacao.Where(x => x.Momento <= MomentoAtual && RetornaDadoAlimentacao(x) > valMin && (chbMOV_Alimentacao_Mediana.Checked ? x.Modulo_ID == ID : true)).DefaultIfEmpty().Select(x => RetornaDadoAlimentacao(x)).ToList()).ToString("0.00");
} }
} }

View File

@ -1,18 +1,14 @@
using AgroBase.Forms.Operacoes; using AgroBase.Models.Modules;
using AgroBase.Models.Modules;
using AgroBase.Services; using AgroBase.Services;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows.Forms;
using static AgroBase.Models.Enums; using static AgroBase.Models.Enums;
namespace AgroBase.Models.Operacoes namespace AgroBase.Models.Operacoes
{ {
public class OperacaoMapaGPSModel public class OperacaoMapaGPSModel
{ {
public Form frmOperacao { get; set; } = new frmOperacaoMapaGPS();
public string frmOperacaoNome { get; set; } = "frmOperacaoMapaGPS";
public OperacaoMapaGPSSensoriamentoModel Sensoriamento { get; set; } = new OperacaoMapaGPSSensoriamentoModel(); public OperacaoMapaGPSSensoriamentoModel Sensoriamento { get; set; } = new OperacaoMapaGPSSensoriamentoModel();
#region DIRECIONAL #region DIRECIONAL
@ -24,7 +20,15 @@ namespace AgroBase.Models.Operacoes
return; return;
} }
switch (Variaveis.OperacaoEmAndamento.Controle.TipoControleDirecional) var Controle = Variaveis.OperacaoEmAndamento.Controle;
if (Variaveis.OperacaoEmAndamento.StatusAtual != StatusOperacao.EmAndamento)
{
Controle.Angulo = 0;
return;
}
switch (Controle.TipoControleDirecional)
{ {
case TiposControladorDirecional.PID: case TiposControladorDirecional.PID:
{ {
@ -33,15 +37,13 @@ namespace AgroBase.Models.Operacoes
} }
case TiposControladorDirecional.MPC: case TiposControladorDirecional.MPC:
{ {
var MPC = Variaveis.OperacaoEmAndamento.Controle.ControladorMPC; var MPC = Controle.ControladorMPC;
var Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria; var Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria;
(double steeringAngle, Enums.TipoMovimentoDirecional mode) = MPC.ComputeControl( (double steeringAngle, Enums.TipoMovimentoDirecional mode) = MPC.ComputeControl(
GPSService.UltimaLeitura.Latitude, GPSService.UltimaLeitura.Longitude, Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.AnguloCarroDefinido, GPSService.UltimaLeitura.Latitude, GPSService.UltimaLeitura.Longitude, Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.AnguloCarroDefinido,
Trajetoria.ProximoPonto.Posicao.Latitude, Trajetoria.ProximoPonto.Posicao.Longitude, Trajetoria.ProximoPonto.Orientacao, Trajetoria.ProximoPonto.Posicao.Latitude, Trajetoria.ProximoPonto.Posicao.Longitude, Trajetoria.ProximoPonto.Orientacao,
Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP, Trajetoria.DistanciaEsquerda, Trajetoria.DistanciaDireita, new List<Obstaculo>()); Controle.PercentualVelocidadeSP, Trajetoria.DistanciaEsquerda, Trajetoria.DistanciaDireita, new List<Obstaculo>());
var Controle = Variaveis.OperacaoEmAndamento.Controle;
Controle.Angulo = steeringAngle; Controle.Angulo = steeringAngle;
Controle.TipoMovimento = mode; Controle.TipoMovimento = mode;
@ -208,19 +210,20 @@ namespace AgroBase.Models.Operacoes
} }
var Controle = Variaveis.OperacaoEmAndamento.Controle; var Controle = Variaveis.OperacaoEmAndamento.Controle;
var statusAtual = Variaveis.OperacaoEmAndamento.Trajetoria.StatusAtual;
if (Variaveis.OperacaoEmAndamento.StatusAtual != StatusOperacao.EmAndamento)
{
Controle.PercentualVelocidadeSP = 0;
return;
}
Controle.PercentualVelocidadeSP = CalcularVelocidadeRelativa(Controle); Controle.PercentualVelocidadeSP = CalcularVelocidadeRelativa(Controle);
switch (statusAtual) switch (Variaveis.OperacaoEmAndamento.Trajetoria.StatusAtual)
{ {
case StatusCarroMapa.Parado: case StatusCarroMapa.Parado:
{ {
var BicosNaoAtuados = new List<AtuadorBicoModel>(Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores);
BicosNaoAtuados.ForEach(x => x.ComandoAtuar = false);
Controle.BicosAtuados = new List<AtuadorBicoModel>(BicosNaoAtuados.ToList());
Controle.PercentualVelocidadeSP = 0; Controle.PercentualVelocidadeSP = 0;
Controle.Angulo = 0;
break; break;
} }
case StatusCarroMapa.Direcionando: case StatusCarroMapa.Direcionando:
@ -295,13 +298,25 @@ namespace AgroBase.Models.Operacoes
#endregion #endregion
public void CalculaDadosMovimentacaoAutonoma() #region ATUADOR
{
DefinirDadosControleMov();
DefinirDadosControleDir(); public void DefinirDadosControleAtu()
{
var Controle = Variaveis.OperacaoEmAndamento.Controle;
if (Variaveis.OperacaoEmAndamento.StatusAtual != StatusOperacao.EmAndamento)
{
var BicosNaoAtuados = new List<AtuadorBicoModel>(Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores ?? new List<AtuadorBicoModel>());
BicosNaoAtuados.ForEach(x => x.ComandoAtuar = false);
Controle.BicosAtuados = new List<AtuadorBicoModel>(BicosNaoAtuados.ToList());
return;
} }
Controle.BicosAtuados = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores?.Select(x => x?.Clone() ?? new AtuadorBicoModel()).DefaultIfEmpty().ToList();
}
#endregion
} }
public class OperacaoMapaGPSSensoriamentoModel public class OperacaoMapaGPSSensoriamentoModel

View File

@ -76,8 +76,15 @@ namespace AgroBase.Models
switch (Variaveis.OperacaoEmAndamento.Modo) switch (Variaveis.OperacaoEmAndamento.Modo)
{ {
case ModoOperacao.Manual: case ModoOperacao.Manual:
{
if (Variaveis.OperacaoEmAndamento.OperacaoLiberada)
{ {
etapaAtual = StatusOperacao.EmAndamento; etapaAtual = StatusOperacao.EmAndamento;
}
else
{
etapaAtual = StatusOperacao.Parado;
}
break; break;
} }
case ModoOperacao.MapaGPS: case ModoOperacao.MapaGPS:
@ -225,6 +232,7 @@ namespace AgroBase.Models
if (parametrosMandatorios.Any(x => x.Mandatorio && x.Parametro == ParametrosOperacao.Mapa) && !Variaveis.OperacaoEmAndamento.Mapa.mapaService.Carregado) _operacaoLiberada = false; if (parametrosMandatorios.Any(x => x.Mandatorio && x.Parametro == ParametrosOperacao.Mapa) && !Variaveis.OperacaoEmAndamento.Mapa.mapaService.Carregado) _operacaoLiberada = false;
if (parametrosMandatorios.Any(x => x.Mandatorio && x.Parametro == ParametrosOperacao.Joystick) && GeneralJoystick.JoystickConectado == null) _operacaoLiberada = false; if (parametrosMandatorios.Any(x => x.Mandatorio && x.Parametro == ParametrosOperacao.Joystick) && GeneralJoystick.JoystickConectado == null) _operacaoLiberada = false;
if (!Variaveis.OperacaoEmAndamento.DispositivosIndividuaisConectados) _operacaoLiberada = false; if (!Variaveis.OperacaoEmAndamento.DispositivosIndividuaisConectados) _operacaoLiberada = false;
if (Variaveis.OperacaoEmAndamento.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Gps && x.Mandatorio && (!x.Conectado || Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.PrecisaoCm < GPSService.PrecisaoMinimaCm))) _operacaoLiberada = false; // Precisao baixa do GPS
} }
if (Variaveis.DebugMode) _operacaoLiberada = true; if (Variaveis.DebugMode) _operacaoLiberada = true;
@ -1247,7 +1255,7 @@ namespace AgroBase.Models
bool MovimentoLiberado = Variaveis.OperacaoEmAndamento.StatusAtual != StatusOperacao.Aguardando && Variaveis.OperacaoEmAndamento.StatusAtual != StatusOperacao.Parado && !MKS057DService.Referenciando; bool MovimentoLiberado = Variaveis.OperacaoEmAndamento.StatusAtual != StatusOperacao.Aguardando && Variaveis.OperacaoEmAndamento.StatusAtual != StatusOperacao.Parado && !MKS057DService.Referenciando;
if (MovimentoLiberado) if (MovimentoLiberado || ForcarEnvio)
{ {
foreach (var Ctrl in _Controle.TiposControle) foreach (var Ctrl in _Controle.TiposControle)
{ {
@ -1262,7 +1270,7 @@ namespace AgroBase.Models
(IDispositivosService)Variaveis.OperacaoEmAndamento.DispAtu : (IDispositivosService)Variaveis.OperacaoEmAndamento.DispAtu :
(IDispositivosService)Variaveis.OperacaoEmAndamento.DispMvd; (IDispositivosService)Variaveis.OperacaoEmAndamento.DispMvd;
var Protocolos = EnviarProtocoloComando(disp, Ctrl.Tipo, ForcarEnvio); var Protocolos = EnviarProtocoloComando(disp, Ctrl.Tipo);
Ctrl.UltimoComando = Agora; Ctrl.UltimoComando = Agora;
Ctrl.Comandos.AddRange(Protocolos); Ctrl.Comandos.AddRange(Protocolos);
} }
@ -1270,9 +1278,9 @@ namespace AgroBase.Models
} }
} }
public List<string> EnviarProtocoloComando(IDispositivosService Dispositivo, T_Code Tipo, bool ForcarEnvio) public List<string> EnviarProtocoloComando(IDispositivosService Dispositivo, T_Code Tipo)
{ {
if (Dispositivo == null || !Iniciado) if (Dispositivo == null || !Variaveis.OperacaoEmAndamento.Iniciado)
{ {
return new List<string>(); return new List<string>();
} }
@ -1318,33 +1326,6 @@ namespace AgroBase.Models
{ {
Variaveis.OperacaoEmAndamento.OpMapaGPS.DefinirDadosControleDir(); Variaveis.OperacaoEmAndamento.OpMapaGPS.DefinirDadosControleDir();
/*if (_Controle.Angulo == 0)
{
_Controle.Direcao = Direcao.Parado;
}
else if (_Controle.Angulo < 0) // Ângulo negativo
{
if (_ControleAnterior.Angulo < _Controle.Angulo) // Movendo-se para menos negativo (ex: -30 → -10)
{
_Controle.Direcao = Direcao.Direita;
}
else if (_ControleAnterior.Angulo > _Controle.Angulo) // Movendo-se para mais negativo (ex: -10 → -30)
{
_Controle.Direcao = Direcao.Esquerda;
}
}
else if (_Controle.Angulo > 0) // Ângulo positivo
{
if (_ControleAnterior.Angulo > _Controle.Angulo) // Movendo-se para menos positivo (ex: 30 → 10)
{
_Controle.Direcao = Direcao.Esquerda;
}
else if (_ControleAnterior.Angulo < _Controle.Angulo) // Movendo-se para mais positivo (ex: 10 → 30)
{
_Controle.Direcao = Direcao.Direita;
}
}*/
if (_Controle.Angulo > 0) if (_Controle.Angulo > 0)
{ {
_Controle.Direcao = Direcao.Direita; _Controle.Direcao = Direcao.Direita;
@ -1379,7 +1360,7 @@ namespace AgroBase.Models
} }
else if (Dispositivo.Dados is AtuadorModel) else if (Dispositivo.Dados is AtuadorModel)
{ {
_Controle.BicosAtuados = ((AtuadorModel)Dispositivo.Dados).BicosPulverizadores.Select(x => x.Clone()).ToList(); Variaveis.OperacaoEmAndamento.OpMapaGPS.DefinirDadosControleAtu();
if (_ControleAnterior.BicosAtuados.Count() >= _Controle.BicosAtuados.Count()) if (_ControleAnterior.BicosAtuados.Count() >= _Controle.BicosAtuados.Count())
{ {
@ -1444,33 +1425,6 @@ namespace AgroBase.Models
} }
} }
/*public void AtualizarDadosControlePulverizador(bool ForcarEnvio)
{
if (Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico)
{
Variaveis.OperacaoEmAndamento.AtualizarControleAtuadores();
DateTime Agora = DateTime.Now;
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
OperacaoControleTipoModel ControleAtu = _Controle.TiposControle != null ? _Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Atu) : null;
if (ControleAtu != null && (Agora - ControleAtu.UltimoComando).TotalMilliseconds > ControleAtu.DelayEnvioComando)
{
// Enviar comando ATU
var Protocolos = EnviarProtocoloComando(Variaveis.OperacaoEmAndamento.DispAtu, T_Code.Atu, ForcarEnvio);
ControleAtu.UltimoComando = Agora;
ControleAtu.Comandos.AddRange(Protocolos);
}
}
}
public void AtualizarControleAtuadores()
{
Variaveis.OperacaoEmAndamento.Controle.BicosAtuados = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores.Select(x => x.Clone()).ToList();
}*/
private async Task tmrLeituras_Tick() private async Task tmrLeituras_Tick()
{ {
if (Variaveis.IsAgroMonitor) if (Variaveis.IsAgroMonitor)
@ -1828,18 +1782,8 @@ namespace AgroBase.Models
private void PararCarroOperacaoInterrompida(bool finalizar) private void PararCarroOperacaoInterrompida(bool finalizar)
{ {
Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP = 0; // Velocidade Zero (parado)
if (finalizar)
{
Variaveis.OperacaoEmAndamento.Controle.Angulo = 0; // Angulo Zero (direcional reto)
}
Variaveis.OperacaoEmAndamento.Controle.BicosAtuados.ForEach(x => x.ComandoAtuar = false); // Bicos desatuados
AtualizarDadosControle(true); AtualizarDadosControle(true);
//AtualizarDadosControlePulverizador(true);
if (finalizar) if (finalizar)
{ {
var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora; var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora;

View File

@ -43,6 +43,8 @@ namespace AgroBase.Services
public static bool CorrecaoRTK = true; public static bool CorrecaoRTK = true;
public static double PrecisaoMinimaCm { get; set; } = 100.0;
public static void AtualizarPortaCOM(SerialPort Porta) public static void AtualizarPortaCOM(SerialPort Porta)
{ {
if (PortaGPS == null) if (PortaGPS == null)
@ -453,7 +455,7 @@ namespace AgroBase.Services
PenultimaLeitura.TipoOrientacao = UltimaLeitura.TipoOrientacao; PenultimaLeitura.TipoOrientacao = UltimaLeitura.TipoOrientacao;
UltimaLeitura.Momento = DateTime.Now; UltimaLeitura.Momento = DateTime.Now;
UltimaLeitura.OrientacaoReal = headingTrue; UltimaLeitura.OrientacaoReal = (headingTrue + 180) % 360; // Inverter o angulo lido para normalizar com o angulo calculado entre leituras
UltimaLeitura.TipoOrientacao = status; UltimaLeitura.TipoOrientacao = status;
// ✅ Atualiza o ângulo unificado no GPSService // ✅ Atualiza o ângulo unificado no GPSService

View File

@ -1 +1 @@
{"tmrRegistrador":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":500,"StackTrace":"AtuadorModel.IniciarRegistrador","Id":"tmrRegistrador_Atu","TimeTick":"00:00:00"},"Modulo_ID":"Atu","IP":"192.168.100.13","RequisitarDados":true,"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B02","Posicao":2,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B03","Posicao":3,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B04","Posicao":4,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0}],"BombasPressurizadoras":[{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","LimiteMaximo":120.0,"LimiteMinimo":60.0}],"BombaPressurizadora":{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false},"ScriptDeteccaoErvas":"weed_detector_oak-1_0.py","DadosLeitura":{"Momento":"0001-01-01T00:00:00","Conectado":false,"Mod_ID":null,"QualidadeWifi":0,"LatenciaLoop":0,"BicosPulverizadores":[],"BombasPressurizadoras":[],"SensoresFluxo":[],"SensoresMassa":[],"SensoresPressao":[]},"_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"MassaReservatorio":0.0,"VolumeReservatorio":0.0,"PercentualReservatorio":0.0,"VolumeVazaoAferido":0.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"VazaoFluxoMLpSInstantanea":0.0,"VazaoFluxoMLpSMedia":0.0,"VolumeVazaoML":0.0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"PressaoLinha":0.0,"PressaoLinhaCalc":0.0,"PercentualErvasTerreno":0.0} {"tmrRegistrador":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":500,"StackTrace":"AtuadorModel.IniciarRegistrador","Id":"tmrRegistrador_Atu","TimeTick":"00:00:00"},"Modulo_ID":"Atu","IP":"192.168.100.13","RequisitarDados":true,"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B02","Posicao":2,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B03","Posicao":3,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B04","Posicao":4,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.02674584437758935,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0}],"BombasPressurizadoras":[{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","LimiteMaximo":120.0,"LimiteMinimo":60.0}],"BombaPressurizadora":{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false},"ScriptDeteccaoErvas":"weed_detector_oak-1_0.py","DadosLeitura":{"Momento":"0001-01-01T00:00:00","Conectado":false,"Mod_ID":null,"QualidadeWifi":0,"LatenciaLoop":0,"BicosPulverizadores":[],"BombasPressurizadoras":[],"SensoresFluxo":[],"SensoresMassa":[],"SensoresPressao":[]},"_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"MassaReservatorio":0.0,"VolumeReservatorio":0.0,"PercentualReservatorio":0.0,"VolumeVazaoAferido":0.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"VazaoFluxoMLpSInstantanea":0.0,"VazaoFluxoMLpSMedia":0.0,"VolumeVazaoML":0.0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"PressaoLinha":0.0,"PressaoLinhaCalc":0.0,"PercentualErvasTerreno":0.0}

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

@ -25,7 +25,7 @@
<meta name="viewport" content="width=device-width, <meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style> <style>
#map_0c3554ee11c5591d304c0c6d4d52e50e { #map_c17ce78bff49a7401eff2508c6dcc0c3 {
position: relative; position: relative;
width: 100.0%; width: 100.0%;
height: 100.0%; height: 100.0%;
@ -39,14 +39,14 @@
<body> <body>
<div class="folium-map" id="map_0c3554ee11c5591d304c0c6d4d52e50e" ></div> <div class="folium-map" id="map_c17ce78bff49a7401eff2508c6dcc0c3" ></div>
</body> </body>
<script> <script>
var map_0c3554ee11c5591d304c0c6d4d52e50e = L.map( var map_c17ce78bff49a7401eff2508c6dcc0c3 = L.map(
"map_0c3554ee11c5591d304c0c6d4d52e50e", "map_c17ce78bff49a7401eff2508c6dcc0c3",
{ {
center: [0.0, 0.0], center: [0.0, 0.0],
crs: L.CRS.EPSG3857, crs: L.CRS.EPSG3857,
@ -59,6 +59,15 @@
var tile_layer_b68aee685770afdb7f454cf948fb9b33 = L.tileLayer(
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
);
tile_layer_b68aee685770afdb7f454cf948fb9b33.addTo(map_c17ce78bff49a7401eff2508c6dcc0c3);
</script> </script>
<script> <script>
@ -78,7 +87,7 @@
} }
trajeto_json_add({"features": []}); trajeto_json_add({"features": []});
trajeto_json.addTo(map_0c3554ee11c5591d304c0c6d4d52e50e); trajeto_json.addTo(map_c17ce78bff49a7401eff2508c6dcc0c3);
function adicionarGeometria(novaGeometria) { function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria); trajeto_json.addData(novaGeometria);
@ -136,7 +145,7 @@
var marcadorDinamico = L.marker([0, 0], { var marcadorDinamico = L.marker([0, 0], {
icon: customIcon icon: customIcon
}).addTo(map_0c3554ee11c5591d304c0c6d4d52e50e); }).addTo(map_c17ce78bff49a7401eff2508c6dcc0c3);
// Conectar ao broker MQTT // Conectar ao broker MQTT
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
@ -174,7 +183,7 @@
marcadorDinamico.setRotationAngle(angulo); marcadorDinamico.setRotationAngle(angulo);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]); adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
map_0c3554ee11c5591d304c0c6d4d52e50e.setView(novaPosicao, map_0c3554ee11c5591d304c0c6d4d52e50e.getZoom()); map_c17ce78bff49a7401eff2508c6dcc0c3.setView(novaPosicao, map_c17ce78bff49a7401eff2508c6dcc0c3.getZoom());
}); });
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) { function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {

File diff suppressed because one or more lines are too long