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 63e9a7850c
commit 81891bcf68
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\MPCControllerSimple.cs" />
<Compile Include="Models\OAKCameraModel.cs" /> <Compile Include="Models\OAKCameraModel.cs" />
<Compile Include="Models\OIDModel.cs" /> <Compile Include="Models\OIDModel.cs" />
<Compile Include="Models\Operacoes\OperacaoMapaGPSModel.cs" />
<Compile Include="Models\Operacoes\OperacaoModel.cs" /> <Compile Include="Models\Operacoes\OperacaoModel.cs" />
<Compile Include="Models\Operacoes\OperacaoParametrosModel.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\Operadores\VisualWorkerModel.cs" />
<Compile Include="Models\PerformanceModel.cs" /> <Compile Include="Models\PerformanceModel.cs" />
<Compile Include="Models\PIDModel.cs" /> <Compile Include="Models\PIDModel.cs" />
@ -561,11 +563,11 @@
<Compile Include="Services\MKS057DService.cs" /> <Compile Include="Services\MKS057DService.cs" />
<Compile Include="Services\ModbusService.cs" /> <Compile Include="Services\ModbusService.cs" />
<Compile Include="Services\MqttService.cs" /> <Compile Include="Services\MqttService.cs" />
<Compile Include="Services\OAKCameraService.cs" />
<Compile Include="Services\OIDCanService.cs" /> <Compile Include="Services\OIDCanService.cs" />
<Compile Include="Services\OIDService.cs" /> <Compile Include="Services\OIDService.cs" />
<Compile Include="Services\Operadores\HealthWorkerService.cs" /> <Compile Include="Services\Operadores\HealthWorkerService.cs" />
<Compile Include="Services\Operadores\ManagerWorkerService.cs" /> <Compile Include="Services\Operadores\ManagerWorkerService.cs" />
<Compile Include="Services\Operadores\OperadoresService.cs" />
<Compile Include="Services\Operadores\VisualWorkerService.cs" /> <Compile Include="Services\Operadores\VisualWorkerService.cs" />
<Compile Include="Services\PythonService.cs" /> <Compile Include="Services\PythonService.cs" />
<Compile Include="Services\PZEMService.cs" /> <Compile Include="Services\PZEMService.cs" />

View File

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

View File

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

View File

@ -15,7 +15,9 @@ namespace AgroBase.Forms.IHM
{ {
//LoRaParametrosModel loraParametrosBase; //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() public frmAjustes()
{ {
@ -34,20 +36,8 @@ namespace AgroBase.Forms.IHM
}); });
FuncoesGlobais.DefinirEventosPicBtn(picSalvar, "Erro ao salvar parâmetros!", async () => FuncoesGlobais.DefinirEventosPicBtn(picSalvar, "Erro ao salvar parâmetros!", async () =>
{ {
Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Caminho = cmbC.Text; Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho = CameraCaminho.Clone();
Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo = new List<OAKCameraModel>(CamerasSolo);
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();
}
CustomDialog.ShowDialog( CustomDialog.ShowDialog(
"Sucesso", "Sucesso",
@ -61,7 +51,7 @@ namespace AgroBase.Forms.IHM
}); });
FuncoesGlobais.DefinirEventosPicBtn(picAtualizar, "Erro ao atualizar lista de câmeras!", async () => 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 () => 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) if (LoRaService.Iniciado)
{ {
await AtualizarParametros(); await AtualizarParametros();
@ -138,7 +128,7 @@ namespace AgroBase.Forms.IHM
private void frmAjustes_FormClosing(object sender, FormClosingEventArgs e) private void frmAjustes_FormClosing(object sender, FormClosingEventArgs e)
{ {
Variaveis.OperacaoEmAndamento.DesligarCameras();
} }
#region COMUNICACAO #region COMUNICACAO
@ -273,64 +263,25 @@ namespace AgroBase.Forms.IHM
#region CAMERAS #region CAMERAS
private void AtualizarCameras() private async Task AtualizarCameras()
{ {
flwCamerasSolo.Controls.Clear(); flwCamerasSolo.Controls.Clear();
OAKCameraService.AtualizarListaCameras(true); ListaCameras = await VariaveisOperacao.Operadores.AtualizarListaCameras();
Cameras = OAKCameraService.GetListaCameras();
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++) for (int i = 0; i < Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo; i++)
{ {
GerarCameraSolo(i); GerarCameraSolo(i);
} }
cmbC.Items.Clear(); cmbCameraCaminho.Items.Clear();
cmbC.Items.AddRange(Cameras.Select(x => x.Id).ToArray()); cmbCameraCaminho.Items.AddRange(ListaCameras.Select(x => x.Description).ToArray());
var cameraSelecionada = Cameras.FirstOrDefault(x => x.Id == Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Caminho); string cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CameraCaminho.Id)?.Description ?? "";
if (cameraSelecionada != null) if (cameraSelecionada != null)
{ {
cmbC.SelectedIndex = Cameras.IndexOf(cameraSelecionada); cmbCameraCaminho.SelectedIndex = cmbCameraCaminho.Items.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();
} }
} }
@ -351,14 +302,15 @@ namespace AgroBase.Forms.IHM
Location = new Point(66, 6), Location = new Point(66, 6),
Font = new Font("Microsoft Sans Serif", 12.25f, FontStyle.Regular) 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, Width = 286,
Height = 200, Height = 200,
Location = new Point(7, 31), Location = new Point(7, 31),
BackgroundImageLayout = ImageLayout.Stretch, BackgroundImageLayout = ImageLayout.Stretch,
BackColor = Color.Black, BackColor = Color.Black,
SizeMode = PictureBoxSizeMode.Zoom
}; };
ComboBox cmbCamera = new ComboBox() ComboBox cmbCamera = new ComboBox()
{ {
@ -366,22 +318,28 @@ namespace AgroBase.Forms.IHM
Width = 286, Width = 286,
Height = 39, Height = 39,
Location = new Point(7, 237), 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.SelectedIndexChanged += cmbCameraSolo_SelectedIndexChanged;
cmbCamera.Items.Clear(); 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(lblTitulo);
pnlFundo.Controls.Add(pnlCamera); pnlFundo.Controls.Add(picCamera);
pnlFundo.Controls.Add(cmbCamera); pnlFundo.Controls.Add(cmbCamera);
flwCamerasSolo.Controls.Add(pnlFundo); 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); cmbCamera.SelectedIndex = cmbCamera.Items.IndexOf(cameraSelecionada);
} }
@ -391,45 +349,79 @@ 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; ComboBox cmb = sender as ComboBox;
PictureBox pic = picCaminho;
string CamID = cmb.Name.Replace("cmbCamSolo_", ""); CameraCaminho = CameraDisponivel(cmb.Text);
if (CameraCaminho.Index > -1)
CameraSoloModel CameraSolo = Variaveis.OperacaoEmAndamento.CamerasSolo.FirstOrDefault(x => x.ID == CamID);
if (CameraSolo != null)
{ {
CameraSolo.combo = cmb; Bitmap rgb = await CameraCaminho.GetFrame();
CameraSolo.panel = FuncoesGlobais.FindControlRecursive<Panel>(flwCamerasSolo, "pnlCamSoloFundo_" + CamID); pic.Image = rgb;
CameraSolo.panel.Tag = cmb.Text; }
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( CustomDialog.ShowDialog(
"Erro", "Camera indisponível",
"Essa câmera já está sendo usada por outro processo!", $"A camera {cam.Description} já está configurada em outro processo!",
MessageBoxIcon.Warning, MessageBoxIcon.Warning,
new Dictionary<(string, dynamic), Action>() new Dictionary<(string, dynamic), Action>()
{ {
{ ("OK", null), () => { } } { ("OK", null), () => { } }
} }
); );
CameraSolo.combo.SelectedIndex = CameraSolo.camera.cameraIndex; cam = ListaCameras.FirstOrDefault(x => x.Index == -1);
return;
} }
CameraSolo.camera.cameraIndex = CameraSolo.combo.SelectedIndex; return cam;
if (CameraSolo.camera.cameraIndex > 0)
{
IniciarCameras();
} }
}
#endregion #endregion

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>() Testes.AddRange(new List<ColunasDiagnosticoModel>()
{ {
new ColunasDiagnosticoModel() new ColunasDiagnosticoModel()
{ {
Componente = camera.Nome, Componente = camera.Name,
Teste = "Configurado", Teste = "Configurado",
ValorPadrao = 1, ValorPadrao = 1,
ComplementoValorPadrao = ComplementosPadrao[1] ComplementoValorPadrao = ComplementosPadrao[1]
}, },
new ColunasDiagnosticoModel() new ColunasDiagnosticoModel()
{ {
Componente = camera.Nome, Componente = camera.Name,
Teste = "Conectado", Teste = "Conectado",
ValorPadrao = 1, ValorPadrao = 1,
ComplementoValorPadrao = ComplementosPadrao[1] ComplementoValorPadrao = ComplementosPadrao[1]
}, },
new ColunasDiagnosticoModel() new ColunasDiagnosticoModel()
{ {
Componente = camera.Nome, Componente = camera.Name,
Teste = "Vídeo", Teste = "Vídeo",
ValorPadrao = 1, ValorPadrao = 1,
ComplementoValorPadrao = ComplementosPadrao[1] ComplementoValorPadrao = ComplementosPadrao[1]
@ -1503,7 +1503,7 @@ namespace AgroBase.Forms.IHM
List<string> CamerasIDs = CameraService.ObterListaCameras().Values.ToList(); 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"; bool RuaConfigurado = !string.IsNullOrEmpty(IDcamRua) && IDcamRua != "Sem video";
idx = PreencheDadosLinha(grid, Testes, idx, RuaConfigurado ? 1 : 0); idx = PreencheDadosLinha(grid, Testes, idx, RuaConfigurado ? 1 : 0);
@ -1514,9 +1514,9 @@ namespace AgroBase.Forms.IHM
bool RuaVideo = await VerificaImagemCamera(CamerasIDs, IDcamRua, RuaConectado); bool RuaVideo = await VerificaImagemCamera(CamerasIDs, IDcamRua, RuaConectado);
idx = PreencheDadosLinha(grid, Testes, idx, RuaVideo ? 1 : 0); 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"; bool SoloConfigurado = !string.IsNullOrEmpty(IDcamSolo) && IDcamSolo != "Sem video";
idx = PreencheDadosLinha(grid, Testes, idx, SoloConfigurado ? 1 : 0); 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) if (Variaveis.OperacaoEmAndamento.StatusAtual == Enums.StatusOperacao.Parametrizando)
{ {
Variaveis.OperacaoEmAndamento.DesligarCameras();
this.Hide(); this.Hide();
} }
else else
@ -100,13 +99,10 @@ namespace AgroBase.Forms.IHM
private void frmDialogoMapa_FormClosing(object sender, FormClosingEventArgs e) private void frmDialogoMapa_FormClosing(object sender, FormClosingEventArgs e)
{ {
tmrLeitura?.Dispose(); tmrLeitura?.Dispose();
Variaveis.OperacaoEmAndamento.DesligarCameras();
} }
public async Task AtualizarRuasSelecionadas(List<string> ruasSelecionadas) public async Task AtualizarRuasSelecionadas(List<string> ruasSelecionadas)
{ {
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraCaminho, pnlCameraCaminhoHeat }, new List<Panel>() { pnlCameraSoloE }, true);
await Task.Delay(1000); await Task.Delay(1000);
GPSService.AtualizarRuasSelecionadas(ruasSelecionadas); GPSService.AtualizarRuasSelecionadas(ruasSelecionadas);
@ -137,7 +133,7 @@ namespace AgroBase.Forms.IHM
_Trajetoria.CorredorAtual.Pontos, _Trajetoria.CorredorAtual.Pontos,
Variaveis.OperacaoEmAndamento.GPSTrajetoria, Variaveis.OperacaoEmAndamento.GPSTrajetoria,
_Trajetoria.RuasPlantacao, _Trajetoria.RuasPlantacao,
_Sensoriamento.Controle.ControladorMPC?.ComandoAtual?.simulacao _Sensoriamento.Controle.SimulacaoMPC
); );
} }
} }
@ -149,7 +145,7 @@ namespace AgroBase.Forms.IHM
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento; var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var ultimaLeitura = Variaveis.OperacaoEmAndamento.CamerasSolo.OrderByDescending(x => x.Leitura.timestamp).FirstOrDefault(); /*var ultimaLeitura = Variaveis.OperacaoEmAndamento.CamerasSolo.OrderByDescending(x => x.Leitura.timestamp).FirstOrDefault();
if (ultimaLeitura != null) if (ultimaLeitura != null)
{ {
lblUltimaLeituraSolo.Text = "Última Leitura Solo: " + FuncoesGlobais.TimestampToDate(ultimaLeitura.Leitura.timestamp); lblUltimaLeituraSolo.Text = "Última Leitura Solo: " + FuncoesGlobais.TimestampToDate(ultimaLeitura.Leitura.timestamp);
@ -157,7 +153,7 @@ namespace AgroBase.Forms.IHM
if (Variaveis.OperacaoEmAndamento.CameraCaminho != null) if (Variaveis.OperacaoEmAndamento.CameraCaminho != null)
{ {
lblUltimaLeituraCaminho.Text = "Última Leitura Caminho: " + FuncoesGlobais.TimestampToDate(Variaveis.OperacaoEmAndamento.CameraCaminho.Leitura.timestamp); lblUltimaLeituraCaminho.Text = "Última Leitura Caminho: " + FuncoesGlobais.TimestampToDate(Variaveis.OperacaoEmAndamento.CameraCaminho.Leitura.timestamp);
} }*/
lblPerformance.Text = _Sensoriamento.DadosPerformance.PerformanceStr; lblPerformance.Text = _Sensoriamento.DadosPerformance.PerformanceStr;
lblMapaCarregado.Text = "Operação: " + Variaveis.OperacaoEmAndamento.Descricao; lblMapaCarregado.Text = "Operação: " + Variaveis.OperacaoEmAndamento.Descricao;
@ -344,8 +340,6 @@ namespace AgroBase.Forms.IHM
freioStartPosition = new Point(pnlFreio.Width / 2 - 20, 10); freioStartPosition = new Point(pnlFreio.Width / 2 - 20, 10);
freioPosition = freioStartPosition; freioPosition = freioStartPosition;
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraCaminho, pnlCameraCaminhoHeat }, new List<Panel>() { pnlCameraSoloE }, true);
IniciarOperacao(); IniciarOperacao();
} }

View File

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

View File

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

View File

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

View File

@ -1214,7 +1214,7 @@ namespace AgroBase.Forms.Operacoes
null, //Variaveis.OperacaoEmAndamento.Mapa.TrajetoriaProjetada.FirstOrDefault(), null, //Variaveis.OperacaoEmAndamento.Mapa.TrajetoriaProjetada.FirstOrDefault(),
new List<GPSModel>(LogsGPS.Take(LogsGPS.IndexOf(Log) + 1)), new List<GPSModel>(LogsGPS.Take(LogsGPS.IndexOf(Log) + 1)),
new List<List<GPSModel>>(), new List<List<GPSModel>>(),
LogOpe.Controle.ControladorMPC?.ComandoAtual?.simulacao LogOpe.Controle.SimulacaoMPC
); );
} }
@ -1455,8 +1455,8 @@ namespace AgroBase.Forms.Operacoes
private void AtualizarInformacoesSonar() private void AtualizarInformacoesSonar()
{ {
var Log = LogsSonar.FirstOrDefault(x => x.Leitura.MomentoLog == MomentoAtual); 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"); //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"); //txtEspacoLivreDireita.Text = Log.Leitura.obj.radar_2d.analise.corredor_perfil[1].direita_m.ToString("0.00");
txtDesvioNecessario.Text = Log.Resumo.DesvioNecessario ? "Sim" : "Não"; txtDesvioNecessario.Text = Log.Resumo.DesvioNecessario ? "Sim" : "Não";
txtDirecaoDesvio.Text = Log.Resumo.DirecaoDesvio.ToString(); txtDirecaoDesvio.Text = Log.Resumo.DirecaoDesvio.ToString();
@ -1496,7 +1496,7 @@ namespace AgroBase.Forms.Operacoes
if (chbGrade.Checked) if (chbGrade.Checked)
{ {
picSonarRadar.Image?.Dispose(); 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(); Cameras = CameraService.ObterListaCameras();
cmbCaminho.Items.Clear(); cmbCaminho.Items.Clear();
cmbCaminho.Items.AddRange(Cameras.Values.ToArray()); 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)) if (Cameras.Any(x => x.Value == IDrua))
{ {
cmbCaminho.SelectedIndex = cmbCaminho.Items.IndexOf(IDrua); cmbCaminho.SelectedIndex = cmbCaminho.Items.IndexOf(IDrua);
@ -80,11 +80,11 @@ namespace AgroBase.Forms.Sensoriamento
cmbCaminho.Text = IDrua; cmbCaminho.Text = IDrua;
} }
var CamerasSolo = ((SensoriamentoModel)Disp.Dados).CameraID_Solo; var CamerasSolo = ((SensoriamentoModel)Disp.Dados).CamerasSolo;
cmbSoloEsq.Items.Clear(); cmbSoloEsq.Items.Clear();
cmbSoloEsq.Items.AddRange(Cameras.Values.ToArray()); 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)) if (Cameras.Any(x => x.Value == IDsoloE))
{ {
cmbSoloEsq.SelectedIndex = cmbSoloEsq.Items.IndexOf(IDsoloE); cmbSoloEsq.SelectedIndex = cmbSoloEsq.Items.IndexOf(IDsoloE);
@ -96,7 +96,7 @@ namespace AgroBase.Forms.Sensoriamento
cmbSoloDir.Items.Clear(); cmbSoloDir.Items.Clear();
cmbSoloDir.Items.AddRange(Cameras.Values.ToArray()); 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)) if (Cameras.Any(x => x.Value == IDsoloD))
{ {
cmbSoloDir.SelectedIndex = cmbSoloDir.Items.IndexOf(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._EnderecoCAN_Rx = FuncoesGlobais.StringToHexByte(txtEnderecoCAN_Rx.Text);
_Disp.Dados.RequisitarDados = chbRequisitarDados.Checked; _Disp.Dados.RequisitarDados = chbRequisitarDados.Checked;
_Disp.Dados.Sensores = Sensores.ToList(); _Disp.Dados.Sensores = Sensores.ToList();
_Disp.Dados.CameraID_Caminho = cmbCaminho.Text; _Disp.Dados.CameraCaminho.Id = cmbCaminho.Text;
_Disp.Dados.CameraID_Solo.Clear(); //_Disp.Dados.CamerasSolo.Clear();
_Disp.Dados.CameraID_Solo.AddRange(new string[] { cmbSoloEsq.Text, cmbSoloDir.Text }); //_Disp.Dados.CameraID_Solo.AddRange(new string[] { cmbSoloEsq.Text, cmbSoloDir.Text });
_Disp.SalvarParametros(_Disp.Dados); _Disp.SalvarParametros(_Disp.Dados);
break; break;
} }

View File

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

View File

@ -1,8 +1,5 @@
using AgroBase.Models; using AgroBase.Models;
using AgroBase.Models.Operadores; using AgroBase.Models.Operadores;
using AgroBase.Services;
using AgroBase.Services.Operadores;
using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
@ -16,7 +13,6 @@ namespace AgroBase.Forms
{ {
public partial class frmOperarioSonar : Form public partial class frmOperarioSonar : Form
{ {
VisualWorkerService visualWorker = new VisualWorkerService();
AsyncTaskTimerModel tmrLeitura; AsyncTaskTimerModel tmrLeitura;
public frmOperarioSonar() public frmOperarioSonar()
@ -38,13 +34,12 @@ namespace AgroBase.Forms
private async void frmOperarioSonar_FormClosing(object sender, FormClosingEventArgs e) private async void frmOperarioSonar_FormClosing(object sender, FormClosingEventArgs e)
{ {
tmrLeitura?.Stop(); tmrLeitura?.Stop();
await visualWorker.Encerrar();
} }
private void AtualizarListaCameras() private void AtualizarListaCameras()
{ {
cmbCameras.Items.Clear(); 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; cmbCameras.SelectedIndex = -1;
} }
@ -52,86 +47,87 @@ namespace AgroBase.Forms
{ {
if (!chbReqAutomatico.Checked) return; if (!chbReqAutomatico.Checked) return;
btnLeituraIMU_Click(new object(), new EventArgs()); /*btnLeituraIMU_Click(new object(), new EventArgs());
EnviarComandoReqFrame(VisualWorkerCommandType.Get_RGB_Frame); EnviarComandoReqFrame(VisualWorkerCommandType.Get_RGB_Frame);
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Heatmap_Frame); EnviarComandoReqFrame(VisualWorkerCommandType.Get_Heatmap_Frame);
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Anomalia); EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Anomalia);
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Solo); EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Solo);
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Radar_2D); 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(); AtualizarListaCameras();
} }
private async void btnIniciarProcessamento_Click(object sender, EventArgs e) 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); bool sucesso = false; // await VariaveisOperacao.Operadores.VisualWorker.IniciarCamera(Convert.ToInt32(txtDistanciaMax.Text), Convert.ToInt32(txtSessoesSolo.Text), Convert.ToInt32(txtPercentualSolo.Text));
AtualizarLabelLeitura($", Comando: Iniciar, Sucesso: {sucesso}"); AtualizarLabelLeitura($", Comando: Configurar, Sucesso: {sucesso}");
if (!sucesso) if (!sucesso)
{ {
MessageBox.Show("Selecione uma camera para iniciar o processamento!"); MessageBox.Show("Selecione uma camera para iniciar o processamento!");
} }
else else
{ {
MessageBox.Show("Processamento iniciado com sucesso!"); MessageBox.Show("Camera configurada com sucesso!");
} }
} }
private void EnviarComando(VisualWorkerCommandType cmd, dynamic payload = null) 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}"); AtualizarLabelLeitura($", Comando: {cmd.ToString()}, Sucesso: {sucesso}");
} }
private void AtualizarLabelLeitura(string texto) 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) private void btnPing_Click(object sender, EventArgs e)
{ {
EnviarComando(VisualWorkerCommandType.Ping); //EnviarComando(VisualWorkerCommandType.Ping);
} }
private void btnCalibrarGrades_Click(object sender, EventArgs e) private void btnCalibrarGrades_Click(object sender, EventArgs e)
{ {
EnviarComando(VisualWorkerCommandType.Calibrar_Grades); //EnviarComando(VisualWorkerCommandType.Calibrar_Grades);
} }
private void btnLeituraRGB_Click(object sender, EventArgs e) 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) 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) 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) private void btnLeituraSegmentacaoSemantica_Click(object sender, EventArgs e)
{ {
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica); //EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica);
} }
private async void EnviarComandoReqFrame(VisualWorkerCommandType comando) private async void EnviarComandoReqFrame(VisualWorkerCommandType comando)
{ {
EnviarComando(comando); /*EnviarComando(comando);
await visualWorker.AguardarNovosDados(comando); await VariaveisOperacao.Operadores.VisualWorker.AguardarNovosDados(comando);
VisualWorkerMessageFrameModel frame = OAKCameraFrameModel frame =
comando == VisualWorkerCommandType.Get_RGB_Frame ? visualWorker.DadosLeitura.Leitura.obj.rgb_frame : comando == VisualWorkerCommandType.Get_RGB_Frame ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.rgb_frame :
comando == VisualWorkerCommandType.Get_Heatmap_Frame ? visualWorker.DadosLeitura.Leitura.obj.heatmap_frame : comando == VisualWorkerCommandType.Get_Heatmap_Frame ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.heatmap_frame :
comando == VisualWorkerCommandType.Get_Radar_2D ? visualWorker.DadosLeitura.Leitura.obj.radar_2d?.frame : comando == VisualWorkerCommandType.Get_Radar_2D ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d?.frame :
comando == VisualWorkerCommandType.Get_Segmentacao_Semantica ? visualWorker.DadosLeitura.Leitura.obj.segmentacao?.mask_frame : comando == VisualWorkerCommandType.Get_Segmentacao_Semantica ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.segmentacao?.mask_frame :
new VisualWorkerMessageFrameModel(); new OAKCameraFrameModel();
PictureBox pic = PictureBox pic =
comando == VisualWorkerCommandType.Get_RGB_Frame ? picRGB : comando == VisualWorkerCommandType.Get_RGB_Frame ? picRGB :
comando == VisualWorkerCommandType.Get_Heatmap_Frame ? picHeatmap : comando == VisualWorkerCommandType.Get_Heatmap_Frame ? picHeatmap :
@ -149,53 +145,53 @@ namespace AgroBase.Forms
try { pic.Image = frame?.image; } catch { } try { pic.Image = frame?.image; } catch { }
lbl.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(frame?.timestamp ?? 0)}"; 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) 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) 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) 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) private async void btnLeituraIMU_Click(object sender, EventArgs e)
{ {
EnviarComando(VisualWorkerCommandType.Get_IMU_Data); /*EnviarComando(VisualWorkerCommandType.Get_IMU_Data);
await visualWorker.AguardarNovosDados(VisualWorkerCommandType.Get_IMU_Data); await VariaveisOperacao.Operadores.VisualWorker.AguardarNovosDados(VisualWorkerCommandType.Get_IMU_Data);
pnlInclinacao.Invalidate(); 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) 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(",", ".") }); 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); AtualizarDadosAnalise(comando);
} }
private void AtualizarDadosAnalise(VisualWorkerCommandType comando) private void AtualizarDadosAnalise(VisualWorkerCommandType comando)
{ {
VisualWorkerMessageAnaliseModel analise = /*VisualWorkerMessageAnaliseModel analise =
comando == VisualWorkerCommandType.Get_Analise_Anomalia ? visualWorker.DadosLeitura.Leitura.obj.analise_anomalias : comando == VisualWorkerCommandType.Get_Analise_Anomalia ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.analise_anomalias :
comando == VisualWorkerCommandType.Get_Analise_Solo ? visualWorker.DadosLeitura.Leitura.obj.analise_solo : comando == VisualWorkerCommandType.Get_Analise_Solo ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.analise_solo :
new VisualWorkerMessageAnaliseModel(); new VisualWorkerMessageAnaliseModel();
lblLeituraDebug.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(analise?.timestamp ?? 0)}"; 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?.Dispose();
picDebug.Image = analise.PlotarAnalise(frame); picDebug.Image = analise.PlotarAnalise(frame);
@ -212,7 +208,7 @@ namespace AgroBase.Forms
PlotarGraficoPerfilSolo(analise.solo?.perfil ?? new List<double>()); PlotarGraficoPerfilSolo(analise.solo?.perfil ?? new List<double>());
break; break;
} }
} }*/
} }
void ConfigurarGridDeteccoes(DataGridView dgv) void ConfigurarGridDeteccoes(DataGridView dgv)
@ -360,9 +356,9 @@ namespace AgroBase.Forms
private void pnlInclinacao_Paint(object sender, PaintEventArgs e) private void pnlInclinacao_Paint(object sender, PaintEventArgs e)
{ {
Panel _pnlInclinacao = sender as Panel; /*Panel _pnlInclinacao = sender as Panel;
double AnguloX = visualWorker.DadosLeitura.Leitura.obj?.imu?.roll ?? 0; double AnguloX = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj?.imu?.roll ?? 0;
double AnguloY = visualWorker.DadosLeitura.Leitura.obj?.imu?.pitch ?? 0; double AnguloY = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj?.imu?.pitch ?? 0;
Graphics g = e.Graphics; Graphics g = e.Graphics;
int centerX = _pnlInclinacao.Width / 2; int centerX = _pnlInclinacao.Width / 2;
@ -417,7 +413,7 @@ namespace AgroBase.Forms
// Desenhar o círculo // Desenhar o círculo
Brush brush = new SolidBrush(Color.Red); 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.lblStripErro = new System.Windows.Forms.ToolStripStatusLabel();
this.lblStatusConexao = new System.Windows.Forms.ToolStripStatusLabel(); this.lblStatusConexao = new System.Windows.Forms.ToolStripStatusLabel();
this.pnlLateral = new System.Windows.Forms.Panel(); 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.gpbDispositivos = new System.Windows.Forms.GroupBox();
this.lstDisponiveis = new System.Windows.Forms.ListView(); 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.generalStrip = new System.Windows.Forms.StatusStrip();
this.lblStripJoystick = new System.Windows.Forms.ToolStripStatusLabel(); this.lblStripJoystick = new System.Windows.Forms.ToolStripStatusLabel();
this.lblStripJoystickComando = 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.gpbControleDirecional = new System.Windows.Forms.GroupBox();
this.gpbAtalhos = new System.Windows.Forms.GroupBox(); this.gpbAtalhos = new System.Windows.Forms.GroupBox();
this.pnlAtalhos = new System.Windows.Forms.Panel(); this.pnlAtalhos = new System.Windows.Forms.Panel();
this.btnVisualWorker = new System.Windows.Forms.Button();
this.btnTreinamentoIA = new System.Windows.Forms.Button(); this.btnTreinamentoIA = new System.Windows.Forms.Button();
this.btnOID = new System.Windows.Forms.Button(); this.btnOID = new System.Windows.Forms.Button();
this.btnEthernet = 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.btnForcarAtualizacao = new System.Windows.Forms.Button();
this.clbRotinas = new System.Windows.Forms.CheckedListBox(); this.clbRotinas = new System.Windows.Forms.CheckedListBox();
this.btnAtualizarRotinas = new System.Windows.Forms.Button(); this.btnAtualizarRotinas = new System.Windows.Forms.Button();
this.btnVisualWorker = new System.Windows.Forms.Button();
this.gpbAcoes.SuspendLayout(); this.gpbAcoes.SuspendLayout();
this.erroStrip.SuspendLayout(); this.erroStrip.SuspendLayout();
this.pnlLateral.SuspendLayout(); this.pnlLateral.SuspendLayout();
this.gpbDispositivos.SuspendLayout(); this.gpbDispositivos.SuspendLayout();
this.gpbNovoDispositivo.SuspendLayout();
this.generalStrip.SuspendLayout(); this.generalStrip.SuspendLayout();
this.gpbMovimentacao.SuspendLayout(); this.gpbMovimentacao.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.trkKmh)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.trkKmh)).BeginInit();
@ -166,15 +152,7 @@ namespace AgroBase
// pnlLateral // pnlLateral
// //
this.pnlLateral.AutoScroll = true; 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.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.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlLateral.Location = new System.Drawing.Point(2, 15); this.pnlLateral.Location = new System.Drawing.Point(2, 15);
this.pnlLateral.Margin = new System.Windows.Forms.Padding(2); 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.Size = new System.Drawing.Size(615, 617);
this.pnlLateral.TabIndex = 0; 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 // gpbDispositivos
// //
this.gpbDispositivos.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) this.gpbDispositivos.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.gpbDispositivos.Controls.Add(this.lstDisponiveis); 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.Margin = new System.Windows.Forms.Padding(2);
this.gpbDispositivos.Name = "gpbDispositivos"; this.gpbDispositivos.Name = "gpbDispositivos";
this.gpbDispositivos.Padding = new System.Windows.Forms.Padding(2); 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.TabIndex = 3;
this.gpbDispositivos.TabStop = false; this.gpbDispositivos.TabStop = false;
this.gpbDispositivos.Text = "Dispositivos disponíveis"; this.gpbDispositivos.Text = "Dispositivos disponíveis";
@ -232,120 +182,11 @@ namespace AgroBase
this.lstDisponiveis.Location = new System.Drawing.Point(11, 20); this.lstDisponiveis.Location = new System.Drawing.Point(11, 20);
this.lstDisponiveis.Margin = new System.Windows.Forms.Padding(2); this.lstDisponiveis.Margin = new System.Windows.Forms.Padding(2);
this.lstDisponiveis.Name = "lstDisponiveis"; 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.TabIndex = 0;
this.lstDisponiveis.UseCompatibleStateImageBehavior = false; this.lstDisponiveis.UseCompatibleStateImageBehavior = false;
this.lstDisponiveis.View = System.Windows.Forms.View.Tile; 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 // generalStrip
// //
this.generalStrip.ImageScalingSize = new System.Drawing.Size(20, 20); this.generalStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
@ -380,6 +221,7 @@ namespace AgroBase
this.lblStripOperacaoLiberada.Name = "lblStripOperacaoLiberada"; this.lblStripOperacaoLiberada.Name = "lblStripOperacaoLiberada";
this.lblStripOperacaoLiberada.Size = new System.Drawing.Size(134, 17); this.lblStripOperacaoLiberada.Size = new System.Drawing.Size(134, 17);
this.lblStripOperacaoLiberada.Text = "Operação Liberada: Não"; this.lblStripOperacaoLiberada.Text = "Operação Liberada: Não";
this.lblStripOperacaoLiberada.Click += new System.EventHandler(this.lblStripOperacaoLiberada_Click);
// //
// lblStripOperacaoStatus // lblStripOperacaoStatus
// //
@ -673,6 +515,17 @@ namespace AgroBase
this.pnlAtalhos.Size = new System.Drawing.Size(112, 286); this.pnlAtalhos.Size = new System.Drawing.Size(112, 286);
this.pnlAtalhos.TabIndex = 0; 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 // btnTreinamentoIA
// //
this.btnTreinamentoIA.Location = new System.Drawing.Point(5, 439); this.btnTreinamentoIA.Location = new System.Drawing.Point(5, 439);
@ -963,17 +816,6 @@ namespace AgroBase
this.btnAtualizarRotinas.UseVisualStyleBackColor = true; this.btnAtualizarRotinas.UseVisualStyleBackColor = true;
this.btnAtualizarRotinas.Click += new System.EventHandler(this.btnAtualizarRotinas_Click); 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 // frmPrincipal
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -1003,10 +845,7 @@ namespace AgroBase
this.erroStrip.ResumeLayout(false); this.erroStrip.ResumeLayout(false);
this.erroStrip.PerformLayout(); this.erroStrip.PerformLayout();
this.pnlLateral.ResumeLayout(false); this.pnlLateral.ResumeLayout(false);
this.pnlLateral.PerformLayout();
this.gpbDispositivos.ResumeLayout(false); this.gpbDispositivos.ResumeLayout(false);
this.gpbNovoDispositivo.ResumeLayout(false);
this.gpbNovoDispositivo.PerformLayout();
this.generalStrip.ResumeLayout(false); this.generalStrip.ResumeLayout(false);
this.generalStrip.PerformLayout(); this.generalStrip.PerformLayout();
this.gpbMovimentacao.ResumeLayout(false); this.gpbMovimentacao.ResumeLayout(false);
@ -1030,14 +869,6 @@ namespace AgroBase
#endregion #endregion
private System.Windows.Forms.GroupBox gpbAcoes; 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 erroStrip;
private System.Windows.Forms.StatusStrip generalStrip; private System.Windows.Forms.StatusStrip generalStrip;
private System.Windows.Forms.GroupBox gpbMovimentacao; private System.Windows.Forms.GroupBox gpbMovimentacao;
@ -1048,7 +879,6 @@ namespace AgroBase
private System.Windows.Forms.Button btnVer; private System.Windows.Forms.Button btnVer;
private System.Windows.Forms.GroupBox gpbDispositivos; private System.Windows.Forms.GroupBox gpbDispositivos;
public System.Windows.Forms.ListView lstDisponiveis; public System.Windows.Forms.ListView lstDisponiveis;
private System.Windows.Forms.ComboBox cmbTipos;
private System.Windows.Forms.Label lblVelocidade; private System.Windows.Forms.Label lblVelocidade;
private System.Windows.Forms.TrackBar tkbVelocidade; private System.Windows.Forms.TrackBar tkbVelocidade;
private System.Windows.Forms.TrackBar tkbAngulo; private System.Windows.Forms.TrackBar tkbAngulo;
@ -1058,7 +888,6 @@ namespace AgroBase
public System.Windows.Forms.TrackBar trkRPM; public System.Windows.Forms.TrackBar trkRPM;
private System.Windows.Forms.ToolStripStatusLabel lblStripJoystickComando; private System.Windows.Forms.ToolStripStatusLabel lblStripJoystickComando;
public System.Windows.Forms.ComboBox cmbJoysticks; public System.Windows.Forms.ComboBox cmbJoysticks;
public System.Windows.Forms.ComboBox cmbDispositivos;
private System.Windows.Forms.Button btnAcompanhamento; private System.Windows.Forms.Button btnAcompanhamento;
private System.Windows.Forms.Button btnAtuCamera; private System.Windows.Forms.Button btnAtuCamera;
private System.Windows.Forms.Button btnMapas; private System.Windows.Forms.Button btnMapas;
@ -1080,7 +909,6 @@ namespace AgroBase
private System.Windows.Forms.Button btnContornos; private System.Windows.Forms.Button btnContornos;
public System.Windows.Forms.ToolStripStatusLabel lblStripMqtt; public System.Windows.Forms.ToolStripStatusLabel lblStripMqtt;
public System.Windows.Forms.Panel pnlLateral; public System.Windows.Forms.Panel pnlLateral;
public System.Windows.Forms.CheckBox chbConexaoautomatica;
public System.Windows.Forms.CheckBox chbDebugMode; public System.Windows.Forms.CheckBox chbDebugMode;
private System.Windows.Forms.Button btnAtuCalibragem; private System.Windows.Forms.Button btnAtuCalibragem;
private System.Windows.Forms.Button btnSonar; private System.Windows.Forms.Button btnSonar;
@ -1100,8 +928,6 @@ namespace AgroBase
private System.Windows.Forms.Button btnAtualizarRotinas; private System.Windows.Forms.Button btnAtualizarRotinas;
public System.Windows.Forms.ProgressBar pgbAtualizacaoArquivos; public System.Windows.Forms.ProgressBar pgbAtualizacaoArquivos;
public System.Windows.Forms.ToolStripStatusLabel lblStripWifi; 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 btnOID;
private System.Windows.Forms.Button btnTreinamentoIA; private System.Windows.Forms.Button btnTreinamentoIA;
private System.Windows.Forms.Button btnVisualWorker; private System.Windows.Forms.Button btnVisualWorker;

View File

@ -93,57 +93,6 @@ namespace AgroBase
#region DISPOSITIVOS #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() private async Task tmrLoopDispositivos_Tick()
{ {
AtualizaDadosGerais(); AtualizaDadosGerais();
@ -160,7 +109,7 @@ namespace AgroBase
public void AtualizaDadosGerais() public void AtualizaDadosGerais()
{ {
if (Variaveis.DispositivosConectados.Any() && pnlLateral.Controls.Count == 9) if (Variaveis.DispositivosConectados.Count() == 3 && pnlLateral.Controls.Count == 1)
{ {
SerialService.DispositivosConexaoInicial.ForEach(Dispositivo => SerialService.DispositivosConexaoInicial.ForEach(Dispositivo =>
{ {
@ -171,7 +120,6 @@ namespace AgroBase
Control controle = dispositivoService.InstanciarDispositivo(idx); Control controle = dispositivoService.InstanciarDispositivo(idx);
controle.Location = new Point(controle.Location.X, controle.Location.Y + (idx * 50)); controle.Location = new Point(controle.Location.X, controle.Location.Y + (idx * 50));
pnlLateral.Controls.Add(controle); pnlLateral.Controls.Add(controle);
cmbDispositivos.Items.Add(dispositivoService._Descricao);
} }
}); });
} }
@ -186,13 +134,13 @@ namespace AgroBase
.Select(x => new ListViewItem() .Select(x => new ListViewItem()
{ {
Text = x.FirstOrDefault().Endereco + " - " + Text = x.FirstOrDefault().Endereco + " - " +
Enum.GetName(typeof(T_Code), x.Key) + " v" + x.Key + " v" +
x.FirstOrDefault().Versao + x.FirstOrDefault().Versao +
(SerialService.DispositivosMultiplos.Contains(x.FirstOrDefault().Dispositivo) (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); .ToDictionary(item => item.Text, item => item);
@ -508,16 +456,10 @@ namespace AgroBase
#endregion #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)) MessageBox.Show($"{Variaveis.OperacaoEmAndamento.ErroOperacaoLiberada}", "Status da Operacao", MessageBoxButtons.OK, MessageBoxIcon.Information);
{
ulong cod = ulong.Parse(txtCodErro.Text);
string desc = OperacaoModel.DescricaoCodigoFalha(cod);
MessageBox.Show(desc);
} }
}
} }
} }

View File

@ -26,6 +26,8 @@ namespace AgroBase.Forms
Queue<double> historicoAngulosControle = new Queue<double>(); Queue<double> historicoAngulosControle = new Queue<double>();
List<MPCSimulacaoModel> simulacao = new List<MPCSimulacaoModel>();
public frmSimulacaoMapaGPS() public frmSimulacaoMapaGPS()
{ {
InitializeComponent(); InitializeComponent();
@ -56,11 +58,6 @@ namespace AgroBase.Forms
{ {
pnlMapa = pnlMapa, 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) 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") + "%"; 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(); pnlOrientacaoTrajeto.Invalidate();
pnlAnguloControle.Invalidate(); pnlAnguloControle.Invalidate();
pnlOrientacaoCarro.Invalidate(); pnlOrientacaoCarro.Invalidate();
if (_Sensoriamento.Controle.SimulacaoMPC != null)
{
simulacao = _Sensoriamento.Controle.SimulacaoMPC;
}
if (_Trajetoria?.CorredorAtual != null) if (_Trajetoria?.CorredorAtual != null)
{ {
MapaDinamico.AtualizarDados( MapaDinamico.AtualizarDados(
@ -139,7 +136,7 @@ namespace AgroBase.Forms
_Trajetoria.CorredorAtual.Pontos, _Trajetoria.CorredorAtual.Pontos,
Variaveis.OperacaoEmAndamento.GPSTrajetoria, Variaveis.OperacaoEmAndamento.GPSTrajetoria,
_Trajetoria.RuasPlantacao, _Trajetoria.RuasPlantacao,
_Sensoriamento.Controle.ControladorMPC?.ComandoAtual?.simulacao simulacao
); );
} }
@ -389,10 +386,6 @@ namespace AgroBase.Forms
private void btnCalcularAngulo_Click(object sender, EventArgs e) 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(); //Variaveis.OperacaoEmAndamento.OpMapaGPS.CalculaDadosMovimentacaoAutonoma();
int errosConsiderar = int.Parse(txtQtdErro.Text); int errosConsiderar = int.Parse(txtQtdErro.Text);

View File

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

View File

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

View File

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

View File

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

View File

@ -29,7 +29,7 @@ namespace AgroBase.Models.Modules
{ {
get 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 => Dados.Sensores.ForEach(x =>
{ {
x.ValoresLeituras = new List<SensorValoresLeituraModel>(); x.ValoresLeituras.ForEach(l =>
{
l.atual = new CanCommandFreqModel<dynamic>();
});
}); });
Dados.BicosPulverizadores.ForEach(x => Dados.BicosPulverizadores.ForEach(x =>
@ -475,13 +478,19 @@ namespace AgroBase.Models.Modules
x.Atuacoes = 0; x.Atuacoes = 0;
x.TempoAtuado = 0; x.TempoAtuado = 0;
x.InicioAtuacao = DateTime.MinValue; x.InicioAtuacao = DateTime.MinValue;
x.ValoresLeituras = new List<SensorValoresLeituraModel>(); x.ValoresLeituras.ForEach(l =>
{
l.atual = new CanCommandFreqModel<dynamic>();
});
}); });
Dados.BombasPressurizadoras.ForEach(x => Dados.BombasPressurizadoras.ForEach(x =>
{ {
x.ValoresLeituras = new List<SensorValoresLeituraModel>();
x.ComandoAtuar = false; x.ComandoAtuar = false;
x.ValoresLeituras.ForEach(l =>
{
l.atual = new CanCommandFreqModel<dynamic>();
});
}); });
Dados.VolumeVazaoAferido = 0; Dados.VolumeVazaoAferido = 0;
@ -523,9 +532,8 @@ namespace AgroBase.Models.Modules
{ {
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel() SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{ {
Endereco = CanService._portName,
Dispositivo = DadosLeitura.Dispositivo, Dispositivo = DadosLeitura.Dispositivo,
Erro = false, Endereco = CanService._portName,
Versao = DadosLeitura.Versao.ToString(), Versao = DadosLeitura.Versao.ToString(),
Mod_ID = Modulo_ID Mod_ID = Modulo_ID
}); });

View File

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

View File

@ -31,7 +31,7 @@ namespace AgroBase.Models.Modules
{ {
get 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(); public SensoriamentoMensagemJsonModel DadosLeitura { get; set; } = new SensoriamentoMensagemJsonModel();
@ -45,8 +45,8 @@ namespace AgroBase.Models.Modules
public List<SensorSinaleiroModel> Sinaleiros { get; set; } public List<SensorSinaleiroModel> Sinaleiros { get; set; }
public List<SensorReleModel> Reles { get; set; } public List<SensorReleModel> Reles { get; set; }
public List<SensorServoModel> Servos { get; set; } public List<SensorServoModel> Servos { get; set; }
public string CameraID_Caminho { get; set; } = ""; public OAKCameraModel CameraCaminho { get; set; } = new OAKCameraModel();
public List<string> CameraID_Solo { get; set; } = new List<string>(); public List<OAKCameraModel> CamerasSolo { get; set; } = new List<OAKCameraModel>();
public UltrasonicA05Configuracoes ConfiguracaoSensorUltrassom { get; set; } public UltrasonicA05Configuracoes ConfiguracaoSensorUltrassom { get; set; }
private SenHandler _SenHandler = new SenHandler(); private SenHandler _SenHandler = new SenHandler();
public LoRaEspService loRaService { get; set; } = new LoRaEspService(); public LoRaEspService loRaService { get; set; } = new LoRaEspService();
@ -74,8 +74,8 @@ namespace AgroBase.Models.Modules
_EnderecoCAN_Rx = 0x11, _EnderecoCAN_Rx = 0x11,
_TaxaAmostragem = 1000, _TaxaAmostragem = 1000,
RequisitarDados = true, RequisitarDados = true,
CameraID_Caminho = "", CameraCaminho = new OAKCameraModel(),
CameraID_Solo = new List<string>(), CamerasSolo = new List<OAKCameraModel>(),
Sinaleiros = new List<SensorSinaleiroModel>() Sinaleiros = new List<SensorSinaleiroModel>()
{ {
new SensorSinaleiroModel() new SensorSinaleiroModel()
@ -1654,7 +1654,7 @@ namespace AgroBase.Models.Modules
for (int i = 0; i < Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo; i++) for (int i = 0; i < Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo; i++)
{ {
obj.CameraID_Solo.Add(""); obj.CamerasSolo.Add(new OAKCameraModel());
} }
return obj; return obj;
@ -1663,6 +1663,8 @@ namespace AgroBase.Models.Modules
public void LimparDados<T>(T _dados) public void LimparDados<T>(T _dados)
{ {
var Dados = _dados as SensoriamentoModel; 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.DadosLeitura = new SensoriamentoMensagemJsonModel();
Dados.Reles.ForEach(x => Dados.Reles.ForEach(x =>
{ {
@ -1742,7 +1744,6 @@ namespace AgroBase.Models.Modules
{ {
Endereco = CanService._portName, Endereco = CanService._portName,
Dispositivo = DadosLeitura.Dispositivo, Dispositivo = DadosLeitura.Dispositivo,
Erro = false,
Versao = DadosLeitura.Versao.ToString(), Versao = DadosLeitura.Versao.ToString(),
Mod_ID = Modulo_ID, Mod_ID = Modulo_ID,
}); });

View File

@ -1,12 +1,25 @@
using System; 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 namespace AgroBase.Models
{ {
public class OAKCameraModel public class OAKCameraModel
{ {
public T_Code Dispositivo { get; set; }
public int Index { get; set; } public int Index { get; set; }
public string Id { get; set; } public string Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Description
{
get
{
return $"({Index}) {Name}";
}
}
public string State { get; set; } public string State { get; set; }
public string Usb_Speed { get; set; } public string Usb_Speed { get; set; }
public string[] Available_Camera_Sensors { get; set; } public string[] Available_Camera_Sensors { get; set; }
@ -18,12 +31,25 @@ namespace AgroBase.Models
public double fx { get; set; } public double fx { get; set; }
public double baseline { get; set; } public double baseline { get; set; }
public Dictionary<TipoComando, Bitmap> frames { get; set; } = new Dictionary<TipoComando, Bitmap>();
public bool newData { get; set; } public bool newData { get; set; }
public void setVisto() => newData = false; 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() public OAKCameraModel Clone()
{ {
return new OAKCameraModel() return new OAKCameraModel()
{ {
Dispositivo = Dispositivo,
Index = Index, Index = Index,
Id = Id, Id = Id,
Name = Name, Name = Name,
@ -37,6 +63,7 @@ namespace AgroBase.Models
Version = Version, Version = Version,
fx = fx, fx = fx,
baseline = baseline, baseline = baseline,
frames = new Dictionary<TipoComando, Bitmap>(frames),
newData = true 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> Tensao { get; set; } = new CanCommandFreqModel<double>();
public CanCommandFreqModel<double> Temperatura { get; set; } = new CanCommandFreqModel<double>(); public CanCommandFreqModel<double> Temperatura { get; set; } = new CanCommandFreqModel<double>();
public CanCommandFreqModel<double> Potencia { get; set; } public CanCommandFreqModel<double> Potencia { get; set; } = new CanCommandFreqModel<double>();
public CanCommandFreqModel<double> CicloTrabalho { get; set; } public CanCommandFreqModel<double> CicloTrabalho { get; set; } = new CanCommandFreqModel<double>();
public bool Freado public bool Freado
{ {
get get

View File

@ -1,5 +1,4 @@
using AgroBase.Models.Modules; using AgroBase.Models.Modules;
using AgroBase.Services;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -84,7 +83,6 @@ namespace AgroBase.Models.Operacoes
consideraAnguloCorredor ? _Trajetoria.ErroOrientacaoAngularCombinado : consideraAnguloCorredor ? _Trajetoria.ErroOrientacaoAngularCombinado :
_Trajetoria.ErroOrientacaoAngularProximoPonto; _Trajetoria.ErroOrientacaoAngularProximoPonto;
var PID = _Controle.PIDdirecional;
if (_Trajetoria.StatusCarro != StatusCarroMapa.Parado) if (_Trajetoria.StatusCarro != StatusCarroMapa.Parado)
{ {
// Atualiza o PID com o erro combinado // 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.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using static AgroBase.Models.Operadores.OperadoresModels;
namespace AgroBase.Models.Operadores namespace AgroBase.Models.Operadores
{ {
@ -12,7 +12,7 @@ namespace AgroBase.Models.Operadores
public DateTime IniciadoEm { get; set; } public DateTime IniciadoEm { get; set; }
public bool Pronto { get; set; } public bool Pronto { get; set; }
public DateTime ProntoEm { 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 VisualWorkerDadosModel Resumo { get; set; } = new VisualWorkerDadosModel();
public VisualWorkerModel Clone() public VisualWorkerModel Clone()
@ -34,7 +34,7 @@ namespace AgroBase.Models.Operadores
IniciadoEm = DateTime.MinValue; IniciadoEm = DateTime.MinValue;
Pronto = false; Pronto = false;
ProntoEm = DateTime.MinValue; ProntoEm = DateTime.MinValue;
Leitura = new VisualWorkerMessageModel(); Leitura = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
Resumo = new VisualWorkerDadosModel(); Resumo = new VisualWorkerDadosModel();
} }
} }
@ -52,72 +52,61 @@ namespace AgroBase.Models.Operadores
{ {
DesvioNecessario = DesvioNecessario, DesvioNecessario = DesvioNecessario,
DirecaoDesvio = DirecaoDesvio, DirecaoDesvio = DirecaoDesvio,
ObstaculoCritico = ObstaculoCritico.Clone(), ObstaculoCritico = ObstaculoCritico?.Clone(),
Obstaculos = new List<Obstaculo>(Obstaculos), Obstaculos = new List<Obstaculo>(Obstaculos ?? new List<Obstaculo>()),
}; };
} }
} }
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(),
};
}
}
public class VisualWorkerMessageResponseModel public class VisualWorkerMessageResponseModel
{ {
public OAKCameraModel device_status { get; set; } public VisualWorkerCommandType cmd { get; set; }
public VisualWorkerMessageIMUModel imu { get; set; } public VisualWorkerMessageResponseSaveFramesModel save_frames { 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 VisualWorkerMessageResponseModel Clone() public VisualWorkerMessageResponseModel Clone()
{ {
return new VisualWorkerMessageResponseModel() return new VisualWorkerMessageResponseModel()
{ {
device_status = device_status.Clone(), cmd = cmd,
imu = imu.Clone(), save_frames = save_frames.Clone()
rgb_frame = rgb_frame.Clone(), };
heatmap_frame = heatmap_frame.Clone(), }
radar_2d = radar_2d.Clone(), }
ping = ping.Clone(),
calibragem = calibragem.Clone(), public class VisualWorkerMessageResponseSaveFramesModel
analise_anomalias = analise_anomalias.Clone(), {
analise_solo = analise_solo.Clone(), public long timestamp { get; set; }
segmentacao = segmentacao.Clone(), 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 class VisualWorkerMessageSetupModel
{ {
public long timestamp { get; set; } 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; if (frame?.image == null) return null;
@ -412,7 +363,7 @@ namespace AgroBase.Models.Operadores
public class VisualWorkerMessageRadar2DModel public class VisualWorkerMessageRadar2DModel
{ {
public VisualWorkerMessageFrameModel frame { get; set; } public OAKCameraFrameModel frame { get; set; }
public VisualWorkerMessageRadar2DAnaliseModel analise { get; set; } public VisualWorkerMessageRadar2DAnaliseModel analise { get; set; }
private bool _newData = false; private bool _newData = false;
@ -548,7 +499,7 @@ namespace AgroBase.Models.Operadores
public class VisualWorkerMessageSegmentacaoSemanticaModel public class VisualWorkerMessageSegmentacaoSemanticaModel
{ {
public VisualWorkerMessageFrameModel mask_frame { get; set; } public OAKCameraFrameModel mask_frame { get; set; }
public double angulo_rua { get; set; } public double angulo_rua { get; set; }
private bool _newData = false; private bool _newData = false;
@ -582,46 +533,9 @@ namespace AgroBase.Models.Operadores
} }
} }
public enum VisualWorkerMessageType
{
TX = 1,
RX = 2
}
public enum VisualWorkerCommandType public enum VisualWorkerCommandType
{ {
Ping = 1, SalvarFrames = 0
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,
} }
} }

View File

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

View File

@ -522,7 +522,7 @@ namespace AgroBase.Models
{ {
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento; 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 anguloCorredor = AnguloMedioCorredor;
double anguloProximoPonto = AnguloCaminho; double anguloProximoPonto = AnguloCaminho;
double anguloCarro = _Sensoriamento.Gps.AnguloCarroDefinido; double anguloCarro = _Sensoriamento.Gps.AnguloCarroDefinido;
@ -1306,7 +1306,9 @@ namespace AgroBase.Models
idxRuaDireita = idxRuaDireita, idxRuaDireita = idxRuaDireita,
DistanciaRestante = DistanciaRestante, DistanciaRestante = DistanciaRestante,
Progresso = Progresso, Progresso = Progresso,
Pontos = new List<PontoTrajetoriaModel>() Pontos = new List<PontoTrajetoriaModel>(),
Ultimo = Ultimo,
FatorLarguraCorredor = FatorLarguraCorredor,
}; };
if (clonarPontos) if (clonarPontos)
{ {

View File

@ -17,6 +17,7 @@ using AgroBase.Models.Components;
using Microsoft.Web.WebView2.WinForms; using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.Core;
using System.Text.Json; using System.Text.Json;
using AgroBase.Services.Operadores;
namespace AgroBase.Models namespace AgroBase.Models
{ {
@ -369,6 +370,7 @@ namespace AgroBase.Models
} }
public static GPSModel PosicaoBase { get; set; } = new GPSModel(); 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) 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;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;

View File

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

View File

@ -131,7 +131,7 @@ namespace AgroBase.Services
{ {
get 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; private static AsyncTaskTimerModel tmrEnviarCAN;

View File

@ -68,6 +68,11 @@ namespace AgroBase.Services
{ {
var Bateria = Variaveis.OperacaoEmAndamento.Sensoriamento.Bateria; 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); 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) // Verifique se as datas são válidas (não MinValue, MaxValue ou valores anômalos)

View File

@ -451,8 +451,15 @@ namespace AgroBase.Comum
newConfig.LimparDados(Dados); newConfig.LimparDados(Dados);
try
{
File.WriteAllText(nomeArquivo, JsonConvert.SerializeObject(newConfig)); 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() public void CarregarParametrosModulos()
{ {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,5 @@
using AgroBase.Models; using AgroBase.Models;
using AgroBase.Services; using AgroBase.Services;
using AgroBase.Services.Operadores;
using MQTTnet; using MQTTnet;
using MQTTnet.Client; using MQTTnet.Client;
using MQTTnet.Client.Options; using MQTTnet.Client.Options;
@ -94,7 +93,6 @@ public class MqttService
await AdicionarNovoTopico(MapasVariaveisModel.TopicoCoordenadasGPS); await AdicionarNovoTopico(MapasVariaveisModel.TopicoCoordenadasGPS);
await AdicionarNovoTopico(MapasVariaveisModel.TopicoSelecaoRuasMapa, true, 1, async (message) => { Variaveis.OperacaoEmAndamento.Mapa.AtualizarRuasSelecionadas(); }); await AdicionarNovoTopico(MapasVariaveisModel.TopicoSelecaoRuasMapa, true, 1, async (message) => { Variaveis.OperacaoEmAndamento.Mapa.AtualizarRuasSelecionadas(); });
await AdicionarNovoTopico(MapasVariaveisModel.TopicoTrajetoriaDinamica); await AdicionarNovoTopico(MapasVariaveisModel.TopicoTrajetoriaDinamica);
await AdicionarNovoTopico(HealthWorkerService.TopicoMQTT);
}); });
tmrCheck = new AsyncTaskTimerModel("tmrCheck", tmrCheck_Tick, 1000); 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) public async Task PublishAsync(MqttTopicosModel topic, string message, bool Forcar = false)
{ {
if (topic.Inscrever && !Forcar) if (topic == null || (topic.Inscrever && !Forcar))
{ {
return; 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() SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{ {
Endereco = CanService._portName,
Dispositivo = T_Code.Mov, Dispositivo = T_Code.Mov,
Erro = Leitura.CodigoAlarme.valor > 0, Endereco = CanService._portName,
Versao = "1.0", Versao = "1.0",
Mod_ID = Mod_ID, Mod_ID = Mod_ID,
}); });

View File

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

View File

@ -1,30 +1,184 @@
using AgroBase.Models; using AgroBase.Models;
using AgroBase.Models.Modules; using AgroBase.Models.Operadores;
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using static AgroBase.Models.Enums; using static AgroBase.Models.Enums;
using static AgroBase.Models.Operadores.OperadoresModels;
using static MqttService;
namespace AgroBase.Services.Operadores namespace AgroBase.Services.Operadores
{ {
public class HealthWorkerService 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, if (DebugMode)
GetDadosModulo = 2, {
SetDadosContexto = 3, Console.WriteLine($"[HealthWorker] {message.Substring(0, Math.Min(limite, message.Length))}{(message.Length > limite ? "..." : "")}");
GetDadosContexto = 4 }
} }
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; if (Variaveis.OperacaoEmAndamento.DispMvd == null) return;
double limiteValorPadrao = -9999; double limiteValorPadrao = -9999;
var a = Variaveis.OperacaoEmAndamento.Trajetoria;
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var dados = new var dados = new
{ {
@ -32,17 +186,48 @@ namespace AgroBase.Services.Operadores
dispositivo = (int)T_Code.Mod, dispositivo = (int)T_Code.Mod,
payload = new 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 Gps = new
{ {
freq_base = GPSService.TaxaAmostragemHz,
conectado = GPSService.Iniciado, 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, rtk = GPSService.UltimoEnvioCorrecaoRTK.AddSeconds(5) > DateTime.Now,
hAcc = GPSService.UltimaLeitura.PrecisaoCm, hAcc = _Sensoriamento.Gps.PrecisaoCm,
nSatelites = GPSService.UltimaLeitura.NumeroSatelites.valor, nSatelites = _Sensoriamento.Gps.NumeroSatelites.valor,
freq = GPSService.UltimaLeitura.NumeroSatelites.frequencia, freq = _Sensoriamento.Gps.NumeroSatelites.frequencia,
}, },
Dir = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Select(x => new Dir = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Select(x => new
{ {
freq_base = Variaveis.OperacaoEmAndamento.DispMvd.Dados.tmrRegistradorDIR.IntervalHz,
endereco = x.DirMotor._EnderecoCAN_Tx, endereco = x.DirMotor._EnderecoCAN_Tx,
angulo = x.DirMotor.Angulo, angulo = x.DirMotor.Angulo,
angulo_sp = x.DirMotor.Angulo_SP, angulo_sp = x.DirMotor.Angulo_SP,
@ -51,15 +236,18 @@ namespace AgroBase.Services.Operadores
sentido = x.DirMotor.Sentido, sentido = x.DirMotor.Sentido,
sentido_sp = x.DirMotor.Sentido_SP, sentido_sp = x.DirMotor.Sentido_SP,
sentido_real = x.DirMotor.SentidoReal, sentido_real = x.DirMotor.SentidoReal,
rpm = x.DirMotor.RPM,
freq = new { freq = new {
io = x.DirMotor.Leitura?.NumeroPulsos?.frequencia ?? 0, 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(), }).ToArray(),
Mov = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Select(x => new Mov = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Select(x => new
{ {
freq_base = Variaveis.OperacaoEmAndamento.DispMvd.Dados.tmrRegistradorMOV.IntervalHz,
endereco = x.MovMotor._EnderecoCAN_Tx, endereco = x.MovMotor._EnderecoCAN_Tx,
cod_erro = (int)x.MovMotor.CodigoAlarme, cod_erro = x.MovMotor.CodigoAlarme,
rpm = x.MovMotor.RPM_Roda, rpm = x.MovMotor.RPM_Roda,
rpm_sp = x.MovMotor.RPM_SP_Leitura, rpm_sp = x.MovMotor.RPM_SP_Leitura,
tensao = x.MovMotor.Tensao, tensao = x.MovMotor.Tensao,
@ -70,16 +258,17 @@ namespace AgroBase.Services.Operadores
freado = x.MovMotor.Leitura?.Freado ?? false, freado = x.MovMotor.Leitura?.Freado ?? false,
freq = new freq = new
{ {
erro = x.MovMotor.Leitura?.CodigoAlarme?.valor ?? 0, erro = x.MovMotor.Leitura?.CodigoAlarme?.frequencia ?? 0,
rpm = x.MovMotor.Leitura?.ERPM?.valor ?? 0, rpm = x.MovMotor.Leitura?.ERPM?.frequencia ?? 0,
tensao = x.MovMotor.Leitura?.Tensao?.valor ?? 0, tensao = x.MovMotor.Leitura?.Tensao?.frequencia ?? 0,
corrente_motor = x.MovMotor.Leitura?.CorrenteMotor?.valor ?? 0, corrente_motor = x.MovMotor.Leitura?.CorrenteMotor?.frequencia ?? 0,
corrente_barramento = x.MovMotor.Leitura?.CorrenteBarramento?.valor ?? 0, corrente_barramento = x.MovMotor.Leitura?.CorrenteBarramento?.frequencia ?? 0,
temperatura = x.MovMotor.Leitura?.Temperatura?.valor ?? 0, temperatura = x.MovMotor.Leitura?.Temperatura?.frequencia ?? 0,
} }
}).ToArray(), }).ToArray(),
Sen = new Sen = new
{ {
freq_base = Variaveis.OperacaoEmAndamento.DispSen.Dados.tmrRegistrador.IntervalHz,
sensores = Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.Select(x => new sensores = Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.Select(x => new
{ {
id = x.ID, id = x.ID,
@ -115,14 +304,72 @@ namespace AgroBase.Services.Operadores
}; };
Task.Run(async () => Task.Run(async () =>
{ {
await Variaveis.MqttService.PublishAsync( await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(dados));
Variaveis.MqttService.Topicos.First(x => x.Topico == TopicoMQTT), });
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 AgroBase.Models;
using System.Collections.Generic; using AgroBase.Models.Operadores;
using Newtonsoft.Json;
using System;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using static AgroBase.Models.Operadores.OperadoresModels;
using static MqttService;
namespace AgroBase.Services.Operadores namespace AgroBase.Services.Operadores
{ {
public class ManagerWorkerService 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;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using static AgroBase.Models.Enums;
using static AgroBase.Models.Operadores.OperadoresModels;
using static MqttService; using static MqttService;
namespace AgroBase.Services.Operadores namespace AgroBase.Services.Operadores
{ {
public class VisualWorkerService public class VisualWorkerService
{ {
private string mqtt_topico = "agrobot/operador/sonar"; public string TopicoMQTT_Tx = "operador/visual/rx";
private MqttTopicosModel topico; private MqttTopicosModel topicoTx;
private Process pythonProcess; public string TopicoMQTT_Rx = "operador/visual/tx";
private int cameraIndex = -1; private MqttTopicosModel topicoRx;
public VisualWorkerModel DadosLeitura = new VisualWorkerModel(); public VisualWorkerModel DadosLeitura = new VisualWorkerModel();
public int TimeoutRespostaComando { get; set; } = 10;
public ConcurrentDictionary<VisualWorkerCommandType, VisualWorkerMessageModel> FilaComandos = new ConcurrentDictionary<VisualWorkerCommandType, VisualWorkerMessageModel>();
public AsyncTaskTimerModel tmrFila; 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 Dictionary<VisualWorkerCommandType, Func<bool>> mapaRespostas;
private bool DebugMode = true; private bool DebugMode = true;
private void MostrarLog(string message, int limite = 500) 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) topicoRx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Rx, true, 2, MqttCallback);
{ topicoTx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Tx);
MostrarLog("Camera nao selecionada");
DadosLeitura.ReiniciarEstado();
return false;
}
mapaRespostas = new Dictionary<VisualWorkerCommandType, Func<bool>> mapaRespostas = new Dictionary<VisualWorkerCommandType, Func<bool>>
{ {
{ VisualWorkerCommandType.Ping, () => DadosLeitura.Leitura.obj.ping?.newData ?? false }, { VisualWorkerCommandType.SalvarFrames, () => DadosLeitura.Leitura.obj?.save_frames?.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 },
}; };
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.IniciadoEm = DateTime.Now;
DadosLeitura.Iniciado = true; DadosLeitura.Iniciado = true;
bool pronto() => DadosLeitura.Pronto;
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 8000);
if (pronto())
{
tmrFila?.Dispose(); tmrFila?.Dispose();
tmrFila = new AsyncTaskTimerModel("tmrVisualWorker_Fila", tmrFila_Tick, 10); tmrFila = new AsyncTaskTimerModel("tmrVisualWorker_Fila", tmrFila_Tick, 10);
tmrFila.Start(); tmrFila.Start();
bool pronto() => DadosLeitura.Pronto;
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 5000);
if (pronto())
{
MostrarLog("Processamento iniciado com sucesso"); MostrarLog("Processamento iniciado com sucesso");
return true; return true;
} }
@ -94,33 +64,22 @@ namespace AgroBase.Services.Operadores
return false; 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) public bool AdicionarComandoNaFila(VisualWorkerCommandType cmd, dynamic payload = null)
{ {
VisualWorkerMessageModel msg = new VisualWorkerMessageModel() WorkerMessageModel<VisualWorkerMessageResponseModel> msg = new WorkerMessageModel<VisualWorkerMessageResponseModel>()
{ {
AdicionadoEm = DateTime.Now, AdicionadoEm = DateTime.Now,
tipo_cmd = VisualWorkerMessageType.TX, payload = payload,
obj = new VisualWorkerMessageResponseModel()
{
cmd = cmd, cmd = cmd,
payload = payload }
}; };
bool sucesso = FilaComandos.TryAdd(msg.cmd, msg); bool sucesso = FilaComandos.TryAdd(cmd, msg);
if (!sucesso) if (!sucesso)
{ {
MostrarLog($"Mensagem {msg.cmd} nao adicionada na fila"); MostrarLog($"Mensagem {cmd} nao adicionada na fila");
} }
return sucesso; return sucesso;
@ -138,11 +97,14 @@ namespace AgroBase.Services.Operadores
var msg = FilaComandos.Where(x => !x.Value.Enviado).OrderBy(x => x.Value.AdicionadoEm).FirstOrDefault(); var msg = FilaComandos.Where(x => !x.Value.Enviado).OrderBy(x => x.Value.AdicionadoEm).FirstOrDefault();
if (msg.Value == null) return; if (msg.Value == null) return;
await Variaveis.MqttService.PublishAsync( var mensagem = new
topico, {
JsonConvert.SerializeObject(msg.Value, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }), comando = (int)msg.Value.obj.cmd,
true dispositivo = (int)T_Code.Snr,
); payload = msg.Value.payload
};
await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(mensagem), true);
msg.Value.Enviado = true; msg.Value.Enviado = true;
msg.Value.EnviadoEm = DateTime.Now; msg.Value.EnviadoEm = DateTime.Now;
@ -157,17 +119,17 @@ namespace AgroBase.Services.Operadores
} }
else 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; return false;
} }
FilaComandos.TryGetValue(msgRx.cmd, out var msgTx); FilaComandos.TryGetValue(msgRx.obj.cmd, out var msgTx);
if (msgTx != null) if (msgTx != null)
{ {
FilaComandos.TryRemove(msgTx.cmd, out var msg); FilaComandos.TryRemove(msgTx.obj.cmd, out var msg);
} }
AtualizarDadosLeitura(msgRx); AtualizarDadosLeitura(msgRx);
@ -175,58 +137,17 @@ namespace AgroBase.Services.Operadores
return true; 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();
{
DadosLeitura.Leitura.obj.ping = msg.obj.ping.Clone();
break;
} }
case VisualWorkerCommandType.Get_Status_Dispositivo: switch (msg.obj.cmd)
{ {
DadosLeitura.Leitura.obj.device_status = msg.obj.device_status?.Clone(); case VisualWorkerCommandType.SalvarFrames:
break;
}
case VisualWorkerCommandType.Get_IMU_Data:
{ {
DadosLeitura.Leitura.obj.imu = msg.obj?.imu?.Clone(); DadosLeitura.Leitura.obj.save_frames = msg.obj.save_frames.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();
break; break;
} }
} }

View File

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

View File

@ -236,6 +236,27 @@ namespace AgroBase.Services
DispositivosMapeados.Remove(Dispositivo); 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(); AtualizarDispositivos();
} }
catch (Exception ex) 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) public static string ReadLineWithTimeout(SerialPort porta, int timeout)
{ {
using (CancellationTokenSource cts = new CancellationTokenSource()) using (CancellationTokenSource cts = new CancellationTokenSource())
@ -385,7 +344,6 @@ namespace AgroBase.Services
} }
} }
public static void AtualizarDispositivos() public static void AtualizarDispositivos()
{ {
bool PrimeiraExecucao = !Variaveis.DispositivosConectados.Any(); 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) public static byte[] LerDadosDaPortaSerial(SerialPort porta, int tamanhoEsperado, int Timeout = 500)
{ {
DateTime inicio = DateTime.Now; DateTime inicio = DateTime.Now;
@ -590,16 +532,6 @@ namespace AgroBase.Services
return buffer.ToArray(); 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) private static void AtualizarConsole(string msg)
{ {
Console.WriteLine(msg); Console.WriteLine(msg);

View File

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

View File

@ -105,9 +105,8 @@ namespace AgroBase.Services
{ {
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel() SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
{ {
Endereco = ModbusService._PortaModbus.PortName,
Dispositivo = T_Code.Wit, Dispositivo = T_Code.Wit,
Erro = !Iniciado, Endereco = ModbusService._PortaModbus.PortName,
Versao = _DadosLeitura.Versao, 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 FinishNav2
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:18:16 Widget Closed: StatusBubble 0:02:58 Microsoft.Shutdown.OnWindowClosing
0:21:01 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup 0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -14,8 +15,7 @@
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2 0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:00:19 Widget Closed: StatusBubble 0:03:43 Microsoft.Shutdown.OnWindowClosing
0:03:50 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup 0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -28,8 +28,9 @@
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2 0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:02:29 Widget Closed: StatusBubble 0:00:16 Widget Closed: StatusBubble
0:07:13 Microsoft.Shutdown.OnWindowClosing 0:03:23 Widget Closed: StatusBubble
0:09:24 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup 0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -42,7 +43,9 @@
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2 0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad 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 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -55,8 +58,8 @@
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2 0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:01:17 Widget Closed: StatusBubble 0:00:10 Widget Closed: StatusBubble
0:01:43 Microsoft.Shutdown.OnWindowClosing 0:04:47 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup 0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -69,8 +72,8 @@
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2 0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:00:21 Widget Closed: StatusBubble 0:00:28 Widget Closed: StatusBubble
0:03:59 Microsoft.Shutdown.OnWindowClosing 0:02:53 Microsoft.Shutdown.OnWindowClosing
0:00:00 Startup 0:00:00 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -83,7 +86,8 @@
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2 0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad 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 Startup
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles 0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
@ -96,17 +100,5 @@
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:00:00 Tab1 FinishNav2 0:00:00 Tab1 FinishNav2
0:00:00 Tab1 PageLoad 0:00:00 Tab1 PageLoad
0:01:30 Microsoft.Shutdown.OnWindowClosing 0:00:18 Widget Closed: StatusBubble
0:00:00 Startup 0:05:24 Microsoft.Shutdown.OnWindowClosing
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

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/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/05/28-15:48:13.373 7670 Recovering log #3 2025/06/04-16:07:07.946 1a30 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.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/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/05/28-15:45:47.100 1cd4 Recovering log #3 2025/06/04-15:46:51.074 c04 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.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