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;
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");
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 RetornaDadoTemperatura(MovSensoriamentoLogModel x) => dado == 0 ? x?.Temperatura ?? 0 : x?.TemperaturaDriver ?? 0;
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)
@ -1335,9 +1339,13 @@ namespace AgroBase.Forms.Operacoes
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");
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 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;
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 System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using static AgroBase.Models.Enums;
namespace AgroBase.Models.Operacoes
{
public class OperacaoMapaGPSModel
{
public Form frmOperacao { get; set; } = new frmOperacaoMapaGPS();
public string frmOperacaoNome { get; set; } = "frmOperacaoMapaGPS";
public OperacaoMapaGPSSensoriamentoModel Sensoriamento { get; set; } = new OperacaoMapaGPSSensoriamentoModel();
#region DIRECIONAL
@ -24,7 +20,15 @@ namespace AgroBase.Models.Operacoes
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:
{
@ -33,15 +37,13 @@ namespace AgroBase.Models.Operacoes
}
case TiposControladorDirecional.MPC:
{
var MPC = Variaveis.OperacaoEmAndamento.Controle.ControladorMPC;
var MPC = Controle.ControladorMPC;
var Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria;
(double steeringAngle, Enums.TipoMovimentoDirecional mode) = MPC.ComputeControl(
GPSService.UltimaLeitura.Latitude, GPSService.UltimaLeitura.Longitude, Variaveis.OperacaoEmAndamento.Sensoriamento.Gps.AnguloCarroDefinido,
Trajetoria.ProximoPonto.Posicao.Latitude, Trajetoria.ProximoPonto.Posicao.Longitude, Trajetoria.ProximoPonto.Orientacao,
Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP, Trajetoria.DistanciaEsquerda, Trajetoria.DistanciaDireita, new List<Obstaculo>());
var Controle = Variaveis.OperacaoEmAndamento.Controle;
Controle.PercentualVelocidadeSP, Trajetoria.DistanciaEsquerda, Trajetoria.DistanciaDireita, new List<Obstaculo>());
Controle.Angulo = steeringAngle;
Controle.TipoMovimento = mode;
@ -208,19 +210,20 @@ namespace AgroBase.Models.Operacoes
}
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);
switch (statusAtual)
switch (Variaveis.OperacaoEmAndamento.Trajetoria.StatusAtual)
{
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.Angulo = 0;
break;
}
case StatusCarroMapa.Direcionando:
@ -295,13 +298,25 @@ namespace AgroBase.Models.Operacoes
#endregion
public void CalculaDadosMovimentacaoAutonoma()
{
DefinirDadosControleMov();
#region ATUADOR
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

View File

@ -77,7 +77,14 @@ namespace AgroBase.Models
{
case ModoOperacao.Manual:
{
etapaAtual = StatusOperacao.EmAndamento;
if (Variaveis.OperacaoEmAndamento.OperacaoLiberada)
{
etapaAtual = StatusOperacao.EmAndamento;
}
else
{
etapaAtual = StatusOperacao.Parado;
}
break;
}
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.Joystick) && GeneralJoystick.JoystickConectado == null) _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;
@ -1247,7 +1255,7 @@ namespace AgroBase.Models
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)
{
@ -1262,7 +1270,7 @@ namespace AgroBase.Models
(IDispositivosService)Variaveis.OperacaoEmAndamento.DispAtu :
(IDispositivosService)Variaveis.OperacaoEmAndamento.DispMvd;
var Protocolos = EnviarProtocoloComando(disp, Ctrl.Tipo, ForcarEnvio);
var Protocolos = EnviarProtocoloComando(disp, Ctrl.Tipo);
Ctrl.UltimoComando = Agora;
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>();
}
@ -1318,33 +1326,6 @@ namespace AgroBase.Models
{
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)
{
_Controle.Direcao = Direcao.Direita;
@ -1379,7 +1360,7 @@ namespace AgroBase.Models
}
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())
{
@ -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()
{
if (Variaveis.IsAgroMonitor)
@ -1828,18 +1782,8 @@ namespace AgroBase.Models
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);
//AtualizarDadosControlePulverizador(true);
if (finalizar)
{
var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora;

View File

@ -43,6 +43,8 @@ namespace AgroBase.Services
public static bool CorrecaoRTK = true;
public static double PrecisaoMinimaCm { get; set; } = 100.0;
public static void AtualizarPortaCOM(SerialPort Porta)
{
if (PortaGPS == null)
@ -453,7 +455,7 @@ namespace AgroBase.Services
PenultimaLeitura.TipoOrientacao = UltimaLeitura.TipoOrientacao;
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;
// ✅ 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,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_0c3554ee11c5591d304c0c6d4d52e50e {
#map_c17ce78bff49a7401eff2508c6dcc0c3 {
position: relative;
width: 100.0%;
height: 100.0%;
@ -39,14 +39,14 @@
<body>
<div class="folium-map" id="map_0c3554ee11c5591d304c0c6d4d52e50e" ></div>
<div class="folium-map" id="map_c17ce78bff49a7401eff2508c6dcc0c3" ></div>
</body>
<script>
var map_0c3554ee11c5591d304c0c6d4d52e50e = L.map(
"map_0c3554ee11c5591d304c0c6d4d52e50e",
var map_c17ce78bff49a7401eff2508c6dcc0c3 = L.map(
"map_c17ce78bff49a7401eff2508c6dcc0c3",
{
center: [0.0, 0.0],
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>
@ -78,7 +87,7 @@
}
trajeto_json_add({"features": []});
trajeto_json.addTo(map_0c3554ee11c5591d304c0c6d4d52e50e);
trajeto_json.addTo(map_c17ce78bff49a7401eff2508c6dcc0c3);
function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria);
@ -136,7 +145,7 @@
var marcadorDinamico = L.marker([0, 0], {
icon: customIcon
}).addTo(map_0c3554ee11c5591d304c0c6d4d52e50e);
}).addTo(map_c17ce78bff49a7401eff2508c6dcc0c3);
// Conectar ao broker MQTT
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
@ -174,7 +183,7 @@
marcadorDinamico.setRotationAngle(angulo);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
map_0c3554ee11c5591d304c0c6d4d52e50e.setView(novaPosicao, map_0c3554ee11c5591d304c0c6d4d52e50e.getZoom());
map_c17ce78bff49a7401eff2508c6dcc0c3.setView(novaPosicao, map_c17ce78bff49a7401eff2508c6dcc0c3.getZoom());
});
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {

File diff suppressed because one or more lines are too long