ajustes performance manager worker

This commit is contained in:
Diego Freitas 2025-07-31 07:16:57 -03:00
parent 97acd6f2f4
commit 1574cd5538
313 changed files with 8377 additions and 281580 deletions

Binary file not shown.

View File

@ -2,33 +2,29 @@
"Version": 1,
"WorkspaceRootPath": "C:\\ZendionINC\\agrobot_base\\AgroBase\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\trajetoriamapaoperacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\trajetoriamapaoperacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\operacoes\\operacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\operacoes\\operacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\services\\mks057dcanservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\mks057dcanservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\services\\operadores\\operadoresservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\operadores\\operadoresservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frmmks.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmmks.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frminstancial.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frminstancial.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frmmks.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmmks.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\simuladores\\frmsimulacaomapagps.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\simuladores\\frmsimulacaomapagps.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\models\\modules\\direcionalmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\modules\\direcionalmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\services\\serialservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\serialservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\models\\modules\\sensoriamentomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\modules\\sensoriamentomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\services\\pythonservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\pythonservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@ -38,96 +34,84 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 0,
"SelectedChildIndex": 2,
"Children": [
{
"$type": "Document",
"DocumentIndex": 0,
"DocumentIndex": 1,
"Title": "OperacaoModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"RelativeToolTip": "AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"ViewState": "AQIAACIDAAAAAAAAAAAUwGMDAAAWAAAA",
"ViewState": "AQIAAHwDAAAAAAAAAAAQwJQFAABMAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-19T10:52:21.592Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "SerialService.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\SerialService.cs",
"RelativeDocumentMoniker": "AgroBase\\Services\\SerialService.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\SerialService.cs",
"RelativeToolTip": "AgroBase\\Services\\SerialService.cs",
"ViewState": "AQIAABcAAAAAAAAAAAAQwCIAAAAxAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-19T10:55:20.352Z",
"WhenOpened": "2025-07-30T23:29:07.62Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "frmMKS.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmMKS.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmMKS.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmMKS.cs",
"RelativeToolTip": "AgroBase\\Forms\\frmMKS.cs",
"ViewState": "AQIAAEcJAAAAAAAAAAA5wG8JAAAaAAAA",
"Title": "OperadoresService.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\Operadores\\OperadoresService.cs",
"RelativeDocumentMoniker": "AgroBase\\Services\\Operadores\\OperadoresService.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\Operadores\\OperadoresService.cs",
"RelativeToolTip": "AgroBase\\Services\\Operadores\\OperadoresService.cs",
"ViewState": "AQIAAB4AAAAAAAAAAIAwwFIAAAAQAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-19T10:42:45.135Z",
"WhenOpened": "2025-07-30T23:10:32.958Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "frmMKS.cs [Design]",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmMKS.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmMKS.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmMKS.cs [Design]",
"RelativeToolTip": "AgroBase\\Forms\\frmMKS.cs [Design]",
"DocumentIndex": 0,
"Title": "TrajetoriaMapaOperacaoModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\TrajetoriaMapaOperacaoModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\TrajetoriaMapaOperacaoModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\TrajetoriaMapaOperacaoModel.cs",
"RelativeToolTip": "AgroBase\\Models\\TrajetoriaMapaOperacaoModel.cs",
"ViewState": "AQIAAKICAAAAAAAAAAAkwLICAABFAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-19T10:40:53.896Z",
"EditorCaption": " [Design]"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "MKS057DCanService.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\MKS057DCanService.cs",
"RelativeDocumentMoniker": "AgroBase\\Services\\MKS057DCanService.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\MKS057DCanService.cs",
"RelativeToolTip": "AgroBase\\Services\\MKS057DCanService.cs",
"ViewState": "AQIAACcAAAAAAAAAAAAmwIUAAAA9AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-16T13:48:29.51Z",
"WhenOpened": "2025-07-30T22:49:55.626Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "DirecionalModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\DirecionalModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\Modules\\DirecionalModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\DirecionalModel.cs",
"RelativeToolTip": "AgroBase\\Models\\Modules\\DirecionalModel.cs",
"ViewState": "AQIAAGYAAAAAAAAAAAAowGQBAAARAAAA",
"Title": "frmSimulacaoMapaGPS.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Simuladores\\frmSimulacaoMapaGPS.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\Simuladores\\frmSimulacaoMapaGPS.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Simuladores\\frmSimulacaoMapaGPS.cs",
"RelativeToolTip": "AgroBase\\Forms\\Simuladores\\frmSimulacaoMapaGPS.cs",
"ViewState": "AQIAAFcAAAAAAAAAAAAIwHQAAAAsAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-16T13:46:41.52Z",
"WhenOpened": "2025-07-30T22:13:15.946Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "SensoriamentoModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\SensoriamentoModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\Modules\\SensoriamentoModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\SensoriamentoModel.cs",
"RelativeToolTip": "AgroBase\\Models\\Modules\\SensoriamentoModel.cs",
"ViewState": "AQIAAIsDAAAAAAAAAAAcwKkDAAAlAAAA",
"DocumentIndex": 5,
"Title": "PythonService.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\PythonService.cs",
"RelativeDocumentMoniker": "AgroBase\\Services\\PythonService.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\PythonService.cs",
"RelativeToolTip": "AgroBase\\Services\\PythonService.cs",
"ViewState": "AQIAAAwAAAAAAAAAAAAYwNMAAAAMAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-16T12:09:31.074Z",
"WhenOpened": "2025-07-30T22:11:44.833Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "frmInstancial.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmInstancial.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmInstancial.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmInstancial.cs",
"RelativeToolTip": "AgroBase\\Forms\\frmInstancial.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAACMAAAArAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-30T22:11:37.87Z",
"EditorCaption": ""
}
]

View File

@ -433,7 +433,7 @@ namespace AgroBase.Forms
try
{
double angulo = Variaveis.OperacaoEmAndamento.SimulacaoAnguloControle;
double dif = Variaveis.OperacaoEmAndamento.Sensoriamento.Trajetoria.ErroOrientacaoAngularProximoPonto;
double dif = Variaveis.OperacaoEmAndamento.Sensoriamento.Trajetoria?.ErroOrientacaoAngularProximoPonto ?? 0;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90, (float)dif);
}
catch { }

View File

@ -40,7 +40,7 @@ namespace AgroBase.Forms
Task.Run(async () =>
{
await VariaveisOperacao.Operadores.IniciarProcessamento(true);
await VariaveisOperacao.Operadores.IniciarProcessamento(false);
});
}

View File

@ -184,6 +184,7 @@ namespace AgroBase.Models
public LoRaProtocoloTransmissaoCoordenadasModel Coordenadas { get; set; }
public LoRaProtocoloTransmissaoSensoresModel Sensores { get; set; }
public LoRaProtocoloTransmissaoOperacaoModel Operacao { get; set; }
public LoRaProtocoloTransmissaoControleModel Controle { get; set; }
}
public class LoRaProtocoloTransmissaoCoordenadasModel
@ -191,6 +192,12 @@ namespace AgroBase.Models
public double Latitude { get; set; }
public double Longitude { get; set; }
public double Orientacao { get; set; }
public double Altitude { get; set; }
public double Velocidade { get; set; }
public bool Inicializado { get; set; }
public TiposCorrecaoGPS Correcao { get; set; }
public int NSatelites { get; set; }
public double Precisao { get; set; }
}
public class LoRaProtocoloTransmissaoSensoresModel
@ -219,6 +226,15 @@ namespace AgroBase.Models
public string TempoEstimado { get; set; }
}
public class LoRaProtocoloTransmissaoControleModel
{
public Direcao direcao { get; set; }
public int percentual_velocidade_sp { get; set; }
public TipoMovimentoDirecional tipo_movimento { get; set; }
public int angulo_sp { get; set; }
public int velocidade_mp { get; set; }
}
public enum LoRaTipoProtocolo
{
Parametrizacao = 0x00,

View File

@ -668,6 +668,8 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP = Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeMin;
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
}
@ -688,6 +690,8 @@ namespace AgroBase.Models
ID = DataInicio.ToString("dd_MM_yyyy_HH_mm_ss");
Directory.CreateDirectory(Variaveis.CaminhoOperacoes + ID + "/");
Sensoriamento.AtualizarDados();
DispMvd?.Dados?.ReiniciarLeituras(DispMvd?.Dados);
DispAtu?.Dados?.ReiniciarLeituras(DispAtu?.Dados);
DispSen?.Dados?.ReiniciarLeituras(DispSen?.Dados);
@ -798,6 +802,8 @@ namespace AgroBase.Models
ID = "";
Sensoriamento.AtualizarDados();
DispMvd?.Dados?.ReiniciarLeituras(DispMvd.Dados);
DispAtu?.Dados?.ReiniciarLeituras(DispAtu.Dados);
DispSen?.Dados?.ReiniciarLeituras(DispSen.Dados);
@ -1418,6 +1424,9 @@ namespace AgroBase.Models
private double _angulo_sp = 0.0;
public double Angulo { get; set; }
public int heartbeat { get; set; } = 1;
//public int ticks_sem_resposta { get; set; } = 0;
public DateTime ticks_sem_resposta { get; set; } = DateTime.MinValue;
public int RPM_SP
{
get
@ -1776,7 +1785,10 @@ namespace AgroBase.Models
ErroOrientacaoAngular = _Trajetoria?.ErroOrientacaoAngular ?? 0,
ErroOrientacaoAngularCombinado = _Trajetoria?.ErroOrientacaoAngularCombinado ?? 0,
ErroOrientacaoAngularCaminho = _Trajetoria?.ErroOrientacaoAngularCaminho ?? 0,
ErroOrientacaoAngularProximoPonto = _Trajetoria?.ErroOrientacaoAngularProximoPonto ?? 0
ErroOrientacaoAngularProximoPonto = _Trajetoria?.ErroOrientacaoAngularProximoPonto ?? 0,
PercentualOperacao = _Trajetoria?.PercentualTrajetoria ?? 0,
PercentualRuaAtual = _Trajetoria?.CorredorAtual?.Progresso ?? 0,
IdxRuaAtual = _Trajetoria?.CorredorAtual?.Idx ?? 0,
};
var dadosGps = GPSService.UltimaLeitura.Clone();
@ -2021,6 +2033,10 @@ namespace AgroBase.Models
public double ErroOrientacaoAngularProximoPonto { get; set; }
public double ErroLateralAngular { get; set; }
public int IdxRuaAtual { get; set; }
public double PercentualOperacao { get; set; }
public double PercentualRuaAtual { get; set; }
public OperacaoSensoriamentoLogTrajetoriaModel Clone()
{
return new OperacaoSensoriamentoLogTrajetoriaModel()
@ -2048,6 +2064,9 @@ namespace AgroBase.Models
ProximoPonto = ProximoPonto.Clone(),
PontoAtual = PontoAtual.Clone(),
PontoMaisProximo = PontoMaisProximo.Clone(),
IdxRuaAtual = IdxRuaAtual,
PercentualOperacao = PercentualOperacao,
PercentualRuaAtual = PercentualRuaAtual,
};
}
}

View File

@ -51,6 +51,7 @@ namespace AgroBase.Models.Operadores
public double angulo { get; set; }
public TipoMovimentoDirecional tipo_movimento { get; set; }
public List<double[]> simulacao { get; set; }
public int heartbeat { get; set; }
}
public class ManagerWorkerMessageResponseModulosPendentesModel

View File

@ -52,8 +52,8 @@ namespace AgroBase.Models.Operadores
return new WeedWorkerAnaliseModel()
{
timestamp = timestamp,
deteccoes = new List<WeedWorkerAnaliseDeteccaoModel>(deteccoes),
controle = new Dictionary<int, bool>(controle),
deteccoes = new List<WeedWorkerAnaliseDeteccaoModel>(deteccoes ?? new List<WeedWorkerAnaliseDeteccaoModel>()),
controle = new Dictionary<int, bool>(controle ?? new Dictionary<int, bool>()),
ervas_identificadas = ervas_identificadas?.Select(dict => new Dictionary<string, int>(dict)).ToList(),
height = height,
width = width,

View File

@ -1,6 +1,7 @@
using AgroBase.Models.Operadores;
using AgroBase.Services;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
@ -673,7 +674,84 @@ namespace AgroBase.Models
//Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao();
RedisService.Publish(CmdKey.ManagerWorkerRx, JsonConvert.SerializeObject(new { cmd = ManagerWorkerCommandType.AtualizarDadosControle }));
//RedisService.Publish(CmdKey.ManagerWorkerRx, JsonConvert.SerializeObject(new { cmd = ManagerWorkerCommandType.AtualizarDadosControle }));
AtualizarDadosControleRedis();
}
private void AtualizarDadosControleRedis()
{
int min_ticks_sem_resposta = 500;
int max_ticks_sem_resposta = 2000;
ManagerWorkerMessageResponseComandoModel novoComando = null;
try
{
string controleStr = RedisService.Get(CtxKey.DadosControle);
var dictParams = JObject.Parse(controleStr);
dictParams.TryGetValue("angulo_sp", out var _angulo);
dictParams.TryGetValue("velocidade_sp", out var _velocidade);
dictParams.TryGetValue("tipo_movimento_direcional", out var _movimento);
dictParams.TryGetValue("simulacao", out var _simulacao);
dictParams.TryGetValue("heartbeat", out var _heartbeat);
novoComando = new ManagerWorkerMessageResponseComandoModel()
{
angulo = Convert.ToDouble(_angulo),
percentual_velocidade = Convert.ToDouble(_velocidade),
tipo_movimento = (TipoMovimentoDirecional)Convert.ToInt32(_movimento),
simulacao = JsonConvert.DeserializeObject<List<double[]>>((_simulacao ?? "").ToString()),
heartbeat = Convert.ToInt32(_heartbeat)
};
}
catch (Exception ex)
{
//MostrarLog($"Erro ao receber novo comando: {ex.Message}");
}
DateTime agora = DateTime.Now;
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
bool comandoMudou = (_Controle.Angulo != novoComando.angulo || _Controle.PercentualVelocidadeSP != novoComando.percentual_velocidade || _Controle.TipoMovimento != novoComando.tipo_movimento);
bool mangerDestravou = (_Controle.ticks_sem_resposta.AddMilliseconds(min_ticks_sem_resposta) < agora && novoComando.heartbeat != _Controle.heartbeat);
if (novoComando != null && (comandoMudou || mangerDestravou))
{
_Controle.Angulo = novoComando.angulo;
_Controle.TipoMovimento = novoComando.tipo_movimento;
_Controle.PercentualVelocidadeSP = novoComando.percentual_velocidade;
_Controle.SimulacaoMPC = novoComando.simulacao?.Select(x => new MPCSimulacaoModel() { latitude = x[0], longitude = x[1], orientacao = x[2] }).ToList() ?? new List<MPCSimulacaoModel>();
Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao();
}
if (novoComando.heartbeat == _Controle.heartbeat)
{
if (_Controle.ticks_sem_resposta == DateTime.MinValue)
{
_Controle.ticks_sem_resposta = agora;
}
}
else
{
_Controle.ticks_sem_resposta = DateTime.MinValue;
}
_Controle.heartbeat = novoComando.heartbeat;
if (_Controle.ticks_sem_resposta != DateTime.MinValue)
{
if (_Controle.ticks_sem_resposta.AddMilliseconds(max_ticks_sem_resposta) < agora)
{
Console.WriteLine("Muito tempo sem receber novo comando do Manager Worker! Parando Movimento!");
RedisService.AtualizarCampos(
CtxKey.DadosControle,
("velocidade_sp", 0)
);
}
else if (_Controle.ticks_sem_resposta.AddMilliseconds(min_ticks_sem_resposta) < agora)
{
Console.WriteLine("Muito tempo sem receber novo comando do Manager Worker! Reduzindo Velocidade!");
RedisService.AtualizarCampos(
CtxKey.DadosControle,
("velocidade_sp", _Controle.PercentualVelocidadeMin)
);
}
}
}

View File

@ -379,7 +379,12 @@ namespace AgroBase.Services
equipamento = new LoRaProtocoloTransmissaoModel()
{
EnderecoCarro = remetente,
Coordenadas = new LoRaProtocoloTransmissaoCoordenadasModel()
Coordenadas = new LoRaProtocoloTransmissaoCoordenadasModel(),
CodigoFalha = 0,
Momento = DateTime.Now,
Operacao = new LoRaProtocoloTransmissaoOperacaoModel(),
Sensores = new LoRaProtocoloTransmissaoSensoresModel(),
RecebidoEm = DateTime.Now,
};
LeituraDadosOperacao.Add(equipamento);
}
@ -404,6 +409,50 @@ namespace AgroBase.Services
double _velocidade = LoRaSerializer.DescompactarDecimal(dados, 4);
double _orientacao = LoRaSerializer.DescompactarDecimal(dados, 6);
equipamento.Coordenadas.Orientacao = _orientacao;
equipamento.Coordenadas.Altitude = _altitude;
equipamento.Coordenadas.Velocidade = _velocidade;
break;
}
case DadosLoRaParse.GpsQualidade:
{
bool _inicializado = dados[2] == 1;
TiposCorrecaoGPS _fix = (TiposCorrecaoGPS)((int)dados[3]);
int _n_satelites = (int)dados[4];
double _precisao = LoRaSerializer.DescompactarDecimal(dados, 5);
equipamento.Coordenadas.Inicializado = _inicializado;
equipamento.Coordenadas.Correcao = _fix;
equipamento.Coordenadas.NSatelites = _n_satelites;
equipamento.Coordenadas.Precisao = _precisao;
break;
}
case DadosLoRaParse.ComandoControle:
{
Direcao _direcao = (Direcao)((int)dados[2]);
int _velocidade_sp =(int)dados[3];
TipoMovimentoDirecional _tipo = (TipoMovimentoDirecional)((int)dados[4]);
int _angulo_sp = (int)dados[5];
int _velocidade_mp = (int)dados[6];
equipamento.Controle.direcao = _direcao;
equipamento.Controle.percentual_velocidade_sp = _velocidade_sp;
equipamento.Controle.tipo_movimento = _tipo;
equipamento.Controle.angulo_sp = _angulo_sp;
equipamento.Controle.velocidade_mp = _velocidade_mp;
break;
}
case DadosLoRaParse.DadosOperacao:
{
StatusOperacao _status_operacao = (StatusOperacao)((int)dados[2]);
StatusCarroMapa _status_carro = (StatusCarroMapa)((int)dados[3]);
int _percentual_operacao = (int)dados[4];
int _percentual_rua = (int)dados[5];
int _idx_rua = (int)dados[6];
equipamento.Operacao.statusOperacao = _status_operacao;
equipamento.Operacao.statusCarro = _status_carro;
equipamento.Operacao.PercentualOperacao = _percentual_operacao;
equipamento.Operacao.PercentualRua = _percentual_rua;
equipamento.Operacao.idxRuaAtual = _idx_rua;
break;
}
case DadosLoRaParse.DadosControle:

View File

@ -102,6 +102,12 @@ namespace AgroBase.Services
{
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
List<byte[]> dadosOperacao = LoRaSerializer.SerializeOperacao(_Sensoriamento);
foreach (var dado in dadosOperacao)
{
Variaveis.LoraService?.EnviarDadosLoRaViaCAN(dado);
}
List<byte[]> dadosGps = LoRaSerializer.SerializeGPS(_Sensoriamento.Gps);
foreach (var dado in dadosGps)
{
@ -122,6 +128,7 @@ namespace AgroBase.Services
GpsGerais = (int)CanMessagePosicaoDados.Command6,
ComandoControle = (int)CanMessagePosicaoDados.Command7,
DadosControle = (int)CanMessagePosicaoDados.Command8,
DadosOperacao = (int)CanMessagePosicaoDados.Command9,
}
public enum LoRaCaracteresEspeciais

View File

@ -2,7 +2,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Windows.Forms;
using static AgroBase.Models.Enums;
@ -301,6 +300,23 @@ namespace AgroBase.Services
return dados.ToArray();
}
public static List<byte[]> SerializeOperacao(OperacaoSensoriamentoLogModel sensoriamento)
{
List<byte> operacao = new List<byte>();
operacao.AddRange(CanPrefix(DadosLoRaParse.DadosOperacao));
operacao.Add((byte)(sensoriamento.StatusOperacao)); // 1 byte
operacao.Add((byte)sensoriamento.Trajetoria.StatusCarro); // 1 byte
operacao.Add((byte)sensoriamento.Trajetoria.PercentualOperacao); // 1 byte
operacao.Add((byte)sensoriamento.Trajetoria.PercentualRuaAtual); // 1 byte
operacao.Add((byte)sensoriamento.Trajetoria.IdxRuaAtual); // 1 byte
return new List<byte[]>()
{
operacao.ToArray(),
};
}
private static byte[] CompactarDecimal(double precisaoCm)
{
ushort valor = (ushort)Math.Round(precisaoCm); // Arredonda para inteiro

View File

@ -57,12 +57,14 @@ namespace AgroBase.Services.Operadores
dictParams.TryGetValue("velocidade_sp", out object _velocidade);
dictParams.TryGetValue("tipo_movimento_direcional", out object _movimento);
dictParams.TryGetValue("simulacao", out object _simulacao);
dictParams.TryGetValue("heartbeat", out object _heartbeat);
novoComando = new ManagerWorkerMessageResponseComandoModel()
{
angulo = Convert.ToDouble(_angulo),
percentual_velocidade = Convert.ToDouble(_velocidade),
tipo_movimento = (Enums.TipoMovimentoDirecional)Convert.ToInt32(_movimento),
simulacao = JsonConvert.DeserializeObject<List<double[]>>((_simulacao ?? "").ToString())
simulacao = JsonConvert.DeserializeObject<List<double[]>>((_simulacao ?? "").ToString()),
heartbeat = Convert.ToInt32(_heartbeat)
};
}
catch (Exception ex)

View File

@ -69,11 +69,11 @@ namespace AgroBase.Services.Operadores
private async Task tmrHearthbeat_Tick()
{
Conectado = true;
Conectado = false;
foreach (var worker in Workers)
{
worker.AtualizarSaude();
Conectado &= worker.Saude.conectado;
Conectado |= worker.Saude.conectado;
}
if (!Conectado)

View File

@ -209,7 +209,7 @@ namespace AgroBase.Services
public static void EncerrarProcessos(int processId = -1)
{
//return;
return;
foreach (var processo in Process.GetProcessesByName("python"))
{
try

View File

@ -22,5 +22,5 @@
"top_topics_and_observing_domains": [ ]
} ],
"hex_encoded_hmac_key": "40F346D3248C3AFDF2BEE1FE496DBD32F7CED6E5AE98B881ABC421AA7E7B5642",
"next_scheduled_calculation_time": "13398455528649568"
"next_scheduled_calculation_time": "13398455528649993"
}

View File

@ -1,3 +1,3 @@
2025/07/30-13:45:05.219 7cc4 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/07/30-13:45:05.225 7cc4 Recovering log #3
2025/07/30-13:45:05.228 7cc4 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
2025/07/30-21:33:49.609 56e4 Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/07/30-21:33:49.618 56e4 Recovering log #3
2025/07/30-21:33:49.621 56e4 Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log

View File

@ -1,3 +1,3 @@
2025/07/30-13:29:47.201 865c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/07/30-13:29:47.207 865c Recovering log #3
2025/07/30-13:29:47.212 865c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
2025/07/30-21:19:10.001 514 Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/07/30-21:19:10.034 514 Recovering log #3
2025/07/30-21:19:10.037 514 Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log

View File

@ -1 +1 @@
{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13398454400339748","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":16690},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"2804:d78:609:f200:c506:7fc8:b135:b811","used_quic":true},"version":5},"network_qualities":{"CAASABiAgICA+P////8B":"4G","CAESABiAgICA+P////8B":"4G","CAISABiAgICA+P////8B":"4G","CAYSABiAgICA+P////8B":"Offline"}}}
{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13398482057963342","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":11735},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"192.168.1.10","used_quic":true},"version":5},"network_qualities":{"CAASABiAgICA+P////8B":"4G","CAESABiAgICA+P////8B":"4G","CAISABiAgICA+P////8B":"4G","CAYSABiAgICA+P////8B":"Offline"}}}

View File

@ -1 +1 @@
{"sts":[{"expiry":1785430400.33992,"host":"bWGAftl61rqoc0YzqPncsLvQQh/iC2Bdp3ejUeGC83w=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1753894400.339923}],"version":2}
{"sts":[{"expiry":1785458055.97563,"host":"bWGAftl61rqoc0YzqPncsLvQQh/iC2Bdp3ejUeGC83w=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1753922055.975635}],"version":2}

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,3 @@
2025/07/30-13:55:20.640 7cc4 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
2025/07/30-13:55:20.641 7cc4 Recovering log #3
2025/07/30-13:55:20.644 7cc4 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
2025/07/30-21:42:34.039 5418 Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
2025/07/30-21:42:34.041 5418 Recovering log #3
2025/07/30-21:42:34.045 5418 Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log

View File

@ -1,3 +1,3 @@
2025/07/30-13:30:08.915 865c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
2025/07/30-13:30:08.916 865c Recovering log #3
2025/07/30-13:30:08.919 865c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
2025/07/30-21:28:06.850 514 Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
2025/07/30-21:28:06.855 514 Recovering log #3
2025/07/30-21:28:06.864 514 Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log

View File

@ -1,3 +1,3 @@
2025/07/30-13:45:05.146 2cb0 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
2025/07/30-13:45:05.147 2cb0 Recovering log #7
2025/07/30-13:45:05.148 2cb0 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
2025/07/30-21:33:49.527 1e74 Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
2025/07/30-21:33:49.529 1e74 Recovering log #12
2025/07/30-21:33:49.529 1e74 Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000012.log

View File

@ -1,3 +1,3 @@
2025/07/30-13:29:47.127 741c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
2025/07/30-13:29:47.129 741c Recovering log #7
2025/07/30-13:29:47.130 741c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
2025/07/30-21:19:09.902 3b4c Reusing MANIFEST C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
2025/07/30-21:19:09.904 3b4c Recovering log #12
2025/07/30-21:19:09.904 3b4c Reusing old log C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000012.log

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

File diff suppressed because one or more lines are too long

View File

@ -23,7 +23,7 @@ class ManagerWorker:
self.definir_processador()
if self.processador:
comando = self.processador.processar()
if comando is not None:
if comando is not None and False:
ContextoGlobalRedis.publicar_comando(CmdKey.ManagerWorkerTx, { "cmd": ManagerWorkerCommandType.EnviarDadosControle.value, "params": comando })
else:
mostrar_log("Processador nao definido")

View File

@ -21,7 +21,7 @@ def main():
manager.executar()
manager = ManagerWorker()
fila = WorkerFilaMensagens("controle", fila_callback, 1, True, 120)
fila = WorkerFilaMensagens("controle", fila_callback, 1, True, 100)
frequencia_loop = 5 # hz
@ -33,8 +33,8 @@ def main():
t0 = agora
latencia = 0.0
try:
pass
#latencia = manager.executar()
#pass
latencia = manager.executar()
except KeyboardInterrupt:
mostrar_log("🛑 Encerrando Manager Worker...")
break
@ -49,8 +49,8 @@ def main():
latencia=latencia
)
#delay_corrigido = max(0, (1.0 / frequencia_loop) - latencia)
time.sleep(0.1)
delay_corrigido = max(0, (1.0 / frequencia_loop) - latencia) # 0.1
time.sleep(delay_corrigido)
def redis_callback(dados):
acao = ManagerWorkerCommandType(dados.get("cmd", 0))
@ -65,6 +65,7 @@ def main():
#mostrar_log("Adicionado na fila")
fila.adicionar(acao)
#manager.executar()
pass
else:
mostrar_log(f"⚠️ Comando desconhecido: {acao.name}")

View File

@ -4,18 +4,21 @@ from manager_worker.config import mostrar_log
from shared.contexto_global_redis import ContextoGlobalRedis, CtxKey
def comando_controle(percentual_velocidade: float, angulo: float, tipo_movimento: int, simulacao = []):
heartbeat = 1 if ContextoGlobalRedis.get_controle().get("heartbeat", 0) == 0 else 0
ContextoGlobalRedis.atualizar_ctx_dict(
CtxKey.DadosControle,
angulo_sp=angulo,
tipo_movimento_direcional=tipo_movimento,
velocidade_sp=percentual_velocidade,
simulacao=simulacao
simulacao=simulacao,
heartbeat=heartbeat
)
return {
"velocidade_sp": percentual_velocidade,
"angulo_sp": angulo,
"tipo_movimento_direcional": tipo_movimento,
"simulacao": simulacao
"simulacao": simulacao,
"heartbeat": heartbeat
}
def comando_parado():

Some files were not shown because too many files have changed in this diff Show More