implementado os 3 primeiros operadores e removido conrole ataves do c#

This commit is contained in:
Diego Freitas 2025-06-06 17:46:08 -03:00
parent 6b58bc2943
commit 946c6639ef
239 changed files with 65255 additions and 4137 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -514,9 +514,11 @@
<Compile Include="Models\MPCControllerSimple.cs" />
<Compile Include="Models\OAKCameraModel.cs" />
<Compile Include="Models\OIDModel.cs" />
<Compile Include="Models\Operacoes\OperacaoMapaGPSModel.cs" />
<Compile Include="Models\Operacoes\OperacaoModel.cs" />
<Compile Include="Models\Operacoes\OperacaoParametrosModel.cs" />
<Compile Include="Models\Operadores\HealthWorkerModel.cs" />
<Compile Include="Models\Operadores\ManagerWorkerModel.cs" />
<Compile Include="Models\Operadores\OperadoresModels.cs" />
<Compile Include="Models\Operadores\VisualWorkerModel.cs" />
<Compile Include="Models\PerformanceModel.cs" />
<Compile Include="Models\PIDModel.cs" />
@ -561,11 +563,11 @@
<Compile Include="Services\MKS057DService.cs" />
<Compile Include="Services\ModbusService.cs" />
<Compile Include="Services\MqttService.cs" />
<Compile Include="Services\OAKCameraService.cs" />
<Compile Include="Services\OIDCanService.cs" />
<Compile Include="Services\OIDService.cs" />
<Compile Include="Services\Operadores\HealthWorkerService.cs" />
<Compile Include="Services\Operadores\ManagerWorkerService.cs" />
<Compile Include="Services\Operadores\OperadoresService.cs" />
<Compile Include="Services\Operadores\VisualWorkerService.cs" />
<Compile Include="Services\PythonService.cs" />
<Compile Include="Services\PZEMService.cs" />

View File

@ -27,14 +27,14 @@ namespace AgroBase.Forms
cameraSolo = new CameraSoloModel()
{
Nome = "T",
Posicao = Variaveis.OperacaoEmAndamento.CamerasSolo.Count(),
Posicao = Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.Count(),
ArquivoLeitura = "ervas_T.json",
browser = null,
camera = new CameraService(),
DeviceID = "",
combo = cmbCameras,
MaxLeituras = 10,
VideoPorta = (VariaveisPortas.CameraSolo + Variaveis.OperacaoEmAndamento.CamerasSolo.Count()).ToString(),
VideoPorta = (VariaveisPortas.CameraSolo + Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.Count()).ToString(),
VideoUrl = "green_objects_T",
MqttTopico = "green_objects_T",
panel = pnlCamera,

View File

@ -29,8 +29,7 @@
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmAjustes));
this.pnlCaminho = new System.Windows.Forms.Panel();
this.cmbC = new System.Windows.Forms.ComboBox();
this.cmbCameraCaminho = new System.Windows.Forms.ComboBox();
this.lblComunicacao = new System.Windows.Forms.Label();
this.picVoltar = new System.Windows.Forms.PictureBox();
this.picSalvar = new System.Windows.Forms.PictureBox();
@ -58,6 +57,7 @@
this.chbSonarAtivado = new System.Windows.Forms.CheckBox();
this.gpbComunicacao = new System.Windows.Forms.GroupBox();
this.gpbCameras = new System.Windows.Forms.GroupBox();
this.picCaminho = new System.Windows.Forms.PictureBox();
this.flwCamerasSolo = new System.Windows.Forms.FlowLayoutPanel();
((System.ComponentModel.ISupportInitialize)(this.picVoltar)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picSalvar)).BeginInit();
@ -66,24 +66,18 @@
((System.ComponentModel.ISupportInitialize)(this.picAtualizar)).BeginInit();
this.gpbComunicacao.SuspendLayout();
this.gpbCameras.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picCaminho)).BeginInit();
this.SuspendLayout();
//
// pnlCaminho
// cmbCameraCaminho
//
this.pnlCaminho.Location = new System.Drawing.Point(137, 53);
this.pnlCaminho.Name = "pnlCaminho";
this.pnlCaminho.Size = new System.Drawing.Size(320, 200);
this.pnlCaminho.TabIndex = 1;
//
// cmbC
//
this.cmbC.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cmbC.FormattingEnabled = true;
this.cmbC.Location = new System.Drawing.Point(137, 259);
this.cmbC.Name = "cmbC";
this.cmbC.Size = new System.Drawing.Size(181, 39);
this.cmbC.TabIndex = 8;
this.cmbC.SelectedIndexChanged += new System.EventHandler(this.cmbCameraCaminho_SelectedIndexChanged);
this.cmbCameraCaminho.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cmbCameraCaminho.FormattingEnabled = true;
this.cmbCameraCaminho.Location = new System.Drawing.Point(137, 259);
this.cmbCameraCaminho.Name = "cmbCameraCaminho";
this.cmbCameraCaminho.Size = new System.Drawing.Size(181, 39);
this.cmbCameraCaminho.TabIndex = 8;
this.cmbCameraCaminho.SelectedIndexChanged += new System.EventHandler(this.cmbCameraCaminho_SelectedIndexChanged);
//
// lblComunicacao
//
@ -386,14 +380,14 @@
//
// gpbCameras
//
this.gpbCameras.Controls.Add(this.picCaminho);
this.gpbCameras.Controls.Add(this.flwCamerasSolo);
this.gpbCameras.Controls.Add(this.picVoltar);
this.gpbCameras.Controls.Add(this.picSalvar);
this.gpbCameras.Controls.Add(this.chbSonarAtivado);
this.gpbCameras.Controls.Add(this.picAtualizar);
this.gpbCameras.Controls.Add(this.btnCalibrarSonar);
this.gpbCameras.Controls.Add(this.pnlCaminho);
this.gpbCameras.Controls.Add(this.cmbC);
this.gpbCameras.Controls.Add(this.cmbCameraCaminho);
this.gpbCameras.Location = new System.Drawing.Point(12, 12);
this.gpbCameras.Name = "gpbCameras";
this.gpbCameras.Size = new System.Drawing.Size(1000, 322);
@ -401,6 +395,15 @@
this.gpbCameras.TabStop = false;
this.gpbCameras.Text = "CÂMERAS";
//
// picCaminho
//
this.picCaminho.Location = new System.Drawing.Point(137, 53);
this.picCaminho.Name = "picCaminho";
this.picCaminho.Size = new System.Drawing.Size(320, 200);
this.picCaminho.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.picCaminho.TabIndex = 37;
this.picCaminho.TabStop = false;
//
// flwCamerasSolo
//
this.flwCamerasSolo.Location = new System.Drawing.Point(463, 19);
@ -433,13 +436,13 @@
this.gpbComunicacao.PerformLayout();
this.gpbCameras.ResumeLayout(false);
this.gpbCameras.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.picCaminho)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel pnlCaminho;
private System.Windows.Forms.ComboBox cmbC;
private System.Windows.Forms.ComboBox cmbCameraCaminho;
private System.Windows.Forms.Label lblComunicacao;
private System.Windows.Forms.PictureBox picVoltar;
private System.Windows.Forms.PictureBox picSalvar;
@ -468,5 +471,6 @@
private System.Windows.Forms.GroupBox gpbComunicacao;
private System.Windows.Forms.GroupBox gpbCameras;
private System.Windows.Forms.FlowLayoutPanel flwCamerasSolo;
private System.Windows.Forms.PictureBox picCaminho;
}
}

View File

@ -15,7 +15,9 @@ namespace AgroBase.Forms.IHM
{
//LoRaParametrosModel loraParametrosBase;
List<OAKCameraModel> Cameras = new List<OAKCameraModel>();
List<OAKCameraModel> ListaCameras = new List<OAKCameraModel>();
OAKCameraModel CameraCaminho = new OAKCameraModel();
List<OAKCameraModel> CamerasSolo = new List<OAKCameraModel>();
public frmAjustes()
{
@ -34,21 +36,9 @@ namespace AgroBase.Forms.IHM
});
FuncoesGlobais.DefinirEventosPicBtn(picSalvar, "Erro ao salvar parâmetros!", async () =>
{
Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Caminho = cmbC.Text;
List<ComboBox> cmbs = new List<ComboBox>();
foreach (Panel pnlCam in flwCamerasSolo.Controls)
{
cmbs.Add(pnlCam.Controls.OfType<ComboBox>().FirstOrDefault());
}
Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo.Clear();
Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo.AddRange(cmbs.Select(x => x.Text).ToArray());
if (KinectService.Iniciado)
{
Variaveis.OperacaoEmAndamento.Controle.SonarAtivado = chbSonarAtivado.Checked;
KinectService.SalvarParametros();
}
Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho = CameraCaminho.Clone();
Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo = new List<OAKCameraModel>(CamerasSolo);
CustomDialog.ShowDialog(
"Sucesso",
"Configuração de câmeras salva com sucesso!",
@ -61,7 +51,7 @@ namespace AgroBase.Forms.IHM
});
FuncoesGlobais.DefinirEventosPicBtn(picAtualizar, "Erro ao atualizar lista de câmeras!", async () =>
{
AtualizarCameras();
await AtualizarCameras();
});
FuncoesGlobais.DefinirEventosPicBtn(picLer, "Erro ao ler parâmetros de comunicação!", async () =>
{
@ -123,7 +113,7 @@ namespace AgroBase.Forms.IHM
}
});
AtualizarCameras();
await AtualizarCameras();
if (LoRaService.Iniciado)
{
await AtualizarParametros();
@ -138,7 +128,7 @@ namespace AgroBase.Forms.IHM
private void frmAjustes_FormClosing(object sender, FormClosingEventArgs e)
{
Variaveis.OperacaoEmAndamento.DesligarCameras();
}
#region COMUNICACAO
@ -273,64 +263,25 @@ namespace AgroBase.Forms.IHM
#region CAMERAS
private void AtualizarCameras()
private async Task AtualizarCameras()
{
flwCamerasSolo.Controls.Clear();
OAKCameraService.AtualizarListaCameras(true);
Cameras = OAKCameraService.GetListaCameras();
ListaCameras = await VariaveisOperacao.Operadores.AtualizarListaCameras();
CameraCaminho = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Clone();
CamerasSolo = new List<OAKCameraModel>(Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo);
for (int i = 0; i < Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo; i++)
{
GerarCameraSolo(i);
}
cmbC.Items.Clear();
cmbC.Items.AddRange(Cameras.Select(x => x.Id).ToArray());
var cameraSelecionada = Cameras.FirstOrDefault(x => x.Id == Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Caminho);
cmbCameraCaminho.Items.Clear();
cmbCameraCaminho.Items.AddRange(ListaCameras.Select(x => x.Description).ToArray());
string cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CameraCaminho.Id)?.Description ?? "";
if (cameraSelecionada != null)
{
cmbC.SelectedIndex = Cameras.IndexOf(cameraSelecionada);
}
}
private void IniciarCameras()
{
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCaminho }, Variaveis.OperacaoEmAndamento.CamerasSolo.Select(x => x.panel).ToList(), true);
}
private void cmbCameraCaminho_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cmb = (ComboBox)sender;
CameraCaminhoModel CameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminho;
if (CameraCaminho != null)
{
CameraCaminho.combo = cmb;
CameraCaminho.panelRgb = pnlCaminho;
CameraCaminho.panelRgb.Tag = cmb.Text;
}
if (CameraCaminho.combo.SelectedIndex > 0 && (Variaveis.OperacaoEmAndamento.CamerasSolo.Any(x => x.combo.SelectedIndex == CameraCaminho.combo.SelectedIndex)))
{
CustomDialog.ShowDialog(
"Erro",
"Essa câmera já está sendo usada por outro processo!",
MessageBoxIcon.Warning,
new Dictionary<(string, dynamic), Action>()
{
{ ("OK", null), () => { } }
}
);
CameraCaminho.combo.SelectedIndex = CameraCaminho.camera.cameraIndex;
return;
}
CameraCaminho.camera.cameraIndex = CameraCaminho.combo.SelectedIndex;
if (CameraCaminho.camera.cameraIndex > 0)
{
IniciarCameras();
cmbCameraCaminho.SelectedIndex = cmbCameraCaminho.Items.IndexOf(cameraSelecionada);
}
}
@ -339,7 +290,7 @@ namespace AgroBase.Forms.IHM
Panel pnlFundo = new Panel()
{
Name = "pnlCamSolo_S" + idx,
Width = 300,
Width = 300,
Height = 284
};
Label lblTitulo = new Label()
@ -351,37 +302,44 @@ namespace AgroBase.Forms.IHM
Location = new Point(66, 6),
Font = new Font("Microsoft Sans Serif", 12.25f, FontStyle.Regular)
};
Panel pnlCamera = new Panel()
PictureBox picCamera = new PictureBox()
{
Name = "pnlCamSoloFundo_S" + idx,
Name = "picCamSoloFundo_S" + idx,
Width = 286,
Height = 200,
Location = new Point(7, 31),
BackgroundImageLayout = ImageLayout.Stretch,
BackColor = Color.Black,
SizeMode = PictureBoxSizeMode.Zoom
};
ComboBox cmbCamera = new ComboBox()
{
Name = "cmbCamSolo_S" + idx,
Width = 286,
Height = 39,
Name = "cmbCamSolo_S" + idx,
Width = 286,
Height = 39,
Location = new Point(7, 237),
Font = new Font("Microsoft Sans Serif", 20.25f, FontStyle.Regular)
Font = new Font("Microsoft Sans Serif", 20.25f, FontStyle.Regular),
Tag = idx
};
cmbCamera.SelectedIndexChanged += cmbCameraSolo_SelectedIndexChanged;
cmbCamera.Items.Clear();
cmbCamera.Items.AddRange(Cameras.Select(x => x.Id).ToArray());
cmbCamera.Items.AddRange(ListaCameras.Select(x => x.Description).ToArray());
pnlFundo.Controls.Add(lblTitulo);
pnlFundo.Controls.Add(pnlCamera);
pnlFundo.Controls.Add(picCamera);
pnlFundo.Controls.Add(cmbCamera);
flwCamerasSolo.Controls.Add(pnlFundo);
string cameraSelecionada = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo.Count() > idx ? Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo[idx] : "";
if (CamerasSolo.Count() <= idx)
{
CamerasSolo.Add(new OAKCameraModel());
}
if (Cameras.Any(x => x.Id == cameraSelecionada))
string cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CamerasSolo[idx].Id)?.Description ?? "";
if (ListaCameras.Any(x => x.Id == cameraSelecionada))
{
cmbCamera.SelectedIndex = cmbCamera.Items.IndexOf(cameraSelecionada);
}
@ -391,46 +349,80 @@ namespace AgroBase.Forms.IHM
}
}
private void cmbCameraSolo_SelectedIndexChanged(object sender, EventArgs e)
private async void cmbCameraCaminho_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cmb = (ComboBox)sender;
string CamID = cmb.Name.Replace("cmbCamSolo_", "");
CameraSoloModel CameraSolo = Variaveis.OperacaoEmAndamento.CamerasSolo.FirstOrDefault(x => x.ID == CamID);
if (CameraSolo != null)
ComboBox cmb = sender as ComboBox;
PictureBox pic = picCaminho;
CameraCaminho = CameraDisponivel(cmb.Text);
if (CameraCaminho.Index > -1)
{
CameraSolo.combo = cmb;
CameraSolo.panel = FuncoesGlobais.FindControlRecursive<Panel>(flwCamerasSolo, "pnlCamSoloFundo_" + CamID);
CameraSolo.panel.Tag = cmb.Text;
Bitmap rgb = await CameraCaminho.GetFrame();
pic.Image = rgb;
}
else
{
pic.Image?.Dispose();
pic.Image = null;
pic.BackColor = Color.Black;
cmb.SelectedIndex = cmb.Items.IndexOf(CameraCaminho.Description);
}
}
if (CameraSolo.combo.SelectedIndex > 0 && (cmbC.SelectedIndex == CameraSolo.combo.SelectedIndex || Variaveis.OperacaoEmAndamento.CamerasSolo.Any(x => x.Nome != CameraSolo.Nome && x.combo.SelectedIndex == CameraSolo.combo.SelectedIndex)))
private async void cmbCameraSolo_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cmb = sender as ComboBox;
int idx = (int)cmb.Tag;
PictureBox pic = FuncoesGlobais.FindControlRecursive<PictureBox>(this, "picCamSoloFundo_S" + idx);
CamerasSolo[idx] = CameraDisponivel(cmb.Text, idx);
if (CamerasSolo[idx].Index > -1)
{
Bitmap rgb = await CamerasSolo[idx].GetFrame();
pic.Image = rgb;
}
else
{
pic.Image?.Dispose();
pic.Image = null;
pic.BackColor = Color.Black;
cmb.SelectedIndex = cmb.Items.IndexOf(CamerasSolo[idx].Description);
}
}
OAKCameraModel CameraDisponivel(string descricao, int idx = -1)
{
bool emUso = false;
var cam = ListaCameras.FirstOrDefault(x => x.Description == descricao);
if (cam.Index > -1)
{
if (idx == -1)
{
emUso = CamerasSolo.Any(x => x.Id == cam.Id);
}
else
{
emUso = (CameraCaminho.Id == cam.Id) || (CamerasSolo.Any(x => x.Index != idx && x.Id == cam.Id));
}
}
if (emUso)
{
CustomDialog.ShowDialog(
"Erro",
"Essa câmera já está sendo usada por outro processo!",
"Camera indisponível",
$"A camera {cam.Description} já está configurada em outro processo!",
MessageBoxIcon.Warning,
new Dictionary<(string, dynamic), Action>()
{
{ ("OK", null), () => { } }
}
);
CameraSolo.combo.SelectedIndex = CameraSolo.camera.cameraIndex;
return;
cam = ListaCameras.FirstOrDefault(x => x.Index == -1);
}
CameraSolo.camera.cameraIndex = CameraSolo.combo.SelectedIndex;
if (CameraSolo.camera.cameraIndex > 0)
{
IniciarCameras();
}
return cam;
}
#endregion
private async void cmbComunicacao_SelectedIndexChanged(object sender, EventArgs e)

View File

@ -1462,27 +1462,27 @@ namespace AgroBase.Forms.IHM
}
});
foreach (var camera in Variaveis.OperacaoEmAndamento.CamerasSolo)
foreach (var camera in Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo)
{
Testes.AddRange(new List<ColunasDiagnosticoModel>()
{
new ColunasDiagnosticoModel()
{
Componente = camera.Nome,
Componente = camera.Name,
Teste = "Configurado",
ValorPadrao = 1,
ComplementoValorPadrao = ComplementosPadrao[1]
},
new ColunasDiagnosticoModel()
{
Componente = camera.Nome,
Componente = camera.Name,
Teste = "Conectado",
ValorPadrao = 1,
ComplementoValorPadrao = ComplementosPadrao[1]
},
new ColunasDiagnosticoModel()
{
Componente = camera.Nome,
Componente = camera.Name,
Teste = "Vídeo",
ValorPadrao = 1,
ComplementoValorPadrao = ComplementosPadrao[1]
@ -1503,7 +1503,7 @@ namespace AgroBase.Forms.IHM
List<string> CamerasIDs = CameraService.ObterListaCameras().Values.ToList();
string IDcamRua = (Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Caminho ?? "");//.Replace("\\", "#").ToLower();
string IDcamRua = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Id;//.Replace("\\", "#").ToLower();
bool RuaConfigurado = !string.IsNullOrEmpty(IDcamRua) && IDcamRua != "Sem video";
idx = PreencheDadosLinha(grid, Testes, idx, RuaConfigurado ? 1 : 0);
@ -1514,9 +1514,9 @@ namespace AgroBase.Forms.IHM
bool RuaVideo = await VerificaImagemCamera(CamerasIDs, IDcamRua, RuaConectado);
idx = PreencheDadosLinha(grid, Testes, idx, RuaVideo ? 1 : 0);
foreach (var camera in Variaveis.OperacaoEmAndamento.CamerasSolo)
foreach (var camera in Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo)
{
string IDcamSolo = (Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo[0] ?? "");//.Replace("\\", "#").ToLower();
string IDcamSolo = (Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo[0].Id);//.Replace("\\", "#").ToLower();
bool SoloConfigurado = !string.IsNullOrEmpty(IDcamSolo) && IDcamSolo != "Sem video";
idx = PreencheDadosLinha(grid, Testes, idx, SoloConfigurado ? 1 : 0);

View File

@ -65,7 +65,6 @@ namespace AgroBase.Forms.IHM
{
if (Variaveis.OperacaoEmAndamento.StatusAtual == Enums.StatusOperacao.Parametrizando)
{
Variaveis.OperacaoEmAndamento.DesligarCameras();
this.Hide();
}
else
@ -100,13 +99,10 @@ namespace AgroBase.Forms.IHM
private void frmDialogoMapa_FormClosing(object sender, FormClosingEventArgs e)
{
tmrLeitura?.Dispose();
Variaveis.OperacaoEmAndamento.DesligarCameras();
}
public async Task AtualizarRuasSelecionadas(List<string> ruasSelecionadas)
{
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraCaminho, pnlCameraCaminhoHeat }, new List<Panel>() { pnlCameraSoloE }, true);
await Task.Delay(1000);
GPSService.AtualizarRuasSelecionadas(ruasSelecionadas);
@ -137,7 +133,7 @@ namespace AgroBase.Forms.IHM
_Trajetoria.CorredorAtual.Pontos,
Variaveis.OperacaoEmAndamento.GPSTrajetoria,
_Trajetoria.RuasPlantacao,
_Sensoriamento.Controle.ControladorMPC?.ComandoAtual?.simulacao
_Sensoriamento.Controle.SimulacaoMPC
);
}
}
@ -149,7 +145,7 @@ namespace AgroBase.Forms.IHM
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)
{
lblUltimaLeituraSolo.Text = "Última Leitura Solo: " + FuncoesGlobais.TimestampToDate(ultimaLeitura.Leitura.timestamp);
@ -157,7 +153,7 @@ namespace AgroBase.Forms.IHM
if (Variaveis.OperacaoEmAndamento.CameraCaminho != null)
{
lblUltimaLeituraCaminho.Text = "Última Leitura Caminho: " + FuncoesGlobais.TimestampToDate(Variaveis.OperacaoEmAndamento.CameraCaminho.Leitura.timestamp);
}
}*/
lblPerformance.Text = _Sensoriamento.DadosPerformance.PerformanceStr;
lblMapaCarregado.Text = "Operação: " + Variaveis.OperacaoEmAndamento.Descricao;
@ -344,8 +340,6 @@ namespace AgroBase.Forms.IHM
freioStartPosition = new Point(pnlFreio.Width / 2 - 20, 10);
freioPosition = freioStartPosition;
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraCaminho, pnlCameraCaminhoHeat }, new List<Panel>() { pnlCameraSoloE }, true);
IniciarOperacao();
}

View File

@ -1,6 +1,7 @@
using AgroBase.Forms.Operacoes;
using AgroBase.Models;
using AgroBase.Models.Components;
using AgroBase.Models.Operadores;
using AgroBase.Properties;
using AgroBase.Services;
using System;
@ -132,6 +133,11 @@ namespace AgroBase.Forms.IHM
lblCodigoFalha.Click -= LblCodigoFalha_Click;
lblCodigoFalha.Click += LblCodigoFalha_Click;
Task.Run(async () =>
{
await VariaveisOperacao.Operadores.AtualizarListaCameras();
});
}
private async Task tmrDispositivos_Tick()
@ -159,8 +165,7 @@ namespace AgroBase.Forms.IHM
CodFalha = Variaveis.OperacaoEmAndamento.RetornaCodigoFalha();
var Labels = this.Controls.OfType<Label>().Where(y => y.Name.Contains("lblD_")).ToList();
var listaCameras = OAKCameraService.GetListaCameras();
listaCameras.RemoveAt(0);
var listaCameras = await VariaveisOperacao.Operadores.AtualizarListaCameras();
foreach (var lbl in Labels)
{
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), lbl.Name.Split('_')[1]);
@ -168,39 +173,37 @@ namespace AgroBase.Forms.IHM
if (Dispositivo == T_Code.Cam)
{
int idx = Convert.ToInt32(Mod_ID);
Mod_ID = T_Code.Cam.ToString() + "_" + Mod_ID;
var CameraSolo = Variaveis.OperacaoEmAndamento.CamerasSolo.FirstOrDefault(x => x.ID == Mod_ID);
if (CameraSolo != null)
{
lbl.ForeColor = !listaCameras.Any(x => x.Id == CameraSolo.DeviceID) ?
var CameraSolo = Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.Count() > idx ? Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo[idx] : null;
lbl.ForeColor =
CameraSolo == null ? Color.Black :
!listaCameras.Any(x => x.Id == CameraSolo.Id) ?
Color.DarkRed :
CameraSolo.camera.cameraIndex == 0 ?
Color.Gold :
Color.DarkGreen;
}
Color.DarkGreen;
}
else if (Dispositivo == T_Code.Snr)
{
var CameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminho;
if (CameraCaminho != null && Mod_ID == CameraCaminho.ID)
{
lbl.ForeColor = !listaCameras.Any(x => x.Id == CameraCaminho.DeviceID)
var CameraCaminho = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho;
lbl.ForeColor =
CameraCaminho == null ? Color.Black :
!listaCameras.Any(x => x.Id == CameraCaminho.Id)
? Color.DarkRed
: CameraCaminho.camera.cameraIndex == 0
? Color.Gold
: Color.DarkGreen;
}
: Color.DarkGreen;
}
else if (Dispositivo == T_Code.Sen)
{
if (Mod_ID.ToLower() == Dispositivo.ToString().ToLower())
{
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo && (x.Mod_ID == Mod_ID || x.Mod_ID == null));
lbl.ForeColor = Modulo == null
lbl.ForeColor =
Modulo == null || Modulo.Status == StatusModulo.Desconectado
? Color.Black
: Modulo.Erro
? Color.Gold
: Modulo.Conectado
: Modulo.Status == StatusModulo.Conectado
? Color.Blue
: Modulo.Status == StatusModulo.Alerta ?
Color.Gold :
Modulo.Status == StatusModulo.Operante
? Color.DarkGreen
: Color.DarkRed;
}
@ -244,13 +247,16 @@ namespace AgroBase.Forms.IHM
else
{
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo && (x.Mod_ID == Mod_ID || x.Mod_ID == null));
lbl.ForeColor = Modulo == null
? Color.Black
: Modulo.Erro
? Color.Gold
: Modulo.Conectado
? Color.DarkGreen
: Color.DarkRed;
lbl.ForeColor =
Modulo == null || Modulo.Status == StatusModulo.Desconectado
? Color.Black
: Modulo.Status == StatusModulo.Conectado
? Color.Blue
: Modulo.Status == StatusModulo.Alerta ?
Color.Gold :
Modulo.Status == StatusModulo.Operante
? Color.DarkGreen
: Color.DarkRed;
}
}
@ -297,24 +303,48 @@ namespace AgroBase.Forms.IHM
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo && (x.Mod_ID == Mod_ID || x.Mod_ID == null));
string msg = "Módulo: " + Dispositivo +
"\r\nID: " + Mod_ID +
"\r\nConectado: " + (Modulo != null ? "Sim" : "Não") +
"\r\nInicializado: " + (Modulo != null && Modulo.Conectado ? "Sim" : "Não") +
"\r\nVersão: " + (Modulo != null ? Modulo.Versao : "") +
"\r\nErro: " + (Modulo != null && Modulo.Erro ? "Sim" : "Não") +
"\r\nStatus: " + (
lbl.ForeColor == Color.Black ? "Não conectado" :
lbl.ForeColor == Color.DarkRed ? "Não inicializado" :
lbl.ForeColor == Color.DarkGreen ? "Inicializado" :
lbl.ForeColor == Color.Gold ? "Não configurado" :
""
);
var saudeGeral = VariaveisOperacao.Operadores.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo);
ManagerWorkerMessageResponseModulosPendentesSaudeModel saudeIndividual = null;
switch (Dispositivo)
{
case T_Code.Mov:
{
var enderecoMod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == Mod_ID)?.MovMotor?._EnderecoCAN_Tx ?? 0x00;
saudeIndividual = saudeGeral.saude_individual.FirstOrDefault(x => Convert.ToByte(x.id) == enderecoMod);
break;
}
case T_Code.Dir:
{
var enderecoMod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == Mod_ID)?.DirMotor?._EnderecoCAN_Tx ?? 0x00;
saudeIndividual = saudeGeral.saude_individual.FirstOrDefault(x => Convert.ToByte(x.id) == enderecoMod);
break;
}
}
string msg =
$"Módulo: {Dispositivo}" +
$"\r\nID: {Mod_ID}" +
$"\r\nStatus: {(Modulo?.Status ?? StatusModulo.Desconectado)}" +
$"\r\nSaude: {(Modulo?.Saude ?? 0)}" +
$"\r\nVersão: {Modulo?.Versao ?? "0"}" +
$"\r\nErro: {Modulo?.Erros}";
if (saudeIndividual != null)
{
msg =
$"Módulo: {Dispositivo}" +
$"\r\nID: {Mod_ID}" +
$"\r\nStatus: {saudeIndividual.status}" +
$"\r\nSaude: {saudeIndividual.saude}" +
$"\r\nVersão: {Modulo?.Versao ?? "0"}" +
$"\r\nErro: {string.Join(Environment.NewLine, saudeIndividual.motivos)}";
}
CustomDialog.ShowDialog(
"Detalhes",
$"{msg}",
Modulo != null && Modulo.Erro ? MessageBoxIcon.Error : Modulo != null && Modulo.Conectado ? MessageBoxIcon.Information : MessageBoxIcon.Exclamation,
Modulo?.Status == StatusModulo.Falha ? MessageBoxIcon.Error : Modulo?.Status == StatusModulo.Operante ? MessageBoxIcon.Information : MessageBoxIcon.Exclamation,
new Dictionary<(string, dynamic), Action>()
{
{ ("OK", null), () => { } },

View File

@ -1,6 +1,5 @@
using AgroBase.Models;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
@ -41,11 +40,11 @@ namespace AgroBase.Forms.Operacoes
cmbTipoMovimento.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Controle.TipoMovimento;
flwCamerasSolo.Controls.Clear();
for (int i = 0; i < Variaveis.OperacaoEmAndamento.CamerasSolo.Count(); i++)
for (int i = 0; i < Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.Count(); i++)
{
Panel pnlCam = new Panel()
{
Name = "pnlCamSolo_" + Variaveis.OperacaoEmAndamento.CamerasSolo[i].Nome,
Name = "pnlCamSolo_" + Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo[i].Name,
Width = 290,
Height = 166,
BackgroundImageLayout = ImageLayout.Stretch,
@ -54,8 +53,6 @@ namespace AgroBase.Forms.Operacoes
flwCamerasSolo.Controls.Add(pnlCam);
}
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraRua, pnlDeteccoesRua }, flwCamerasSolo.Controls.OfType<Panel>().ToList(), true);
chbPulverizador.Checked = Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico;
chbMostrarGrade.Checked = KinectService.MostrarGrade;
chbSonarAtivado.Checked = Variaveis.OperacaoEmAndamento.Controle.SonarAtivado;
@ -64,7 +61,6 @@ namespace AgroBase.Forms.Operacoes
PopularInformacoesGerais();
InicializarMapa();
PopularBicos();
Variaveis.OperacaoEmAndamento.chartGraficos = chartGraficos;
tmrLeitura = new AsyncTaskTimerModel("tmrLeitura", tmrLeitura_Tick, 500, this);
tmrLeitura.Start();
@ -85,8 +81,6 @@ namespace AgroBase.Forms.Operacoes
{
tmrLeitura.Dispose();
Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao());
Variaveis.OperacaoEmAndamento.DesligarCameras();
KinectService.picRGB = null;
}
private void btnIniciarOperacao_Click(object sender, EventArgs e)
@ -164,7 +158,7 @@ namespace AgroBase.Forms.Operacoes
lblDistanciaEsquerda.Text = "Distancia Esq: " + _Sensoriamento.Trajetoria.DistanciaEsquerda.ToString("0.00") + " cm";
lblDistanciaDireita.Text = "Distancia Dir: " + _Sensoriamento.Trajetoria.DistanciaDireita.ToString("0.00") + " cm";
lblGPSsatelites.Text = _Sensoriamento.Gps.NumeroSatelites.ToString() + " satélites";
lblGPSsatelites.Text = _Sensoriamento.Gps.NumeroSatelites.valor.ToString() + " satélites";
lblGPSFix.Text = _Sensoriamento.Gps.QualidadeFix.ToString();
lblGPSprecisao.Text = "Precisão: " + _Sensoriamento.Gps.PrecisaoCm.ToString("0.00") + " cm";
lblGPSvelocidade.Text = "Vel.: " + _Sensoriamento.Gps.Velocidade.ToString("0.00") + " km/h";
@ -471,18 +465,18 @@ namespace AgroBase.Forms.Operacoes
gridDados.Rows[5].Cells[1].Value = (_Sensoriamento.Bateria.TensaoInstantanea.ToString("0.00"));
gridDados.Rows[6].Cells[1].Value = (_Sensoriamento.Bateria.CorrenteInstantanea.ToString("0.00"));
gridDados.Rows[7].Cells[1].Value = (_Sensoriamento.Bateria.TempoEstimadoRestanteMinutos.ToString("0.00"));
gridDados.Rows[8].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
gridDados.Rows[9].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
gridDados.Rows[10].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
gridDados.Rows[11].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
gridDados.Rows[12].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
gridDados.Rows[13].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
gridDados.Rows[14].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
gridDados.Rows[15].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
gridDados.Rows[16].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
gridDados.Rows[17].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
gridDados.Rows[18].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
gridDados.Rows[19].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
gridDados.Rows[8].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[9].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[10].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[11].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[12].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[13].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[14].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[15].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[16].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[17].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[18].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[19].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[20].Cells[1].Value = _Sensoriamento.Atuador.PercentualReservatorio.ToString("00.00");
gridDados.Rows[21].Cells[1].Value = _Sensoriamento.Atuador.VolumeReservatorio.ToString("0.000");
gridDados.Rows[22].Cells[1].Value = _Sensoriamento.Atuador.PressaoLinha.ToString("0.00");
@ -594,18 +588,26 @@ namespace AgroBase.Forms.Operacoes
{
var Atuador = Variaveis.OperacaoEmAndamento.DispAtu.Dados;
AtuadorFuncoesGerais.DesenharAtuadores(pnlAtuadores, e, Atuador.BicosPulverizadores.Select(x => new AtuBicoSensoriamentoLogModel()
{
ID = x.ID,
Atuacoes = x.Atuacoes,
Atuado = x.ComandoAtuar,
Comandar = x.Comandar,
Inicializado = x.Inicializado,
MediaNivelFluxo = x.MediaNivelFluxo,
Posicao = x.Posicao,
StatusBico = x.ValoresLeituras.FirstOrDefault(y => y.funcao == FuncoesPinout.EstadoLeitura).atual.valor,
TempoAtuado = x.TempoAtuado,
}).ToList(), Atuador.BombaPressurizadora.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura).atual.valor, Atuador.PressaoLinha, Atuador.TempoAtuado);
bool ligado = Atuador.BombaPressurizadora.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura).atual.valor ?? false;
AtuadorFuncoesGerais.DesenharAtuadores(
pnlAtuadores,
e,
Atuador.BicosPulverizadores.Select(x => new AtuBicoSensoriamentoLogModel()
{
ID = x.ID,
Atuacoes = x.Atuacoes,
Atuado = x.ComandoAtuar,
Comandar = x.Comandar,
Inicializado = x.Inicializado,
MediaNivelFluxo = x.MediaNivelFluxo,
Posicao = x.Posicao,
StatusBico = x.ValoresLeituras.FirstOrDefault(y => y.funcao == FuncoesPinout.EstadoLeitura).atual.valor ?? false,
TempoAtuado = x.TempoAtuado,
}).ToList(),
ligado,
Atuador.PressaoLinha,
Atuador.TempoAtuado
);
}

View File

@ -41,14 +41,12 @@ namespace AgroBase.Forms.Operacoes
tmrLeituras.Start();
AtualizarDispositivos();
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraCaminho }, new List<Panel>() { pnlCameraSoloE, pnlCameraSoloD }, true);
}
private void frmOperacaoMapaGPS_FormClosing(object sender, FormClosingEventArgs e)
{
tmrLeituras.Dispose();
Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao());
Variaveis.OperacaoEmAndamento.DesligarCameras();
}
private void AtualizarDispositivos()
@ -57,7 +55,6 @@ namespace AgroBase.Forms.Operacoes
chbDIRativo.Checked = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.DirMotor.Inicializado) ?? false;
chbATUativo.Checked = Variaveis.OperacaoEmAndamento.DispAtu?.Dados.ConexaoAtiva ?? false;
chbGPSativo.Checked = GPSService.PortaGPS?.IsOpen ?? false;
Variaveis.OperacaoEmAndamento.chartGraficos = chartGraficos;
}
#endregion
@ -74,13 +71,13 @@ namespace AgroBase.Forms.Operacoes
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)
{
lblUltimaLeituraSolo.Text = "Ultima Leitura Solo: " + FuncoesGlobais.TimestampToDate(ultimaLeitura.Leitura.timestamp);
}
lblUltimaLeituraRua.Text = "Ultima Leitura Rua: " + FuncoesGlobais.TimestampToDate(Variaveis.OperacaoEmAndamento.CameraCaminho.Leitura.timestamp);
lblUltimaLeituraRua.Text = "Ultima Leitura Rua: " + FuncoesGlobais.TimestampToDate(Variaveis.OperacaoEmAndamento.CameraCaminho.Leitura.timestamp);*/
btnCarregarMapa.Enabled = !Variaveis.OperacaoEmAndamento.Iniciado;
@ -182,14 +179,14 @@ namespace AgroBase.Forms.Operacoes
Inicializado = x.Inicializado,
MediaNivelFluxo = x.MediaNivelFluxo,
Posicao = x.Posicao,
StatusBico = x.ValoresLeituras.FirstOrDefault(y => y.funcao == FuncoesPinout.EstadoLeitura).atual.valor,
StatusBico = x.ValoresLeituras.FirstOrDefault(y => y.funcao == FuncoesPinout.EstadoLeitura).atual.valor ?? false,
TempoAtuado = x.TempoAtuado,
}).ToList(), Atuador.BombaPressurizadora.ComandoAtuar, Atuador.PressaoLinha, Atuador.TempoAtuado);
}
private void pnlCaminho_Paint(object sender, PaintEventArgs e)
{
var cameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminho;
/*var cameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminho;
Panel pnlContornos = (Panel)sender;
if (cameraCaminho.Leitura == null) return;
@ -259,7 +256,7 @@ namespace AgroBase.Forms.Operacoes
graphics.DrawLine(pen, start, end);
}
}
}*/
}
private void pnlInclinacao_Paint(object sender, PaintEventArgs e)
@ -277,7 +274,7 @@ namespace AgroBase.Forms.Operacoes
try
{
//DesenharInclinacao((Panel)sender, e, (float)cameraCaminho.Angulo);
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)(Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual.Leitura.obj.segmentacao.angulo_rua), 90);
//FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)(Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual.Leitura.obj?.segmentacao?.angulo_rua ?? 0 ), 90);
}
catch { }
}

View File

@ -1214,7 +1214,7 @@ namespace AgroBase.Forms.Operacoes
null, //Variaveis.OperacaoEmAndamento.Mapa.TrajetoriaProjetada.FirstOrDefault(),
new List<GPSModel>(LogsGPS.Take(LogsGPS.IndexOf(Log) + 1)),
new List<List<GPSModel>>(),
LogOpe.Controle.ControladorMPC?.ComandoAtual?.simulacao
LogOpe.Controle.SimulacaoMPC
);
}
@ -1455,8 +1455,8 @@ namespace AgroBase.Forms.Operacoes
private void AtualizarInformacoesSonar()
{
var Log = LogsSonar.FirstOrDefault(x => x.Leitura.MomentoLog == MomentoAtual);
txtEspacoLivreEsquerda.Text = Log.Leitura.obj.radar_2d.analise.corredor_perfil[1].esquerda_m.ToString("0.00");
txtEspacoLivreDireita.Text = Log.Leitura.obj.radar_2d.analise.corredor_perfil[1].direita_m.ToString("0.00");
//txtEspacoLivreEsquerda.Text = Log.Leitura.obj.radar_2d.analise.corredor_perfil[1].esquerda_m.ToString("0.00");
//txtEspacoLivreDireita.Text = Log.Leitura.obj.radar_2d.analise.corredor_perfil[1].direita_m.ToString("0.00");
txtDesvioNecessario.Text = Log.Resumo.DesvioNecessario ? "Sim" : "Não";
txtDirecaoDesvio.Text = Log.Resumo.DirecaoDesvio.ToString();
@ -1496,7 +1496,7 @@ namespace AgroBase.Forms.Operacoes
if (chbGrade.Checked)
{
picSonarRadar.Image?.Dispose();
picSonarRadar.Image = Log.Leitura.obj.radar_2d.PlotarAnalsie((Bitmap)picSonarRadar.Image.Clone());
//picSonarRadar.Image = Log.Leitura.obj.radar_2d.PlotarAnalsie((Bitmap)picSonarRadar.Image.Clone());
}
}

View File

@ -70,7 +70,7 @@ namespace AgroBase.Forms.Sensoriamento
Cameras = CameraService.ObterListaCameras();
cmbCaminho.Items.Clear();
cmbCaminho.Items.AddRange(Cameras.Values.ToArray());
string IDrua = ((SensoriamentoModel)Disp.Dados).CameraID_Caminho;
string IDrua = ((SensoriamentoModel)Disp.Dados).CameraCaminho.Id;
if (Cameras.Any(x => x.Value == IDrua))
{
cmbCaminho.SelectedIndex = cmbCaminho.Items.IndexOf(IDrua);
@ -80,11 +80,11 @@ namespace AgroBase.Forms.Sensoriamento
cmbCaminho.Text = IDrua;
}
var CamerasSolo = ((SensoriamentoModel)Disp.Dados).CameraID_Solo;
var CamerasSolo = ((SensoriamentoModel)Disp.Dados).CamerasSolo;
cmbSoloEsq.Items.Clear();
cmbSoloEsq.Items.AddRange(Cameras.Values.ToArray());
string IDsoloE = CamerasSolo.Count() > 0 ? CamerasSolo[0] : "";
string IDsoloE = CamerasSolo.Count() > 0 ? CamerasSolo[0].Id : "";
if (Cameras.Any(x => x.Value == IDsoloE))
{
cmbSoloEsq.SelectedIndex = cmbSoloEsq.Items.IndexOf(IDsoloE);
@ -96,7 +96,7 @@ namespace AgroBase.Forms.Sensoriamento
cmbSoloDir.Items.Clear();
cmbSoloDir.Items.AddRange(Cameras.Values.ToArray());
string IDsoloD = CamerasSolo.Count() > 1 ? CamerasSolo[1] : "";
string IDsoloD = CamerasSolo.Count() > 1 ? CamerasSolo[1].Id : "";
if (Cameras.Any(x => x.Value == IDsoloD))
{
cmbSoloDir.SelectedIndex = cmbSoloDir.Items.IndexOf(IDsoloD);
@ -197,9 +197,9 @@ namespace AgroBase.Forms.Sensoriamento
_Disp.Dados._EnderecoCAN_Rx = FuncoesGlobais.StringToHexByte(txtEnderecoCAN_Rx.Text);
_Disp.Dados.RequisitarDados = chbRequisitarDados.Checked;
_Disp.Dados.Sensores = Sensores.ToList();
_Disp.Dados.CameraID_Caminho = cmbCaminho.Text;
_Disp.Dados.CameraID_Solo.Clear();
_Disp.Dados.CameraID_Solo.AddRange(new string[] { cmbSoloEsq.Text, cmbSoloDir.Text });
_Disp.Dados.CameraCaminho.Id = cmbCaminho.Text;
//_Disp.Dados.CamerasSolo.Clear();
//_Disp.Dados.CameraID_Solo.AddRange(new string[] { cmbSoloEsq.Text, cmbSoloDir.Text });
_Disp.SalvarParametros(_Disp.Dados);
break;
}

View File

@ -27,15 +27,18 @@ namespace AgroBase.Forms
ThreadPool.SetMinThreads(workerThreads: 50, completionPortThreads: 50);
//WifiService.IniciarRotinas();
APIService.IniciarRotinas();
OAKCameraService.IniciarRotinas();
GeneralJoystick.IniciarRotinas();
VersionamentoService.IniciarRotinas();
PythonService.EncerrarProcessos();
Task.Run(async () =>
{
await VariaveisOperacao.Operadores.IniciarProcessamento(false);
});
}
private void frmInstancial_Shown(object sender, EventArgs e)
@ -90,8 +93,6 @@ namespace AgroBase.Forms
{
Variaveis.Fechando = true;
await EthernetService.ConfigurarIP(false, false);
AsyncTaskTimerModel.PararTimers();
foreach (var Disp in Variaveis.DispositivosConectados)

View File

@ -1,8 +1,5 @@
using AgroBase.Models;
using AgroBase.Models.Operadores;
using AgroBase.Services;
using AgroBase.Services.Operadores;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Drawing;
@ -16,7 +13,6 @@ namespace AgroBase.Forms
{
public partial class frmOperarioSonar : Form
{
VisualWorkerService visualWorker = new VisualWorkerService();
AsyncTaskTimerModel tmrLeitura;
public frmOperarioSonar()
@ -38,13 +34,12 @@ namespace AgroBase.Forms
private async void frmOperarioSonar_FormClosing(object sender, FormClosingEventArgs e)
{
tmrLeitura?.Stop();
await visualWorker.Encerrar();
}
private void AtualizarListaCameras()
{
cmbCameras.Items.Clear();
cmbCameras.Items.AddRange(OAKCameraService.GetListaCameras().Skip(1).Select(x => x.Id).ToArray());
cmbCameras.Items.AddRange(VariaveisOperacao.Operadores.CamerasConectadas.Select(x => x.Name).ToArray());
cmbCameras.SelectedIndex = -1;
}
@ -52,86 +47,87 @@ namespace AgroBase.Forms
{
if (!chbReqAutomatico.Checked) return;
btnLeituraIMU_Click(new object(), new EventArgs());
/*btnLeituraIMU_Click(new object(), new EventArgs());
EnviarComandoReqFrame(VisualWorkerCommandType.Get_RGB_Frame);
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Heatmap_Frame);
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Anomalia);
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Solo);
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Radar_2D);
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica);
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica);*/
}
private void btnAtualizarCameras_Click(object sender, EventArgs e)
private async void btnAtualizarCameras_Click(object sender, EventArgs e)
{
OAKCameraService.AtualizarListaCameras(true);
VariaveisOperacao.Operadores.HealthWorker.AdicionarComandoNaFila(OperadoresModels.TipoComando.GetListaCameras);
await VariaveisOperacao.Operadores.HealthWorker.AguardarNovosDados(OperadoresModels.TipoComando.GetListaCameras);
AtualizarListaCameras();
}
private async void btnIniciarProcessamento_Click(object sender, EventArgs e)
{
bool sucesso = await visualWorker.IniciarProcessamento(cmbCameras.SelectedIndex, Convert.ToInt32(txtDistanciaMax.Text), Convert.ToInt32(txtSessoesSolo.Text), Convert.ToInt32(txtPercentualSolo.Text), chbIniciarScript.Checked);
AtualizarLabelLeitura($", Comando: Iniciar, Sucesso: {sucesso}");
bool sucesso = false; // await VariaveisOperacao.Operadores.VisualWorker.IniciarCamera(Convert.ToInt32(txtDistanciaMax.Text), Convert.ToInt32(txtSessoesSolo.Text), Convert.ToInt32(txtPercentualSolo.Text));
AtualizarLabelLeitura($", Comando: Configurar, Sucesso: {sucesso}");
if (!sucesso)
{
MessageBox.Show("Selecione uma camera para iniciar o processamento!");
}
else
{
MessageBox.Show("Processamento iniciado com sucesso!");
MessageBox.Show("Camera configurada com sucesso!");
}
}
private void EnviarComando(VisualWorkerCommandType cmd, dynamic payload = null)
{
bool sucesso = visualWorker.AdicionarComandoNaFila(cmd, payload);
bool sucesso = VariaveisOperacao.Operadores.VisualWorker.AdicionarComandoNaFila(cmd, payload);
AtualizarLabelLeitura($", Comando: {cmd.ToString()}, Sucesso: {sucesso}");
}
private void AtualizarLabelLeitura(string texto)
{
lblUltimaLeitura.Text = $"Ultima Leitura em: {visualWorker.DadosLeitura.Leitura.MomentoLog.ToString("dd/MM/yyyy HH:mm:ss.fff")} {texto}";
lblUltimaLeitura.Text = $"Ultima Leitura em: {VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.MomentoLog.ToString("dd/MM/yyyy HH:mm:ss.fff")} {texto}";
}
private void btnPing_Click(object sender, EventArgs e)
{
EnviarComando(VisualWorkerCommandType.Ping);
//EnviarComando(VisualWorkerCommandType.Ping);
}
private void btnCalibrarGrades_Click(object sender, EventArgs e)
{
EnviarComando(VisualWorkerCommandType.Calibrar_Grades);
//EnviarComando(VisualWorkerCommandType.Calibrar_Grades);
}
private void btnLeituraRGB_Click(object sender, EventArgs e)
{
EnviarComandoReqFrame(VisualWorkerCommandType.Get_RGB_Frame);
//EnviarComandoReqFrame(VisualWorkerCommandType.Get_RGB_Frame);
}
private void btnLeituraHeatmap_Click(object sender, EventArgs e)
{
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Heatmap_Frame);
//EnviarComandoReqFrame(VisualWorkerCommandType.Get_Heatmap_Frame);
}
private void btnLeituraRadar2D_Click(object sender, EventArgs e)
{
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Radar_2D);
//EnviarComandoReqFrame(VisualWorkerCommandType.Get_Radar_2D);
}
private void btnLeituraSegmentacaoSemantica_Click(object sender, EventArgs e)
{
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica);
//EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica);
}
private async void EnviarComandoReqFrame(VisualWorkerCommandType comando)
{
EnviarComando(comando);
await visualWorker.AguardarNovosDados(comando);
VisualWorkerMessageFrameModel frame =
comando == VisualWorkerCommandType.Get_RGB_Frame ? visualWorker.DadosLeitura.Leitura.obj.rgb_frame :
comando == VisualWorkerCommandType.Get_Heatmap_Frame ? visualWorker.DadosLeitura.Leitura.obj.heatmap_frame :
comando == VisualWorkerCommandType.Get_Radar_2D ? visualWorker.DadosLeitura.Leitura.obj.radar_2d?.frame :
comando == VisualWorkerCommandType.Get_Segmentacao_Semantica ? visualWorker.DadosLeitura.Leitura.obj.segmentacao?.mask_frame :
new VisualWorkerMessageFrameModel();
/*EnviarComando(comando);
await VariaveisOperacao.Operadores.VisualWorker.AguardarNovosDados(comando);
OAKCameraFrameModel frame =
comando == VisualWorkerCommandType.Get_RGB_Frame ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.rgb_frame :
comando == VisualWorkerCommandType.Get_Heatmap_Frame ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.heatmap_frame :
comando == VisualWorkerCommandType.Get_Radar_2D ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d?.frame :
comando == VisualWorkerCommandType.Get_Segmentacao_Semantica ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.segmentacao?.mask_frame :
new OAKCameraFrameModel();
PictureBox pic =
comando == VisualWorkerCommandType.Get_RGB_Frame ? picRGB :
comando == VisualWorkerCommandType.Get_Heatmap_Frame ? picHeatmap :
@ -149,53 +145,53 @@ namespace AgroBase.Forms
try { pic.Image = frame?.image; } catch { }
lbl.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(frame?.timestamp ?? 0)}";
if (comando == VisualWorkerCommandType.Get_Radar_2D && visualWorker.DadosLeitura.Leitura.obj.radar_2d != null)
if (comando == VisualWorkerCommandType.Get_Radar_2D && VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d != null)
{
pic.Image = visualWorker.DadosLeitura.Leitura.obj.radar_2d.PlotarAnalsie(frame.image);
pic.Image = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d.PlotarAnalsie(frame.image);
PlotarGraficoPerfilCorredor(visualWorker.DadosLeitura.Leitura.obj.radar_2d.analise.corredor_perfil);
}
PlotarGraficoPerfilCorredor(VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d.analise.corredor_perfil);
}*/
}
private void btnReqStatusDispositivo_Click(object sender, EventArgs e)
{
EnviarComando(VisualWorkerCommandType.Get_Status_Dispositivo);
//EnviarComando(VisualWorkerCommandType.Get_Status_Dispositivo);
}
private void btnReqAnomalias_Click(object sender, EventArgs e)
{
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Anomalia);
//EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Anomalia);
}
private void btnReqSolo_Click(object sender, EventArgs e)
{
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Solo);
//EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Solo);
}
private async void btnLeituraIMU_Click(object sender, EventArgs e)
{
EnviarComando(VisualWorkerCommandType.Get_IMU_Data);
await visualWorker.AguardarNovosDados(VisualWorkerCommandType.Get_IMU_Data);
/*EnviarComando(VisualWorkerCommandType.Get_IMU_Data);
await VariaveisOperacao.Operadores.VisualWorker.AguardarNovosDados(VisualWorkerCommandType.Get_IMU_Data);
pnlInclinacao.Invalidate();
lblLeituraIMU.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(visualWorker.DadosLeitura.Leitura.obj.imu?.timestamp ?? 0)}";
lblLeituraIMU.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.imu?.timestamp ?? 0)}";*/
}
private async void EnviarComandoAnalise(VisualWorkerCommandType comando)
{
EnviarComando(comando, new { velocidade_ms = txtVelocidade.Text.Replace(",", "."), distancia_max = txtDistanciaMax.Text.Replace(",", "."), largura_min = txtSessoesSolo.Text.Replace(",", "."), altura_min = txtPercentualSolo.Text.Replace(",", ".") });
await visualWorker.AguardarNovosDados(comando);
await VariaveisOperacao.Operadores.VisualWorker.AguardarNovosDados(comando);
AtualizarDadosAnalise(comando);
}
private void AtualizarDadosAnalise(VisualWorkerCommandType comando)
{
VisualWorkerMessageAnaliseModel analise =
comando == VisualWorkerCommandType.Get_Analise_Anomalia ? visualWorker.DadosLeitura.Leitura.obj.analise_anomalias :
comando == VisualWorkerCommandType.Get_Analise_Solo ? visualWorker.DadosLeitura.Leitura.obj.analise_solo :
/*VisualWorkerMessageAnaliseModel analise =
comando == VisualWorkerCommandType.Get_Analise_Anomalia ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.analise_anomalias :
comando == VisualWorkerCommandType.Get_Analise_Solo ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.analise_solo :
new VisualWorkerMessageAnaliseModel();
lblLeituraDebug.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(analise?.timestamp ?? 0)}";
VisualWorkerMessageFrameModel frame = visualWorker.DadosLeitura.Leitura.obj.heatmap_frame;
OAKCameraFrameModel frame = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.heatmap_frame;
picDebug.Image?.Dispose();
picDebug.Image = analise.PlotarAnalise(frame);
@ -212,7 +208,7 @@ namespace AgroBase.Forms
PlotarGraficoPerfilSolo(analise.solo?.perfil ?? new List<double>());
break;
}
}
}*/
}
void ConfigurarGridDeteccoes(DataGridView dgv)
@ -360,9 +356,9 @@ namespace AgroBase.Forms
private void pnlInclinacao_Paint(object sender, PaintEventArgs e)
{
Panel _pnlInclinacao = sender as Panel;
double AnguloX = visualWorker.DadosLeitura.Leitura.obj?.imu?.roll ?? 0;
double AnguloY = visualWorker.DadosLeitura.Leitura.obj?.imu?.pitch ?? 0;
/*Panel _pnlInclinacao = sender as Panel;
double AnguloX = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj?.imu?.roll ?? 0;
double AnguloY = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj?.imu?.pitch ?? 0;
Graphics g = e.Graphics;
int centerX = _pnlInclinacao.Width / 2;
@ -417,7 +413,7 @@ namespace AgroBase.Forms
// Desenhar o círculo
Brush brush = new SolidBrush(Color.Red);
g.FillEllipse(brush, circlePosX - radius, circlePosY - radius, radius * 2, radius * 2);
g.FillEllipse(brush, circlePosX - radius, circlePosY - radius, radius * 2, radius * 2);*/
}

View File

@ -35,21 +35,8 @@ namespace AgroBase
this.lblStripErro = new System.Windows.Forms.ToolStripStatusLabel();
this.lblStatusConexao = new System.Windows.Forms.ToolStripStatusLabel();
this.pnlLateral = new System.Windows.Forms.Panel();
this.lblCodErro = new System.Windows.Forms.Label();
this.txtCodErro = new System.Windows.Forms.TextBox();
this.chbConexaoautomatica = new System.Windows.Forms.CheckBox();
this.gpbDispositivos = new System.Windows.Forms.GroupBox();
this.lstDisponiveis = new System.Windows.Forms.ListView();
this.btnRemover = new System.Windows.Forms.Button();
this.lblDispositivos = new System.Windows.Forms.Label();
this.cmbDispositivos = new System.Windows.Forms.ComboBox();
this.gpbNovoDispositivo = new System.Windows.Forms.GroupBox();
this.cmbTipos = new System.Windows.Forms.ComboBox();
this.btnSalvar = new System.Windows.Forms.Button();
this.txtDescricao = new System.Windows.Forms.TextBox();
this.lblDescricao = new System.Windows.Forms.Label();
this.lblTipo = new System.Windows.Forms.Label();
this.btnNovoDispositivo = new System.Windows.Forms.Button();
this.generalStrip = new System.Windows.Forms.StatusStrip();
this.lblStripJoystick = new System.Windows.Forms.ToolStripStatusLabel();
this.lblStripJoystickComando = new System.Windows.Forms.ToolStripStatusLabel();
@ -79,6 +66,7 @@ namespace AgroBase
this.gpbControleDirecional = new System.Windows.Forms.GroupBox();
this.gpbAtalhos = new System.Windows.Forms.GroupBox();
this.pnlAtalhos = new System.Windows.Forms.Panel();
this.btnVisualWorker = new System.Windows.Forms.Button();
this.btnTreinamentoIA = new System.Windows.Forms.Button();
this.btnOID = new System.Windows.Forms.Button();
this.btnEthernet = new System.Windows.Forms.Button();
@ -105,12 +93,10 @@ namespace AgroBase
this.btnForcarAtualizacao = new System.Windows.Forms.Button();
this.clbRotinas = new System.Windows.Forms.CheckedListBox();
this.btnAtualizarRotinas = new System.Windows.Forms.Button();
this.btnVisualWorker = new System.Windows.Forms.Button();
this.gpbAcoes.SuspendLayout();
this.erroStrip.SuspendLayout();
this.pnlLateral.SuspendLayout();
this.gpbDispositivos.SuspendLayout();
this.gpbNovoDispositivo.SuspendLayout();
this.generalStrip.SuspendLayout();
this.gpbMovimentacao.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.trkKmh)).BeginInit();
@ -166,15 +152,7 @@ namespace AgroBase
// pnlLateral
//
this.pnlLateral.AutoScroll = true;
this.pnlLateral.Controls.Add(this.lblCodErro);
this.pnlLateral.Controls.Add(this.txtCodErro);
this.pnlLateral.Controls.Add(this.chbConexaoautomatica);
this.pnlLateral.Controls.Add(this.gpbDispositivos);
this.pnlLateral.Controls.Add(this.btnRemover);
this.pnlLateral.Controls.Add(this.lblDispositivos);
this.pnlLateral.Controls.Add(this.cmbDispositivos);
this.pnlLateral.Controls.Add(this.gpbNovoDispositivo);
this.pnlLateral.Controls.Add(this.btnNovoDispositivo);
this.pnlLateral.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlLateral.Location = new System.Drawing.Point(2, 15);
this.pnlLateral.Margin = new System.Windows.Forms.Padding(2);
@ -182,44 +160,16 @@ namespace AgroBase
this.pnlLateral.Size = new System.Drawing.Size(615, 617);
this.pnlLateral.TabIndex = 0;
//
// lblCodErro
//
this.lblCodErro.AutoSize = true;
this.lblCodErro.Location = new System.Drawing.Point(376, 32);
this.lblCodErro.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblCodErro.Name = "lblCodErro";
this.lblCodErro.Size = new System.Drawing.Size(77, 13);
this.lblCodErro.TabIndex = 23;
this.lblCodErro.Text = "Código de Erro";
//
// txtCodErro
//
this.txtCodErro.Location = new System.Drawing.Point(379, 48);
this.txtCodErro.Name = "txtCodErro";
this.txtCodErro.Size = new System.Drawing.Size(210, 20);
this.txtCodErro.TabIndex = 22;
this.txtCodErro.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtCodErro_KeyDown);
//
// chbConexaoautomatica
//
this.chbConexaoautomatica.AutoSize = true;
this.chbConexaoautomatica.Location = new System.Drawing.Point(172, 28);
this.chbConexaoautomatica.Name = "chbConexaoautomatica";
this.chbConexaoautomatica.Size = new System.Drawing.Size(123, 17);
this.chbConexaoautomatica.TabIndex = 21;
this.chbConexaoautomatica.Text = "Conexão automática";
this.chbConexaoautomatica.UseVisualStyleBackColor = true;
//
// gpbDispositivos
//
this.gpbDispositivos.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.gpbDispositivos.Controls.Add(this.lstDisponiveis);
this.gpbDispositivos.Location = new System.Drawing.Point(161, 78);
this.gpbDispositivos.Location = new System.Drawing.Point(19, 5);
this.gpbDispositivos.Margin = new System.Windows.Forms.Padding(2);
this.gpbDispositivos.Name = "gpbDispositivos";
this.gpbDispositivos.Padding = new System.Windows.Forms.Padding(2);
this.gpbDispositivos.Size = new System.Drawing.Size(428, 133);
this.gpbDispositivos.Size = new System.Drawing.Size(569, 133);
this.gpbDispositivos.TabIndex = 3;
this.gpbDispositivos.TabStop = false;
this.gpbDispositivos.Text = "Dispositivos disponíveis";
@ -232,120 +182,11 @@ namespace AgroBase
this.lstDisponiveis.Location = new System.Drawing.Point(11, 20);
this.lstDisponiveis.Margin = new System.Windows.Forms.Padding(2);
this.lstDisponiveis.Name = "lstDisponiveis";
this.lstDisponiveis.Size = new System.Drawing.Size(413, 102);
this.lstDisponiveis.Size = new System.Drawing.Size(554, 102);
this.lstDisponiveis.TabIndex = 0;
this.lstDisponiveis.UseCompatibleStateImageBehavior = false;
this.lstDisponiveis.View = System.Windows.Forms.View.Tile;
//
// btnRemover
//
this.btnRemover.Location = new System.Drawing.Point(87, 50);
this.btnRemover.Margin = new System.Windows.Forms.Padding(2);
this.btnRemover.Name = "btnRemover";
this.btnRemover.Size = new System.Drawing.Size(62, 23);
this.btnRemover.TabIndex = 12;
this.btnRemover.Text = "Remover";
this.btnRemover.UseVisualStyleBackColor = true;
this.btnRemover.Click += new System.EventHandler(this.btnRemover_Click);
//
// lblDispositivos
//
this.lblDispositivos.AutoSize = true;
this.lblDispositivos.Location = new System.Drawing.Point(20, 10);
this.lblDispositivos.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDispositivos.Name = "lblDispositivos";
this.lblDispositivos.Size = new System.Drawing.Size(63, 13);
this.lblDispositivos.TabIndex = 11;
this.lblDispositivos.Text = "Dispositivos";
//
// cmbDispositivos
//
this.cmbDispositivos.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbDispositivos.FormattingEnabled = true;
this.cmbDispositivos.Location = new System.Drawing.Point(22, 26);
this.cmbDispositivos.Margin = new System.Windows.Forms.Padding(2);
this.cmbDispositivos.Name = "cmbDispositivos";
this.cmbDispositivos.Size = new System.Drawing.Size(128, 21);
this.cmbDispositivos.TabIndex = 10;
this.cmbDispositivos.SelectedIndexChanged += new System.EventHandler(this.cmbDispositivos_SelectedIndexChanged);
//
// gpbNovoDispositivo
//
this.gpbNovoDispositivo.Controls.Add(this.cmbTipos);
this.gpbNovoDispositivo.Controls.Add(this.btnSalvar);
this.gpbNovoDispositivo.Controls.Add(this.txtDescricao);
this.gpbNovoDispositivo.Controls.Add(this.lblDescricao);
this.gpbNovoDispositivo.Controls.Add(this.lblTipo);
this.gpbNovoDispositivo.Enabled = false;
this.gpbNovoDispositivo.Location = new System.Drawing.Point(16, 78);
this.gpbNovoDispositivo.Margin = new System.Windows.Forms.Padding(2);
this.gpbNovoDispositivo.Name = "gpbNovoDispositivo";
this.gpbNovoDispositivo.Padding = new System.Windows.Forms.Padding(2);
this.gpbNovoDispositivo.Size = new System.Drawing.Size(141, 133);
this.gpbNovoDispositivo.TabIndex = 9;
this.gpbNovoDispositivo.TabStop = false;
this.gpbNovoDispositivo.Text = "Novo Dispositivo";
//
// cmbTipos
//
this.cmbTipos.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbTipos.FormattingEnabled = true;
this.cmbTipos.Location = new System.Drawing.Point(7, 37);
this.cmbTipos.Margin = new System.Windows.Forms.Padding(2);
this.cmbTipos.Name = "cmbTipos";
this.cmbTipos.Size = new System.Drawing.Size(128, 21);
this.cmbTipos.TabIndex = 2;
//
// btnSalvar
//
this.btnSalvar.Location = new System.Drawing.Point(7, 101);
this.btnSalvar.Margin = new System.Windows.Forms.Padding(2);
this.btnSalvar.Name = "btnSalvar";
this.btnSalvar.Size = new System.Drawing.Size(127, 20);
this.btnSalvar.TabIndex = 9;
this.btnSalvar.Text = "Salvar";
this.btnSalvar.UseVisualStyleBackColor = true;
this.btnSalvar.Click += new System.EventHandler(this.btnSalvar_Click);
//
// txtDescricao
//
this.txtDescricao.Location = new System.Drawing.Point(7, 76);
this.txtDescricao.Margin = new System.Windows.Forms.Padding(2);
this.txtDescricao.Name = "txtDescricao";
this.txtDescricao.Size = new System.Drawing.Size(128, 20);
this.txtDescricao.TabIndex = 3;
//
// lblDescricao
//
this.lblDescricao.AutoSize = true;
this.lblDescricao.Location = new System.Drawing.Point(4, 60);
this.lblDescricao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDescricao.Name = "lblDescricao";
this.lblDescricao.Size = new System.Drawing.Size(55, 13);
this.lblDescricao.TabIndex = 2;
this.lblDescricao.Text = "Descrição";
//
// lblTipo
//
this.lblTipo.AutoSize = true;
this.lblTipo.Location = new System.Drawing.Point(4, 20);
this.lblTipo.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblTipo.Name = "lblTipo";
this.lblTipo.Size = new System.Drawing.Size(28, 13);
this.lblTipo.TabIndex = 0;
this.lblTipo.Text = "Tipo";
//
// btnNovoDispositivo
//
this.btnNovoDispositivo.Location = new System.Drawing.Point(22, 50);
this.btnNovoDispositivo.Margin = new System.Windows.Forms.Padding(2);
this.btnNovoDispositivo.Name = "btnNovoDispositivo";
this.btnNovoDispositivo.Size = new System.Drawing.Size(60, 23);
this.btnNovoDispositivo.TabIndex = 8;
this.btnNovoDispositivo.Text = "Novo dispositivo";
this.btnNovoDispositivo.UseVisualStyleBackColor = true;
this.btnNovoDispositivo.Click += new System.EventHandler(this.btnNovoDispositivo_Click);
//
// generalStrip
//
this.generalStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
@ -380,6 +221,7 @@ namespace AgroBase
this.lblStripOperacaoLiberada.Name = "lblStripOperacaoLiberada";
this.lblStripOperacaoLiberada.Size = new System.Drawing.Size(134, 17);
this.lblStripOperacaoLiberada.Text = "Operação Liberada: Não";
this.lblStripOperacaoLiberada.Click += new System.EventHandler(this.lblStripOperacaoLiberada_Click);
//
// lblStripOperacaoStatus
//
@ -673,6 +515,17 @@ namespace AgroBase
this.pnlAtalhos.Size = new System.Drawing.Size(112, 286);
this.pnlAtalhos.TabIndex = 0;
//
// btnVisualWorker
//
this.btnVisualWorker.Location = new System.Drawing.Point(5, 463);
this.btnVisualWorker.Margin = new System.Windows.Forms.Padding(2);
this.btnVisualWorker.Name = "btnVisualWorker";
this.btnVisualWorker.Size = new System.Drawing.Size(84, 20);
this.btnVisualWorker.TabIndex = 33;
this.btnVisualWorker.Text = "Visual Worker";
this.btnVisualWorker.UseVisualStyleBackColor = true;
this.btnVisualWorker.Click += new System.EventHandler(this.btnVisualWorker_Click);
//
// btnTreinamentoIA
//
this.btnTreinamentoIA.Location = new System.Drawing.Point(5, 439);
@ -963,17 +816,6 @@ namespace AgroBase
this.btnAtualizarRotinas.UseVisualStyleBackColor = true;
this.btnAtualizarRotinas.Click += new System.EventHandler(this.btnAtualizarRotinas_Click);
//
// btnVisualWorker
//
this.btnVisualWorker.Location = new System.Drawing.Point(5, 463);
this.btnVisualWorker.Margin = new System.Windows.Forms.Padding(2);
this.btnVisualWorker.Name = "btnVisualWorker";
this.btnVisualWorker.Size = new System.Drawing.Size(84, 20);
this.btnVisualWorker.TabIndex = 33;
this.btnVisualWorker.Text = "Visual Worker";
this.btnVisualWorker.UseVisualStyleBackColor = true;
this.btnVisualWorker.Click += new System.EventHandler(this.btnVisualWorker_Click);
//
// frmPrincipal
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -1003,10 +845,7 @@ namespace AgroBase
this.erroStrip.ResumeLayout(false);
this.erroStrip.PerformLayout();
this.pnlLateral.ResumeLayout(false);
this.pnlLateral.PerformLayout();
this.gpbDispositivos.ResumeLayout(false);
this.gpbNovoDispositivo.ResumeLayout(false);
this.gpbNovoDispositivo.PerformLayout();
this.generalStrip.ResumeLayout(false);
this.generalStrip.PerformLayout();
this.gpbMovimentacao.ResumeLayout(false);
@ -1030,14 +869,6 @@ namespace AgroBase
#endregion
private System.Windows.Forms.GroupBox gpbAcoes;
private System.Windows.Forms.Button btnNovoDispositivo;
private System.Windows.Forms.GroupBox gpbNovoDispositivo;
private System.Windows.Forms.Button btnSalvar;
private System.Windows.Forms.TextBox txtDescricao;
private System.Windows.Forms.Label lblDescricao;
private System.Windows.Forms.Label lblTipo;
private System.Windows.Forms.Button btnRemover;
private System.Windows.Forms.Label lblDispositivos;
private System.Windows.Forms.StatusStrip erroStrip;
private System.Windows.Forms.StatusStrip generalStrip;
private System.Windows.Forms.GroupBox gpbMovimentacao;
@ -1048,7 +879,6 @@ namespace AgroBase
private System.Windows.Forms.Button btnVer;
private System.Windows.Forms.GroupBox gpbDispositivos;
public System.Windows.Forms.ListView lstDisponiveis;
private System.Windows.Forms.ComboBox cmbTipos;
private System.Windows.Forms.Label lblVelocidade;
private System.Windows.Forms.TrackBar tkbVelocidade;
private System.Windows.Forms.TrackBar tkbAngulo;
@ -1058,7 +888,6 @@ namespace AgroBase
public System.Windows.Forms.TrackBar trkRPM;
private System.Windows.Forms.ToolStripStatusLabel lblStripJoystickComando;
public System.Windows.Forms.ComboBox cmbJoysticks;
public System.Windows.Forms.ComboBox cmbDispositivos;
private System.Windows.Forms.Button btnAcompanhamento;
private System.Windows.Forms.Button btnAtuCamera;
private System.Windows.Forms.Button btnMapas;
@ -1080,7 +909,6 @@ namespace AgroBase
private System.Windows.Forms.Button btnContornos;
public System.Windows.Forms.ToolStripStatusLabel lblStripMqtt;
public System.Windows.Forms.Panel pnlLateral;
public System.Windows.Forms.CheckBox chbConexaoautomatica;
public System.Windows.Forms.CheckBox chbDebugMode;
private System.Windows.Forms.Button btnAtuCalibragem;
private System.Windows.Forms.Button btnSonar;
@ -1100,8 +928,6 @@ namespace AgroBase
private System.Windows.Forms.Button btnAtualizarRotinas;
public System.Windows.Forms.ProgressBar pgbAtualizacaoArquivos;
public System.Windows.Forms.ToolStripStatusLabel lblStripWifi;
private System.Windows.Forms.Label lblCodErro;
private System.Windows.Forms.TextBox txtCodErro;
private System.Windows.Forms.Button btnOID;
private System.Windows.Forms.Button btnTreinamentoIA;
private System.Windows.Forms.Button btnVisualWorker;

View File

@ -93,57 +93,6 @@ namespace AgroBase
#region DISPOSITIVOS
private void btnNovoDispositivo_Click(object sender, EventArgs e)
{
gpbNovoDispositivo.Enabled = true;
cmbTipos.Items.Clear();
cmbTipos.Items.AddRange(Enum.GetNames(typeof(T_Code)));
txtDescricao.Text = "";
cmbTipos.Focus();
}
private void btnSalvar_Click(object sender, EventArgs e)
{
T_Code tipoDispositivo = (T_Code)Enum.Parse(typeof(T_Code), cmbTipos.Text);
IDispositivosService dispositivoService = DispositivosServiceFactory.CreateDispositivoService(
tipoDispositivo,
cmbTipos.Text,
txtDescricao.Text
);
Variaveis.DispositivosConectados.Add(dispositivoService);
Control controle = dispositivoService.InstanciarDispositivo(Variaveis.DispositivosConectados.Count - 1);
controle.Location = new System.Drawing.Point(controle.Location.X, controle.Location.Y + (cmbDispositivos.Items.Count * 50));
pnlLateral.Controls.Add(controle);
cmbDispositivos.Items.Add(dispositivoService._Descricao);
gpbNovoDispositivo.Enabled = false;
cmbDispositivos.SelectedIndex = Variaveis.DispositivosConectados.Count - 1;
}
private void btnRemover_Click(object sender, EventArgs e)
{
if (cmbDispositivos.Items.Count > 0)
{
pnlLateral.Controls.Remove(Variaveis.DispositivosConectados[cmbDispositivos.SelectedIndex].gpbItem);
Variaveis.DispositivosConectados.RemoveAt(cmbDispositivos.SelectedIndex);
cmbDispositivos.Items.RemoveAt(cmbDispositivos.SelectedIndex);
cmbDispositivos.SelectedIndex = Variaveis.DispositivosConectados.Count - 1;
int idx = 0;
Variaveis.DispositivosConectados.ForEach(Dispositivo =>
{
Dispositivo.AtualizaIndex(idx);
idx++;
});
}
}
private void cmbDispositivos_SelectedIndexChanged(object sender, EventArgs e)
{
btnJoyAtt_Click(sender, e);
}
private async Task tmrLoopDispositivos_Tick()
{
AtualizaDadosGerais();
@ -160,7 +109,7 @@ namespace AgroBase
public void AtualizaDadosGerais()
{
if (Variaveis.DispositivosConectados.Any() && pnlLateral.Controls.Count == 9)
if (Variaveis.DispositivosConectados.Count() == 3 && pnlLateral.Controls.Count == 1)
{
SerialService.DispositivosConexaoInicial.ForEach(Dispositivo =>
{
@ -171,7 +120,6 @@ namespace AgroBase
Control controle = dispositivoService.InstanciarDispositivo(idx);
controle.Location = new Point(controle.Location.X, controle.Location.Y + (idx * 50));
pnlLateral.Controls.Add(controle);
cmbDispositivos.Items.Add(dispositivoService._Descricao);
}
});
}
@ -186,13 +134,13 @@ namespace AgroBase
.Select(x => new ListViewItem()
{
Text = x.FirstOrDefault().Endereco + " - " +
Enum.GetName(typeof(T_Code), x.Key) + " v" +
x.Key + " v" +
x.FirstOrDefault().Versao +
(SerialService.DispositivosMultiplos.Contains(x.FirstOrDefault().Dispositivo)
? (" (" + string.Join(", ", x.Where(y => y.Conectado).Select(y => y.Mod_ID)) + ")")
? (" (" + string.Join(", ", x.Where(y => y.Status != StatusModulo.Desconectado).Select(y => y.Mod_ID)) + ")")
: "") +
" - " +
(x.Any(y => y.Conectado) ? "Conectado" : "Desconectado")
(x.FirstOrDefault()?.Status ?? StatusModulo.Desconectado)
})
.ToDictionary(item => item.Text, item => item);
@ -508,16 +456,10 @@ namespace AgroBase
#endregion
private void txtCodErro_KeyDown(object sender, KeyEventArgs e)
private void lblStripOperacaoLiberada_Click(object sender, EventArgs e)
{
if (e.KeyCode == Keys.Enter && string.IsNullOrEmpty(txtCodErro.Text))
{
ulong cod = ulong.Parse(txtCodErro.Text);
string desc = OperacaoModel.DescricaoCodigoFalha(cod);
MessageBox.Show(desc);
}
MessageBox.Show($"{Variaveis.OperacaoEmAndamento.ErroOperacaoLiberada}", "Status da Operacao", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}

View File

@ -26,6 +26,8 @@ namespace AgroBase.Forms
Queue<double> historicoAngulosControle = new Queue<double>();
List<MPCSimulacaoModel> simulacao = new List<MPCSimulacaoModel>();
public frmSimulacaoMapaGPS()
{
InitializeComponent();
@ -56,11 +58,6 @@ namespace AgroBase.Forms
{
pnlMapa = pnlMapa,
};
//Variaveis.OperacaoEmAndamento.Sensoriamento.SonarFrontal = new SonarModel(picSonar);
txtKd.Text = Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Kd.ToString();
txtKi.Text = Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Ki.ToString();
txtKp.Text = Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Kp.ToString();
}
private void frmSimulacaoMapaGPS_FormClosing(object sender, FormClosingEventArgs e)
@ -119,15 +116,15 @@ namespace AgroBase.Forms
lblPercentualOperacao.Text = "Operação: " + _Sensoriamento.Trajetoria.ProgressoTrajeto.ToString("0.00") + "%";
txtKd.Text = _Sensoriamento.Controle.PIDdirecional.Kd.ToString();
txtKi.Text = _Sensoriamento.Controle.PIDdirecional.Ki.ToString();
txtKp.Text = _Sensoriamento.Controle.PIDdirecional.Kp.ToString();
pnlOrientacaoTrajeto.Invalidate();
pnlAnguloControle.Invalidate();
pnlOrientacaoCarro.Invalidate();
if (_Sensoriamento.Controle.SimulacaoMPC != null)
{
simulacao = _Sensoriamento.Controle.SimulacaoMPC;
}
if (_Trajetoria?.CorredorAtual != null)
{
MapaDinamico.AtualizarDados(
@ -139,7 +136,7 @@ namespace AgroBase.Forms
_Trajetoria.CorredorAtual.Pontos,
Variaveis.OperacaoEmAndamento.GPSTrajetoria,
_Trajetoria.RuasPlantacao,
_Sensoriamento.Controle.ControladorMPC?.ComandoAtual?.simulacao
simulacao
);
}
@ -389,10 +386,6 @@ namespace AgroBase.Forms
private void btnCalcularAngulo_Click(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Kd = double.Parse(txtKd.Text);
Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Ki = double.Parse(txtKi.Text);
Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Kp = double.Parse(txtKp.Text);
//Variaveis.OperacaoEmAndamento.OpMapaGPS.CalculaDadosMovimentacaoAutonoma();
int errosConsiderar = int.Parse(txtQtdErro.Text);

View File

@ -46,6 +46,7 @@ namespace AgroBase.Models
private Func<Task> _taskToExecute;
private int _interval; // Intervalo em milissegundos
public int Interval { get { return _interval; } }
public double IntervalHz { get { return (1.0 / ((double)_interval)); } }
private string _stackTrace;
public string StackTrace { get { return _stackTrace; } }
private string _id;

View File

@ -1,5 +1,4 @@
using AgroBase.Services;
using System;
using System;
using System.Linq;
using static AgroBase.Models.Enums;
@ -12,7 +11,11 @@ namespace AgroBase.Models
public class DispositivoDetalhesModel
{
public DateTime CriadoEm { get; set; } = DateTime.Now;
public T_Code Dispositivo { get; set; }
public string Mod_ID { get; set; }
public string Endereco { get; set; }
public string Versao { get; set; }
public TipoConexao Tipo
{
get
@ -39,42 +42,26 @@ namespace AgroBase.Models
}
}
}
public T_Code Dispositivo { get; set; }
public bool Erro { get; set; }
public string Versao { get; set; }
public string Mod_ID { get; set; }
public bool Conectado
public StatusModulo Status
{
get
{
bool DispositivoConectado = false;
if (Dispositivo == T_Code.Gps)
{
DispositivoConectado = GPSService.Iniciado;
}
else if (Dispositivo == T_Code.Lra)
{
DispositivoConectado = LoRaService.Iniciado;
}
else if (Dispositivo == T_Code.Mov)
{
DispositivoConectado = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.Modulo_ID == Mod_ID && x.MovMotor.Inicializado) ?? false;
}
else if (Dispositivo == T_Code.Dir)
{
DispositivoConectado = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.Modulo_ID == Mod_ID && x.DirMotor.Inicializado) ?? false;
}
else if (Dispositivo == T_Code.Sen)
{
DispositivoConectado = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ConexaoAtiva ?? false;
}
else if (Dispositivo == T_Code.Atu)
{
DispositivoConectado = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ConexaoAtiva ?? false;
}
return DispositivoConectado;
return VariaveisOperacao.Operadores.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo)?.status ?? StatusModulo.Desconectado;
}
}
public double Saude
{
get
{
return VariaveisOperacao.Operadores.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo)?.saude ?? 0;
}
}
public string Erros
{
get
{
var motivos = VariaveisOperacao.Operadores.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo)?.motivos ?? new System.Collections.Generic.List<string>();
return string.Join(", ", motivos);
}
}
}

View File

@ -40,6 +40,15 @@
Desacelerando
}
public enum StatusModulo
{
Desconectado = 0,
Conectado = 1,
Falha = 2,
Alerta = 3,
Operante = 4,
}
public enum T_Code
{
Vzo = -1,
@ -151,19 +160,20 @@
public enum ModoOperacao
{
Manual,
TreinamentoIA,
MapaGPS
NaoDefinido = 0,
Manual = 1,
MapaGPS = 2,
TreinamentoIA = 3,
}
public enum StatusOperacao
{
NaoIniciado,
Parametrizando,
Aguardando,
EmAndamento,
Parado,
Concluido
NaoIniciado = 0,
Parametrizando = 1,
Aguardando = 2,
EmAndamento = 3,
Parado = 4,
Concluido = 5
}
public enum StatusCarroMapa

View File

@ -21,7 +21,7 @@ namespace AgroBase.Models
public string ErroCarregado_Hex { get; set; }
public double ErroAcumulado { get; set; }
public string ErroAcumulado_Hex { get; set; }
public double RPM { get; set; }
public CanCommandFreqModel<int> RPM { get; set; } = new CanCommandFreqModel<int>();
public string RPM_Hex { get; set; }
public CanCommandFreqModel<int> NumeroPulsos { get; set; } = new CanCommandFreqModel<int>();
private double _anguloPulsos;

View File

@ -29,7 +29,7 @@ namespace AgroBase.Models.Modules
{
get
{
return DadosLeitura.UltimoComandoRespondido.AddMilliseconds(TempoLimiteConexao * 2) >= DateTime.Now; // DadosLeitura.Conectado &&
return VariaveisOperacao.Operadores.ModulosSaude.Any(x => x.modulo == Dispositivo && x.status == StatusModulo.Operante);
}
}
@ -466,7 +466,10 @@ namespace AgroBase.Models.Modules
{
Dados.Sensores.ForEach(x =>
{
x.ValoresLeituras = new List<SensorValoresLeituraModel>();
x.ValoresLeituras.ForEach(l =>
{
l.atual = new CanCommandFreqModel<dynamic>();
});
});
Dados.BicosPulverizadores.ForEach(x =>
@ -475,13 +478,19 @@ namespace AgroBase.Models.Modules
x.Atuacoes = 0;
x.TempoAtuado = 0;
x.InicioAtuacao = DateTime.MinValue;
x.ValoresLeituras = new List<SensorValoresLeituraModel>();
x.ValoresLeituras.ForEach(l =>
{
l.atual = new CanCommandFreqModel<dynamic>();
});
});
Dados.BombasPressurizadoras.ForEach(x =>
{
x.ValoresLeituras = new List<SensorValoresLeituraModel>();
x.ComandoAtuar = false;
x.ValoresLeituras.ForEach(l =>
{
l.atual = new CanCommandFreqModel<dynamic>();
});
});
Dados.VolumeVazaoAferido = 0;
@ -523,9 +532,8 @@ namespace AgroBase.Models.Modules
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = CanService._portName,
Dispositivo = DadosLeitura.Dispositivo,
Erro = false,
Endereco = CanService._portName,
Versao = DadosLeitura.Versao.ToString(),
Mod_ID = Modulo_ID
});

View File

@ -69,7 +69,7 @@ namespace AgroBase.Models.Modules
{
get
{
return Leitura?.RPM ?? 0;
return Leitura?.RPM?.valor ?? 0;
}
}
public bool IN1_Atuado

View File

@ -31,7 +31,7 @@ namespace AgroBase.Models.Modules
{
get
{
return DadosLeitura.UltimoComandoRespondido.AddMilliseconds(TempoLimiteConexao * 2) >= DateTime.Now; // DadosLeitura.Conectado &&
return VariaveisOperacao.Operadores.ModulosSaude.Any(x => x.modulo == Dispositivo && x.status == StatusModulo.Operante);
}
}
public SensoriamentoMensagemJsonModel DadosLeitura { get; set; } = new SensoriamentoMensagemJsonModel();
@ -45,8 +45,8 @@ namespace AgroBase.Models.Modules
public List<SensorSinaleiroModel> Sinaleiros { get; set; }
public List<SensorReleModel> Reles { get; set; }
public List<SensorServoModel> Servos { get; set; }
public string CameraID_Caminho { get; set; } = "";
public List<string> CameraID_Solo { get; set; } = new List<string>();
public OAKCameraModel CameraCaminho { get; set; } = new OAKCameraModel();
public List<OAKCameraModel> CamerasSolo { get; set; } = new List<OAKCameraModel>();
public UltrasonicA05Configuracoes ConfiguracaoSensorUltrassom { get; set; }
private SenHandler _SenHandler = new SenHandler();
public LoRaEspService loRaService { get; set; } = new LoRaEspService();
@ -74,8 +74,8 @@ namespace AgroBase.Models.Modules
_EnderecoCAN_Rx = 0x11,
_TaxaAmostragem = 1000,
RequisitarDados = true,
CameraID_Caminho = "",
CameraID_Solo = new List<string>(),
CameraCaminho = new OAKCameraModel(),
CamerasSolo = new List<OAKCameraModel>(),
Sinaleiros = new List<SensorSinaleiroModel>()
{
new SensorSinaleiroModel()
@ -1654,7 +1654,7 @@ namespace AgroBase.Models.Modules
for (int i = 0; i < Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo; i++)
{
obj.CameraID_Solo.Add("");
obj.CamerasSolo.Add(new OAKCameraModel());
}
return obj;
@ -1663,6 +1663,8 @@ namespace AgroBase.Models.Modules
public void LimparDados<T>(T _dados)
{
var Dados = _dados as SensoriamentoModel;
Dados.CameraCaminho.frames = new Dictionary<Operadores.OperadoresModels.TipoComando, System.Drawing.Bitmap>();
Dados.CamerasSolo.ForEach(cam => cam.frames = new Dictionary<Operadores.OperadoresModels.TipoComando, System.Drawing.Bitmap>());
Dados.DadosLeitura = new SensoriamentoMensagemJsonModel();
Dados.Reles.ForEach(x =>
{
@ -1742,7 +1744,6 @@ namespace AgroBase.Models.Modules
{
Endereco = CanService._portName,
Dispositivo = DadosLeitura.Dispositivo,
Erro = false,
Versao = DadosLeitura.Versao.ToString(),
Mod_ID = Modulo_ID,
});

View File

@ -1,12 +1,25 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading.Tasks;
using static AgroBase.Models.Enums;
using static AgroBase.Models.Operadores.OperadoresModels;
namespace AgroBase.Models
{
public class OAKCameraModel
{
public T_Code Dispositivo { get; set; }
public int Index { get; set; }
public string Id { get; set; }
public string Name { get; set; }
public string Description
{
get
{
return $"({Index}) {Name}";
}
}
public string State { get; set; }
public string Usb_Speed { get; set; }
public string[] Available_Camera_Sensors { get; set; }
@ -18,12 +31,25 @@ namespace AgroBase.Models
public double fx { get; set; }
public double baseline { get; set; }
public Dictionary<TipoComando, Bitmap> frames { get; set; } = new Dictionary<TipoComando, Bitmap>();
public bool newData { get; set; }
public void setVisto() => newData = false;
public async Task<Bitmap> GetFrame(TipoComando tipo = TipoComando.GetCameraFrame)
{
VariaveisOperacao.Operadores.HealthWorker.AdicionarComandoNaFila(tipo, new { mx_id = Id });
await VariaveisOperacao.Operadores.HealthWorker.AguardarNovosDados(tipo, 10000);
Bitmap bmp = (VariaveisOperacao.Operadores.HealthWorker.DadosLeitura.Leitura.obj?.frame ?? new OAKCameraFrameModel()).image;
frames[tipo] = bmp;
return bmp;
}
public OAKCameraModel Clone()
{
return new OAKCameraModel()
{
Dispositivo = Dispositivo,
Index = Index,
Id = Id,
Name = Name,
@ -37,6 +63,7 @@ namespace AgroBase.Models
Version = Version,
fx = fx,
baseline = baseline,
frames = new Dictionary<TipoComando, Bitmap>(frames),
newData = true
};
}
@ -85,4 +112,42 @@ namespace AgroBase.Models
}
}
public class OAKCameraFrameModel
{
public long timestamp { get; set; }
public string frame { get; set; }
public Bitmap image { get; set; } = null;
private bool _newData = true;
public bool newData
{
get
{
if (_newData)
{
_newData = false;
return true;
}
else
{
return false;
}
}
set
{
_newData = value;
}
}
public OAKCameraFrameModel Clone()
{
return new OAKCameraFrameModel()
{
timestamp = timestamp,
frame = frame,
image = FuncoesGlobais.Base64ToBitmap(frame),
newData = true
};
}
}
}

View File

@ -300,8 +300,8 @@ namespace AgroBase.Models
}
public CanCommandFreqModel<double> Tensao { get; set; } = new CanCommandFreqModel<double>();
public CanCommandFreqModel<double> Temperatura { get; set; } = new CanCommandFreqModel<double>();
public CanCommandFreqModel<double> Potencia { get; set; }
public CanCommandFreqModel<double> CicloTrabalho { get; set; }
public CanCommandFreqModel<double> Potencia { get; set; } = new CanCommandFreqModel<double>();
public CanCommandFreqModel<double> CicloTrabalho { get; set; } = new CanCommandFreqModel<double>();
public bool Freado
{
get

View File

@ -1,5 +1,4 @@
using AgroBase.Models.Modules;
using AgroBase.Services;
using System;
using System.Collections.Generic;
using System.Linq;
@ -84,7 +83,6 @@ namespace AgroBase.Models.Operacoes
consideraAnguloCorredor ? _Trajetoria.ErroOrientacaoAngularCombinado :
_Trajetoria.ErroOrientacaoAngularProximoPonto;
var PID = _Controle.PIDdirecional;
if (_Trajetoria.StatusCarro != StatusCarroMapa.Parado)
{
// Atualiza o PID com o erro combinado

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,90 @@
using System;
using System.Collections.Generic;
using static AgroBase.Models.Enums;
using static AgroBase.Models.Operadores.OperadoresModels;
namespace AgroBase.Models.Operadores
{
public class HealthWorkerModel
{
public bool Iniciado { get; set; }
public DateTime IniciadoEm { get; set; }
public bool Pronto { get; set; }
public DateTime ProntoEm { get; set; }
public WorkerMessageModel<HealthWorkerMessageResponseModel> Leitura { get; set; } = new WorkerMessageModel<HealthWorkerMessageResponseModel>();
public HealthWorkerModel Clone()
{
return new HealthWorkerModel()
{
Iniciado = Iniciado,
IniciadoEm = IniciadoEm,
Pronto = Pronto,
ProntoEm = ProntoEm,
Leitura = Leitura.Clone()
};
}
public void ReiniciarEstado()
{
Iniciado = false;
IniciadoEm = DateTime.MinValue;
Pronto = false;
ProntoEm = DateTime.MinValue;
Leitura = new WorkerMessageModel<HealthWorkerMessageResponseModel>();
}
}
public class HealthWorkerMessageResponseModel
{
public TipoComando cmd { get; set; }
public HealthWorkerMessageResponseCamerasModel cameras { get; set; }
public OAKCameraFrameModel frame { get; set; }
}
public class HealthWorkerMessageResponseCamerasModel
{
public long timestamp { get; set; }
public List<HealthWorkerMessageResponseCamerasItensModel> itens { get; set; }
private bool _newData = false;
public bool newData
{
get
{
if (_newData)
{
_newData = false;
return true;
}
else
{
return false;
}
}
set
{
_newData = value;
}
}
public HealthWorkerMessageResponseCamerasModel Clone()
{
return new HealthWorkerMessageResponseCamerasModel()
{
itens = new List<HealthWorkerMessageResponseCamerasItensModel>(itens),
newData = true
};
}
}
public class HealthWorkerMessageResponseCamerasItensModel
{
public T_Code dispositivo { get; set; }
public string mx_id { get; set; }
public string versao { get; set; }
public string modelo { get; set; }
}
}

View File

@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using static AgroBase.Models.Enums;
using static AgroBase.Models.Operadores.OperadoresModels;
namespace AgroBase.Models.Operadores
{
public class ManagerWorkerModel
{
public bool Iniciado { get; set; }
public DateTime IniciadoEm { get; set; }
public bool Pronto { get; set; }
public DateTime ProntoEm { get; set; }
public WorkerMessageModel<ManagerWorkerMessageResponseModel> Leitura { get; set; }
public ManagerWorkerModel Clone()
{
return new ManagerWorkerModel()
{
Iniciado = Iniciado,
IniciadoEm = IniciadoEm,
Pronto = Pronto,
ProntoEm = ProntoEm,
Leitura = Leitura.Clone()
};
}
public void ReiniciarEstado()
{
Iniciado = false;
IniciadoEm = DateTime.MinValue;
Pronto = false;
ProntoEm = DateTime.MinValue;
Leitura = new WorkerMessageModel<ManagerWorkerMessageResponseModel>();
}
}
public class ManagerWorkerMessageResponseModel
{
public bool configurado { get; set; }
public long tempo_aguardando { get; set; }
public StatusOperacao status_operacao { get; set; }
public bool operacao_liberada { get; set; }
public ManagerWorkerMessageResponseComandoModel comando { get; set; }
public List<ManagerWorkerMessageResponseModulosPendentesModel> status_modulos { get; set; }
}
public class ManagerWorkerMessageResponseComandoModel
{
public double percentual_velocidade { get; set; }
public double angulo { get; set; }
public TipoMovimentoDirecional tipo_movimento { get; set; }
public List<MPCSimulacaoModel> simulacao { get; set; }
}
public class ManagerWorkerMessageResponseModulosPendentesModel
{
public T_Code modulo { get; set; }
public StatusModulo status { get; set; }
public double saude { get; set; }
public List<string> motivos { get; set; }
public List<ManagerWorkerMessageResponseModulosPendentesSaudeModel> saude_individual { get; set; }
}
public class ManagerWorkerMessageResponseModulosPendentesSaudeModel
{
public string id { get; set; }
public StatusModulo status { get; set; }
public double saude { get; set; }
public List<string> motivos { get; set; }
}
}

View File

@ -0,0 +1,51 @@
using System;
namespace AgroBase.Models.Operadores
{
public class OperadoresModels
{
public enum TipoComando
{
SetDadosModulo = 1,
GetDadosModulo = 2,
SetDadosContexto = 3,
GetDadosContexto = 4,
SetDadosOperacao = 5,
GetDadosOperacao = 6,
GetListaCameras = 7,
GetCameraFrame = 8,
}
public class WorkerMessageModel<T>
{
public DateTime AdicionadoEm { get; set; }
public bool Enviado { get; set; }
public DateTime EnviadoEm { get; set; }
public bool Respondido { get; set; }
public DateTime RespondidoEm { get; set; }
public DateTime MomentoLog { get; set; } = DateTime.MinValue;
public long momento { get; set; }
public T obj { get; set; } = default(T);
public dynamic payload { get; set; }
public WorkerMessageModel<T> Clone()
{
return new WorkerMessageModel<T>()
{
AdicionadoEm = AdicionadoEm,
Enviado = Enviado,
EnviadoEm = EnviadoEm,
Respondido = Respondido,
RespondidoEm = RespondidoEm,
MomentoLog = MomentoLog,
momento = momento,
obj = obj,
};
}
}
}
}

View File

@ -1,8 +1,8 @@
using Emgu.CV.OCR;
using System;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using static AgroBase.Models.Operadores.OperadoresModels;
namespace AgroBase.Models.Operadores
{
@ -12,7 +12,7 @@ namespace AgroBase.Models.Operadores
public DateTime IniciadoEm { get; set; }
public bool Pronto { get; set; }
public DateTime ProntoEm { get; set; }
public VisualWorkerMessageModel Leitura { get; set; } = new VisualWorkerMessageModel();
public WorkerMessageModel<VisualWorkerMessageResponseModel> Leitura { get; set; } = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
public VisualWorkerDadosModel Resumo { get; set; } = new VisualWorkerDadosModel();
public VisualWorkerModel Clone()
@ -34,7 +34,7 @@ namespace AgroBase.Models.Operadores
IniciadoEm = DateTime.MinValue;
Pronto = false;
ProntoEm = DateTime.MinValue;
Leitura = new VisualWorkerMessageModel();
Leitura = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
Resumo = new VisualWorkerDadosModel();
}
}
@ -52,72 +52,61 @@ namespace AgroBase.Models.Operadores
{
DesvioNecessario = DesvioNecessario,
DirecaoDesvio = DirecaoDesvio,
ObstaculoCritico = ObstaculoCritico.Clone(),
Obstaculos = new List<Obstaculo>(Obstaculos),
};
}
}
public class VisualWorkerMessageModel
{
public DateTime AdicionadoEm { get; set; }
public bool Enviado { get; set; }
public DateTime EnviadoEm { get; set; }
public bool Respondido { get; set; }
public DateTime RespondidoEm { get; set; }
public DateTime MomentoLog { get; set; } = DateTime.MinValue;
public long momento { get; set; }
public VisualWorkerMessageType tipo_cmd { get; set; }
public VisualWorkerCommandType cmd { get; set; }
public VisualWorkerMessageResponseModel obj { get; set; } = new VisualWorkerMessageResponseModel();
public dynamic payload { get; set; }
public VisualWorkerMessageModel Clone()
{
return new VisualWorkerMessageModel()
{
AdicionadoEm = AdicionadoEm,
Enviado = Enviado,
EnviadoEm = EnviadoEm,
Respondido = Respondido,
RespondidoEm = RespondidoEm,
MomentoLog = MomentoLog,
momento = momento,
tipo_cmd = tipo_cmd,
cmd = cmd,
obj = obj.Clone(),
ObstaculoCritico = ObstaculoCritico?.Clone(),
Obstaculos = new List<Obstaculo>(Obstaculos ?? new List<Obstaculo>()),
};
}
}
public class VisualWorkerMessageResponseModel
{
public OAKCameraModel device_status { get; set; }
public VisualWorkerMessageIMUModel imu { get; set; }
public VisualWorkerMessageFrameModel rgb_frame { get; set; }
public VisualWorkerMessageFrameModel heatmap_frame { get; set; }
public VisualWorkerMessageRadar2DModel radar_2d { get; set; }
public VisualWorkerMessageSetupModel ping { get; set; }
public VisualWorkerMessageSetupModel calibragem { get; set; }
public VisualWorkerMessageAnaliseModel analise_anomalias { get; set; } = new VisualWorkerMessageAnaliseModel();
public VisualWorkerMessageAnaliseModel analise_solo { get; set; } = new VisualWorkerMessageAnaliseModel();
public VisualWorkerMessageSegmentacaoSemanticaModel segmentacao { get; set; } = new VisualWorkerMessageSegmentacaoSemanticaModel();
public VisualWorkerCommandType cmd { get; set; }
public VisualWorkerMessageResponseSaveFramesModel save_frames { get; set; }
public VisualWorkerMessageResponseModel Clone()
{
return new VisualWorkerMessageResponseModel()
{
device_status = device_status.Clone(),
imu = imu.Clone(),
rgb_frame = rgb_frame.Clone(),
heatmap_frame = heatmap_frame.Clone(),
radar_2d = radar_2d.Clone(),
ping = ping.Clone(),
calibragem = calibragem.Clone(),
analise_anomalias = analise_anomalias.Clone(),
analise_solo = analise_solo.Clone(),
segmentacao = segmentacao.Clone(),
cmd = cmd,
save_frames = save_frames.Clone()
};
}
}
public class VisualWorkerMessageResponseSaveFramesModel
{
public long timestamp { get; set; }
public List<string> frames { get; set; }
private bool _newData = false;
public bool newData
{
get
{
if (_newData)
{
_newData = false;
return true;
}
else
{
return false;
}
}
set
{
_newData = value;
}
}
public VisualWorkerMessageResponseSaveFramesModel Clone()
{
return new VisualWorkerMessageResponseSaveFramesModel()
{
timestamp = timestamp,
frames = new List<string>(frames),
newData = true
};
}
}
@ -163,44 +152,6 @@ namespace AgroBase.Models.Operadores
}
}
public class VisualWorkerMessageFrameModel
{
public long timestamp { get; set; }
public string frame { get; set; }
public Bitmap image { get; set; } = null;
private bool _newData = false;
public bool newData
{
get
{
if (_newData)
{
_newData = false;
return true;
}
else
{
return false;
}
}
set
{
_newData = value;
}
}
public VisualWorkerMessageFrameModel Clone()
{
return new VisualWorkerMessageFrameModel()
{
timestamp = timestamp,
frame = frame,
image = FuncoesGlobais.Base64ToBitmap(frame),
newData = true
};
}
}
public class VisualWorkerMessageSetupModel
{
public long timestamp { get; set; }
@ -274,7 +225,7 @@ namespace AgroBase.Models.Operadores
};
}
public Bitmap PlotarAnalise(VisualWorkerMessageFrameModel frame)
public Bitmap PlotarAnalise(OAKCameraFrameModel frame)
{
if (frame?.image == null) return null;
@ -412,7 +363,7 @@ namespace AgroBase.Models.Operadores
public class VisualWorkerMessageRadar2DModel
{
public VisualWorkerMessageFrameModel frame { get; set; }
public OAKCameraFrameModel frame { get; set; }
public VisualWorkerMessageRadar2DAnaliseModel analise { get; set; }
private bool _newData = false;
@ -548,7 +499,7 @@ namespace AgroBase.Models.Operadores
public class VisualWorkerMessageSegmentacaoSemanticaModel
{
public VisualWorkerMessageFrameModel mask_frame { get; set; }
public OAKCameraFrameModel mask_frame { get; set; }
public double angulo_rua { get; set; }
private bool _newData = false;
@ -582,46 +533,9 @@ namespace AgroBase.Models.Operadores
}
}
public enum VisualWorkerMessageType
{
TX = 1,
RX = 2
}
public enum VisualWorkerCommandType
{
Ping = 1,
Get_Status_Dispositivo = 2,
Get_IMU_Data = 3,
Get_RGB_Frame = 4,
Get_Heatmap_Frame = 5,
Calibrar_Grades = 6,
Get_Analise_Anomalia = 7,
Get_Analise_Solo = 8,
Get_Radar_2D = 9,
Get_Segmentacao_Semantica = 10,
}
public enum VisualWorkerDetectionType
{
Seguro = 1,
Obstaculo = 2,
Depressao = 3,
}
public enum VisualWorkerRegionType
{
Solo = 1,
Aereo = 2,
}
public enum VisualWorkerAnaliseType
{
Anomalia = 1,
Solo = 2,
SalvarFrames = 0
}
}

View File

@ -29,7 +29,7 @@ namespace AgroBase.Models
public bool Iniciado { get; set; }
private void AtualizarIniciado()
{
Iniciado = Variaveis.OperacaoEmAndamento.CameraCaminho?.Iniciada ?? false;
//Iniciado = Variaveis.OperacaoEmAndamento.CameraCaminho?.Iniciada ?? false;
}
public int X_Max { get; set; }

View File

@ -522,7 +522,7 @@ namespace AgroBase.Models
{
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
double anguloCamera = _Sensoriamento.OperadorVisual.Leitura.obj.segmentacao.angulo_rua;
//double anguloCamera = _Sensoriamento.OperadorVisual.Leitura.obj?.segmentacao?.angulo_rua ?? 0;
double anguloCorredor = AnguloMedioCorredor;
double anguloProximoPonto = AnguloCaminho;
double anguloCarro = _Sensoriamento.Gps.AnguloCarroDefinido;
@ -1306,7 +1306,9 @@ namespace AgroBase.Models
idxRuaDireita = idxRuaDireita,
DistanciaRestante = DistanciaRestante,
Progresso = Progresso,
Pontos = new List<PontoTrajetoriaModel>()
Pontos = new List<PontoTrajetoriaModel>(),
Ultimo = Ultimo,
FatorLarguraCorredor = FatorLarguraCorredor,
};
if (clonarPontos)
{

View File

@ -17,6 +17,7 @@ using AgroBase.Models.Components;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;
using System.Text.Json;
using AgroBase.Services.Operadores;
namespace AgroBase.Models
{
@ -369,6 +370,7 @@ namespace AgroBase.Models
}
public static GPSModel PosicaoBase { get; set; } = new GPSModel();
public static OperadoresService Operadores { get; set; } = new OperadoresService();
public static void RegistrarLogDispositivo(List<string> Logs, T_Code Dispositivo, string Sulfixo, int MinLogs = 100)
{

View File

@ -1,5 +1,4 @@
using AgroBase.Forms;
using AgroBase.Models;
using AgroBase.Models;
using System;
using System.Collections.Generic;
using System.IO;

View File

@ -391,9 +391,8 @@ namespace AgroBase.Services
var leitura = DadosLeitura.FirstOrDefault(x => x.Endereco == Addr);
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
Dispositivo = T_Code.Bld,
Erro = leitura.CodigoAlarme > 0,
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
Versao = leitura.Versao.ToString(),
Mod_ID = Mod_ID,
});

View File

@ -131,7 +131,7 @@ namespace AgroBase.Services
{
get
{
return SerialService.DispositivosCan.Any(d => SerialService.DispositivosMapeados.Any(x => x.Conectado && x.Dispositivo == d));
return SerialService.DispositivosCan.Any(d => SerialService.DispositivosMapeados.Any(x => x.Status == StatusModulo.Operante && x.Dispositivo == d));
}
}
private static AsyncTaskTimerModel tmrEnviarCAN;

View File

@ -68,6 +68,11 @@ namespace AgroBase.Services
{
var Bateria = Variaveis.OperacaoEmAndamento.Sensoriamento.Bateria;
if (!Bateria.Iniciado)
{
return;
}
PercentualBateria = Math.Round(FuncoesMatematicas.Map(Bateria.TensaoInstantanea, VariaveisEquipamento.TensaoMinimaBateria, VariaveisEquipamento.TensaoMaximaBateria, 0.0, 100.0), 2);
// Verifique se as datas são válidas (não MinValue, MaxValue ou valores anômalos)

View File

@ -451,7 +451,14 @@ namespace AgroBase.Comum
newConfig.LimparDados(Dados);
File.WriteAllText(nomeArquivo, JsonConvert.SerializeObject(newConfig));
try
{
File.WriteAllText(nomeArquivo, JsonConvert.SerializeObject(newConfig));
}
catch (Exception ex)
{
Console.WriteLine($"Erro ao salvar parametrizacao para o modulo de endereco {newConfig._EnderecoCAN_Tx}");
}
}
public void CarregarParametrosModulos()

View File

@ -80,9 +80,8 @@ namespace AgroBase.Services
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = PortaGPS.PortName,
Dispositivo = T_Code.Gps,
Erro = !Iniciado,
Endereco = PortaGPS.PortName,
Versao = "1",
});
}

View File

@ -201,9 +201,8 @@ namespace AgroBase.Services
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = "USB",
Dispositivo = T_Code.Knt,
Erro = !Iniciado,
Endereco = "USB",
Versao = "1",
});

View File

@ -198,9 +198,8 @@ namespace AgroBase.Services
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = _PortaLoRa.PortName,
Dispositivo = T_Code.Lra,
Erro = !Iniciado,
Endereco = _PortaLoRa.PortName,
Versao = "220"
});

View File

@ -83,9 +83,8 @@ namespace AgroBase.Services
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = CanService._portName,
Dispositivo = T_Code.Dir,
Erro = (Leitura.Mensagem ?? "") != "",
Endereco = CanService._portName,
Versao = (Leitura.FV ?? "").ToString(),
Mod_ID = Mod_ID,
});

View File

@ -167,9 +167,8 @@ namespace AgroBase.Services
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
Dispositivo = T_Code.Dir,
Erro = (Leitura.Mensagem ?? "") != "",
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
Versao = (Leitura.FV ?? "").ToString(),
Mod_ID = Mod_ID,
});
@ -706,7 +705,7 @@ namespace AgroBase.Services
}
else if (ModoLeitura == "Decimal") // Decimal
{
leitura.RPM = 0;
leitura.RPM.valor = 0;
word16 = "0";
for (int a = 3; a < 5; a++)
{
@ -717,7 +716,7 @@ namespace AgroBase.Services
data16 = Convert.ToInt16(word16, 16);
str = Convert.ToString(data16, 10);
double.TryParse(str, out double val);
leitura.RPM = val;
leitura.RPM.valor = (int)val;
}
break;

View File

@ -1,6 +1,5 @@
using AgroBase.Models;
using AgroBase.Services;
using AgroBase.Services.Operadores;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
@ -94,7 +93,6 @@ public class MqttService
await AdicionarNovoTopico(MapasVariaveisModel.TopicoCoordenadasGPS);
await AdicionarNovoTopico(MapasVariaveisModel.TopicoSelecaoRuasMapa, true, 1, async (message) => { Variaveis.OperacaoEmAndamento.Mapa.AtualizarRuasSelecionadas(); });
await AdicionarNovoTopico(MapasVariaveisModel.TopicoTrajetoriaDinamica);
await AdicionarNovoTopico(HealthWorkerService.TopicoMQTT);
});
tmrCheck = new AsyncTaskTimerModel("tmrCheck", tmrCheck_Tick, 1000);
@ -133,7 +131,7 @@ public class MqttService
public async Task PublishAsync(MqttTopicosModel topic, string message, bool Forcar = false)
{
if (topic.Inscrever && !Forcar)
if (topic == null || (topic.Inscrever && !Forcar))
{
return;
}

View File

@ -1,76 +0,0 @@
using AgroBase.Models;
using Assimp;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
namespace AgroBase.Services
{
public class OAKCameraService
{
public static List<OAKCameraModel> CamerasConectadas = new List<OAKCameraModel>();
private static readonly object Cameras_Lock = new object();
private static AsyncTaskTimerModel tmrAtualizacao = new AsyncTaskTimerModel("tmrAtualizacao_OAK", async () => { AtualizarListaCameras(); }, 30000);
public static void IniciarRotinas()
{
tmrAtualizacao?.Stop();
tmrAtualizacao?.Start();
AtualizarListaCameras(true);
}
public static void AtualizarListaCameras(bool Forcar = false)
{
if (true && !Forcar)
{
return;
}
lock (Cameras_Lock)
{
CamerasConectadas = new List<OAKCameraModel>()
{
new OAKCameraModel()
{
Id = "Sem video",
Index = -1
}
};
}
try
{
string output = PythonService.RunScriptWithCallback(PythonService.ScriptListOAK, new string[] { });
if (string.IsNullOrEmpty(output))
{
Console.WriteLine("Nenhuma saída do script Python.");
return;
}
// Converte o JSON para uma lista de objetos OakCamera
List<OAKCameraModel> _cameras = JsonConvert.DeserializeObject<OAKCameraModel[]>(output).ToList();
lock (Cameras_Lock)
{
CamerasConectadas.AddRange(_cameras);
Console.WriteLine("Lista de cameras atualizadas: " + CamerasConectadas.Count);
}
}
catch (Exception ex)
{
Console.WriteLine($"Erro ao executar script Python: {ex.Message}");
}
}
public static List<OAKCameraModel> GetListaCameras()
{
lock (Cameras_Lock)
{
return new List<OAKCameraModel>(CamerasConectadas);
}
}
}
}

View File

@ -88,9 +88,8 @@ namespace AgroBase.Services
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = CanService._portName,
Dispositivo = T_Code.Mov,
Erro = Leitura.CodigoAlarme.valor > 0,
Endereco = CanService._portName,
Versao = "1.0",
Mod_ID = Mod_ID,
});

View File

@ -764,9 +764,8 @@ namespace AgroBase.Services
var leitura = DadosLeitura.FirstOrDefault(x => x.EnderecoTx == Addr);
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
Dispositivo = T_Code.Mov,
Erro = leitura.CodigoAlarme > 0,
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
Versao = "1.0",
Mod_ID = Mod_ID,
});

View File

@ -1,30 +1,184 @@
using AgroBase.Models;
using AgroBase.Models.Modules;
using AgroBase.Models.Operadores;
using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using static AgroBase.Models.Enums;
using static AgroBase.Models.Operadores.OperadoresModels;
using static MqttService;
namespace AgroBase.Services.Operadores
{
public class HealthWorkerService
{
public static string TopicoMQTT = "operador/health/rx";
private string TopicoMQTT_Tx = "operador/health/rx";
private MqttTopicosModel topicoTx;
private string TopicoMQTT_Rx = "operador/health/tx";
private MqttTopicosModel topicoRx;
public HealthWorkerModel DadosLeitura = new HealthWorkerModel();
public AsyncTaskTimerModel tmrFila;
public int TimeoutRespostaComando = 10;
public ConcurrentDictionary<TipoComando, WorkerMessageModel<HealthWorkerMessageResponseModel>> FilaComandos = new ConcurrentDictionary<TipoComando, WorkerMessageModel<HealthWorkerMessageResponseModel>>();
private Dictionary<TipoComando, Func<bool>> mapaRespostas;
public enum TipoComando
private bool DebugMode = true;
private void MostrarLog(string message, int limite = 500)
{
SetDadosModulo = 1,
GetDadosModulo = 2,
SetDadosContexto = 3,
GetDadosContexto = 4
if (DebugMode)
{
Console.WriteLine($"[HealthWorker] {message.Substring(0, Math.Min(limite, message.Length))}{(message.Length > limite ? "..." : "")}");
}
}
public static void EnviarDadosContexto()
public async Task<bool> IniciarProcessamento()
{
topicoRx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Rx, true, 2, MqttCallback);
topicoTx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Tx);
mapaRespostas = new Dictionary<TipoComando, Func<bool>>
{
{ TipoComando.GetListaCameras, () => DadosLeitura.Leitura.obj?.cameras?.newData ?? false },
{ TipoComando.GetCameraFrame, () => DadosLeitura.Leitura.obj?.frame?.newData ?? false },
};
DadosLeitura.IniciadoEm = DateTime.Now;
DadosLeitura.Iniciado = true;
tmrFila?.Dispose();
tmrFila = new AsyncTaskTimerModel("tmrHealthWorker_Fila", tmrFila_Tick, 10);
tmrFila.Start();
bool pronto() => DadosLeitura.Pronto;
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 5000);
if (pronto())
{
MostrarLog("Processamento iniciado com sucesso");
return true;
}
MostrarLog("Timeout ao iniciar script");
DadosLeitura.ReiniciarEstado();
return false;
}
public bool AdicionarComandoNaFila(TipoComando cmd, dynamic payload = null)
{
WorkerMessageModel<HealthWorkerMessageResponseModel> msg = new WorkerMessageModel<HealthWorkerMessageResponseModel>()
{
AdicionadoEm = DateTime.Now,
payload = new
{
cmd = cmd,
dados = payload
}
};
bool sucesso = FilaComandos.TryAdd(cmd, msg);
if (!sucesso)
{
MostrarLog($"Mensagem {cmd} nao adicionada na fila");
}
return sucesso;
}
private async Task tmrFila_Tick()
{
DateTime agora = DateTime.Now;
// remove as mensagens antigas que nao responderam para permitir envair novamente
foreach (var item in FilaComandos.Where(x => x.Value.Enviado && agora > x.Value.EnviadoEm.AddSeconds(TimeoutRespostaComando)))
{
FilaComandos.TryRemove(item.Key, out var _);
}
// pega a mensagem mais antiga
var msg = FilaComandos.Where(x => !x.Value.Enviado).OrderBy(x => x.Value.AdicionadoEm).FirstOrDefault();
if (msg.Value == null) return;
var mensagem = new
{
comando = (int)msg.Key,
dispositivo = (int)T_Code.Snr,
payload = msg.Value.payload
};
await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(mensagem), true);
msg.Value.Enviado = true;
msg.Value.EnviadoEm = DateTime.Now;
}
private async Task<bool> MqttCallback(MqttTopicosMensagensModel Mensagem)
{
if (!DadosLeitura.Pronto && Mensagem.Momento > DadosLeitura.IniciadoEm && Mensagem.Mensagem == "OK")
{
DadosLeitura.ProntoEm = DateTime.Now;
DadosLeitura.Pronto = true;
}
else
{
var msgRx = JsonConvert.DeserializeObject<WorkerMessageModel<HealthWorkerMessageResponseModel>>(Mensagem.Mensagem);
if (msgRx == null)
{
return false;
}
FilaComandos.TryGetValue(msgRx.obj.cmd, out var msgTx);
if (msgTx != null)
{
FilaComandos.TryRemove(msgRx.obj.cmd, out var msg);
}
AtualizarDadosLeitura(msgRx);
}
return true;
}
private void AtualizarDadosLeitura(WorkerMessageModel<HealthWorkerMessageResponseModel> msg)
{
if (DadosLeitura.Leitura.obj == null)
{
DadosLeitura.Leitura.obj = new HealthWorkerMessageResponseModel();
}
switch (msg.obj.cmd)
{
case TipoComando.GetListaCameras:
{
DadosLeitura.Leitura.obj.cameras = msg.obj.cameras.Clone();
break;
}
case TipoComando.GetCameraFrame:
{
DadosLeitura.Leitura.obj.frame = msg.obj.frame.Clone();
break;
}
}
DadosLeitura.Leitura.MomentoLog = DateTime.Now;
}
public async Task AguardarNovosDados(TipoComando cmd, int timeout = 1000)
{
if (mapaRespostas.TryGetValue(cmd, out var condicao))
{
await FuncoesGlobais.AguardarCondicaoAsync(condicao, timeout, 10);
}
else
{
MostrarLog($"Comando {cmd} não suportado no AguardarResposta.");
}
}
public void EnviarDadosContexto()
{
if (Variaveis.OperacaoEmAndamento.DispMvd == null) return;
double limiteValorPadrao = -9999;
var a = Variaveis.OperacaoEmAndamento.Trajetoria;
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var dados = new
{
@ -32,17 +186,48 @@ namespace AgroBase.Services.Operadores
dispositivo = (int)T_Code.Mod,
payload = new
{
Operacao = new
{
debug_mode = Variaveis.DebugMode,
iniciado = Variaveis.OperacaoEmAndamento.Iniciado,
finalizando = Variaveis.OperacaoEmAndamento.Finalizando,
emergencia = Variaveis.OperacaoEmAndamento.Emergencia,
},
Trajetoria = new
{
status = (int)_Sensoriamento.Trajetoria.StatusCarro,
manobrando = _Sensoriamento.Trajetoria.ManobrandoEntreRuas,
erro_angular = _Sensoriamento.Trajetoria.ErroOrientacaoAngularCombinado,
CorredorAtual = new
{
concluido = _Sensoriamento.Trajetoria.CorredorAtual.Concluido,
dentro = _Sensoriamento.Trajetoria.CorredorAtual.Dentro,
ultimo = _Sensoriamento.Trajetoria.CorredorAtual.Ultimo,
largura = _Sensoriamento.Trajetoria.CorredorAtual.Largura,
progresso = _Sensoriamento.Trajetoria.CorredorAtual.Progresso,
},
},
Gerais = new
{
velocidade_ms = _Sensoriamento.Movimentacao.VelocidadeMedia,
ervas_no_radar = _Sensoriamento.Atuador.ErvasNoRadar,
},
Gps = new
{
freq_base = GPSService.TaxaAmostragemHz,
conectado = GPSService.Iniciado,
fix = (int)GPSService.UltimaLeitura.QualidadeFix,
lat = _Sensoriamento.Gps.Latitude,
lon = _Sensoriamento.Gps.Longitude,
theta = _Sensoriamento.Gps.AnguloCarroDefinido,
fix = (int)_Sensoriamento.Gps.QualidadeFix,
rtk = GPSService.UltimoEnvioCorrecaoRTK.AddSeconds(5) > DateTime.Now,
hAcc = GPSService.UltimaLeitura.PrecisaoCm,
nSatelites = GPSService.UltimaLeitura.NumeroSatelites.valor,
freq = GPSService.UltimaLeitura.NumeroSatelites.frequencia,
hAcc = _Sensoriamento.Gps.PrecisaoCm,
nSatelites = _Sensoriamento.Gps.NumeroSatelites.valor,
freq = _Sensoriamento.Gps.NumeroSatelites.frequencia,
},
Dir = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Select(x => new
{
freq_base = Variaveis.OperacaoEmAndamento.DispMvd.Dados.tmrRegistradorDIR.IntervalHz,
endereco = x.DirMotor._EnderecoCAN_Tx,
angulo = x.DirMotor.Angulo,
angulo_sp = x.DirMotor.Angulo_SP,
@ -51,15 +236,18 @@ namespace AgroBase.Services.Operadores
sentido = x.DirMotor.Sentido,
sentido_sp = x.DirMotor.Sentido_SP,
sentido_real = x.DirMotor.SentidoReal,
rpm = x.DirMotor.RPM,
freq = new {
io = x.DirMotor.Leitura?.NumeroPulsos?.frequencia ?? 0,
pulsos = x.DirMotor.Leitura?.EntradaIN1?.frequencia ?? 0
pulsos = x.DirMotor.Leitura?.EntradaIN1?.frequencia ?? 0,
rpm = x.DirMotor.Leitura?.RPM?.frequencia ?? 0
}
}).ToArray(),
Mov = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Select(x => new
{
freq_base = Variaveis.OperacaoEmAndamento.DispMvd.Dados.tmrRegistradorMOV.IntervalHz,
endereco = x.MovMotor._EnderecoCAN_Tx,
cod_erro = (int)x.MovMotor.CodigoAlarme,
cod_erro = x.MovMotor.CodigoAlarme,
rpm = x.MovMotor.RPM_Roda,
rpm_sp = x.MovMotor.RPM_SP_Leitura,
tensao = x.MovMotor.Tensao,
@ -70,16 +258,17 @@ namespace AgroBase.Services.Operadores
freado = x.MovMotor.Leitura?.Freado ?? false,
freq = new
{
erro = x.MovMotor.Leitura?.CodigoAlarme?.valor ?? 0,
rpm = x.MovMotor.Leitura?.ERPM?.valor ?? 0,
tensao = x.MovMotor.Leitura?.Tensao?.valor ?? 0,
corrente_motor = x.MovMotor.Leitura?.CorrenteMotor?.valor ?? 0,
corrente_barramento = x.MovMotor.Leitura?.CorrenteBarramento?.valor ?? 0,
temperatura = x.MovMotor.Leitura?.Temperatura?.valor ?? 0,
erro = x.MovMotor.Leitura?.CodigoAlarme?.frequencia ?? 0,
rpm = x.MovMotor.Leitura?.ERPM?.frequencia ?? 0,
tensao = x.MovMotor.Leitura?.Tensao?.frequencia ?? 0,
corrente_motor = x.MovMotor.Leitura?.CorrenteMotor?.frequencia ?? 0,
corrente_barramento = x.MovMotor.Leitura?.CorrenteBarramento?.frequencia ?? 0,
temperatura = x.MovMotor.Leitura?.Temperatura?.frequencia ?? 0,
}
}).ToArray(),
Sen = new
{
freq_base = Variaveis.OperacaoEmAndamento.DispSen.Dados.tmrRegistrador.IntervalHz,
sensores = Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.Select(x => new
{
id = x.ID,
@ -115,14 +304,72 @@ namespace AgroBase.Services.Operadores
};
Task.Run(async () =>
{
await Variaveis.MqttService.PublishAsync(
Variaveis.MqttService.Topicos.First(x => x.Topico == TopicoMQTT),
JsonConvert.SerializeObject(dados)
);
await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(dados));
});
}
public void EnviarDadosOperacao()
{
if (Variaveis.OperacaoEmAndamento.DispMvd == null) return;
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
var dados = new
{
comando = (int)TipoComando.SetDadosOperacao,
dispositivo = (int)T_Code.Mod,
payload = new
{
modo = (int)Variaveis.OperacaoEmAndamento.Modo,
sonar_ativado = _Controle.SonarAtivado,
modulos_mandatorios = Variaveis.OperacaoEmAndamento.ModulosMandatorios.Select(x => (int)x.Dispositivo).ToArray(),
parametros_mandatorios = Variaveis.OperacaoEmAndamento.ParametrosMandatorios.Select(x => (int)x.Parametro).ToArray(),
Mov = new
{
percent_vel_max = _Controle.PercentualVelocidadeMax,
percent_vel_min = _Controle.PercentualVelocidadeMin,
},
Dir = new
{
angulo_max = _Controle.Angulo_Max,
vel_movimento = _Controle.VelocidadeMP,
tipo_controle = (int)_Controle.TipoControleDirecional,
mpc = new
{
pontos = Variaveis.OperacaoEmAndamento.Trajetoria?._TrajetoriaFixa?
.Select(p => new
{
lat = p.Posicao.Latitude,
lon = p.Posicao.Longitude,
tipo = (int)p.Tipo,
distanciaMargem = p.LarguraCorredor * 0.8
})
.ToList(),
horizonte = 4.0,
angulo_max_graus = _Controle.Angulo_Max,
distancia_entre_eixos = (VariaveisEquipamento.DistanciaEntreEixos / 100.0),
velocidade_min = FuncoesMatematicas.CalculaVelocidadeMsPercentual(_Controle.PercentualVelocidadeMin),
velocidade_max = FuncoesMatematicas.CalculaVelocidadeMsPercentual(_Controle.PercentualVelocidadeMax)
}
},
Atu = new
{
percent_vertical_deteccao = _Controle.PercentualInicioPulverizacao,
capacidade_reservatorio = Variaveis.OperacaoEmAndamento.CapacidadeReservatorio,
pressao_linha = _Controle.PressaoLinha,
},
Snr = new
{
mx_id = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Id
}
}
};
Task.Run(async () =>
{
await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(dados));
});
}
}
}

View File

@ -1,13 +1,109 @@
using System;
using System.Collections.Generic;
using AgroBase.Models;
using AgroBase.Models.Operadores;
using Newtonsoft.Json;
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static AgroBase.Models.Operadores.OperadoresModels;
using static MqttService;
namespace AgroBase.Services.Operadores
{
public class ManagerWorkerService
{
private string TopicoMQTT_Tx = "operador/manager/rx";
private MqttTopicosModel topicoTx;
private string TopicoMQTT_Rx = "operador/manager/tx";
private MqttTopicosModel topicoRx;
public ManagerWorkerModel DadosLeitura = new ManagerWorkerModel();
private bool DebugMode = true;
private void MostrarLog(string message, int limite = 500)
{
if (DebugMode)
{
Console.WriteLine($"[ManagerWorker] {message.Substring(0, Math.Min(limite, message.Length))}{(message.Length > limite ? "..." : "")}");
}
}
public async Task<bool> IniciarProcessamento()
{
topicoRx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Rx, true, 2, MqttCallback);
topicoTx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Tx);
DadosLeitura.IniciadoEm = DateTime.Now;
DadosLeitura.Iniciado = true;
bool pronto() => DadosLeitura.Pronto;
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 5000);
if (pronto())
{
MostrarLog("Processamento iniciado com sucesso");
return true;
}
MostrarLog("Timeout ao iniciar script");
DadosLeitura.ReiniciarEstado();
return false;
}
private async Task<bool> MqttCallback(MqttTopicosMensagensModel Mensagem)
{
if (!DadosLeitura.Pronto && Mensagem.Momento > DadosLeitura.IniciadoEm && Mensagem.Mensagem == "OK")
{
DadosLeitura.ProntoEm = DateTime.Now;
DadosLeitura.Pronto = true;
}
else
{
try
{
DadosLeitura.Leitura = JsonConvert.DeserializeObject<WorkerMessageModel<ManagerWorkerMessageResponseModel>>(Mensagem.Mensagem);
}
catch (Exception e)
{
MostrarLog($"Erro ao deserializar mensagem: {e.Message}");
}
if (DadosLeitura.Leitura != null)
{
AtualizarDadosLeitura(DadosLeitura.Leitura);
}
}
return true;
}
private void AtualizarDadosLeitura(WorkerMessageModel<ManagerWorkerMessageResponseModel> msg)
{
Variaveis.OperacaoEmAndamento.TempoAguardando = DateTimeOffset.FromUnixTimeSeconds(msg.obj.tempo_aguardando).UtcDateTime.AddSeconds(msg.obj.tempo_aguardando % 1).ToLocalTime();
Variaveis.OperacaoEmAndamento.StatusAtual = msg.obj.status_operacao;
Variaveis.OperacaoEmAndamento.OperacaoLiberada = msg.obj.operacao_liberada;
VariaveisOperacao.Operadores.ModulosSaude = new System.Collections.Generic.List<ManagerWorkerMessageResponseModulosPendentesModel>(msg.obj.status_modulos);
var mandatorios = Variaveis.OperacaoEmAndamento.ModulosMandatorios.Select(x => x.Dispositivo).ToList();
var mods_com_falha = msg.obj.status_modulos.Where(x => mandatorios.Contains(x.modulo) && x.status == Enums.StatusModulo.Falha);
var motivos_por_modulo = mods_com_falha.Select(x => $"{x.modulo}: {string.Join("; ", x.motivos)}");
Variaveis.OperacaoEmAndamento.ErroOperacaoLiberada = string.Join(Environment.NewLine + Environment.NewLine, motivos_por_modulo);
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
_Controle.Angulo = msg.obj.comando.angulo;
_Controle.TipoMovimento = msg.obj.comando.tipo_movimento;
_Controle.PercentualVelocidadeSP = msg.obj.comando.percentual_velocidade;
_Controle.SimulacaoMPC = msg.obj.comando.simulacao;
if (Variaveis.OperacaoEmAndamento.StatusAtual == Enums.StatusOperacao.Concluido && Variaveis.OperacaoEmAndamento.Iniciado)
{
Task.Run(async () =>
{
await Variaveis.OperacaoEmAndamento.FinalizarOperacao();
});
}
DadosLeitura.Leitura.MomentoLog = DateTime.Now;
}
}
}

View File

@ -0,0 +1,172 @@
using AgroBase.Models;
using AgroBase.Models.Operadores;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using static AgroBase.Models.Enums;
using static AgroBase.Models.Operadores.OperadoresModels;
namespace AgroBase.Services.Operadores
{
public class OperadoresService
{
private Process pythonProcess;
public ManagerWorkerService ManagerWorker;
public VisualWorkerService VisualWorker;
public HealthWorkerService HealthWorker;
public List<OAKCameraModel> CamerasConectadas = new List<OAKCameraModel>();
public List<Bitmap> FramesSonar = new List<Bitmap>();
public List<ManagerWorkerMessageResponseModulosPendentesModel> ModulosSaude = new List<ManagerWorkerMessageResponseModulosPendentesModel>();
private bool iniciarScript = false;
private int TimeoutDesconexao = 3;
private double TempoDesconectado = 0;
private AsyncTaskTimerModel tmrHearthbeat;
public bool Conectado = false;
public async Task<bool> IniciarProcessamento(bool _iniciarScript = true)
{
iniciarScript = _iniciarScript;
tmrHearthbeat?.Dispose();
tmrHearthbeat = new AsyncTaskTimerModel("tmrHearthbeatOperadores", tmrHearthbeat_Tick, 1000);
tmrHearthbeat.Start();
IniciarOperadores();
return true;
}
private void IniciarOperadores()
{
if (iniciarScript)
{
Encerrar();
pythonProcess = PythonService.RunScript(Path.Combine("workers", "main.py"), new string[] { });
}
Task.Run(async () =>
{
ManagerWorker = new ManagerWorkerService();
await ManagerWorker.IniciarProcessamento();
});
Task.Run(async () =>
{
VisualWorker = new VisualWorkerService();
await VisualWorker.IniciarProcessamento();
});
Task.Run(async () =>
{
HealthWorker = new HealthWorkerService();
await HealthWorker.IniciarProcessamento();
});
}
public bool Encerrar()
{
if (pythonProcess != null && !pythonProcess.HasExited)
{
pythonProcess.Kill();
}
pythonProcess = null;
return true;
}
private async Task tmrHearthbeat_Tick()
{
// Houve leitura nos ultimos 3 segundos
TempoDesconectado = (DateTime.Now - (ManagerWorker.DadosLeitura.Leitura?.MomentoLog ?? DateTime.MinValue)).TotalSeconds;
Conectado = TempoDesconectado < TimeoutDesconexao;
if (!Conectado)
{
if (Variaveis.OperacaoEmAndamento.Iniciado && Variaveis.OperacaoEmAndamento.Modo == Enums.ModoOperacao.MapaGPS)
{
Variaveis.OperacaoEmAndamento.StatusAtual = Enums.StatusOperacao.Parado;
Variaveis.OperacaoEmAndamento.OperacaoLiberada = false;
Variaveis.OperacaoEmAndamento.Controle.Angulo = 0;
Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP = 0;
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(true);
}
Variaveis.OperacaoEmAndamento.ErroOperacaoLiberada = "Sem comunicação com o núcleo de processamento central";
// A cada 10 segundos desconectado, tenta reiniciar o nucleo de processamento
if (TempoDesconectado % 10 == 0)
{
IniciarOperadores();
}
}
else if (!ManagerWorker.DadosLeitura.Leitura.obj.configurado)
{
HealthWorker.EnviarDadosOperacao();
}
}
public async Task<List<OAKCameraModel>> AtualizarListaCameras()
{
HealthWorker.AdicionarComandoNaFila(TipoComando.GetListaCameras);
await HealthWorker.AguardarNovosDados(TipoComando.GetListaCameras, 5000);
CamerasConectadas = new List<OAKCameraModel>()
{
new OAKCameraModel()
{
Dispositivo = T_Code.Vzo,
Index = -1,
Name = "Sem Video"
}
};
if (HealthWorker.DadosLeitura.Leitura.obj?.cameras?.itens?.Any() ?? false)
{
CamerasConectadas.AddRange(HealthWorker.DadosLeitura.Leitura.obj?.cameras?.itens?.Select(x => new OAKCameraModel()
{
Dispositivo = x.dispositivo,
Version = x.versao,
Name = x.modelo,
Id = x.mx_id,
}).ToList());
}
return CamerasConectadas;
}
public async Task<List<Bitmap>> SalvarFramesSonar()
{
var frames = new List<Bitmap>();
VisualWorker.AdicionarComandoNaFila(VisualWorkerCommandType.SalvarFrames);
await VisualWorker.AguardarNovosDados(VisualWorkerCommandType.SalvarFrames, 5000);
var uris = VisualWorker.DadosLeitura.Leitura?.obj?.save_frames?.frames;
if (uris != null)
{
foreach (var uri in uris)
{
if (!string.IsNullOrWhiteSpace(uri) && File.Exists(uri))
{
using (var img = Image.FromFile(uri))
{
frames.Add((Bitmap)img.Clone());
}
}
}
}
FramesSonar = frames;
return FramesSonar;
}
}
}

View File

@ -4,28 +4,26 @@ using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using static AgroBase.Models.Enums;
using static AgroBase.Models.Operadores.OperadoresModels;
using static MqttService;
namespace AgroBase.Services.Operadores
{
public class VisualWorkerService
{
private string mqtt_topico = "agrobot/operador/sonar";
private MqttTopicosModel topico;
private Process pythonProcess;
private int cameraIndex = -1;
public string TopicoMQTT_Tx = "operador/visual/rx";
private MqttTopicosModel topicoTx;
public string TopicoMQTT_Rx = "operador/visual/tx";
private MqttTopicosModel topicoRx;
public VisualWorkerModel DadosLeitura = new VisualWorkerModel();
public int TimeoutRespostaComando { get; set; } = 10;
public ConcurrentDictionary<VisualWorkerCommandType, VisualWorkerMessageModel> FilaComandos = new ConcurrentDictionary<VisualWorkerCommandType, VisualWorkerMessageModel>();
public AsyncTaskTimerModel tmrFila;
public int TimeoutRespostaComando = 10;
public ConcurrentDictionary<VisualWorkerCommandType, WorkerMessageModel<VisualWorkerMessageResponseModel>> FilaComandos = new ConcurrentDictionary<VisualWorkerCommandType, WorkerMessageModel<VisualWorkerMessageResponseModel>>();
private Dictionary<VisualWorkerCommandType, Func<bool>> mapaRespostas;
private bool DebugMode = true;
private void MostrarLog(string message, int limite = 500)
@ -36,55 +34,27 @@ namespace AgroBase.Services.Operadores
}
}
public async Task<bool> IniciarProcessamento(int _cameraIndex, int distanciaMax = 3000, int sessoesSolo = 25, int percentualSolo = 30, bool iniciarScript = true)
public async Task<bool> IniciarProcessamento()
{
if (_cameraIndex == -1)
{
MostrarLog("Camera nao selecionada");
DadosLeitura.ReiniciarEstado();
return false;
}
topicoRx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Rx, true, 2, MqttCallback);
topicoTx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Tx);
mapaRespostas = new Dictionary<VisualWorkerCommandType, Func<bool>>
{
{ VisualWorkerCommandType.Ping, () => DadosLeitura.Leitura.obj.ping?.newData ?? false },
{ VisualWorkerCommandType.Get_Status_Dispositivo, () => DadosLeitura.Leitura.obj.device_status?.newData ?? false },
{ VisualWorkerCommandType.Get_IMU_Data, () => DadosLeitura.Leitura.obj.imu?.newData ?? false },
{ VisualWorkerCommandType.Get_RGB_Frame, () => DadosLeitura.Leitura.obj.rgb_frame?.newData ?? false },
{ VisualWorkerCommandType.Get_Heatmap_Frame, () => DadosLeitura.Leitura.obj.heatmap_frame?.newData ?? false },
{ VisualWorkerCommandType.Calibrar_Grades, () => DadosLeitura.Leitura.obj.calibragem?.newData ?? false },
{ VisualWorkerCommandType.Get_Analise_Anomalia, () => DadosLeitura.Leitura.obj.analise_anomalias?.newData ?? false },
{ VisualWorkerCommandType.Get_Analise_Solo, () => DadosLeitura.Leitura.obj.analise_solo?.newData ?? false },
{ VisualWorkerCommandType.Get_Radar_2D, () => DadosLeitura.Leitura.obj.radar_2d?.newData ?? false },
{ VisualWorkerCommandType.Get_Segmentacao_Semantica, () => DadosLeitura.Leitura.obj.segmentacao?.newData ?? false },
{ VisualWorkerCommandType.SalvarFrames, () => DadosLeitura.Leitura.obj?.save_frames?.newData ?? false },
};
cameraIndex = _cameraIndex;
topico = await Variaveis.MqttService.AdicionarNovoTopico(mqtt_topico, true, 2, MqttCallback);
if (iniciarScript)
{
pythonProcess = PythonService.RunScript(Path.Combine("visual_worker", "main.py"), new string[] {
mqtt_topico,
cameraIndex.ToString(),
distanciaMax.ToString(),
sessoesSolo.ToString(),
percentualSolo.ToString()
});
}
DadosLeitura.IniciadoEm = DateTime.Now;
DadosLeitura.Iniciado = true;
tmrFila?.Dispose();
tmrFila = new AsyncTaskTimerModel("tmrVisualWorker_Fila", tmrFila_Tick, 10);
tmrFila.Start();
bool pronto() => DadosLeitura.Pronto;
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 8000);
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 5000);
if (pronto())
{
tmrFila?.Dispose();
tmrFila = new AsyncTaskTimerModel("tmrVisualWorker_Fila", tmrFila_Tick, 10);
tmrFila.Start();
MostrarLog("Processamento iniciado com sucesso");
return true;
}
@ -94,33 +64,22 @@ namespace AgroBase.Services.Operadores
return false;
}
public async Task<bool> Encerrar()
{
if (pythonProcess != null && !pythonProcess.HasExited)
{
pythonProcess.Kill();
}
pythonProcess = null;
await Variaveis.MqttService.UnsubscribeAsync(topico);
topico = null;
tmrFila?.Dispose();
return true;
}
public bool AdicionarComandoNaFila(VisualWorkerCommandType cmd, dynamic payload = null)
{
VisualWorkerMessageModel msg = new VisualWorkerMessageModel()
WorkerMessageModel<VisualWorkerMessageResponseModel> msg = new WorkerMessageModel<VisualWorkerMessageResponseModel>()
{
AdicionadoEm = DateTime.Now,
tipo_cmd = VisualWorkerMessageType.TX,
cmd = cmd,
payload = payload
AdicionadoEm = DateTime.Now,
payload = payload,
obj = new VisualWorkerMessageResponseModel()
{
cmd = cmd,
}
};
bool sucesso = FilaComandos.TryAdd(msg.cmd, msg);
bool sucesso = FilaComandos.TryAdd(cmd, msg);
if (!sucesso)
{
MostrarLog($"Mensagem {msg.cmd} nao adicionada na fila");
MostrarLog($"Mensagem {cmd} nao adicionada na fila");
}
return sucesso;
@ -138,11 +97,14 @@ namespace AgroBase.Services.Operadores
var msg = FilaComandos.Where(x => !x.Value.Enviado).OrderBy(x => x.Value.AdicionadoEm).FirstOrDefault();
if (msg.Value == null) return;
await Variaveis.MqttService.PublishAsync(
topico,
JsonConvert.SerializeObject(msg.Value, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
true
);
var mensagem = new
{
comando = (int)msg.Value.obj.cmd,
dispositivo = (int)T_Code.Snr,
payload = msg.Value.payload
};
await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(mensagem), true);
msg.Value.Enviado = true;
msg.Value.EnviadoEm = DateTime.Now;
@ -157,17 +119,17 @@ namespace AgroBase.Services.Operadores
}
else
{
var msgRx = JsonConvert.DeserializeObject<VisualWorkerMessageModel>(Mensagem.Mensagem);
var msgRx = JsonConvert.DeserializeObject<WorkerMessageModel<VisualWorkerMessageResponseModel>>(Mensagem.Mensagem);
if (msgRx == null || msgRx.tipo_cmd == VisualWorkerMessageType.TX)
if (msgRx == null)
{
return false;
}
FilaComandos.TryGetValue(msgRx.cmd, out var msgTx);
FilaComandos.TryGetValue(msgRx.obj.cmd, out var msgTx);
if (msgTx != null)
{
FilaComandos.TryRemove(msgTx.cmd, out var msg);
FilaComandos.TryRemove(msgTx.obj.cmd, out var msg);
}
AtualizarDadosLeitura(msgRx);
@ -175,58 +137,17 @@ namespace AgroBase.Services.Operadores
return true;
}
private void AtualizarDadosLeitura(VisualWorkerMessageModel msg)
private void AtualizarDadosLeitura(WorkerMessageModel<VisualWorkerMessageResponseModel> msg)
{
switch (msg.cmd)
if (DadosLeitura.Leitura.obj == null)
{
case VisualWorkerCommandType.Ping:
DadosLeitura.Leitura.obj = new VisualWorkerMessageResponseModel();
}
switch (msg.obj.cmd)
{
case VisualWorkerCommandType.SalvarFrames:
{
DadosLeitura.Leitura.obj.ping = msg.obj.ping.Clone();
break;
}
case VisualWorkerCommandType.Get_Status_Dispositivo:
{
DadosLeitura.Leitura.obj.device_status = msg.obj.device_status?.Clone();
break;
}
case VisualWorkerCommandType.Get_IMU_Data:
{
DadosLeitura.Leitura.obj.imu = msg.obj?.imu?.Clone();
break;
}
case VisualWorkerCommandType.Get_RGB_Frame:
{
DadosLeitura.Leitura.obj.rgb_frame = msg.obj?.rgb_frame?.Clone();
break;
}
case VisualWorkerCommandType.Get_Heatmap_Frame:
{
DadosLeitura.Leitura.obj.heatmap_frame = msg.obj?.heatmap_frame?.Clone();
break;
}
case VisualWorkerCommandType.Calibrar_Grades:
{
DadosLeitura.Leitura.obj.calibragem = msg.obj?.calibragem?.Clone();
break;
}
case VisualWorkerCommandType.Get_Analise_Anomalia:
{
DadosLeitura.Leitura.obj.analise_anomalias = msg.obj?.analise_anomalias?.Clone();
break;
}
case VisualWorkerCommandType.Get_Analise_Solo:
{
DadosLeitura.Leitura.obj.analise_solo = msg.obj?.analise_solo?.Clone();
break;
}
case VisualWorkerCommandType.Get_Radar_2D:
{
DadosLeitura.Leitura.obj.radar_2d = msg.obj?.radar_2d?.Clone();
break;
}
case VisualWorkerCommandType.Get_Segmentacao_Semantica:
{
DadosLeitura.Leitura.obj.segmentacao = msg.obj?.segmentacao?.Clone();
DadosLeitura.Leitura.obj.save_frames = msg.obj.save_frames.Clone();
break;
}
}

View File

@ -95,9 +95,8 @@ namespace AgroBase.Services
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = ModbusService._PortaModbus.PortName,
Dispositivo = T_Code.Pzm,
Erro = !Iniciado,
Endereco = ModbusService._PortaModbus.PortName,
Versao = "17"
});
}

View File

@ -236,6 +236,27 @@ namespace AgroBase.Services
DispositivosMapeados.Remove(Dispositivo);
}
foreach (var cam in VariaveisOperacao.Operadores.CamerasConectadas.Where(x => x.Index > -1))
{
if (!DispositivosMapeados.Any(x => x.Dispositivo == cam.Dispositivo))
{
DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Dispositivo = cam.Dispositivo,
Endereco = "USB",
Versao = cam.Version
});
}
}
foreach (var cam in DispositivosMapeados.Where(x => x.Tipo == TipoConexao.USB))
{
if (!VariaveisOperacao.Operadores.CamerasConectadas.Any(x => x.Dispositivo == cam.Dispositivo))
{
DispositivosMapeados.Remove(cam);
}
}
AtualizarDispositivos();
}
catch (Exception ex)
@ -285,68 +306,6 @@ namespace AgroBase.Services
});
}
private static bool ProcessarRespostaDispositivo(SerialPort Porta)
{
if (Porta.BytesToRead <= 15 || Porta.BytesToRead >= 30)
{
//VerificaRespostaGPS(Porta);
VerificarRespostaPortasDesconhecidas(Porta);
return false;
}
string Recebido = ReadLineWithTimeout(Porta, 1000);
if (Recebido.Length > 2)
{
T_Code Dispositivo = T_Code.Vzo;
F_Code Verificacao = F_Code.Nda;
string Versao = "0";
var Dados = Recebido.Split(SplitMessage[0]);
if (Dados.Length <= 1)
{
return false;
}
string Mod_ID = Dados[0];
int.TryParse(Dados[1], out int check);
if (check == 0)
{
return false;
}
Verificacao = (F_Code)check;
if (Verificacao == F_Code.MsgTx)
{
return true;
}
Dispositivo = (T_Code)(int.Parse(Dados[2]));
Versao = Dados[3];
if (Dispositivo != T_Code.Vzo && !DispositivosMapeados.Any(x => x.Dispositivo == Dispositivo && x.Mod_ID == Mod_ID))
{
DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = Porta.PortName,
Dispositivo = Dispositivo,
Erro = Verificacao == F_Code.ErrRx,
Versao = Versao,
Mod_ID = Mod_ID,
});
}
return true;
}
return false;
}
public static string ReadLineWithTimeout(SerialPort porta, int timeout)
{
using (CancellationTokenSource cts = new CancellationTokenSource())
@ -385,7 +344,6 @@ namespace AgroBase.Services
}
}
public static void AtualizarDispositivos()
{
bool PrimeiraExecucao = !Variaveis.DispositivosConectados.Any();
@ -531,22 +489,6 @@ namespace AgroBase.Services
}
}
public static byte[] VerificarRespostaPortasDesconhecidas(SerialPort Porta)
{
if (Porta != null && Porta.IsOpen)
{
int bytesToRead = Porta.BytesToRead;
byte[] buffer = new byte[bytesToRead];
Porta.Read(buffer, 0, bytesToRead);
//Porta.DiscardInBuffer();
return buffer;
}
else
{
return new byte[] { };
}
}
public static byte[] LerDadosDaPortaSerial(SerialPort porta, int tamanhoEsperado, int Timeout = 500)
{
DateTime inicio = DateTime.Now;
@ -590,16 +532,6 @@ namespace AgroBase.Services
return buffer.ToArray();
}
public static async Task AguardaRespostaPorta(SerialPort _Porta, int Timeout)
{
DateTime inicio = DateTime.Now;
while (_Porta.BytesToRead == 0 && DateTime.Now < inicio.AddMilliseconds(Timeout))
{
await Task.Delay(50);
}
}
private static void AtualizarConsole(string msg)
{
Console.WriteLine(msg);

View File

@ -65,9 +65,8 @@ namespace AgroBase.Services
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = ModbusService._PortaModbus.PortName,
Dispositivo = T_Code.A05,
Erro = !Iniciado,
Endereco = ModbusService._PortaModbus.PortName,
Versao = "1"
});
}

View File

@ -105,9 +105,8 @@ namespace AgroBase.Services
{
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
Endereco = ModbusService._PortaModbus.PortName,
Dispositivo = T_Code.Wit,
Erro = !Iniciado,
Endereco = ModbusService._PortaModbus.PortName,
Versao = _DadosLeitura.Versao,
});
}

View File

@ -1,7 +1,8 @@
0:00:00 Tab1 FinishNav1
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:18:16 Widget Closed: StatusBubble
0:21:01 Microsoft.Shutdown.OnWindowClosing
0:02:58 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -14,8 +15,7 @@
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:00:19 Widget Closed: StatusBubble
0:03:50 Microsoft.Shutdown.OnWindowClosing
0:03:43 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -28,8 +28,9 @@
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:02:29 Widget Closed: StatusBubble
0:07:13 Microsoft.Shutdown.OnWindowClosing
0:00:16 Widget Closed: StatusBubble
0:03:23 Widget Closed: StatusBubble
0:09:24 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -42,7 +43,9 @@
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:01:40 Microsoft.Shutdown.OnWindowClosing
0:00:55 Widget Closed: StatusBubble
0:01:55 Widget Closed: StatusBubble
0:03:42 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -55,8 +58,8 @@
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:01:17 Widget Closed: StatusBubble
0:01:43 Microsoft.Shutdown.OnWindowClosing
0:00:10 Widget Closed: StatusBubble
0:04:47 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -69,8 +72,8 @@
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:00:21 Widget Closed: StatusBubble
0:03:59 Microsoft.Shutdown.OnWindowClosing
0:00:28 Widget Closed: StatusBubble
0:02:53 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -83,7 +86,8 @@
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:01:26 Microsoft.Shutdown.OnWindowClosing
0:00:15 Widget Closed: StatusBubble
0:03:25 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -96,17 +100,5 @@
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:01:30 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
0:00:00 Microsoft.NewBrowser_Popup
0:00:00 Microsoft.BrowserList.AddBrowser
0:00:00 Browser1 Insert active Tab1 at 0
0:00:00 Tab1 StartNav1 #auto_toplevel
0:00:00 Tab1 StartNav2 #typed
0:00:00 Tab1 FinishNav1
0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad
0:01:31 Microsoft.Shutdown.OnWindowClosing
0:00:18 Widget Closed: StatusBubble
0:05:24 Microsoft.Shutdown.OnWindowClosing

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -1,3 +1,3 @@
2025/05/28-15:48:13.367 7670 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/05/28-15:48:13.373 7670 Recovering log #3
2025/05/28-15:48:13.376 7670 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
2025/06/04-16:07:07.940 1a30 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/06/04-16:07:07.946 1a30 Recovering log #3
2025/06/04-16:07:07.949 1a30 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/05/28-15:45:47.094 1cd4 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/05/28-15:45:47.100 1cd4 Recovering log #3
2025/05/28-15:45:47.104 1cd4 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
2025/06/04-15:46:51.069 c04 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2025/06/04-15:46:51.074 c04 Recovering log #3
2025/06/04-15:46:51.077 c04 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":"13393018098626709","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":44380},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"2804:d78:69a:2400:4176:d1e5:6b10:eb19","used_quic":true},"version":5},"network_qualities":{"CAASABiAgICA+P////8B":"4G","CAESABiAgICA+P////8B":"4G","CAISABiAgICA+P////8B":"4G"}}}
{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13393624033838097","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":9055},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"2804:d78:69a:2400:9194:2b14:815e:6621","used_quic":true},"version":5},"network_qualities":{"CAASABiAgICA+P////8B":"4G","CAESABiAgICA+P////8B":"4G","CAISABiAgICA+P////8B":"4G"}}}

View File

@ -1 +1 @@
{"sts":[{"expiry":1779993855.645362,"host":"bWGAftl61rqoc0YzqPncsLvQQh/iC2Bdp3ejUeGC83w=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1748457855.645373}],"version":2}
{"sts":[{"expiry":1780581733.031376,"host":"bWGAftl61rqoc0YzqPncsLvQQh/iC2Bdp3ejUeGC83w=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1749045733.03138}],"version":2}

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