implementado os 3 primeiros operadores e removido conrole ataves do c#
|
|
@ -514,9 +514,11 @@
|
|||
<Compile Include="Models\MPCControllerSimple.cs" />
|
||||
<Compile Include="Models\OAKCameraModel.cs" />
|
||||
<Compile Include="Models\OIDModel.cs" />
|
||||
<Compile Include="Models\Operacoes\OperacaoMapaGPSModel.cs" />
|
||||
<Compile Include="Models\Operacoes\OperacaoModel.cs" />
|
||||
<Compile Include="Models\Operacoes\OperacaoParametrosModel.cs" />
|
||||
<Compile Include="Models\Operadores\HealthWorkerModel.cs" />
|
||||
<Compile Include="Models\Operadores\ManagerWorkerModel.cs" />
|
||||
<Compile Include="Models\Operadores\OperadoresModels.cs" />
|
||||
<Compile Include="Models\Operadores\VisualWorkerModel.cs" />
|
||||
<Compile Include="Models\PerformanceModel.cs" />
|
||||
<Compile Include="Models\PIDModel.cs" />
|
||||
|
|
@ -561,11 +563,11 @@
|
|||
<Compile Include="Services\MKS057DService.cs" />
|
||||
<Compile Include="Services\ModbusService.cs" />
|
||||
<Compile Include="Services\MqttService.cs" />
|
||||
<Compile Include="Services\OAKCameraService.cs" />
|
||||
<Compile Include="Services\OIDCanService.cs" />
|
||||
<Compile Include="Services\OIDService.cs" />
|
||||
<Compile Include="Services\Operadores\HealthWorkerService.cs" />
|
||||
<Compile Include="Services\Operadores\ManagerWorkerService.cs" />
|
||||
<Compile Include="Services\Operadores\OperadoresService.cs" />
|
||||
<Compile Include="Services\Operadores\VisualWorkerService.cs" />
|
||||
<Compile Include="Services\PythonService.cs" />
|
||||
<Compile Include="Services\PZEMService.cs" />
|
||||
|
|
|
|||
|
|
@ -27,14 +27,14 @@ namespace AgroBase.Forms
|
|||
cameraSolo = new CameraSoloModel()
|
||||
{
|
||||
Nome = "T",
|
||||
Posicao = Variaveis.OperacaoEmAndamento.CamerasSolo.Count(),
|
||||
Posicao = Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.Count(),
|
||||
ArquivoLeitura = "ervas_T.json",
|
||||
browser = null,
|
||||
camera = new CameraService(),
|
||||
DeviceID = "",
|
||||
combo = cmbCameras,
|
||||
MaxLeituras = 10,
|
||||
VideoPorta = (VariaveisPortas.CameraSolo + Variaveis.OperacaoEmAndamento.CamerasSolo.Count()).ToString(),
|
||||
VideoPorta = (VariaveisPortas.CameraSolo + Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.Count()).ToString(),
|
||||
VideoUrl = "green_objects_T",
|
||||
MqttTopico = "green_objects_T",
|
||||
panel = pnlCamera,
|
||||
|
|
|
|||
|
|
@ -29,8 +29,7 @@
|
|||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmAjustes));
|
||||
this.pnlCaminho = new System.Windows.Forms.Panel();
|
||||
this.cmbC = new System.Windows.Forms.ComboBox();
|
||||
this.cmbCameraCaminho = new System.Windows.Forms.ComboBox();
|
||||
this.lblComunicacao = new System.Windows.Forms.Label();
|
||||
this.picVoltar = new System.Windows.Forms.PictureBox();
|
||||
this.picSalvar = new System.Windows.Forms.PictureBox();
|
||||
|
|
@ -58,6 +57,7 @@
|
|||
this.chbSonarAtivado = new System.Windows.Forms.CheckBox();
|
||||
this.gpbComunicacao = new System.Windows.Forms.GroupBox();
|
||||
this.gpbCameras = new System.Windows.Forms.GroupBox();
|
||||
this.picCaminho = new System.Windows.Forms.PictureBox();
|
||||
this.flwCamerasSolo = new System.Windows.Forms.FlowLayoutPanel();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picVoltar)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picSalvar)).BeginInit();
|
||||
|
|
@ -66,24 +66,18 @@
|
|||
((System.ComponentModel.ISupportInitialize)(this.picAtualizar)).BeginInit();
|
||||
this.gpbComunicacao.SuspendLayout();
|
||||
this.gpbCameras.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picCaminho)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// pnlCaminho
|
||||
// cmbCameraCaminho
|
||||
//
|
||||
this.pnlCaminho.Location = new System.Drawing.Point(137, 53);
|
||||
this.pnlCaminho.Name = "pnlCaminho";
|
||||
this.pnlCaminho.Size = new System.Drawing.Size(320, 200);
|
||||
this.pnlCaminho.TabIndex = 1;
|
||||
//
|
||||
// cmbC
|
||||
//
|
||||
this.cmbC.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.cmbC.FormattingEnabled = true;
|
||||
this.cmbC.Location = new System.Drawing.Point(137, 259);
|
||||
this.cmbC.Name = "cmbC";
|
||||
this.cmbC.Size = new System.Drawing.Size(181, 39);
|
||||
this.cmbC.TabIndex = 8;
|
||||
this.cmbC.SelectedIndexChanged += new System.EventHandler(this.cmbCameraCaminho_SelectedIndexChanged);
|
||||
this.cmbCameraCaminho.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.cmbCameraCaminho.FormattingEnabled = true;
|
||||
this.cmbCameraCaminho.Location = new System.Drawing.Point(137, 259);
|
||||
this.cmbCameraCaminho.Name = "cmbCameraCaminho";
|
||||
this.cmbCameraCaminho.Size = new System.Drawing.Size(181, 39);
|
||||
this.cmbCameraCaminho.TabIndex = 8;
|
||||
this.cmbCameraCaminho.SelectedIndexChanged += new System.EventHandler(this.cmbCameraCaminho_SelectedIndexChanged);
|
||||
//
|
||||
// lblComunicacao
|
||||
//
|
||||
|
|
@ -386,14 +380,14 @@
|
|||
//
|
||||
// gpbCameras
|
||||
//
|
||||
this.gpbCameras.Controls.Add(this.picCaminho);
|
||||
this.gpbCameras.Controls.Add(this.flwCamerasSolo);
|
||||
this.gpbCameras.Controls.Add(this.picVoltar);
|
||||
this.gpbCameras.Controls.Add(this.picSalvar);
|
||||
this.gpbCameras.Controls.Add(this.chbSonarAtivado);
|
||||
this.gpbCameras.Controls.Add(this.picAtualizar);
|
||||
this.gpbCameras.Controls.Add(this.btnCalibrarSonar);
|
||||
this.gpbCameras.Controls.Add(this.pnlCaminho);
|
||||
this.gpbCameras.Controls.Add(this.cmbC);
|
||||
this.gpbCameras.Controls.Add(this.cmbCameraCaminho);
|
||||
this.gpbCameras.Location = new System.Drawing.Point(12, 12);
|
||||
this.gpbCameras.Name = "gpbCameras";
|
||||
this.gpbCameras.Size = new System.Drawing.Size(1000, 322);
|
||||
|
|
@ -401,6 +395,15 @@
|
|||
this.gpbCameras.TabStop = false;
|
||||
this.gpbCameras.Text = "CÂMERAS";
|
||||
//
|
||||
// picCaminho
|
||||
//
|
||||
this.picCaminho.Location = new System.Drawing.Point(137, 53);
|
||||
this.picCaminho.Name = "picCaminho";
|
||||
this.picCaminho.Size = new System.Drawing.Size(320, 200);
|
||||
this.picCaminho.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.picCaminho.TabIndex = 37;
|
||||
this.picCaminho.TabStop = false;
|
||||
//
|
||||
// flwCamerasSolo
|
||||
//
|
||||
this.flwCamerasSolo.Location = new System.Drawing.Point(463, 19);
|
||||
|
|
@ -433,13 +436,13 @@
|
|||
this.gpbComunicacao.PerformLayout();
|
||||
this.gpbCameras.ResumeLayout(false);
|
||||
this.gpbCameras.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picCaminho)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.Panel pnlCaminho;
|
||||
private System.Windows.Forms.ComboBox cmbC;
|
||||
private System.Windows.Forms.ComboBox cmbCameraCaminho;
|
||||
private System.Windows.Forms.Label lblComunicacao;
|
||||
private System.Windows.Forms.PictureBox picVoltar;
|
||||
private System.Windows.Forms.PictureBox picSalvar;
|
||||
|
|
@ -468,5 +471,6 @@
|
|||
private System.Windows.Forms.GroupBox gpbComunicacao;
|
||||
private System.Windows.Forms.GroupBox gpbCameras;
|
||||
private System.Windows.Forms.FlowLayoutPanel flwCamerasSolo;
|
||||
private System.Windows.Forms.PictureBox picCaminho;
|
||||
}
|
||||
}
|
||||
|
|
@ -15,7 +15,9 @@ namespace AgroBase.Forms.IHM
|
|||
{
|
||||
//LoRaParametrosModel loraParametrosBase;
|
||||
|
||||
List<OAKCameraModel> Cameras = new List<OAKCameraModel>();
|
||||
List<OAKCameraModel> ListaCameras = new List<OAKCameraModel>();
|
||||
OAKCameraModel CameraCaminho = new OAKCameraModel();
|
||||
List<OAKCameraModel> CamerasSolo = new List<OAKCameraModel>();
|
||||
|
||||
public frmAjustes()
|
||||
{
|
||||
|
|
@ -34,21 +36,9 @@ namespace AgroBase.Forms.IHM
|
|||
});
|
||||
FuncoesGlobais.DefinirEventosPicBtn(picSalvar, "Erro ao salvar parâmetros!", async () =>
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Caminho = cmbC.Text;
|
||||
|
||||
List<ComboBox> cmbs = new List<ComboBox>();
|
||||
foreach (Panel pnlCam in flwCamerasSolo.Controls)
|
||||
{
|
||||
cmbs.Add(pnlCam.Controls.OfType<ComboBox>().FirstOrDefault());
|
||||
}
|
||||
Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo.Clear();
|
||||
Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo.AddRange(cmbs.Select(x => x.Text).ToArray());
|
||||
if (KinectService.Iniciado)
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.Controle.SonarAtivado = chbSonarAtivado.Checked;
|
||||
KinectService.SalvarParametros();
|
||||
}
|
||||
|
||||
Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho = CameraCaminho.Clone();
|
||||
Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo = new List<OAKCameraModel>(CamerasSolo);
|
||||
|
||||
CustomDialog.ShowDialog(
|
||||
"Sucesso",
|
||||
"Configuração de câmeras salva com sucesso!",
|
||||
|
|
@ -61,7 +51,7 @@ namespace AgroBase.Forms.IHM
|
|||
});
|
||||
FuncoesGlobais.DefinirEventosPicBtn(picAtualizar, "Erro ao atualizar lista de câmeras!", async () =>
|
||||
{
|
||||
AtualizarCameras();
|
||||
await AtualizarCameras();
|
||||
});
|
||||
FuncoesGlobais.DefinirEventosPicBtn(picLer, "Erro ao ler parâmetros de comunicação!", async () =>
|
||||
{
|
||||
|
|
@ -123,7 +113,7 @@ namespace AgroBase.Forms.IHM
|
|||
}
|
||||
});
|
||||
|
||||
AtualizarCameras();
|
||||
await AtualizarCameras();
|
||||
if (LoRaService.Iniciado)
|
||||
{
|
||||
await AtualizarParametros();
|
||||
|
|
@ -138,7 +128,7 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
private void frmAjustes_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.DesligarCameras();
|
||||
|
||||
}
|
||||
|
||||
#region COMUNICACAO
|
||||
|
|
@ -273,64 +263,25 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
#region CAMERAS
|
||||
|
||||
private void AtualizarCameras()
|
||||
private async Task AtualizarCameras()
|
||||
{
|
||||
flwCamerasSolo.Controls.Clear();
|
||||
OAKCameraService.AtualizarListaCameras(true);
|
||||
Cameras = OAKCameraService.GetListaCameras();
|
||||
ListaCameras = await VariaveisOperacao.Operadores.AtualizarListaCameras();
|
||||
|
||||
CameraCaminho = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Clone();
|
||||
CamerasSolo = new List<OAKCameraModel>(Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo);
|
||||
|
||||
for (int i = 0; i < Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo; i++)
|
||||
{
|
||||
GerarCameraSolo(i);
|
||||
}
|
||||
|
||||
cmbC.Items.Clear();
|
||||
cmbC.Items.AddRange(Cameras.Select(x => x.Id).ToArray());
|
||||
var cameraSelecionada = Cameras.FirstOrDefault(x => x.Id == Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Caminho);
|
||||
cmbCameraCaminho.Items.Clear();
|
||||
cmbCameraCaminho.Items.AddRange(ListaCameras.Select(x => x.Description).ToArray());
|
||||
string cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CameraCaminho.Id)?.Description ?? "";
|
||||
if (cameraSelecionada != null)
|
||||
{
|
||||
cmbC.SelectedIndex = Cameras.IndexOf(cameraSelecionada);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void IniciarCameras()
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCaminho }, Variaveis.OperacaoEmAndamento.CamerasSolo.Select(x => x.panel).ToList(), true);
|
||||
}
|
||||
|
||||
|
||||
private void cmbCameraCaminho_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
ComboBox cmb = (ComboBox)sender;
|
||||
|
||||
CameraCaminhoModel CameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminho;
|
||||
if (CameraCaminho != null)
|
||||
{
|
||||
CameraCaminho.combo = cmb;
|
||||
CameraCaminho.panelRgb = pnlCaminho;
|
||||
CameraCaminho.panelRgb.Tag = cmb.Text;
|
||||
}
|
||||
|
||||
if (CameraCaminho.combo.SelectedIndex > 0 && (Variaveis.OperacaoEmAndamento.CamerasSolo.Any(x => x.combo.SelectedIndex == CameraCaminho.combo.SelectedIndex)))
|
||||
{
|
||||
CustomDialog.ShowDialog(
|
||||
"Erro",
|
||||
"Essa câmera já está sendo usada por outro processo!",
|
||||
MessageBoxIcon.Warning,
|
||||
new Dictionary<(string, dynamic), Action>()
|
||||
{
|
||||
{ ("OK", null), () => { } }
|
||||
}
|
||||
);
|
||||
CameraCaminho.combo.SelectedIndex = CameraCaminho.camera.cameraIndex;
|
||||
return;
|
||||
}
|
||||
|
||||
CameraCaminho.camera.cameraIndex = CameraCaminho.combo.SelectedIndex;
|
||||
|
||||
if (CameraCaminho.camera.cameraIndex > 0)
|
||||
{
|
||||
IniciarCameras();
|
||||
cmbCameraCaminho.SelectedIndex = cmbCameraCaminho.Items.IndexOf(cameraSelecionada);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -339,7 +290,7 @@ namespace AgroBase.Forms.IHM
|
|||
Panel pnlFundo = new Panel()
|
||||
{
|
||||
Name = "pnlCamSolo_S" + idx,
|
||||
Width = 300,
|
||||
Width = 300,
|
||||
Height = 284
|
||||
};
|
||||
Label lblTitulo = new Label()
|
||||
|
|
@ -351,37 +302,44 @@ namespace AgroBase.Forms.IHM
|
|||
Location = new Point(66, 6),
|
||||
Font = new Font("Microsoft Sans Serif", 12.25f, FontStyle.Regular)
|
||||
};
|
||||
Panel pnlCamera = new Panel()
|
||||
PictureBox picCamera = new PictureBox()
|
||||
{
|
||||
Name = "pnlCamSoloFundo_S" + idx,
|
||||
Name = "picCamSoloFundo_S" + idx,
|
||||
Width = 286,
|
||||
Height = 200,
|
||||
Location = new Point(7, 31),
|
||||
BackgroundImageLayout = ImageLayout.Stretch,
|
||||
BackColor = Color.Black,
|
||||
SizeMode = PictureBoxSizeMode.Zoom
|
||||
};
|
||||
ComboBox cmbCamera = new ComboBox()
|
||||
{
|
||||
Name = "cmbCamSolo_S" + idx,
|
||||
Width = 286,
|
||||
Height = 39,
|
||||
Name = "cmbCamSolo_S" + idx,
|
||||
Width = 286,
|
||||
Height = 39,
|
||||
Location = new Point(7, 237),
|
||||
Font = new Font("Microsoft Sans Serif", 20.25f, FontStyle.Regular)
|
||||
Font = new Font("Microsoft Sans Serif", 20.25f, FontStyle.Regular),
|
||||
Tag = idx
|
||||
};
|
||||
cmbCamera.SelectedIndexChanged += cmbCameraSolo_SelectedIndexChanged;
|
||||
|
||||
cmbCamera.Items.Clear();
|
||||
cmbCamera.Items.AddRange(Cameras.Select(x => x.Id).ToArray());
|
||||
|
||||
cmbCamera.Items.AddRange(ListaCameras.Select(x => x.Description).ToArray());
|
||||
|
||||
pnlFundo.Controls.Add(lblTitulo);
|
||||
pnlFundo.Controls.Add(pnlCamera);
|
||||
pnlFundo.Controls.Add(picCamera);
|
||||
pnlFundo.Controls.Add(cmbCamera);
|
||||
|
||||
flwCamerasSolo.Controls.Add(pnlFundo);
|
||||
|
||||
string cameraSelecionada = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo.Count() > idx ? Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo[idx] : "";
|
||||
if (CamerasSolo.Count() <= idx)
|
||||
{
|
||||
CamerasSolo.Add(new OAKCameraModel());
|
||||
}
|
||||
|
||||
if (Cameras.Any(x => x.Id == cameraSelecionada))
|
||||
string cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CamerasSolo[idx].Id)?.Description ?? "";
|
||||
|
||||
if (ListaCameras.Any(x => x.Id == cameraSelecionada))
|
||||
{
|
||||
cmbCamera.SelectedIndex = cmbCamera.Items.IndexOf(cameraSelecionada);
|
||||
}
|
||||
|
|
@ -391,46 +349,80 @@ namespace AgroBase.Forms.IHM
|
|||
}
|
||||
}
|
||||
|
||||
private void cmbCameraSolo_SelectedIndexChanged(object sender, EventArgs e)
|
||||
private async void cmbCameraCaminho_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
ComboBox cmb = (ComboBox)sender;
|
||||
|
||||
string CamID = cmb.Name.Replace("cmbCamSolo_", "");
|
||||
|
||||
CameraSoloModel CameraSolo = Variaveis.OperacaoEmAndamento.CamerasSolo.FirstOrDefault(x => x.ID == CamID);
|
||||
if (CameraSolo != null)
|
||||
ComboBox cmb = sender as ComboBox;
|
||||
PictureBox pic = picCaminho;
|
||||
CameraCaminho = CameraDisponivel(cmb.Text);
|
||||
if (CameraCaminho.Index > -1)
|
||||
{
|
||||
CameraSolo.combo = cmb;
|
||||
CameraSolo.panel = FuncoesGlobais.FindControlRecursive<Panel>(flwCamerasSolo, "pnlCamSoloFundo_" + CamID);
|
||||
CameraSolo.panel.Tag = cmb.Text;
|
||||
Bitmap rgb = await CameraCaminho.GetFrame();
|
||||
pic.Image = rgb;
|
||||
}
|
||||
else
|
||||
{
|
||||
pic.Image?.Dispose();
|
||||
pic.Image = null;
|
||||
pic.BackColor = Color.Black;
|
||||
cmb.SelectedIndex = cmb.Items.IndexOf(CameraCaminho.Description);
|
||||
}
|
||||
}
|
||||
|
||||
if (CameraSolo.combo.SelectedIndex > 0 && (cmbC.SelectedIndex == CameraSolo.combo.SelectedIndex || Variaveis.OperacaoEmAndamento.CamerasSolo.Any(x => x.Nome != CameraSolo.Nome && x.combo.SelectedIndex == CameraSolo.combo.SelectedIndex)))
|
||||
private async void cmbCameraSolo_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
ComboBox cmb = sender as ComboBox;
|
||||
int idx = (int)cmb.Tag;
|
||||
PictureBox pic = FuncoesGlobais.FindControlRecursive<PictureBox>(this, "picCamSoloFundo_S" + idx);
|
||||
CamerasSolo[idx] = CameraDisponivel(cmb.Text, idx);
|
||||
if (CamerasSolo[idx].Index > -1)
|
||||
{
|
||||
Bitmap rgb = await CamerasSolo[idx].GetFrame();
|
||||
pic.Image = rgb;
|
||||
}
|
||||
else
|
||||
{
|
||||
pic.Image?.Dispose();
|
||||
pic.Image = null;
|
||||
pic.BackColor = Color.Black;
|
||||
cmb.SelectedIndex = cmb.Items.IndexOf(CamerasSolo[idx].Description);
|
||||
}
|
||||
}
|
||||
|
||||
OAKCameraModel CameraDisponivel(string descricao, int idx = -1)
|
||||
{
|
||||
bool emUso = false;
|
||||
|
||||
var cam = ListaCameras.FirstOrDefault(x => x.Description == descricao);
|
||||
|
||||
if (cam.Index > -1)
|
||||
{
|
||||
if (idx == -1)
|
||||
{
|
||||
emUso = CamerasSolo.Any(x => x.Id == cam.Id);
|
||||
}
|
||||
else
|
||||
{
|
||||
emUso = (CameraCaminho.Id == cam.Id) || (CamerasSolo.Any(x => x.Index != idx && x.Id == cam.Id));
|
||||
}
|
||||
}
|
||||
|
||||
if (emUso)
|
||||
{
|
||||
CustomDialog.ShowDialog(
|
||||
"Erro",
|
||||
"Essa câmera já está sendo usada por outro processo!",
|
||||
"Camera indisponível",
|
||||
$"A camera {cam.Description} já está configurada em outro processo!",
|
||||
MessageBoxIcon.Warning,
|
||||
new Dictionary<(string, dynamic), Action>()
|
||||
{
|
||||
{ ("OK", null), () => { } }
|
||||
}
|
||||
);
|
||||
CameraSolo.combo.SelectedIndex = CameraSolo.camera.cameraIndex;
|
||||
return;
|
||||
cam = ListaCameras.FirstOrDefault(x => x.Index == -1);
|
||||
}
|
||||
|
||||
CameraSolo.camera.cameraIndex = CameraSolo.combo.SelectedIndex;
|
||||
|
||||
if (CameraSolo.camera.cameraIndex > 0)
|
||||
{
|
||||
IniciarCameras();
|
||||
}
|
||||
return cam;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
private async void cmbComunicacao_SelectedIndexChanged(object sender, EventArgs e)
|
||||
|
|
|
|||
|
|
@ -1462,27 +1462,27 @@ namespace AgroBase.Forms.IHM
|
|||
}
|
||||
});
|
||||
|
||||
foreach (var camera in Variaveis.OperacaoEmAndamento.CamerasSolo)
|
||||
foreach (var camera in Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo)
|
||||
{
|
||||
Testes.AddRange(new List<ColunasDiagnosticoModel>()
|
||||
{
|
||||
new ColunasDiagnosticoModel()
|
||||
{
|
||||
Componente = camera.Nome,
|
||||
Componente = camera.Name,
|
||||
Teste = "Configurado",
|
||||
ValorPadrao = 1,
|
||||
ComplementoValorPadrao = ComplementosPadrao[1]
|
||||
},
|
||||
new ColunasDiagnosticoModel()
|
||||
{
|
||||
Componente = camera.Nome,
|
||||
Componente = camera.Name,
|
||||
Teste = "Conectado",
|
||||
ValorPadrao = 1,
|
||||
ComplementoValorPadrao = ComplementosPadrao[1]
|
||||
},
|
||||
new ColunasDiagnosticoModel()
|
||||
{
|
||||
Componente = camera.Nome,
|
||||
Componente = camera.Name,
|
||||
Teste = "Vídeo",
|
||||
ValorPadrao = 1,
|
||||
ComplementoValorPadrao = ComplementosPadrao[1]
|
||||
|
|
@ -1503,7 +1503,7 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
List<string> CamerasIDs = CameraService.ObterListaCameras().Values.ToList();
|
||||
|
||||
string IDcamRua = (Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Caminho ?? "");//.Replace("\\", "#").ToLower();
|
||||
string IDcamRua = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Id;//.Replace("\\", "#").ToLower();
|
||||
|
||||
bool RuaConfigurado = !string.IsNullOrEmpty(IDcamRua) && IDcamRua != "Sem video";
|
||||
idx = PreencheDadosLinha(grid, Testes, idx, RuaConfigurado ? 1 : 0);
|
||||
|
|
@ -1514,9 +1514,9 @@ namespace AgroBase.Forms.IHM
|
|||
bool RuaVideo = await VerificaImagemCamera(CamerasIDs, IDcamRua, RuaConectado);
|
||||
idx = PreencheDadosLinha(grid, Testes, idx, RuaVideo ? 1 : 0);
|
||||
|
||||
foreach (var camera in Variaveis.OperacaoEmAndamento.CamerasSolo)
|
||||
foreach (var camera in Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo)
|
||||
{
|
||||
string IDcamSolo = (Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraID_Solo[0] ?? "");//.Replace("\\", "#").ToLower();
|
||||
string IDcamSolo = (Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo[0].Id);//.Replace("\\", "#").ToLower();
|
||||
|
||||
bool SoloConfigurado = !string.IsNullOrEmpty(IDcamSolo) && IDcamSolo != "Sem video";
|
||||
idx = PreencheDadosLinha(grid, Testes, idx, SoloConfigurado ? 1 : 0);
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ namespace AgroBase.Forms.IHM
|
|||
{
|
||||
if (Variaveis.OperacaoEmAndamento.StatusAtual == Enums.StatusOperacao.Parametrizando)
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.DesligarCameras();
|
||||
this.Hide();
|
||||
}
|
||||
else
|
||||
|
|
@ -100,13 +99,10 @@ namespace AgroBase.Forms.IHM
|
|||
private void frmDialogoMapa_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
tmrLeitura?.Dispose();
|
||||
Variaveis.OperacaoEmAndamento.DesligarCameras();
|
||||
}
|
||||
|
||||
public async Task AtualizarRuasSelecionadas(List<string> ruasSelecionadas)
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraCaminho, pnlCameraCaminhoHeat }, new List<Panel>() { pnlCameraSoloE }, true);
|
||||
|
||||
await Task.Delay(1000);
|
||||
|
||||
GPSService.AtualizarRuasSelecionadas(ruasSelecionadas);
|
||||
|
|
@ -137,7 +133,7 @@ namespace AgroBase.Forms.IHM
|
|||
_Trajetoria.CorredorAtual.Pontos,
|
||||
Variaveis.OperacaoEmAndamento.GPSTrajetoria,
|
||||
_Trajetoria.RuasPlantacao,
|
||||
_Sensoriamento.Controle.ControladorMPC?.ComandoAtual?.simulacao
|
||||
_Sensoriamento.Controle.SimulacaoMPC
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -149,7 +145,7 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
|
||||
|
||||
var ultimaLeitura = Variaveis.OperacaoEmAndamento.CamerasSolo.OrderByDescending(x => x.Leitura.timestamp).FirstOrDefault();
|
||||
/*var ultimaLeitura = Variaveis.OperacaoEmAndamento.CamerasSolo.OrderByDescending(x => x.Leitura.timestamp).FirstOrDefault();
|
||||
if (ultimaLeitura != null)
|
||||
{
|
||||
lblUltimaLeituraSolo.Text = "Última Leitura Solo: " + FuncoesGlobais.TimestampToDate(ultimaLeitura.Leitura.timestamp);
|
||||
|
|
@ -157,7 +153,7 @@ namespace AgroBase.Forms.IHM
|
|||
if (Variaveis.OperacaoEmAndamento.CameraCaminho != null)
|
||||
{
|
||||
lblUltimaLeituraCaminho.Text = "Última Leitura Caminho: " + FuncoesGlobais.TimestampToDate(Variaveis.OperacaoEmAndamento.CameraCaminho.Leitura.timestamp);
|
||||
}
|
||||
}*/
|
||||
lblPerformance.Text = _Sensoriamento.DadosPerformance.PerformanceStr;
|
||||
|
||||
lblMapaCarregado.Text = "Operação: " + Variaveis.OperacaoEmAndamento.Descricao;
|
||||
|
|
@ -344,8 +340,6 @@ namespace AgroBase.Forms.IHM
|
|||
freioStartPosition = new Point(pnlFreio.Width / 2 - 20, 10);
|
||||
freioPosition = freioStartPosition;
|
||||
|
||||
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraCaminho, pnlCameraCaminhoHeat }, new List<Panel>() { pnlCameraSoloE }, true);
|
||||
|
||||
IniciarOperacao();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using AgroBase.Forms.Operacoes;
|
||||
using AgroBase.Models;
|
||||
using AgroBase.Models.Components;
|
||||
using AgroBase.Models.Operadores;
|
||||
using AgroBase.Properties;
|
||||
using AgroBase.Services;
|
||||
using System;
|
||||
|
|
@ -132,6 +133,11 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
lblCodigoFalha.Click -= LblCodigoFalha_Click;
|
||||
lblCodigoFalha.Click += LblCodigoFalha_Click;
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await VariaveisOperacao.Operadores.AtualizarListaCameras();
|
||||
});
|
||||
}
|
||||
|
||||
private async Task tmrDispositivos_Tick()
|
||||
|
|
@ -159,8 +165,7 @@ namespace AgroBase.Forms.IHM
|
|||
CodFalha = Variaveis.OperacaoEmAndamento.RetornaCodigoFalha();
|
||||
|
||||
var Labels = this.Controls.OfType<Label>().Where(y => y.Name.Contains("lblD_")).ToList();
|
||||
var listaCameras = OAKCameraService.GetListaCameras();
|
||||
listaCameras.RemoveAt(0);
|
||||
var listaCameras = await VariaveisOperacao.Operadores.AtualizarListaCameras();
|
||||
foreach (var lbl in Labels)
|
||||
{
|
||||
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), lbl.Name.Split('_')[1]);
|
||||
|
|
@ -168,39 +173,37 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
if (Dispositivo == T_Code.Cam)
|
||||
{
|
||||
int idx = Convert.ToInt32(Mod_ID);
|
||||
Mod_ID = T_Code.Cam.ToString() + "_" + Mod_ID;
|
||||
var CameraSolo = Variaveis.OperacaoEmAndamento.CamerasSolo.FirstOrDefault(x => x.ID == Mod_ID);
|
||||
if (CameraSolo != null)
|
||||
{
|
||||
lbl.ForeColor = !listaCameras.Any(x => x.Id == CameraSolo.DeviceID) ?
|
||||
var CameraSolo = Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.Count() > idx ? Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo[idx] : null;
|
||||
lbl.ForeColor =
|
||||
CameraSolo == null ? Color.Black :
|
||||
!listaCameras.Any(x => x.Id == CameraSolo.Id) ?
|
||||
Color.DarkRed :
|
||||
CameraSolo.camera.cameraIndex == 0 ?
|
||||
Color.Gold :
|
||||
Color.DarkGreen;
|
||||
}
|
||||
Color.DarkGreen;
|
||||
}
|
||||
else if (Dispositivo == T_Code.Snr)
|
||||
{
|
||||
var CameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminho;
|
||||
if (CameraCaminho != null && Mod_ID == CameraCaminho.ID)
|
||||
{
|
||||
lbl.ForeColor = !listaCameras.Any(x => x.Id == CameraCaminho.DeviceID)
|
||||
var CameraCaminho = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho;
|
||||
lbl.ForeColor =
|
||||
CameraCaminho == null ? Color.Black :
|
||||
!listaCameras.Any(x => x.Id == CameraCaminho.Id)
|
||||
? Color.DarkRed
|
||||
: CameraCaminho.camera.cameraIndex == 0
|
||||
? Color.Gold
|
||||
: Color.DarkGreen;
|
||||
}
|
||||
: Color.DarkGreen;
|
||||
}
|
||||
else if (Dispositivo == T_Code.Sen)
|
||||
{
|
||||
if (Mod_ID.ToLower() == Dispositivo.ToString().ToLower())
|
||||
{
|
||||
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo && (x.Mod_ID == Mod_ID || x.Mod_ID == null));
|
||||
lbl.ForeColor = Modulo == null
|
||||
lbl.ForeColor =
|
||||
Modulo == null || Modulo.Status == StatusModulo.Desconectado
|
||||
? Color.Black
|
||||
: Modulo.Erro
|
||||
? Color.Gold
|
||||
: Modulo.Conectado
|
||||
: Modulo.Status == StatusModulo.Conectado
|
||||
? Color.Blue
|
||||
: Modulo.Status == StatusModulo.Alerta ?
|
||||
Color.Gold :
|
||||
Modulo.Status == StatusModulo.Operante
|
||||
? Color.DarkGreen
|
||||
: Color.DarkRed;
|
||||
}
|
||||
|
|
@ -244,13 +247,16 @@ namespace AgroBase.Forms.IHM
|
|||
else
|
||||
{
|
||||
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo && (x.Mod_ID == Mod_ID || x.Mod_ID == null));
|
||||
lbl.ForeColor = Modulo == null
|
||||
? Color.Black
|
||||
: Modulo.Erro
|
||||
? Color.Gold
|
||||
: Modulo.Conectado
|
||||
? Color.DarkGreen
|
||||
: Color.DarkRed;
|
||||
lbl.ForeColor =
|
||||
Modulo == null || Modulo.Status == StatusModulo.Desconectado
|
||||
? Color.Black
|
||||
: Modulo.Status == StatusModulo.Conectado
|
||||
? Color.Blue
|
||||
: Modulo.Status == StatusModulo.Alerta ?
|
||||
Color.Gold :
|
||||
Modulo.Status == StatusModulo.Operante
|
||||
? Color.DarkGreen
|
||||
: Color.DarkRed;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -297,24 +303,48 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo && (x.Mod_ID == Mod_ID || x.Mod_ID == null));
|
||||
|
||||
string msg = "Módulo: " + Dispositivo +
|
||||
"\r\nID: " + Mod_ID +
|
||||
"\r\nConectado: " + (Modulo != null ? "Sim" : "Não") +
|
||||
"\r\nInicializado: " + (Modulo != null && Modulo.Conectado ? "Sim" : "Não") +
|
||||
"\r\nVersão: " + (Modulo != null ? Modulo.Versao : "") +
|
||||
"\r\nErro: " + (Modulo != null && Modulo.Erro ? "Sim" : "Não") +
|
||||
"\r\nStatus: " + (
|
||||
lbl.ForeColor == Color.Black ? "Não conectado" :
|
||||
lbl.ForeColor == Color.DarkRed ? "Não inicializado" :
|
||||
lbl.ForeColor == Color.DarkGreen ? "Inicializado" :
|
||||
lbl.ForeColor == Color.Gold ? "Não configurado" :
|
||||
""
|
||||
);
|
||||
var saudeGeral = VariaveisOperacao.Operadores.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo);
|
||||
ManagerWorkerMessageResponseModulosPendentesSaudeModel saudeIndividual = null;
|
||||
switch (Dispositivo)
|
||||
{
|
||||
case T_Code.Mov:
|
||||
{
|
||||
var enderecoMod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == Mod_ID)?.MovMotor?._EnderecoCAN_Tx ?? 0x00;
|
||||
saudeIndividual = saudeGeral.saude_individual.FirstOrDefault(x => Convert.ToByte(x.id) == enderecoMod);
|
||||
break;
|
||||
}
|
||||
case T_Code.Dir:
|
||||
{
|
||||
var enderecoMod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == Mod_ID)?.DirMotor?._EnderecoCAN_Tx ?? 0x00;
|
||||
saudeIndividual = saudeGeral.saude_individual.FirstOrDefault(x => Convert.ToByte(x.id) == enderecoMod);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
string msg =
|
||||
$"Módulo: {Dispositivo}" +
|
||||
$"\r\nID: {Mod_ID}" +
|
||||
$"\r\nStatus: {(Modulo?.Status ?? StatusModulo.Desconectado)}" +
|
||||
$"\r\nSaude: {(Modulo?.Saude ?? 0)}" +
|
||||
$"\r\nVersão: {Modulo?.Versao ?? "0"}" +
|
||||
$"\r\nErro: {Modulo?.Erros}";
|
||||
|
||||
if (saudeIndividual != null)
|
||||
{
|
||||
msg =
|
||||
$"Módulo: {Dispositivo}" +
|
||||
$"\r\nID: {Mod_ID}" +
|
||||
$"\r\nStatus: {saudeIndividual.status}" +
|
||||
$"\r\nSaude: {saudeIndividual.saude}" +
|
||||
$"\r\nVersão: {Modulo?.Versao ?? "0"}" +
|
||||
$"\r\nErro: {string.Join(Environment.NewLine, saudeIndividual.motivos)}";
|
||||
}
|
||||
|
||||
|
||||
CustomDialog.ShowDialog(
|
||||
"Detalhes",
|
||||
$"{msg}",
|
||||
Modulo != null && Modulo.Erro ? MessageBoxIcon.Error : Modulo != null && Modulo.Conectado ? MessageBoxIcon.Information : MessageBoxIcon.Exclamation,
|
||||
Modulo?.Status == StatusModulo.Falha ? MessageBoxIcon.Error : Modulo?.Status == StatusModulo.Operante ? MessageBoxIcon.Information : MessageBoxIcon.Exclamation,
|
||||
new Dictionary<(string, dynamic), Action>()
|
||||
{
|
||||
{ ("OK", null), () => { } },
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using AgroBase.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
|
@ -41,11 +40,11 @@ namespace AgroBase.Forms.Operacoes
|
|||
cmbTipoMovimento.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Controle.TipoMovimento;
|
||||
|
||||
flwCamerasSolo.Controls.Clear();
|
||||
for (int i = 0; i < Variaveis.OperacaoEmAndamento.CamerasSolo.Count(); i++)
|
||||
for (int i = 0; i < Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.Count(); i++)
|
||||
{
|
||||
Panel pnlCam = new Panel()
|
||||
{
|
||||
Name = "pnlCamSolo_" + Variaveis.OperacaoEmAndamento.CamerasSolo[i].Nome,
|
||||
Name = "pnlCamSolo_" + Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo[i].Name,
|
||||
Width = 290,
|
||||
Height = 166,
|
||||
BackgroundImageLayout = ImageLayout.Stretch,
|
||||
|
|
@ -54,8 +53,6 @@ namespace AgroBase.Forms.Operacoes
|
|||
flwCamerasSolo.Controls.Add(pnlCam);
|
||||
}
|
||||
|
||||
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraRua, pnlDeteccoesRua }, flwCamerasSolo.Controls.OfType<Panel>().ToList(), true);
|
||||
|
||||
chbPulverizador.Checked = Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico;
|
||||
chbMostrarGrade.Checked = KinectService.MostrarGrade;
|
||||
chbSonarAtivado.Checked = Variaveis.OperacaoEmAndamento.Controle.SonarAtivado;
|
||||
|
|
@ -64,7 +61,6 @@ namespace AgroBase.Forms.Operacoes
|
|||
PopularInformacoesGerais();
|
||||
InicializarMapa();
|
||||
PopularBicos();
|
||||
Variaveis.OperacaoEmAndamento.chartGraficos = chartGraficos;
|
||||
|
||||
tmrLeitura = new AsyncTaskTimerModel("tmrLeitura", tmrLeitura_Tick, 500, this);
|
||||
tmrLeitura.Start();
|
||||
|
|
@ -85,8 +81,6 @@ namespace AgroBase.Forms.Operacoes
|
|||
{
|
||||
tmrLeitura.Dispose();
|
||||
Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao());
|
||||
Variaveis.OperacaoEmAndamento.DesligarCameras();
|
||||
KinectService.picRGB = null;
|
||||
}
|
||||
|
||||
private void btnIniciarOperacao_Click(object sender, EventArgs e)
|
||||
|
|
@ -164,7 +158,7 @@ namespace AgroBase.Forms.Operacoes
|
|||
|
||||
lblDistanciaEsquerda.Text = "Distancia Esq: " + _Sensoriamento.Trajetoria.DistanciaEsquerda.ToString("0.00") + " cm";
|
||||
lblDistanciaDireita.Text = "Distancia Dir: " + _Sensoriamento.Trajetoria.DistanciaDireita.ToString("0.00") + " cm";
|
||||
lblGPSsatelites.Text = _Sensoriamento.Gps.NumeroSatelites.ToString() + " satélites";
|
||||
lblGPSsatelites.Text = _Sensoriamento.Gps.NumeroSatelites.valor.ToString() + " satélites";
|
||||
lblGPSFix.Text = _Sensoriamento.Gps.QualidadeFix.ToString();
|
||||
lblGPSprecisao.Text = "Precisão: " + _Sensoriamento.Gps.PrecisaoCm.ToString("0.00") + " cm";
|
||||
lblGPSvelocidade.Text = "Vel.: " + _Sensoriamento.Gps.Velocidade.ToString("0.00") + " km/h";
|
||||
|
|
@ -471,18 +465,18 @@ namespace AgroBase.Forms.Operacoes
|
|||
gridDados.Rows[5].Cells[1].Value = (_Sensoriamento.Bateria.TensaoInstantanea.ToString("0.00"));
|
||||
gridDados.Rows[6].Cells[1].Value = (_Sensoriamento.Bateria.CorrenteInstantanea.ToString("0.00"));
|
||||
gridDados.Rows[7].Cells[1].Value = (_Sensoriamento.Bateria.TempoEstimadoRestanteMinutos.ToString("0.00"));
|
||||
gridDados.Rows[8].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[9].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[10].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[11].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[12].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[13].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[14].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[15].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[16].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[17].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[18].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[19].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor).ToString("0.00");
|
||||
gridDados.Rows[8].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[9].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[10].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[11].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[12].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[13].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[14].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[15].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[16].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[17].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[18].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[19].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
|
||||
gridDados.Rows[20].Cells[1].Value = _Sensoriamento.Atuador.PercentualReservatorio.ToString("00.00");
|
||||
gridDados.Rows[21].Cells[1].Value = _Sensoriamento.Atuador.VolumeReservatorio.ToString("0.000");
|
||||
gridDados.Rows[22].Cells[1].Value = _Sensoriamento.Atuador.PressaoLinha.ToString("0.00");
|
||||
|
|
@ -594,18 +588,26 @@ namespace AgroBase.Forms.Operacoes
|
|||
{
|
||||
var Atuador = Variaveis.OperacaoEmAndamento.DispAtu.Dados;
|
||||
|
||||
AtuadorFuncoesGerais.DesenharAtuadores(pnlAtuadores, e, Atuador.BicosPulverizadores.Select(x => new AtuBicoSensoriamentoLogModel()
|
||||
{
|
||||
ID = x.ID,
|
||||
Atuacoes = x.Atuacoes,
|
||||
Atuado = x.ComandoAtuar,
|
||||
Comandar = x.Comandar,
|
||||
Inicializado = x.Inicializado,
|
||||
MediaNivelFluxo = x.MediaNivelFluxo,
|
||||
Posicao = x.Posicao,
|
||||
StatusBico = x.ValoresLeituras.FirstOrDefault(y => y.funcao == FuncoesPinout.EstadoLeitura).atual.valor,
|
||||
TempoAtuado = x.TempoAtuado,
|
||||
}).ToList(), Atuador.BombaPressurizadora.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura).atual.valor, Atuador.PressaoLinha, Atuador.TempoAtuado);
|
||||
bool ligado = Atuador.BombaPressurizadora.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura).atual.valor ?? false;
|
||||
AtuadorFuncoesGerais.DesenharAtuadores(
|
||||
pnlAtuadores,
|
||||
e,
|
||||
Atuador.BicosPulverizadores.Select(x => new AtuBicoSensoriamentoLogModel()
|
||||
{
|
||||
ID = x.ID,
|
||||
Atuacoes = x.Atuacoes,
|
||||
Atuado = x.ComandoAtuar,
|
||||
Comandar = x.Comandar,
|
||||
Inicializado = x.Inicializado,
|
||||
MediaNivelFluxo = x.MediaNivelFluxo,
|
||||
Posicao = x.Posicao,
|
||||
StatusBico = x.ValoresLeituras.FirstOrDefault(y => y.funcao == FuncoesPinout.EstadoLeitura).atual.valor ?? false,
|
||||
TempoAtuado = x.TempoAtuado,
|
||||
}).ToList(),
|
||||
ligado,
|
||||
Atuador.PressaoLinha,
|
||||
Atuador.TempoAtuado
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -41,14 +41,12 @@ namespace AgroBase.Forms.Operacoes
|
|||
tmrLeituras.Start();
|
||||
|
||||
AtualizarDispositivos();
|
||||
Variaveis.OperacaoEmAndamento.AtualizaListaCameras(new List<Panel>() { pnlCameraCaminho }, new List<Panel>() { pnlCameraSoloE, pnlCameraSoloD }, true);
|
||||
}
|
||||
|
||||
private void frmOperacaoMapaGPS_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
tmrLeituras.Dispose();
|
||||
Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao());
|
||||
Variaveis.OperacaoEmAndamento.DesligarCameras();
|
||||
}
|
||||
|
||||
private void AtualizarDispositivos()
|
||||
|
|
@ -57,7 +55,6 @@ namespace AgroBase.Forms.Operacoes
|
|||
chbDIRativo.Checked = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.DirMotor.Inicializado) ?? false;
|
||||
chbATUativo.Checked = Variaveis.OperacaoEmAndamento.DispAtu?.Dados.ConexaoAtiva ?? false;
|
||||
chbGPSativo.Checked = GPSService.PortaGPS?.IsOpen ?? false;
|
||||
Variaveis.OperacaoEmAndamento.chartGraficos = chartGraficos;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
@ -74,13 +71,13 @@ namespace AgroBase.Forms.Operacoes
|
|||
|
||||
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
|
||||
|
||||
var ultimaLeitura = Variaveis.OperacaoEmAndamento.CamerasSolo.OrderByDescending(x => x.Leitura.timestamp).FirstOrDefault();
|
||||
/*var ultimaLeitura = Variaveis.OperacaoEmAndamento.CamerasSolo.OrderByDescending(x => x.Leitura.timestamp).FirstOrDefault();
|
||||
if (ultimaLeitura != null)
|
||||
{
|
||||
lblUltimaLeituraSolo.Text = "Ultima Leitura Solo: " + FuncoesGlobais.TimestampToDate(ultimaLeitura.Leitura.timestamp);
|
||||
}
|
||||
|
||||
lblUltimaLeituraRua.Text = "Ultima Leitura Rua: " + FuncoesGlobais.TimestampToDate(Variaveis.OperacaoEmAndamento.CameraCaminho.Leitura.timestamp);
|
||||
lblUltimaLeituraRua.Text = "Ultima Leitura Rua: " + FuncoesGlobais.TimestampToDate(Variaveis.OperacaoEmAndamento.CameraCaminho.Leitura.timestamp);*/
|
||||
|
||||
btnCarregarMapa.Enabled = !Variaveis.OperacaoEmAndamento.Iniciado;
|
||||
|
||||
|
|
@ -182,14 +179,14 @@ namespace AgroBase.Forms.Operacoes
|
|||
Inicializado = x.Inicializado,
|
||||
MediaNivelFluxo = x.MediaNivelFluxo,
|
||||
Posicao = x.Posicao,
|
||||
StatusBico = x.ValoresLeituras.FirstOrDefault(y => y.funcao == FuncoesPinout.EstadoLeitura).atual.valor,
|
||||
StatusBico = x.ValoresLeituras.FirstOrDefault(y => y.funcao == FuncoesPinout.EstadoLeitura).atual.valor ?? false,
|
||||
TempoAtuado = x.TempoAtuado,
|
||||
}).ToList(), Atuador.BombaPressurizadora.ComandoAtuar, Atuador.PressaoLinha, Atuador.TempoAtuado);
|
||||
}
|
||||
|
||||
private void pnlCaminho_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
var cameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminho;
|
||||
/*var cameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminho;
|
||||
|
||||
Panel pnlContornos = (Panel)sender;
|
||||
if (cameraCaminho.Leitura == null) return;
|
||||
|
|
@ -259,7 +256,7 @@ namespace AgroBase.Forms.Operacoes
|
|||
|
||||
graphics.DrawLine(pen, start, end);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
private void pnlInclinacao_Paint(object sender, PaintEventArgs e)
|
||||
|
|
@ -277,7 +274,7 @@ namespace AgroBase.Forms.Operacoes
|
|||
try
|
||||
{
|
||||
//DesenharInclinacao((Panel)sender, e, (float)cameraCaminho.Angulo);
|
||||
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)(Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual.Leitura.obj.segmentacao.angulo_rua), 90);
|
||||
//FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)(Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual.Leitura.obj?.segmentacao?.angulo_rua ?? 0 ), 90);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1214,7 +1214,7 @@ namespace AgroBase.Forms.Operacoes
|
|||
null, //Variaveis.OperacaoEmAndamento.Mapa.TrajetoriaProjetada.FirstOrDefault(),
|
||||
new List<GPSModel>(LogsGPS.Take(LogsGPS.IndexOf(Log) + 1)),
|
||||
new List<List<GPSModel>>(),
|
||||
LogOpe.Controle.ControladorMPC?.ComandoAtual?.simulacao
|
||||
LogOpe.Controle.SimulacaoMPC
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -1455,8 +1455,8 @@ namespace AgroBase.Forms.Operacoes
|
|||
private void AtualizarInformacoesSonar()
|
||||
{
|
||||
var Log = LogsSonar.FirstOrDefault(x => x.Leitura.MomentoLog == MomentoAtual);
|
||||
txtEspacoLivreEsquerda.Text = Log.Leitura.obj.radar_2d.analise.corredor_perfil[1].esquerda_m.ToString("0.00");
|
||||
txtEspacoLivreDireita.Text = Log.Leitura.obj.radar_2d.analise.corredor_perfil[1].direita_m.ToString("0.00");
|
||||
//txtEspacoLivreEsquerda.Text = Log.Leitura.obj.radar_2d.analise.corredor_perfil[1].esquerda_m.ToString("0.00");
|
||||
//txtEspacoLivreDireita.Text = Log.Leitura.obj.radar_2d.analise.corredor_perfil[1].direita_m.ToString("0.00");
|
||||
txtDesvioNecessario.Text = Log.Resumo.DesvioNecessario ? "Sim" : "Não";
|
||||
txtDirecaoDesvio.Text = Log.Resumo.DirecaoDesvio.ToString();
|
||||
|
||||
|
|
@ -1496,7 +1496,7 @@ namespace AgroBase.Forms.Operacoes
|
|||
if (chbGrade.Checked)
|
||||
{
|
||||
picSonarRadar.Image?.Dispose();
|
||||
picSonarRadar.Image = Log.Leitura.obj.radar_2d.PlotarAnalsie((Bitmap)picSonarRadar.Image.Clone());
|
||||
//picSonarRadar.Image = Log.Leitura.obj.radar_2d.PlotarAnalsie((Bitmap)picSonarRadar.Image.Clone());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ namespace AgroBase.Forms.Sensoriamento
|
|||
Cameras = CameraService.ObterListaCameras();
|
||||
cmbCaminho.Items.Clear();
|
||||
cmbCaminho.Items.AddRange(Cameras.Values.ToArray());
|
||||
string IDrua = ((SensoriamentoModel)Disp.Dados).CameraID_Caminho;
|
||||
string IDrua = ((SensoriamentoModel)Disp.Dados).CameraCaminho.Id;
|
||||
if (Cameras.Any(x => x.Value == IDrua))
|
||||
{
|
||||
cmbCaminho.SelectedIndex = cmbCaminho.Items.IndexOf(IDrua);
|
||||
|
|
@ -80,11 +80,11 @@ namespace AgroBase.Forms.Sensoriamento
|
|||
cmbCaminho.Text = IDrua;
|
||||
}
|
||||
|
||||
var CamerasSolo = ((SensoriamentoModel)Disp.Dados).CameraID_Solo;
|
||||
var CamerasSolo = ((SensoriamentoModel)Disp.Dados).CamerasSolo;
|
||||
|
||||
cmbSoloEsq.Items.Clear();
|
||||
cmbSoloEsq.Items.AddRange(Cameras.Values.ToArray());
|
||||
string IDsoloE = CamerasSolo.Count() > 0 ? CamerasSolo[0] : "";
|
||||
string IDsoloE = CamerasSolo.Count() > 0 ? CamerasSolo[0].Id : "";
|
||||
if (Cameras.Any(x => x.Value == IDsoloE))
|
||||
{
|
||||
cmbSoloEsq.SelectedIndex = cmbSoloEsq.Items.IndexOf(IDsoloE);
|
||||
|
|
@ -96,7 +96,7 @@ namespace AgroBase.Forms.Sensoriamento
|
|||
|
||||
cmbSoloDir.Items.Clear();
|
||||
cmbSoloDir.Items.AddRange(Cameras.Values.ToArray());
|
||||
string IDsoloD = CamerasSolo.Count() > 1 ? CamerasSolo[1] : "";
|
||||
string IDsoloD = CamerasSolo.Count() > 1 ? CamerasSolo[1].Id : "";
|
||||
if (Cameras.Any(x => x.Value == IDsoloD))
|
||||
{
|
||||
cmbSoloDir.SelectedIndex = cmbSoloDir.Items.IndexOf(IDsoloD);
|
||||
|
|
@ -197,9 +197,9 @@ namespace AgroBase.Forms.Sensoriamento
|
|||
_Disp.Dados._EnderecoCAN_Rx = FuncoesGlobais.StringToHexByte(txtEnderecoCAN_Rx.Text);
|
||||
_Disp.Dados.RequisitarDados = chbRequisitarDados.Checked;
|
||||
_Disp.Dados.Sensores = Sensores.ToList();
|
||||
_Disp.Dados.CameraID_Caminho = cmbCaminho.Text;
|
||||
_Disp.Dados.CameraID_Solo.Clear();
|
||||
_Disp.Dados.CameraID_Solo.AddRange(new string[] { cmbSoloEsq.Text, cmbSoloDir.Text });
|
||||
_Disp.Dados.CameraCaminho.Id = cmbCaminho.Text;
|
||||
//_Disp.Dados.CamerasSolo.Clear();
|
||||
//_Disp.Dados.CameraID_Solo.AddRange(new string[] { cmbSoloEsq.Text, cmbSoloDir.Text });
|
||||
_Disp.SalvarParametros(_Disp.Dados);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,15 +27,18 @@ namespace AgroBase.Forms
|
|||
|
||||
ThreadPool.SetMinThreads(workerThreads: 50, completionPortThreads: 50);
|
||||
|
||||
//WifiService.IniciarRotinas();
|
||||
APIService.IniciarRotinas();
|
||||
|
||||
OAKCameraService.IniciarRotinas();
|
||||
|
||||
GeneralJoystick.IniciarRotinas();
|
||||
|
||||
VersionamentoService.IniciarRotinas();
|
||||
|
||||
PythonService.EncerrarProcessos();
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await VariaveisOperacao.Operadores.IniciarProcessamento(false);
|
||||
});
|
||||
}
|
||||
|
||||
private void frmInstancial_Shown(object sender, EventArgs e)
|
||||
|
|
@ -90,8 +93,6 @@ namespace AgroBase.Forms
|
|||
{
|
||||
Variaveis.Fechando = true;
|
||||
|
||||
await EthernetService.ConfigurarIP(false, false);
|
||||
|
||||
AsyncTaskTimerModel.PararTimers();
|
||||
|
||||
foreach (var Disp in Variaveis.DispositivosConectados)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
using AgroBase.Models;
|
||||
using AgroBase.Models.Operadores;
|
||||
using AgroBase.Services;
|
||||
using AgroBase.Services.Operadores;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
|
|
@ -16,7 +13,6 @@ namespace AgroBase.Forms
|
|||
{
|
||||
public partial class frmOperarioSonar : Form
|
||||
{
|
||||
VisualWorkerService visualWorker = new VisualWorkerService();
|
||||
AsyncTaskTimerModel tmrLeitura;
|
||||
|
||||
public frmOperarioSonar()
|
||||
|
|
@ -38,13 +34,12 @@ namespace AgroBase.Forms
|
|||
private async void frmOperarioSonar_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
tmrLeitura?.Stop();
|
||||
await visualWorker.Encerrar();
|
||||
}
|
||||
|
||||
private void AtualizarListaCameras()
|
||||
{
|
||||
cmbCameras.Items.Clear();
|
||||
cmbCameras.Items.AddRange(OAKCameraService.GetListaCameras().Skip(1).Select(x => x.Id).ToArray());
|
||||
cmbCameras.Items.AddRange(VariaveisOperacao.Operadores.CamerasConectadas.Select(x => x.Name).ToArray());
|
||||
cmbCameras.SelectedIndex = -1;
|
||||
}
|
||||
|
||||
|
|
@ -52,86 +47,87 @@ namespace AgroBase.Forms
|
|||
{
|
||||
if (!chbReqAutomatico.Checked) return;
|
||||
|
||||
btnLeituraIMU_Click(new object(), new EventArgs());
|
||||
/*btnLeituraIMU_Click(new object(), new EventArgs());
|
||||
EnviarComandoReqFrame(VisualWorkerCommandType.Get_RGB_Frame);
|
||||
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Heatmap_Frame);
|
||||
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Anomalia);
|
||||
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Solo);
|
||||
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Radar_2D);
|
||||
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica);
|
||||
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica);*/
|
||||
}
|
||||
|
||||
private void btnAtualizarCameras_Click(object sender, EventArgs e)
|
||||
private async void btnAtualizarCameras_Click(object sender, EventArgs e)
|
||||
{
|
||||
OAKCameraService.AtualizarListaCameras(true);
|
||||
VariaveisOperacao.Operadores.HealthWorker.AdicionarComandoNaFila(OperadoresModels.TipoComando.GetListaCameras);
|
||||
await VariaveisOperacao.Operadores.HealthWorker.AguardarNovosDados(OperadoresModels.TipoComando.GetListaCameras);
|
||||
AtualizarListaCameras();
|
||||
}
|
||||
|
||||
private async void btnIniciarProcessamento_Click(object sender, EventArgs e)
|
||||
{
|
||||
bool sucesso = await visualWorker.IniciarProcessamento(cmbCameras.SelectedIndex, Convert.ToInt32(txtDistanciaMax.Text), Convert.ToInt32(txtSessoesSolo.Text), Convert.ToInt32(txtPercentualSolo.Text), chbIniciarScript.Checked);
|
||||
AtualizarLabelLeitura($", Comando: Iniciar, Sucesso: {sucesso}");
|
||||
bool sucesso = false; // await VariaveisOperacao.Operadores.VisualWorker.IniciarCamera(Convert.ToInt32(txtDistanciaMax.Text), Convert.ToInt32(txtSessoesSolo.Text), Convert.ToInt32(txtPercentualSolo.Text));
|
||||
AtualizarLabelLeitura($", Comando: Configurar, Sucesso: {sucesso}");
|
||||
if (!sucesso)
|
||||
{
|
||||
MessageBox.Show("Selecione uma camera para iniciar o processamento!");
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Processamento iniciado com sucesso!");
|
||||
MessageBox.Show("Camera configurada com sucesso!");
|
||||
}
|
||||
}
|
||||
|
||||
private void EnviarComando(VisualWorkerCommandType cmd, dynamic payload = null)
|
||||
{
|
||||
bool sucesso = visualWorker.AdicionarComandoNaFila(cmd, payload);
|
||||
bool sucesso = VariaveisOperacao.Operadores.VisualWorker.AdicionarComandoNaFila(cmd, payload);
|
||||
AtualizarLabelLeitura($", Comando: {cmd.ToString()}, Sucesso: {sucesso}");
|
||||
}
|
||||
|
||||
private void AtualizarLabelLeitura(string texto)
|
||||
{
|
||||
lblUltimaLeitura.Text = $"Ultima Leitura em: {visualWorker.DadosLeitura.Leitura.MomentoLog.ToString("dd/MM/yyyy HH:mm:ss.fff")} {texto}";
|
||||
lblUltimaLeitura.Text = $"Ultima Leitura em: {VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.MomentoLog.ToString("dd/MM/yyyy HH:mm:ss.fff")} {texto}";
|
||||
}
|
||||
|
||||
private void btnPing_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComando(VisualWorkerCommandType.Ping);
|
||||
//EnviarComando(VisualWorkerCommandType.Ping);
|
||||
}
|
||||
|
||||
private void btnCalibrarGrades_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComando(VisualWorkerCommandType.Calibrar_Grades);
|
||||
//EnviarComando(VisualWorkerCommandType.Calibrar_Grades);
|
||||
}
|
||||
|
||||
private void btnLeituraRGB_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoReqFrame(VisualWorkerCommandType.Get_RGB_Frame);
|
||||
//EnviarComandoReqFrame(VisualWorkerCommandType.Get_RGB_Frame);
|
||||
}
|
||||
|
||||
private void btnLeituraHeatmap_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Heatmap_Frame);
|
||||
//EnviarComandoReqFrame(VisualWorkerCommandType.Get_Heatmap_Frame);
|
||||
}
|
||||
|
||||
private void btnLeituraRadar2D_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Radar_2D);
|
||||
//EnviarComandoReqFrame(VisualWorkerCommandType.Get_Radar_2D);
|
||||
}
|
||||
|
||||
private void btnLeituraSegmentacaoSemantica_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica);
|
||||
//EnviarComandoReqFrame(VisualWorkerCommandType.Get_Segmentacao_Semantica);
|
||||
}
|
||||
|
||||
private async void EnviarComandoReqFrame(VisualWorkerCommandType comando)
|
||||
{
|
||||
EnviarComando(comando);
|
||||
await visualWorker.AguardarNovosDados(comando);
|
||||
VisualWorkerMessageFrameModel frame =
|
||||
comando == VisualWorkerCommandType.Get_RGB_Frame ? visualWorker.DadosLeitura.Leitura.obj.rgb_frame :
|
||||
comando == VisualWorkerCommandType.Get_Heatmap_Frame ? visualWorker.DadosLeitura.Leitura.obj.heatmap_frame :
|
||||
comando == VisualWorkerCommandType.Get_Radar_2D ? visualWorker.DadosLeitura.Leitura.obj.radar_2d?.frame :
|
||||
comando == VisualWorkerCommandType.Get_Segmentacao_Semantica ? visualWorker.DadosLeitura.Leitura.obj.segmentacao?.mask_frame :
|
||||
new VisualWorkerMessageFrameModel();
|
||||
/*EnviarComando(comando);
|
||||
await VariaveisOperacao.Operadores.VisualWorker.AguardarNovosDados(comando);
|
||||
OAKCameraFrameModel frame =
|
||||
comando == VisualWorkerCommandType.Get_RGB_Frame ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.rgb_frame :
|
||||
comando == VisualWorkerCommandType.Get_Heatmap_Frame ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.heatmap_frame :
|
||||
comando == VisualWorkerCommandType.Get_Radar_2D ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d?.frame :
|
||||
comando == VisualWorkerCommandType.Get_Segmentacao_Semantica ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.segmentacao?.mask_frame :
|
||||
new OAKCameraFrameModel();
|
||||
PictureBox pic =
|
||||
comando == VisualWorkerCommandType.Get_RGB_Frame ? picRGB :
|
||||
comando == VisualWorkerCommandType.Get_Heatmap_Frame ? picHeatmap :
|
||||
|
|
@ -149,53 +145,53 @@ namespace AgroBase.Forms
|
|||
try { pic.Image = frame?.image; } catch { }
|
||||
lbl.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(frame?.timestamp ?? 0)}";
|
||||
|
||||
if (comando == VisualWorkerCommandType.Get_Radar_2D && visualWorker.DadosLeitura.Leitura.obj.radar_2d != null)
|
||||
if (comando == VisualWorkerCommandType.Get_Radar_2D && VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d != null)
|
||||
{
|
||||
pic.Image = visualWorker.DadosLeitura.Leitura.obj.radar_2d.PlotarAnalsie(frame.image);
|
||||
pic.Image = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d.PlotarAnalsie(frame.image);
|
||||
|
||||
PlotarGraficoPerfilCorredor(visualWorker.DadosLeitura.Leitura.obj.radar_2d.analise.corredor_perfil);
|
||||
}
|
||||
PlotarGraficoPerfilCorredor(VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d.analise.corredor_perfil);
|
||||
}*/
|
||||
}
|
||||
|
||||
private void btnReqStatusDispositivo_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComando(VisualWorkerCommandType.Get_Status_Dispositivo);
|
||||
//EnviarComando(VisualWorkerCommandType.Get_Status_Dispositivo);
|
||||
}
|
||||
|
||||
private void btnReqAnomalias_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Anomalia);
|
||||
//EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Anomalia);
|
||||
}
|
||||
|
||||
private void btnReqSolo_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Solo);
|
||||
//EnviarComandoAnalise(VisualWorkerCommandType.Get_Analise_Solo);
|
||||
}
|
||||
|
||||
private async void btnLeituraIMU_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComando(VisualWorkerCommandType.Get_IMU_Data);
|
||||
await visualWorker.AguardarNovosDados(VisualWorkerCommandType.Get_IMU_Data);
|
||||
/*EnviarComando(VisualWorkerCommandType.Get_IMU_Data);
|
||||
await VariaveisOperacao.Operadores.VisualWorker.AguardarNovosDados(VisualWorkerCommandType.Get_IMU_Data);
|
||||
pnlInclinacao.Invalidate();
|
||||
lblLeituraIMU.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(visualWorker.DadosLeitura.Leitura.obj.imu?.timestamp ?? 0)}";
|
||||
lblLeituraIMU.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.imu?.timestamp ?? 0)}";*/
|
||||
}
|
||||
|
||||
private async void EnviarComandoAnalise(VisualWorkerCommandType comando)
|
||||
{
|
||||
EnviarComando(comando, new { velocidade_ms = txtVelocidade.Text.Replace(",", "."), distancia_max = txtDistanciaMax.Text.Replace(",", "."), largura_min = txtSessoesSolo.Text.Replace(",", "."), altura_min = txtPercentualSolo.Text.Replace(",", ".") });
|
||||
await visualWorker.AguardarNovosDados(comando);
|
||||
await VariaveisOperacao.Operadores.VisualWorker.AguardarNovosDados(comando);
|
||||
AtualizarDadosAnalise(comando);
|
||||
}
|
||||
|
||||
private void AtualizarDadosAnalise(VisualWorkerCommandType comando)
|
||||
{
|
||||
VisualWorkerMessageAnaliseModel analise =
|
||||
comando == VisualWorkerCommandType.Get_Analise_Anomalia ? visualWorker.DadosLeitura.Leitura.obj.analise_anomalias :
|
||||
comando == VisualWorkerCommandType.Get_Analise_Solo ? visualWorker.DadosLeitura.Leitura.obj.analise_solo :
|
||||
/*VisualWorkerMessageAnaliseModel analise =
|
||||
comando == VisualWorkerCommandType.Get_Analise_Anomalia ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.analise_anomalias :
|
||||
comando == VisualWorkerCommandType.Get_Analise_Solo ? VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.analise_solo :
|
||||
new VisualWorkerMessageAnaliseModel();
|
||||
|
||||
lblLeituraDebug.Text = $"Leitura em: {FuncoesGlobais.TimestampToDate(analise?.timestamp ?? 0)}";
|
||||
VisualWorkerMessageFrameModel frame = visualWorker.DadosLeitura.Leitura.obj.heatmap_frame;
|
||||
OAKCameraFrameModel frame = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.heatmap_frame;
|
||||
picDebug.Image?.Dispose();
|
||||
picDebug.Image = analise.PlotarAnalise(frame);
|
||||
|
||||
|
|
@ -212,7 +208,7 @@ namespace AgroBase.Forms
|
|||
PlotarGraficoPerfilSolo(analise.solo?.perfil ?? new List<double>());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
void ConfigurarGridDeteccoes(DataGridView dgv)
|
||||
|
|
@ -360,9 +356,9 @@ namespace AgroBase.Forms
|
|||
|
||||
private void pnlInclinacao_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
Panel _pnlInclinacao = sender as Panel;
|
||||
double AnguloX = visualWorker.DadosLeitura.Leitura.obj?.imu?.roll ?? 0;
|
||||
double AnguloY = visualWorker.DadosLeitura.Leitura.obj?.imu?.pitch ?? 0;
|
||||
/*Panel _pnlInclinacao = sender as Panel;
|
||||
double AnguloX = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj?.imu?.roll ?? 0;
|
||||
double AnguloY = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj?.imu?.pitch ?? 0;
|
||||
|
||||
Graphics g = e.Graphics;
|
||||
int centerX = _pnlInclinacao.Width / 2;
|
||||
|
|
@ -417,7 +413,7 @@ namespace AgroBase.Forms
|
|||
|
||||
// Desenhar o círculo
|
||||
Brush brush = new SolidBrush(Color.Red);
|
||||
g.FillEllipse(brush, circlePosX - radius, circlePosY - radius, radius * 2, radius * 2);
|
||||
g.FillEllipse(brush, circlePosX - radius, circlePosY - radius, radius * 2, radius * 2);*/
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -35,21 +35,8 @@ namespace AgroBase
|
|||
this.lblStripErro = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.lblStatusConexao = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.pnlLateral = new System.Windows.Forms.Panel();
|
||||
this.lblCodErro = new System.Windows.Forms.Label();
|
||||
this.txtCodErro = new System.Windows.Forms.TextBox();
|
||||
this.chbConexaoautomatica = new System.Windows.Forms.CheckBox();
|
||||
this.gpbDispositivos = new System.Windows.Forms.GroupBox();
|
||||
this.lstDisponiveis = new System.Windows.Forms.ListView();
|
||||
this.btnRemover = new System.Windows.Forms.Button();
|
||||
this.lblDispositivos = new System.Windows.Forms.Label();
|
||||
this.cmbDispositivos = new System.Windows.Forms.ComboBox();
|
||||
this.gpbNovoDispositivo = new System.Windows.Forms.GroupBox();
|
||||
this.cmbTipos = new System.Windows.Forms.ComboBox();
|
||||
this.btnSalvar = new System.Windows.Forms.Button();
|
||||
this.txtDescricao = new System.Windows.Forms.TextBox();
|
||||
this.lblDescricao = new System.Windows.Forms.Label();
|
||||
this.lblTipo = new System.Windows.Forms.Label();
|
||||
this.btnNovoDispositivo = new System.Windows.Forms.Button();
|
||||
this.generalStrip = new System.Windows.Forms.StatusStrip();
|
||||
this.lblStripJoystick = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.lblStripJoystickComando = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
|
|
@ -79,6 +66,7 @@ namespace AgroBase
|
|||
this.gpbControleDirecional = new System.Windows.Forms.GroupBox();
|
||||
this.gpbAtalhos = new System.Windows.Forms.GroupBox();
|
||||
this.pnlAtalhos = new System.Windows.Forms.Panel();
|
||||
this.btnVisualWorker = new System.Windows.Forms.Button();
|
||||
this.btnTreinamentoIA = new System.Windows.Forms.Button();
|
||||
this.btnOID = new System.Windows.Forms.Button();
|
||||
this.btnEthernet = new System.Windows.Forms.Button();
|
||||
|
|
@ -105,12 +93,10 @@ namespace AgroBase
|
|||
this.btnForcarAtualizacao = new System.Windows.Forms.Button();
|
||||
this.clbRotinas = new System.Windows.Forms.CheckedListBox();
|
||||
this.btnAtualizarRotinas = new System.Windows.Forms.Button();
|
||||
this.btnVisualWorker = new System.Windows.Forms.Button();
|
||||
this.gpbAcoes.SuspendLayout();
|
||||
this.erroStrip.SuspendLayout();
|
||||
this.pnlLateral.SuspendLayout();
|
||||
this.gpbDispositivos.SuspendLayout();
|
||||
this.gpbNovoDispositivo.SuspendLayout();
|
||||
this.generalStrip.SuspendLayout();
|
||||
this.gpbMovimentacao.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.trkKmh)).BeginInit();
|
||||
|
|
@ -166,15 +152,7 @@ namespace AgroBase
|
|||
// pnlLateral
|
||||
//
|
||||
this.pnlLateral.AutoScroll = true;
|
||||
this.pnlLateral.Controls.Add(this.lblCodErro);
|
||||
this.pnlLateral.Controls.Add(this.txtCodErro);
|
||||
this.pnlLateral.Controls.Add(this.chbConexaoautomatica);
|
||||
this.pnlLateral.Controls.Add(this.gpbDispositivos);
|
||||
this.pnlLateral.Controls.Add(this.btnRemover);
|
||||
this.pnlLateral.Controls.Add(this.lblDispositivos);
|
||||
this.pnlLateral.Controls.Add(this.cmbDispositivos);
|
||||
this.pnlLateral.Controls.Add(this.gpbNovoDispositivo);
|
||||
this.pnlLateral.Controls.Add(this.btnNovoDispositivo);
|
||||
this.pnlLateral.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlLateral.Location = new System.Drawing.Point(2, 15);
|
||||
this.pnlLateral.Margin = new System.Windows.Forms.Padding(2);
|
||||
|
|
@ -182,44 +160,16 @@ namespace AgroBase
|
|||
this.pnlLateral.Size = new System.Drawing.Size(615, 617);
|
||||
this.pnlLateral.TabIndex = 0;
|
||||
//
|
||||
// lblCodErro
|
||||
//
|
||||
this.lblCodErro.AutoSize = true;
|
||||
this.lblCodErro.Location = new System.Drawing.Point(376, 32);
|
||||
this.lblCodErro.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.lblCodErro.Name = "lblCodErro";
|
||||
this.lblCodErro.Size = new System.Drawing.Size(77, 13);
|
||||
this.lblCodErro.TabIndex = 23;
|
||||
this.lblCodErro.Text = "Código de Erro";
|
||||
//
|
||||
// txtCodErro
|
||||
//
|
||||
this.txtCodErro.Location = new System.Drawing.Point(379, 48);
|
||||
this.txtCodErro.Name = "txtCodErro";
|
||||
this.txtCodErro.Size = new System.Drawing.Size(210, 20);
|
||||
this.txtCodErro.TabIndex = 22;
|
||||
this.txtCodErro.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtCodErro_KeyDown);
|
||||
//
|
||||
// chbConexaoautomatica
|
||||
//
|
||||
this.chbConexaoautomatica.AutoSize = true;
|
||||
this.chbConexaoautomatica.Location = new System.Drawing.Point(172, 28);
|
||||
this.chbConexaoautomatica.Name = "chbConexaoautomatica";
|
||||
this.chbConexaoautomatica.Size = new System.Drawing.Size(123, 17);
|
||||
this.chbConexaoautomatica.TabIndex = 21;
|
||||
this.chbConexaoautomatica.Text = "Conexão automática";
|
||||
this.chbConexaoautomatica.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// gpbDispositivos
|
||||
//
|
||||
this.gpbDispositivos.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.gpbDispositivos.Controls.Add(this.lstDisponiveis);
|
||||
this.gpbDispositivos.Location = new System.Drawing.Point(161, 78);
|
||||
this.gpbDispositivos.Location = new System.Drawing.Point(19, 5);
|
||||
this.gpbDispositivos.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.gpbDispositivos.Name = "gpbDispositivos";
|
||||
this.gpbDispositivos.Padding = new System.Windows.Forms.Padding(2);
|
||||
this.gpbDispositivos.Size = new System.Drawing.Size(428, 133);
|
||||
this.gpbDispositivos.Size = new System.Drawing.Size(569, 133);
|
||||
this.gpbDispositivos.TabIndex = 3;
|
||||
this.gpbDispositivos.TabStop = false;
|
||||
this.gpbDispositivos.Text = "Dispositivos disponíveis";
|
||||
|
|
@ -232,120 +182,11 @@ namespace AgroBase
|
|||
this.lstDisponiveis.Location = new System.Drawing.Point(11, 20);
|
||||
this.lstDisponiveis.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.lstDisponiveis.Name = "lstDisponiveis";
|
||||
this.lstDisponiveis.Size = new System.Drawing.Size(413, 102);
|
||||
this.lstDisponiveis.Size = new System.Drawing.Size(554, 102);
|
||||
this.lstDisponiveis.TabIndex = 0;
|
||||
this.lstDisponiveis.UseCompatibleStateImageBehavior = false;
|
||||
this.lstDisponiveis.View = System.Windows.Forms.View.Tile;
|
||||
//
|
||||
// btnRemover
|
||||
//
|
||||
this.btnRemover.Location = new System.Drawing.Point(87, 50);
|
||||
this.btnRemover.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.btnRemover.Name = "btnRemover";
|
||||
this.btnRemover.Size = new System.Drawing.Size(62, 23);
|
||||
this.btnRemover.TabIndex = 12;
|
||||
this.btnRemover.Text = "Remover";
|
||||
this.btnRemover.UseVisualStyleBackColor = true;
|
||||
this.btnRemover.Click += new System.EventHandler(this.btnRemover_Click);
|
||||
//
|
||||
// lblDispositivos
|
||||
//
|
||||
this.lblDispositivos.AutoSize = true;
|
||||
this.lblDispositivos.Location = new System.Drawing.Point(20, 10);
|
||||
this.lblDispositivos.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.lblDispositivos.Name = "lblDispositivos";
|
||||
this.lblDispositivos.Size = new System.Drawing.Size(63, 13);
|
||||
this.lblDispositivos.TabIndex = 11;
|
||||
this.lblDispositivos.Text = "Dispositivos";
|
||||
//
|
||||
// cmbDispositivos
|
||||
//
|
||||
this.cmbDispositivos.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbDispositivos.FormattingEnabled = true;
|
||||
this.cmbDispositivos.Location = new System.Drawing.Point(22, 26);
|
||||
this.cmbDispositivos.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.cmbDispositivos.Name = "cmbDispositivos";
|
||||
this.cmbDispositivos.Size = new System.Drawing.Size(128, 21);
|
||||
this.cmbDispositivos.TabIndex = 10;
|
||||
this.cmbDispositivos.SelectedIndexChanged += new System.EventHandler(this.cmbDispositivos_SelectedIndexChanged);
|
||||
//
|
||||
// gpbNovoDispositivo
|
||||
//
|
||||
this.gpbNovoDispositivo.Controls.Add(this.cmbTipos);
|
||||
this.gpbNovoDispositivo.Controls.Add(this.btnSalvar);
|
||||
this.gpbNovoDispositivo.Controls.Add(this.txtDescricao);
|
||||
this.gpbNovoDispositivo.Controls.Add(this.lblDescricao);
|
||||
this.gpbNovoDispositivo.Controls.Add(this.lblTipo);
|
||||
this.gpbNovoDispositivo.Enabled = false;
|
||||
this.gpbNovoDispositivo.Location = new System.Drawing.Point(16, 78);
|
||||
this.gpbNovoDispositivo.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.gpbNovoDispositivo.Name = "gpbNovoDispositivo";
|
||||
this.gpbNovoDispositivo.Padding = new System.Windows.Forms.Padding(2);
|
||||
this.gpbNovoDispositivo.Size = new System.Drawing.Size(141, 133);
|
||||
this.gpbNovoDispositivo.TabIndex = 9;
|
||||
this.gpbNovoDispositivo.TabStop = false;
|
||||
this.gpbNovoDispositivo.Text = "Novo Dispositivo";
|
||||
//
|
||||
// cmbTipos
|
||||
//
|
||||
this.cmbTipos.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbTipos.FormattingEnabled = true;
|
||||
this.cmbTipos.Location = new System.Drawing.Point(7, 37);
|
||||
this.cmbTipos.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.cmbTipos.Name = "cmbTipos";
|
||||
this.cmbTipos.Size = new System.Drawing.Size(128, 21);
|
||||
this.cmbTipos.TabIndex = 2;
|
||||
//
|
||||
// btnSalvar
|
||||
//
|
||||
this.btnSalvar.Location = new System.Drawing.Point(7, 101);
|
||||
this.btnSalvar.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.btnSalvar.Name = "btnSalvar";
|
||||
this.btnSalvar.Size = new System.Drawing.Size(127, 20);
|
||||
this.btnSalvar.TabIndex = 9;
|
||||
this.btnSalvar.Text = "Salvar";
|
||||
this.btnSalvar.UseVisualStyleBackColor = true;
|
||||
this.btnSalvar.Click += new System.EventHandler(this.btnSalvar_Click);
|
||||
//
|
||||
// txtDescricao
|
||||
//
|
||||
this.txtDescricao.Location = new System.Drawing.Point(7, 76);
|
||||
this.txtDescricao.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.txtDescricao.Name = "txtDescricao";
|
||||
this.txtDescricao.Size = new System.Drawing.Size(128, 20);
|
||||
this.txtDescricao.TabIndex = 3;
|
||||
//
|
||||
// lblDescricao
|
||||
//
|
||||
this.lblDescricao.AutoSize = true;
|
||||
this.lblDescricao.Location = new System.Drawing.Point(4, 60);
|
||||
this.lblDescricao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.lblDescricao.Name = "lblDescricao";
|
||||
this.lblDescricao.Size = new System.Drawing.Size(55, 13);
|
||||
this.lblDescricao.TabIndex = 2;
|
||||
this.lblDescricao.Text = "Descrição";
|
||||
//
|
||||
// lblTipo
|
||||
//
|
||||
this.lblTipo.AutoSize = true;
|
||||
this.lblTipo.Location = new System.Drawing.Point(4, 20);
|
||||
this.lblTipo.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.lblTipo.Name = "lblTipo";
|
||||
this.lblTipo.Size = new System.Drawing.Size(28, 13);
|
||||
this.lblTipo.TabIndex = 0;
|
||||
this.lblTipo.Text = "Tipo";
|
||||
//
|
||||
// btnNovoDispositivo
|
||||
//
|
||||
this.btnNovoDispositivo.Location = new System.Drawing.Point(22, 50);
|
||||
this.btnNovoDispositivo.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.btnNovoDispositivo.Name = "btnNovoDispositivo";
|
||||
this.btnNovoDispositivo.Size = new System.Drawing.Size(60, 23);
|
||||
this.btnNovoDispositivo.TabIndex = 8;
|
||||
this.btnNovoDispositivo.Text = "Novo dispositivo";
|
||||
this.btnNovoDispositivo.UseVisualStyleBackColor = true;
|
||||
this.btnNovoDispositivo.Click += new System.EventHandler(this.btnNovoDispositivo_Click);
|
||||
//
|
||||
// generalStrip
|
||||
//
|
||||
this.generalStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||
|
|
@ -380,6 +221,7 @@ namespace AgroBase
|
|||
this.lblStripOperacaoLiberada.Name = "lblStripOperacaoLiberada";
|
||||
this.lblStripOperacaoLiberada.Size = new System.Drawing.Size(134, 17);
|
||||
this.lblStripOperacaoLiberada.Text = "Operação Liberada: Não";
|
||||
this.lblStripOperacaoLiberada.Click += new System.EventHandler(this.lblStripOperacaoLiberada_Click);
|
||||
//
|
||||
// lblStripOperacaoStatus
|
||||
//
|
||||
|
|
@ -673,6 +515,17 @@ namespace AgroBase
|
|||
this.pnlAtalhos.Size = new System.Drawing.Size(112, 286);
|
||||
this.pnlAtalhos.TabIndex = 0;
|
||||
//
|
||||
// btnVisualWorker
|
||||
//
|
||||
this.btnVisualWorker.Location = new System.Drawing.Point(5, 463);
|
||||
this.btnVisualWorker.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.btnVisualWorker.Name = "btnVisualWorker";
|
||||
this.btnVisualWorker.Size = new System.Drawing.Size(84, 20);
|
||||
this.btnVisualWorker.TabIndex = 33;
|
||||
this.btnVisualWorker.Text = "Visual Worker";
|
||||
this.btnVisualWorker.UseVisualStyleBackColor = true;
|
||||
this.btnVisualWorker.Click += new System.EventHandler(this.btnVisualWorker_Click);
|
||||
//
|
||||
// btnTreinamentoIA
|
||||
//
|
||||
this.btnTreinamentoIA.Location = new System.Drawing.Point(5, 439);
|
||||
|
|
@ -963,17 +816,6 @@ namespace AgroBase
|
|||
this.btnAtualizarRotinas.UseVisualStyleBackColor = true;
|
||||
this.btnAtualizarRotinas.Click += new System.EventHandler(this.btnAtualizarRotinas_Click);
|
||||
//
|
||||
// btnVisualWorker
|
||||
//
|
||||
this.btnVisualWorker.Location = new System.Drawing.Point(5, 463);
|
||||
this.btnVisualWorker.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.btnVisualWorker.Name = "btnVisualWorker";
|
||||
this.btnVisualWorker.Size = new System.Drawing.Size(84, 20);
|
||||
this.btnVisualWorker.TabIndex = 33;
|
||||
this.btnVisualWorker.Text = "Visual Worker";
|
||||
this.btnVisualWorker.UseVisualStyleBackColor = true;
|
||||
this.btnVisualWorker.Click += new System.EventHandler(this.btnVisualWorker_Click);
|
||||
//
|
||||
// frmPrincipal
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
|
|
@ -1003,10 +845,7 @@ namespace AgroBase
|
|||
this.erroStrip.ResumeLayout(false);
|
||||
this.erroStrip.PerformLayout();
|
||||
this.pnlLateral.ResumeLayout(false);
|
||||
this.pnlLateral.PerformLayout();
|
||||
this.gpbDispositivos.ResumeLayout(false);
|
||||
this.gpbNovoDispositivo.ResumeLayout(false);
|
||||
this.gpbNovoDispositivo.PerformLayout();
|
||||
this.generalStrip.ResumeLayout(false);
|
||||
this.generalStrip.PerformLayout();
|
||||
this.gpbMovimentacao.ResumeLayout(false);
|
||||
|
|
@ -1030,14 +869,6 @@ namespace AgroBase
|
|||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox gpbAcoes;
|
||||
private System.Windows.Forms.Button btnNovoDispositivo;
|
||||
private System.Windows.Forms.GroupBox gpbNovoDispositivo;
|
||||
private System.Windows.Forms.Button btnSalvar;
|
||||
private System.Windows.Forms.TextBox txtDescricao;
|
||||
private System.Windows.Forms.Label lblDescricao;
|
||||
private System.Windows.Forms.Label lblTipo;
|
||||
private System.Windows.Forms.Button btnRemover;
|
||||
private System.Windows.Forms.Label lblDispositivos;
|
||||
private System.Windows.Forms.StatusStrip erroStrip;
|
||||
private System.Windows.Forms.StatusStrip generalStrip;
|
||||
private System.Windows.Forms.GroupBox gpbMovimentacao;
|
||||
|
|
@ -1048,7 +879,6 @@ namespace AgroBase
|
|||
private System.Windows.Forms.Button btnVer;
|
||||
private System.Windows.Forms.GroupBox gpbDispositivos;
|
||||
public System.Windows.Forms.ListView lstDisponiveis;
|
||||
private System.Windows.Forms.ComboBox cmbTipos;
|
||||
private System.Windows.Forms.Label lblVelocidade;
|
||||
private System.Windows.Forms.TrackBar tkbVelocidade;
|
||||
private System.Windows.Forms.TrackBar tkbAngulo;
|
||||
|
|
@ -1058,7 +888,6 @@ namespace AgroBase
|
|||
public System.Windows.Forms.TrackBar trkRPM;
|
||||
private System.Windows.Forms.ToolStripStatusLabel lblStripJoystickComando;
|
||||
public System.Windows.Forms.ComboBox cmbJoysticks;
|
||||
public System.Windows.Forms.ComboBox cmbDispositivos;
|
||||
private System.Windows.Forms.Button btnAcompanhamento;
|
||||
private System.Windows.Forms.Button btnAtuCamera;
|
||||
private System.Windows.Forms.Button btnMapas;
|
||||
|
|
@ -1080,7 +909,6 @@ namespace AgroBase
|
|||
private System.Windows.Forms.Button btnContornos;
|
||||
public System.Windows.Forms.ToolStripStatusLabel lblStripMqtt;
|
||||
public System.Windows.Forms.Panel pnlLateral;
|
||||
public System.Windows.Forms.CheckBox chbConexaoautomatica;
|
||||
public System.Windows.Forms.CheckBox chbDebugMode;
|
||||
private System.Windows.Forms.Button btnAtuCalibragem;
|
||||
private System.Windows.Forms.Button btnSonar;
|
||||
|
|
@ -1100,8 +928,6 @@ namespace AgroBase
|
|||
private System.Windows.Forms.Button btnAtualizarRotinas;
|
||||
public System.Windows.Forms.ProgressBar pgbAtualizacaoArquivos;
|
||||
public System.Windows.Forms.ToolStripStatusLabel lblStripWifi;
|
||||
private System.Windows.Forms.Label lblCodErro;
|
||||
private System.Windows.Forms.TextBox txtCodErro;
|
||||
private System.Windows.Forms.Button btnOID;
|
||||
private System.Windows.Forms.Button btnTreinamentoIA;
|
||||
private System.Windows.Forms.Button btnVisualWorker;
|
||||
|
|
|
|||
|
|
@ -93,57 +93,6 @@ namespace AgroBase
|
|||
|
||||
#region DISPOSITIVOS
|
||||
|
||||
private void btnNovoDispositivo_Click(object sender, EventArgs e)
|
||||
{
|
||||
gpbNovoDispositivo.Enabled = true;
|
||||
cmbTipos.Items.Clear();
|
||||
cmbTipos.Items.AddRange(Enum.GetNames(typeof(T_Code)));
|
||||
txtDescricao.Text = "";
|
||||
cmbTipos.Focus();
|
||||
}
|
||||
|
||||
private void btnSalvar_Click(object sender, EventArgs e)
|
||||
{
|
||||
T_Code tipoDispositivo = (T_Code)Enum.Parse(typeof(T_Code), cmbTipos.Text);
|
||||
IDispositivosService dispositivoService = DispositivosServiceFactory.CreateDispositivoService(
|
||||
tipoDispositivo,
|
||||
cmbTipos.Text,
|
||||
txtDescricao.Text
|
||||
);
|
||||
|
||||
Variaveis.DispositivosConectados.Add(dispositivoService);
|
||||
|
||||
Control controle = dispositivoService.InstanciarDispositivo(Variaveis.DispositivosConectados.Count - 1);
|
||||
controle.Location = new System.Drawing.Point(controle.Location.X, controle.Location.Y + (cmbDispositivos.Items.Count * 50));
|
||||
|
||||
pnlLateral.Controls.Add(controle);
|
||||
cmbDispositivos.Items.Add(dispositivoService._Descricao);
|
||||
gpbNovoDispositivo.Enabled = false;
|
||||
cmbDispositivos.SelectedIndex = Variaveis.DispositivosConectados.Count - 1;
|
||||
}
|
||||
|
||||
private void btnRemover_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (cmbDispositivos.Items.Count > 0)
|
||||
{
|
||||
pnlLateral.Controls.Remove(Variaveis.DispositivosConectados[cmbDispositivos.SelectedIndex].gpbItem);
|
||||
Variaveis.DispositivosConectados.RemoveAt(cmbDispositivos.SelectedIndex);
|
||||
cmbDispositivos.Items.RemoveAt(cmbDispositivos.SelectedIndex);
|
||||
cmbDispositivos.SelectedIndex = Variaveis.DispositivosConectados.Count - 1;
|
||||
int idx = 0;
|
||||
Variaveis.DispositivosConectados.ForEach(Dispositivo =>
|
||||
{
|
||||
Dispositivo.AtualizaIndex(idx);
|
||||
idx++;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void cmbDispositivos_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
btnJoyAtt_Click(sender, e);
|
||||
}
|
||||
|
||||
private async Task tmrLoopDispositivos_Tick()
|
||||
{
|
||||
AtualizaDadosGerais();
|
||||
|
|
@ -160,7 +109,7 @@ namespace AgroBase
|
|||
|
||||
public void AtualizaDadosGerais()
|
||||
{
|
||||
if (Variaveis.DispositivosConectados.Any() && pnlLateral.Controls.Count == 9)
|
||||
if (Variaveis.DispositivosConectados.Count() == 3 && pnlLateral.Controls.Count == 1)
|
||||
{
|
||||
SerialService.DispositivosConexaoInicial.ForEach(Dispositivo =>
|
||||
{
|
||||
|
|
@ -171,7 +120,6 @@ namespace AgroBase
|
|||
Control controle = dispositivoService.InstanciarDispositivo(idx);
|
||||
controle.Location = new Point(controle.Location.X, controle.Location.Y + (idx * 50));
|
||||
pnlLateral.Controls.Add(controle);
|
||||
cmbDispositivos.Items.Add(dispositivoService._Descricao);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -186,13 +134,13 @@ namespace AgroBase
|
|||
.Select(x => new ListViewItem()
|
||||
{
|
||||
Text = x.FirstOrDefault().Endereco + " - " +
|
||||
Enum.GetName(typeof(T_Code), x.Key) + " v" +
|
||||
x.Key + " v" +
|
||||
x.FirstOrDefault().Versao +
|
||||
(SerialService.DispositivosMultiplos.Contains(x.FirstOrDefault().Dispositivo)
|
||||
? (" (" + string.Join(", ", x.Where(y => y.Conectado).Select(y => y.Mod_ID)) + ")")
|
||||
? (" (" + string.Join(", ", x.Where(y => y.Status != StatusModulo.Desconectado).Select(y => y.Mod_ID)) + ")")
|
||||
: "") +
|
||||
" - " +
|
||||
(x.Any(y => y.Conectado) ? "Conectado" : "Desconectado")
|
||||
(x.FirstOrDefault()?.Status ?? StatusModulo.Desconectado)
|
||||
})
|
||||
.ToDictionary(item => item.Text, item => item);
|
||||
|
||||
|
|
@ -508,16 +456,10 @@ namespace AgroBase
|
|||
|
||||
#endregion
|
||||
|
||||
private void txtCodErro_KeyDown(object sender, KeyEventArgs e)
|
||||
private void lblStripOperacaoLiberada_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Enter && string.IsNullOrEmpty(txtCodErro.Text))
|
||||
{
|
||||
ulong cod = ulong.Parse(txtCodErro.Text);
|
||||
string desc = OperacaoModel.DescricaoCodigoFalha(cod);
|
||||
MessageBox.Show(desc);
|
||||
}
|
||||
MessageBox.Show($"{Variaveis.OperacaoEmAndamento.ErroOperacaoLiberada}", "Status da Operacao", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@ namespace AgroBase.Forms
|
|||
|
||||
Queue<double> historicoAngulosControle = new Queue<double>();
|
||||
|
||||
List<MPCSimulacaoModel> simulacao = new List<MPCSimulacaoModel>();
|
||||
|
||||
public frmSimulacaoMapaGPS()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
|
@ -56,11 +58,6 @@ namespace AgroBase.Forms
|
|||
{
|
||||
pnlMapa = pnlMapa,
|
||||
};
|
||||
//Variaveis.OperacaoEmAndamento.Sensoriamento.SonarFrontal = new SonarModel(picSonar);
|
||||
|
||||
txtKd.Text = Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Kd.ToString();
|
||||
txtKi.Text = Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Ki.ToString();
|
||||
txtKp.Text = Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Kp.ToString();
|
||||
}
|
||||
|
||||
private void frmSimulacaoMapaGPS_FormClosing(object sender, FormClosingEventArgs e)
|
||||
|
|
@ -119,15 +116,15 @@ namespace AgroBase.Forms
|
|||
lblPercentualOperacao.Text = "Operação: " + _Sensoriamento.Trajetoria.ProgressoTrajeto.ToString("0.00") + "%";
|
||||
|
||||
|
||||
txtKd.Text = _Sensoriamento.Controle.PIDdirecional.Kd.ToString();
|
||||
txtKi.Text = _Sensoriamento.Controle.PIDdirecional.Ki.ToString();
|
||||
txtKp.Text = _Sensoriamento.Controle.PIDdirecional.Kp.ToString();
|
||||
|
||||
|
||||
pnlOrientacaoTrajeto.Invalidate();
|
||||
pnlAnguloControle.Invalidate();
|
||||
pnlOrientacaoCarro.Invalidate();
|
||||
|
||||
if (_Sensoriamento.Controle.SimulacaoMPC != null)
|
||||
{
|
||||
simulacao = _Sensoriamento.Controle.SimulacaoMPC;
|
||||
}
|
||||
|
||||
if (_Trajetoria?.CorredorAtual != null)
|
||||
{
|
||||
MapaDinamico.AtualizarDados(
|
||||
|
|
@ -139,7 +136,7 @@ namespace AgroBase.Forms
|
|||
_Trajetoria.CorredorAtual.Pontos,
|
||||
Variaveis.OperacaoEmAndamento.GPSTrajetoria,
|
||||
_Trajetoria.RuasPlantacao,
|
||||
_Sensoriamento.Controle.ControladorMPC?.ComandoAtual?.simulacao
|
||||
simulacao
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -389,10 +386,6 @@ namespace AgroBase.Forms
|
|||
|
||||
private void btnCalcularAngulo_Click(object sender, EventArgs e)
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Kd = double.Parse(txtKd.Text);
|
||||
Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Ki = double.Parse(txtKi.Text);
|
||||
Variaveis.OperacaoEmAndamento.Controle.PIDdirecional.Kp = double.Parse(txtKp.Text);
|
||||
|
||||
//Variaveis.OperacaoEmAndamento.OpMapaGPS.CalculaDadosMovimentacaoAutonoma();
|
||||
|
||||
int errosConsiderar = int.Parse(txtQtdErro.Text);
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ namespace AgroBase.Models
|
|||
private Func<Task> _taskToExecute;
|
||||
private int _interval; // Intervalo em milissegundos
|
||||
public int Interval { get { return _interval; } }
|
||||
public double IntervalHz { get { return (1.0 / ((double)_interval)); } }
|
||||
private string _stackTrace;
|
||||
public string StackTrace { get { return _stackTrace; } }
|
||||
private string _id;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using AgroBase.Services;
|
||||
using System;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using static AgroBase.Models.Enums;
|
||||
|
||||
|
|
@ -12,7 +11,11 @@ namespace AgroBase.Models
|
|||
public class DispositivoDetalhesModel
|
||||
{
|
||||
public DateTime CriadoEm { get; set; } = DateTime.Now;
|
||||
public T_Code Dispositivo { get; set; }
|
||||
public string Mod_ID { get; set; }
|
||||
public string Endereco { get; set; }
|
||||
public string Versao { get; set; }
|
||||
|
||||
public TipoConexao Tipo
|
||||
{
|
||||
get
|
||||
|
|
@ -39,42 +42,26 @@ namespace AgroBase.Models
|
|||
}
|
||||
}
|
||||
}
|
||||
public T_Code Dispositivo { get; set; }
|
||||
public bool Erro { get; set; }
|
||||
public string Versao { get; set; }
|
||||
public string Mod_ID { get; set; }
|
||||
public bool Conectado
|
||||
public StatusModulo Status
|
||||
{
|
||||
get
|
||||
{
|
||||
bool DispositivoConectado = false;
|
||||
|
||||
if (Dispositivo == T_Code.Gps)
|
||||
{
|
||||
DispositivoConectado = GPSService.Iniciado;
|
||||
}
|
||||
else if (Dispositivo == T_Code.Lra)
|
||||
{
|
||||
DispositivoConectado = LoRaService.Iniciado;
|
||||
}
|
||||
else if (Dispositivo == T_Code.Mov)
|
||||
{
|
||||
DispositivoConectado = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.Modulo_ID == Mod_ID && x.MovMotor.Inicializado) ?? false;
|
||||
}
|
||||
else if (Dispositivo == T_Code.Dir)
|
||||
{
|
||||
DispositivoConectado = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.Modulo_ID == Mod_ID && x.DirMotor.Inicializado) ?? false;
|
||||
}
|
||||
else if (Dispositivo == T_Code.Sen)
|
||||
{
|
||||
DispositivoConectado = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ConexaoAtiva ?? false;
|
||||
}
|
||||
else if (Dispositivo == T_Code.Atu)
|
||||
{
|
||||
DispositivoConectado = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ConexaoAtiva ?? false;
|
||||
}
|
||||
|
||||
return DispositivoConectado;
|
||||
return VariaveisOperacao.Operadores.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo)?.status ?? StatusModulo.Desconectado;
|
||||
}
|
||||
}
|
||||
public double Saude
|
||||
{
|
||||
get
|
||||
{
|
||||
return VariaveisOperacao.Operadores.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo)?.saude ?? 0;
|
||||
}
|
||||
}
|
||||
public string Erros
|
||||
{
|
||||
get
|
||||
{
|
||||
var motivos = VariaveisOperacao.Operadores.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo)?.motivos ?? new System.Collections.Generic.List<string>();
|
||||
return string.Join(", ", motivos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,15 @@
|
|||
Desacelerando
|
||||
}
|
||||
|
||||
public enum StatusModulo
|
||||
{
|
||||
Desconectado = 0,
|
||||
Conectado = 1,
|
||||
Falha = 2,
|
||||
Alerta = 3,
|
||||
Operante = 4,
|
||||
}
|
||||
|
||||
public enum T_Code
|
||||
{
|
||||
Vzo = -1,
|
||||
|
|
@ -151,19 +160,20 @@
|
|||
|
||||
public enum ModoOperacao
|
||||
{
|
||||
Manual,
|
||||
TreinamentoIA,
|
||||
MapaGPS
|
||||
NaoDefinido = 0,
|
||||
Manual = 1,
|
||||
MapaGPS = 2,
|
||||
TreinamentoIA = 3,
|
||||
}
|
||||
|
||||
public enum StatusOperacao
|
||||
{
|
||||
NaoIniciado,
|
||||
Parametrizando,
|
||||
Aguardando,
|
||||
EmAndamento,
|
||||
Parado,
|
||||
Concluido
|
||||
NaoIniciado = 0,
|
||||
Parametrizando = 1,
|
||||
Aguardando = 2,
|
||||
EmAndamento = 3,
|
||||
Parado = 4,
|
||||
Concluido = 5
|
||||
}
|
||||
|
||||
public enum StatusCarroMapa
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ namespace AgroBase.Models
|
|||
public string ErroCarregado_Hex { get; set; }
|
||||
public double ErroAcumulado { get; set; }
|
||||
public string ErroAcumulado_Hex { get; set; }
|
||||
public double RPM { get; set; }
|
||||
public CanCommandFreqModel<int> RPM { get; set; } = new CanCommandFreqModel<int>();
|
||||
public string RPM_Hex { get; set; }
|
||||
public CanCommandFreqModel<int> NumeroPulsos { get; set; } = new CanCommandFreqModel<int>();
|
||||
private double _anguloPulsos;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ namespace AgroBase.Models.Modules
|
|||
{
|
||||
get
|
||||
{
|
||||
return DadosLeitura.UltimoComandoRespondido.AddMilliseconds(TempoLimiteConexao * 2) >= DateTime.Now; // DadosLeitura.Conectado &&
|
||||
return VariaveisOperacao.Operadores.ModulosSaude.Any(x => x.modulo == Dispositivo && x.status == StatusModulo.Operante);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -466,7 +466,10 @@ namespace AgroBase.Models.Modules
|
|||
{
|
||||
Dados.Sensores.ForEach(x =>
|
||||
{
|
||||
x.ValoresLeituras = new List<SensorValoresLeituraModel>();
|
||||
x.ValoresLeituras.ForEach(l =>
|
||||
{
|
||||
l.atual = new CanCommandFreqModel<dynamic>();
|
||||
});
|
||||
});
|
||||
|
||||
Dados.BicosPulverizadores.ForEach(x =>
|
||||
|
|
@ -475,13 +478,19 @@ namespace AgroBase.Models.Modules
|
|||
x.Atuacoes = 0;
|
||||
x.TempoAtuado = 0;
|
||||
x.InicioAtuacao = DateTime.MinValue;
|
||||
x.ValoresLeituras = new List<SensorValoresLeituraModel>();
|
||||
x.ValoresLeituras.ForEach(l =>
|
||||
{
|
||||
l.atual = new CanCommandFreqModel<dynamic>();
|
||||
});
|
||||
});
|
||||
|
||||
Dados.BombasPressurizadoras.ForEach(x =>
|
||||
{
|
||||
x.ValoresLeituras = new List<SensorValoresLeituraModel>();
|
||||
x.ComandoAtuar = false;
|
||||
x.ValoresLeituras.ForEach(l =>
|
||||
{
|
||||
l.atual = new CanCommandFreqModel<dynamic>();
|
||||
});
|
||||
});
|
||||
|
||||
Dados.VolumeVazaoAferido = 0;
|
||||
|
|
@ -523,9 +532,8 @@ namespace AgroBase.Models.Modules
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = CanService._portName,
|
||||
Dispositivo = DadosLeitura.Dispositivo,
|
||||
Erro = false,
|
||||
Endereco = CanService._portName,
|
||||
Versao = DadosLeitura.Versao.ToString(),
|
||||
Mod_ID = Modulo_ID
|
||||
});
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ namespace AgroBase.Models.Modules
|
|||
{
|
||||
get
|
||||
{
|
||||
return Leitura?.RPM ?? 0;
|
||||
return Leitura?.RPM?.valor ?? 0;
|
||||
}
|
||||
}
|
||||
public bool IN1_Atuado
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ namespace AgroBase.Models.Modules
|
|||
{
|
||||
get
|
||||
{
|
||||
return DadosLeitura.UltimoComandoRespondido.AddMilliseconds(TempoLimiteConexao * 2) >= DateTime.Now; // DadosLeitura.Conectado &&
|
||||
return VariaveisOperacao.Operadores.ModulosSaude.Any(x => x.modulo == Dispositivo && x.status == StatusModulo.Operante);
|
||||
}
|
||||
}
|
||||
public SensoriamentoMensagemJsonModel DadosLeitura { get; set; } = new SensoriamentoMensagemJsonModel();
|
||||
|
|
@ -45,8 +45,8 @@ namespace AgroBase.Models.Modules
|
|||
public List<SensorSinaleiroModel> Sinaleiros { get; set; }
|
||||
public List<SensorReleModel> Reles { get; set; }
|
||||
public List<SensorServoModel> Servos { get; set; }
|
||||
public string CameraID_Caminho { get; set; } = "";
|
||||
public List<string> CameraID_Solo { get; set; } = new List<string>();
|
||||
public OAKCameraModel CameraCaminho { get; set; } = new OAKCameraModel();
|
||||
public List<OAKCameraModel> CamerasSolo { get; set; } = new List<OAKCameraModel>();
|
||||
public UltrasonicA05Configuracoes ConfiguracaoSensorUltrassom { get; set; }
|
||||
private SenHandler _SenHandler = new SenHandler();
|
||||
public LoRaEspService loRaService { get; set; } = new LoRaEspService();
|
||||
|
|
@ -74,8 +74,8 @@ namespace AgroBase.Models.Modules
|
|||
_EnderecoCAN_Rx = 0x11,
|
||||
_TaxaAmostragem = 1000,
|
||||
RequisitarDados = true,
|
||||
CameraID_Caminho = "",
|
||||
CameraID_Solo = new List<string>(),
|
||||
CameraCaminho = new OAKCameraModel(),
|
||||
CamerasSolo = new List<OAKCameraModel>(),
|
||||
Sinaleiros = new List<SensorSinaleiroModel>()
|
||||
{
|
||||
new SensorSinaleiroModel()
|
||||
|
|
@ -1654,7 +1654,7 @@ namespace AgroBase.Models.Modules
|
|||
|
||||
for (int i = 0; i < Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo; i++)
|
||||
{
|
||||
obj.CameraID_Solo.Add("");
|
||||
obj.CamerasSolo.Add(new OAKCameraModel());
|
||||
}
|
||||
|
||||
return obj;
|
||||
|
|
@ -1663,6 +1663,8 @@ namespace AgroBase.Models.Modules
|
|||
public void LimparDados<T>(T _dados)
|
||||
{
|
||||
var Dados = _dados as SensoriamentoModel;
|
||||
Dados.CameraCaminho.frames = new Dictionary<Operadores.OperadoresModels.TipoComando, System.Drawing.Bitmap>();
|
||||
Dados.CamerasSolo.ForEach(cam => cam.frames = new Dictionary<Operadores.OperadoresModels.TipoComando, System.Drawing.Bitmap>());
|
||||
Dados.DadosLeitura = new SensoriamentoMensagemJsonModel();
|
||||
Dados.Reles.ForEach(x =>
|
||||
{
|
||||
|
|
@ -1742,7 +1744,6 @@ namespace AgroBase.Models.Modules
|
|||
{
|
||||
Endereco = CanService._portName,
|
||||
Dispositivo = DadosLeitura.Dispositivo,
|
||||
Erro = false,
|
||||
Versao = DadosLeitura.Versao.ToString(),
|
||||
Mod_ID = Modulo_ID,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,12 +1,25 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Threading.Tasks;
|
||||
using static AgroBase.Models.Enums;
|
||||
using static AgroBase.Models.Operadores.OperadoresModels;
|
||||
|
||||
namespace AgroBase.Models
|
||||
{
|
||||
public class OAKCameraModel
|
||||
{
|
||||
public T_Code Dispositivo { get; set; }
|
||||
public int Index { get; set; }
|
||||
public string Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Description
|
||||
{
|
||||
get
|
||||
{
|
||||
return $"({Index}) {Name}";
|
||||
}
|
||||
}
|
||||
public string State { get; set; }
|
||||
public string Usb_Speed { get; set; }
|
||||
public string[] Available_Camera_Sensors { get; set; }
|
||||
|
|
@ -18,12 +31,25 @@ namespace AgroBase.Models
|
|||
public double fx { get; set; }
|
||||
public double baseline { get; set; }
|
||||
|
||||
public Dictionary<TipoComando, Bitmap> frames { get; set; } = new Dictionary<TipoComando, Bitmap>();
|
||||
|
||||
public bool newData { get; set; }
|
||||
public void setVisto() => newData = false;
|
||||
|
||||
public async Task<Bitmap> GetFrame(TipoComando tipo = TipoComando.GetCameraFrame)
|
||||
{
|
||||
VariaveisOperacao.Operadores.HealthWorker.AdicionarComandoNaFila(tipo, new { mx_id = Id });
|
||||
await VariaveisOperacao.Operadores.HealthWorker.AguardarNovosDados(tipo, 10000);
|
||||
Bitmap bmp = (VariaveisOperacao.Operadores.HealthWorker.DadosLeitura.Leitura.obj?.frame ?? new OAKCameraFrameModel()).image;
|
||||
frames[tipo] = bmp;
|
||||
return bmp;
|
||||
}
|
||||
|
||||
public OAKCameraModel Clone()
|
||||
{
|
||||
return new OAKCameraModel()
|
||||
{
|
||||
Dispositivo = Dispositivo,
|
||||
Index = Index,
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
|
|
@ -37,6 +63,7 @@ namespace AgroBase.Models
|
|||
Version = Version,
|
||||
fx = fx,
|
||||
baseline = baseline,
|
||||
frames = new Dictionary<TipoComando, Bitmap>(frames),
|
||||
newData = true
|
||||
};
|
||||
}
|
||||
|
|
@ -85,4 +112,42 @@ namespace AgroBase.Models
|
|||
}
|
||||
}
|
||||
|
||||
public class OAKCameraFrameModel
|
||||
{
|
||||
public long timestamp { get; set; }
|
||||
public string frame { get; set; }
|
||||
public Bitmap image { get; set; } = null;
|
||||
|
||||
private bool _newData = true;
|
||||
public bool newData
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_newData)
|
||||
{
|
||||
_newData = false;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
set
|
||||
{
|
||||
_newData = value;
|
||||
}
|
||||
}
|
||||
public OAKCameraFrameModel Clone()
|
||||
{
|
||||
return new OAKCameraFrameModel()
|
||||
{
|
||||
timestamp = timestamp,
|
||||
frame = frame,
|
||||
image = FuncoesGlobais.Base64ToBitmap(frame),
|
||||
newData = true
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -300,8 +300,8 @@ namespace AgroBase.Models
|
|||
}
|
||||
public CanCommandFreqModel<double> Tensao { get; set; } = new CanCommandFreqModel<double>();
|
||||
public CanCommandFreqModel<double> Temperatura { get; set; } = new CanCommandFreqModel<double>();
|
||||
public CanCommandFreqModel<double> Potencia { get; set; }
|
||||
public CanCommandFreqModel<double> CicloTrabalho { get; set; }
|
||||
public CanCommandFreqModel<double> Potencia { get; set; } = new CanCommandFreqModel<double>();
|
||||
public CanCommandFreqModel<double> CicloTrabalho { get; set; } = new CanCommandFreqModel<double>();
|
||||
public bool Freado
|
||||
{
|
||||
get
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using AgroBase.Models.Modules;
|
||||
using AgroBase.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
@ -84,7 +83,6 @@ namespace AgroBase.Models.Operacoes
|
|||
consideraAnguloCorredor ? _Trajetoria.ErroOrientacaoAngularCombinado :
|
||||
_Trajetoria.ErroOrientacaoAngularProximoPonto;
|
||||
|
||||
var PID = _Controle.PIDdirecional;
|
||||
if (_Trajetoria.StatusCarro != StatusCarroMapa.Parado)
|
||||
{
|
||||
// Atualiza o PID com o erro combinado
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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; }
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
using Emgu.CV.OCR;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using static AgroBase.Models.Operadores.OperadoresModels;
|
||||
|
||||
namespace AgroBase.Models.Operadores
|
||||
{
|
||||
|
|
@ -12,7 +12,7 @@ namespace AgroBase.Models.Operadores
|
|||
public DateTime IniciadoEm { get; set; }
|
||||
public bool Pronto { get; set; }
|
||||
public DateTime ProntoEm { get; set; }
|
||||
public VisualWorkerMessageModel Leitura { get; set; } = new VisualWorkerMessageModel();
|
||||
public WorkerMessageModel<VisualWorkerMessageResponseModel> Leitura { get; set; } = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
|
||||
public VisualWorkerDadosModel Resumo { get; set; } = new VisualWorkerDadosModel();
|
||||
|
||||
public VisualWorkerModel Clone()
|
||||
|
|
@ -34,7 +34,7 @@ namespace AgroBase.Models.Operadores
|
|||
IniciadoEm = DateTime.MinValue;
|
||||
Pronto = false;
|
||||
ProntoEm = DateTime.MinValue;
|
||||
Leitura = new VisualWorkerMessageModel();
|
||||
Leitura = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
|
||||
Resumo = new VisualWorkerDadosModel();
|
||||
}
|
||||
}
|
||||
|
|
@ -52,72 +52,61 @@ namespace AgroBase.Models.Operadores
|
|||
{
|
||||
DesvioNecessario = DesvioNecessario,
|
||||
DirecaoDesvio = DirecaoDesvio,
|
||||
ObstaculoCritico = ObstaculoCritico.Clone(),
|
||||
Obstaculos = new List<Obstaculo>(Obstaculos),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class VisualWorkerMessageModel
|
||||
{
|
||||
public DateTime AdicionadoEm { get; set; }
|
||||
public bool Enviado { get; set; }
|
||||
public DateTime EnviadoEm { get; set; }
|
||||
public bool Respondido { get; set; }
|
||||
public DateTime RespondidoEm { get; set; }
|
||||
|
||||
public DateTime MomentoLog { get; set; } = DateTime.MinValue;
|
||||
public long momento { get; set; }
|
||||
public VisualWorkerMessageType tipo_cmd { get; set; }
|
||||
public VisualWorkerCommandType cmd { get; set; }
|
||||
public VisualWorkerMessageResponseModel obj { get; set; } = new VisualWorkerMessageResponseModel();
|
||||
public dynamic payload { get; set; }
|
||||
|
||||
public VisualWorkerMessageModel Clone()
|
||||
{
|
||||
return new VisualWorkerMessageModel()
|
||||
{
|
||||
AdicionadoEm = AdicionadoEm,
|
||||
Enviado = Enviado,
|
||||
EnviadoEm = EnviadoEm,
|
||||
Respondido = Respondido,
|
||||
RespondidoEm = RespondidoEm,
|
||||
MomentoLog = MomentoLog,
|
||||
momento = momento,
|
||||
tipo_cmd = tipo_cmd,
|
||||
cmd = cmd,
|
||||
obj = obj.Clone(),
|
||||
ObstaculoCritico = ObstaculoCritico?.Clone(),
|
||||
Obstaculos = new List<Obstaculo>(Obstaculos ?? new List<Obstaculo>()),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class VisualWorkerMessageResponseModel
|
||||
{
|
||||
public OAKCameraModel device_status { get; set; }
|
||||
public VisualWorkerMessageIMUModel imu { get; set; }
|
||||
public VisualWorkerMessageFrameModel rgb_frame { get; set; }
|
||||
public VisualWorkerMessageFrameModel heatmap_frame { get; set; }
|
||||
public VisualWorkerMessageRadar2DModel radar_2d { get; set; }
|
||||
public VisualWorkerMessageSetupModel ping { get; set; }
|
||||
public VisualWorkerMessageSetupModel calibragem { get; set; }
|
||||
public VisualWorkerMessageAnaliseModel analise_anomalias { get; set; } = new VisualWorkerMessageAnaliseModel();
|
||||
public VisualWorkerMessageAnaliseModel analise_solo { get; set; } = new VisualWorkerMessageAnaliseModel();
|
||||
public VisualWorkerMessageSegmentacaoSemanticaModel segmentacao { get; set; } = new VisualWorkerMessageSegmentacaoSemanticaModel();
|
||||
|
||||
public VisualWorkerCommandType cmd { get; set; }
|
||||
public VisualWorkerMessageResponseSaveFramesModel save_frames { get; set; }
|
||||
|
||||
public VisualWorkerMessageResponseModel Clone()
|
||||
{
|
||||
return new VisualWorkerMessageResponseModel()
|
||||
{
|
||||
device_status = device_status.Clone(),
|
||||
imu = imu.Clone(),
|
||||
rgb_frame = rgb_frame.Clone(),
|
||||
heatmap_frame = heatmap_frame.Clone(),
|
||||
radar_2d = radar_2d.Clone(),
|
||||
ping = ping.Clone(),
|
||||
calibragem = calibragem.Clone(),
|
||||
analise_anomalias = analise_anomalias.Clone(),
|
||||
analise_solo = analise_solo.Clone(),
|
||||
segmentacao = segmentacao.Clone(),
|
||||
cmd = cmd,
|
||||
save_frames = save_frames.Clone()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class VisualWorkerMessageResponseSaveFramesModel
|
||||
{
|
||||
public long timestamp { get; set; }
|
||||
public List<string> frames { get; set; }
|
||||
|
||||
private bool _newData = false;
|
||||
public bool newData
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_newData)
|
||||
{
|
||||
_newData = false;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
set
|
||||
{
|
||||
_newData = value;
|
||||
}
|
||||
}
|
||||
|
||||
public VisualWorkerMessageResponseSaveFramesModel Clone()
|
||||
{
|
||||
return new VisualWorkerMessageResponseSaveFramesModel()
|
||||
{
|
||||
timestamp = timestamp,
|
||||
frames = new List<string>(frames),
|
||||
newData = true
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -163,44 +152,6 @@ namespace AgroBase.Models.Operadores
|
|||
}
|
||||
}
|
||||
|
||||
public class VisualWorkerMessageFrameModel
|
||||
{
|
||||
public long timestamp { get; set; }
|
||||
public string frame { get; set; }
|
||||
public Bitmap image { get; set; } = null;
|
||||
|
||||
private bool _newData = false;
|
||||
public bool newData
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_newData)
|
||||
{
|
||||
_newData = false;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
set
|
||||
{
|
||||
_newData = value;
|
||||
}
|
||||
}
|
||||
public VisualWorkerMessageFrameModel Clone()
|
||||
{
|
||||
return new VisualWorkerMessageFrameModel()
|
||||
{
|
||||
timestamp = timestamp,
|
||||
frame = frame,
|
||||
image = FuncoesGlobais.Base64ToBitmap(frame),
|
||||
newData = true
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class VisualWorkerMessageSetupModel
|
||||
{
|
||||
public long timestamp { get; set; }
|
||||
|
|
@ -274,7 +225,7 @@ namespace AgroBase.Models.Operadores
|
|||
};
|
||||
}
|
||||
|
||||
public Bitmap PlotarAnalise(VisualWorkerMessageFrameModel frame)
|
||||
public Bitmap PlotarAnalise(OAKCameraFrameModel frame)
|
||||
{
|
||||
if (frame?.image == null) return null;
|
||||
|
||||
|
|
@ -412,7 +363,7 @@ namespace AgroBase.Models.Operadores
|
|||
|
||||
public class VisualWorkerMessageRadar2DModel
|
||||
{
|
||||
public VisualWorkerMessageFrameModel frame { get; set; }
|
||||
public OAKCameraFrameModel frame { get; set; }
|
||||
public VisualWorkerMessageRadar2DAnaliseModel analise { get; set; }
|
||||
|
||||
private bool _newData = false;
|
||||
|
|
@ -548,7 +499,7 @@ namespace AgroBase.Models.Operadores
|
|||
|
||||
public class VisualWorkerMessageSegmentacaoSemanticaModel
|
||||
{
|
||||
public VisualWorkerMessageFrameModel mask_frame { get; set; }
|
||||
public OAKCameraFrameModel mask_frame { get; set; }
|
||||
public double angulo_rua { get; set; }
|
||||
|
||||
private bool _newData = false;
|
||||
|
|
@ -582,46 +533,9 @@ namespace AgroBase.Models.Operadores
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum VisualWorkerMessageType
|
||||
{
|
||||
TX = 1,
|
||||
RX = 2
|
||||
}
|
||||
|
||||
public enum VisualWorkerCommandType
|
||||
{
|
||||
Ping = 1,
|
||||
Get_Status_Dispositivo = 2,
|
||||
Get_IMU_Data = 3,
|
||||
Get_RGB_Frame = 4,
|
||||
Get_Heatmap_Frame = 5,
|
||||
Calibrar_Grades = 6,
|
||||
Get_Analise_Anomalia = 7,
|
||||
Get_Analise_Solo = 8,
|
||||
Get_Radar_2D = 9,
|
||||
Get_Segmentacao_Semantica = 10,
|
||||
|
||||
}
|
||||
|
||||
public enum VisualWorkerDetectionType
|
||||
{
|
||||
Seguro = 1,
|
||||
Obstaculo = 2,
|
||||
Depressao = 3,
|
||||
}
|
||||
|
||||
public enum VisualWorkerRegionType
|
||||
{
|
||||
Solo = 1,
|
||||
Aereo = 2,
|
||||
}
|
||||
|
||||
public enum VisualWorkerAnaliseType
|
||||
{
|
||||
Anomalia = 1,
|
||||
Solo = 2,
|
||||
SalvarFrames = 0
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ namespace AgroBase.Models
|
|||
public bool Iniciado { get; set; }
|
||||
private void AtualizarIniciado()
|
||||
{
|
||||
Iniciado = Variaveis.OperacaoEmAndamento.CameraCaminho?.Iniciada ?? false;
|
||||
//Iniciado = Variaveis.OperacaoEmAndamento.CameraCaminho?.Iniciada ?? false;
|
||||
}
|
||||
|
||||
public int X_Max { get; set; }
|
||||
|
|
|
|||
|
|
@ -522,7 +522,7 @@ namespace AgroBase.Models
|
|||
{
|
||||
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
|
||||
|
||||
double anguloCamera = _Sensoriamento.OperadorVisual.Leitura.obj.segmentacao.angulo_rua;
|
||||
//double anguloCamera = _Sensoriamento.OperadorVisual.Leitura.obj?.segmentacao?.angulo_rua ?? 0;
|
||||
double anguloCorredor = AnguloMedioCorredor;
|
||||
double anguloProximoPonto = AnguloCaminho;
|
||||
double anguloCarro = _Sensoriamento.Gps.AnguloCarroDefinido;
|
||||
|
|
@ -1306,7 +1306,9 @@ namespace AgroBase.Models
|
|||
idxRuaDireita = idxRuaDireita,
|
||||
DistanciaRestante = DistanciaRestante,
|
||||
Progresso = Progresso,
|
||||
Pontos = new List<PontoTrajetoriaModel>()
|
||||
Pontos = new List<PontoTrajetoriaModel>(),
|
||||
Ultimo = Ultimo,
|
||||
FatorLarguraCorredor = FatorLarguraCorredor,
|
||||
};
|
||||
if (clonarPontos)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ using AgroBase.Models.Components;
|
|||
using Microsoft.Web.WebView2.WinForms;
|
||||
using Microsoft.Web.WebView2.Core;
|
||||
using System.Text.Json;
|
||||
using AgroBase.Services.Operadores;
|
||||
|
||||
namespace AgroBase.Models
|
||||
{
|
||||
|
|
@ -369,6 +370,7 @@ namespace AgroBase.Models
|
|||
}
|
||||
public static GPSModel PosicaoBase { get; set; } = new GPSModel();
|
||||
|
||||
public static OperadoresService Operadores { get; set; } = new OperadoresService();
|
||||
|
||||
public static void RegistrarLogDispositivo(List<string> Logs, T_Code Dispositivo, string Sulfixo, int MinLogs = 100)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using AgroBase.Forms;
|
||||
using AgroBase.Models;
|
||||
using AgroBase.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
|
|
|||
|
|
@ -391,9 +391,8 @@ namespace AgroBase.Services
|
|||
var leitura = DadosLeitura.FirstOrDefault(x => x.Endereco == Addr);
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
|
||||
Dispositivo = T_Code.Bld,
|
||||
Erro = leitura.CodigoAlarme > 0,
|
||||
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
|
||||
Versao = leitura.Versao.ToString(),
|
||||
Mod_ID = Mod_ID,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ namespace AgroBase.Services
|
|||
{
|
||||
get
|
||||
{
|
||||
return SerialService.DispositivosCan.Any(d => SerialService.DispositivosMapeados.Any(x => x.Conectado && x.Dispositivo == d));
|
||||
return SerialService.DispositivosCan.Any(d => SerialService.DispositivosMapeados.Any(x => x.Status == StatusModulo.Operante && x.Dispositivo == d));
|
||||
}
|
||||
}
|
||||
private static AsyncTaskTimerModel tmrEnviarCAN;
|
||||
|
|
|
|||
|
|
@ -68,6 +68,11 @@ namespace AgroBase.Services
|
|||
{
|
||||
var Bateria = Variaveis.OperacaoEmAndamento.Sensoriamento.Bateria;
|
||||
|
||||
if (!Bateria.Iniciado)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PercentualBateria = Math.Round(FuncoesMatematicas.Map(Bateria.TensaoInstantanea, VariaveisEquipamento.TensaoMinimaBateria, VariaveisEquipamento.TensaoMaximaBateria, 0.0, 100.0), 2);
|
||||
|
||||
// Verifique se as datas são válidas (não MinValue, MaxValue ou valores anômalos)
|
||||
|
|
|
|||
|
|
@ -451,7 +451,14 @@ namespace AgroBase.Comum
|
|||
|
||||
newConfig.LimparDados(Dados);
|
||||
|
||||
File.WriteAllText(nomeArquivo, JsonConvert.SerializeObject(newConfig));
|
||||
try
|
||||
{
|
||||
File.WriteAllText(nomeArquivo, JsonConvert.SerializeObject(newConfig));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Erro ao salvar parametrizacao para o modulo de endereco {newConfig._EnderecoCAN_Tx}");
|
||||
}
|
||||
}
|
||||
|
||||
public void CarregarParametrosModulos()
|
||||
|
|
|
|||
|
|
@ -80,9 +80,8 @@ namespace AgroBase.Services
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = PortaGPS.PortName,
|
||||
Dispositivo = T_Code.Gps,
|
||||
Erro = !Iniciado,
|
||||
Endereco = PortaGPS.PortName,
|
||||
Versao = "1",
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -201,9 +201,8 @@ namespace AgroBase.Services
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = "USB",
|
||||
Dispositivo = T_Code.Knt,
|
||||
Erro = !Iniciado,
|
||||
Endereco = "USB",
|
||||
Versao = "1",
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -198,9 +198,8 @@ namespace AgroBase.Services
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = _PortaLoRa.PortName,
|
||||
Dispositivo = T_Code.Lra,
|
||||
Erro = !Iniciado,
|
||||
Endereco = _PortaLoRa.PortName,
|
||||
Versao = "220"
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -83,9 +83,8 @@ namespace AgroBase.Services
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = CanService._portName,
|
||||
Dispositivo = T_Code.Dir,
|
||||
Erro = (Leitura.Mensagem ?? "") != "",
|
||||
Endereco = CanService._portName,
|
||||
Versao = (Leitura.FV ?? "").ToString(),
|
||||
Mod_ID = Mod_ID,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -167,9 +167,8 @@ namespace AgroBase.Services
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
|
||||
Dispositivo = T_Code.Dir,
|
||||
Erro = (Leitura.Mensagem ?? "") != "",
|
||||
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
|
||||
Versao = (Leitura.FV ?? "").ToString(),
|
||||
Mod_ID = Mod_ID,
|
||||
});
|
||||
|
|
@ -706,7 +705,7 @@ namespace AgroBase.Services
|
|||
}
|
||||
else if (ModoLeitura == "Decimal") // Decimal
|
||||
{
|
||||
leitura.RPM = 0;
|
||||
leitura.RPM.valor = 0;
|
||||
word16 = "0";
|
||||
for (int a = 3; a < 5; a++)
|
||||
{
|
||||
|
|
@ -717,7 +716,7 @@ namespace AgroBase.Services
|
|||
data16 = Convert.ToInt16(word16, 16);
|
||||
str = Convert.ToString(data16, 10);
|
||||
double.TryParse(str, out double val);
|
||||
leitura.RPM = val;
|
||||
leitura.RPM.valor = (int)val;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using AgroBase.Models;
|
||||
using AgroBase.Services;
|
||||
using AgroBase.Services.Operadores;
|
||||
using MQTTnet;
|
||||
using MQTTnet.Client;
|
||||
using MQTTnet.Client.Options;
|
||||
|
|
@ -94,7 +93,6 @@ public class MqttService
|
|||
await AdicionarNovoTopico(MapasVariaveisModel.TopicoCoordenadasGPS);
|
||||
await AdicionarNovoTopico(MapasVariaveisModel.TopicoSelecaoRuasMapa, true, 1, async (message) => { Variaveis.OperacaoEmAndamento.Mapa.AtualizarRuasSelecionadas(); });
|
||||
await AdicionarNovoTopico(MapasVariaveisModel.TopicoTrajetoriaDinamica);
|
||||
await AdicionarNovoTopico(HealthWorkerService.TopicoMQTT);
|
||||
});
|
||||
|
||||
tmrCheck = new AsyncTaskTimerModel("tmrCheck", tmrCheck_Tick, 1000);
|
||||
|
|
@ -133,7 +131,7 @@ public class MqttService
|
|||
|
||||
public async Task PublishAsync(MqttTopicosModel topic, string message, bool Forcar = false)
|
||||
{
|
||||
if (topic.Inscrever && !Forcar)
|
||||
if (topic == null || (topic.Inscrever && !Forcar))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -88,9 +88,8 @@ namespace AgroBase.Services
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = CanService._portName,
|
||||
Dispositivo = T_Code.Mov,
|
||||
Erro = Leitura.CodigoAlarme.valor > 0,
|
||||
Endereco = CanService._portName,
|
||||
Versao = "1.0",
|
||||
Mod_ID = Mod_ID,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -764,9 +764,8 @@ namespace AgroBase.Services
|
|||
var leitura = DadosLeitura.FirstOrDefault(x => x.EnderecoTx == Addr);
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
|
||||
Dispositivo = T_Code.Mov,
|
||||
Erro = leitura.CodigoAlarme > 0,
|
||||
Endereco = _ethernetService != null ? _ethernetService._ipAddress : "N/A",
|
||||
Versao = "1.0",
|
||||
Mod_ID = Mod_ID,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,30 +1,184 @@
|
|||
using AgroBase.Models;
|
||||
using AgroBase.Models.Modules;
|
||||
using AgroBase.Models.Operadores;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using static AgroBase.Models.Enums;
|
||||
using static AgroBase.Models.Operadores.OperadoresModels;
|
||||
using static MqttService;
|
||||
|
||||
namespace AgroBase.Services.Operadores
|
||||
{
|
||||
public class HealthWorkerService
|
||||
{
|
||||
public static string TopicoMQTT = "operador/health/rx";
|
||||
private string TopicoMQTT_Tx = "operador/health/rx";
|
||||
private MqttTopicosModel topicoTx;
|
||||
private string TopicoMQTT_Rx = "operador/health/tx";
|
||||
private MqttTopicosModel topicoRx;
|
||||
public HealthWorkerModel DadosLeitura = new HealthWorkerModel();
|
||||
public AsyncTaskTimerModel tmrFila;
|
||||
public int TimeoutRespostaComando = 10;
|
||||
public ConcurrentDictionary<TipoComando, WorkerMessageModel<HealthWorkerMessageResponseModel>> FilaComandos = new ConcurrentDictionary<TipoComando, WorkerMessageModel<HealthWorkerMessageResponseModel>>();
|
||||
private Dictionary<TipoComando, Func<bool>> mapaRespostas;
|
||||
|
||||
public enum TipoComando
|
||||
private bool DebugMode = true;
|
||||
|
||||
private void MostrarLog(string message, int limite = 500)
|
||||
{
|
||||
SetDadosModulo = 1,
|
||||
GetDadosModulo = 2,
|
||||
SetDadosContexto = 3,
|
||||
GetDadosContexto = 4
|
||||
if (DebugMode)
|
||||
{
|
||||
Console.WriteLine($"[HealthWorker] {message.Substring(0, Math.Min(limite, message.Length))}{(message.Length > limite ? "..." : "")}");
|
||||
}
|
||||
}
|
||||
|
||||
public static void EnviarDadosContexto()
|
||||
public async Task<bool> IniciarProcessamento()
|
||||
{
|
||||
topicoRx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Rx, true, 2, MqttCallback);
|
||||
topicoTx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Tx);
|
||||
|
||||
mapaRespostas = new Dictionary<TipoComando, Func<bool>>
|
||||
{
|
||||
{ TipoComando.GetListaCameras, () => DadosLeitura.Leitura.obj?.cameras?.newData ?? false },
|
||||
{ TipoComando.GetCameraFrame, () => DadosLeitura.Leitura.obj?.frame?.newData ?? false },
|
||||
};
|
||||
|
||||
DadosLeitura.IniciadoEm = DateTime.Now;
|
||||
DadosLeitura.Iniciado = true;
|
||||
|
||||
tmrFila?.Dispose();
|
||||
tmrFila = new AsyncTaskTimerModel("tmrHealthWorker_Fila", tmrFila_Tick, 10);
|
||||
tmrFila.Start();
|
||||
|
||||
bool pronto() => DadosLeitura.Pronto;
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 5000);
|
||||
if (pronto())
|
||||
{
|
||||
MostrarLog("Processamento iniciado com sucesso");
|
||||
return true;
|
||||
}
|
||||
|
||||
MostrarLog("Timeout ao iniciar script");
|
||||
DadosLeitura.ReiniciarEstado();
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool AdicionarComandoNaFila(TipoComando cmd, dynamic payload = null)
|
||||
{
|
||||
WorkerMessageModel<HealthWorkerMessageResponseModel> msg = new WorkerMessageModel<HealthWorkerMessageResponseModel>()
|
||||
{
|
||||
AdicionadoEm = DateTime.Now,
|
||||
payload = new
|
||||
{
|
||||
cmd = cmd,
|
||||
dados = payload
|
||||
}
|
||||
};
|
||||
|
||||
bool sucesso = FilaComandos.TryAdd(cmd, msg);
|
||||
if (!sucesso)
|
||||
{
|
||||
MostrarLog($"Mensagem {cmd} nao adicionada na fila");
|
||||
}
|
||||
|
||||
return sucesso;
|
||||
}
|
||||
|
||||
private async Task tmrFila_Tick()
|
||||
{
|
||||
DateTime agora = DateTime.Now;
|
||||
// remove as mensagens antigas que nao responderam para permitir envair novamente
|
||||
foreach (var item in FilaComandos.Where(x => x.Value.Enviado && agora > x.Value.EnviadoEm.AddSeconds(TimeoutRespostaComando)))
|
||||
{
|
||||
FilaComandos.TryRemove(item.Key, out var _);
|
||||
}
|
||||
// pega a mensagem mais antiga
|
||||
var msg = FilaComandos.Where(x => !x.Value.Enviado).OrderBy(x => x.Value.AdicionadoEm).FirstOrDefault();
|
||||
if (msg.Value == null) return;
|
||||
|
||||
var mensagem = new
|
||||
{
|
||||
comando = (int)msg.Key,
|
||||
dispositivo = (int)T_Code.Snr,
|
||||
payload = msg.Value.payload
|
||||
};
|
||||
|
||||
await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(mensagem), true);
|
||||
|
||||
msg.Value.Enviado = true;
|
||||
msg.Value.EnviadoEm = DateTime.Now;
|
||||
}
|
||||
|
||||
private async Task<bool> MqttCallback(MqttTopicosMensagensModel Mensagem)
|
||||
{
|
||||
if (!DadosLeitura.Pronto && Mensagem.Momento > DadosLeitura.IniciadoEm && Mensagem.Mensagem == "OK")
|
||||
{
|
||||
DadosLeitura.ProntoEm = DateTime.Now;
|
||||
DadosLeitura.Pronto = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
var msgRx = JsonConvert.DeserializeObject<WorkerMessageModel<HealthWorkerMessageResponseModel>>(Mensagem.Mensagem);
|
||||
|
||||
if (msgRx == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
FilaComandos.TryGetValue(msgRx.obj.cmd, out var msgTx);
|
||||
if (msgTx != null)
|
||||
{
|
||||
FilaComandos.TryRemove(msgRx.obj.cmd, out var msg);
|
||||
}
|
||||
|
||||
AtualizarDadosLeitura(msgRx);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void AtualizarDadosLeitura(WorkerMessageModel<HealthWorkerMessageResponseModel> msg)
|
||||
{
|
||||
if (DadosLeitura.Leitura.obj == null)
|
||||
{
|
||||
DadosLeitura.Leitura.obj = new HealthWorkerMessageResponseModel();
|
||||
}
|
||||
switch (msg.obj.cmd)
|
||||
{
|
||||
case TipoComando.GetListaCameras:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.cameras = msg.obj.cameras.Clone();
|
||||
break;
|
||||
}
|
||||
case TipoComando.GetCameraFrame:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.frame = msg.obj.frame.Clone();
|
||||
break;
|
||||
}
|
||||
}
|
||||
DadosLeitura.Leitura.MomentoLog = DateTime.Now;
|
||||
}
|
||||
|
||||
public async Task AguardarNovosDados(TipoComando cmd, int timeout = 1000)
|
||||
{
|
||||
if (mapaRespostas.TryGetValue(cmd, out var condicao))
|
||||
{
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(condicao, timeout, 10);
|
||||
}
|
||||
else
|
||||
{
|
||||
MostrarLog($"Comando {cmd} não suportado no AguardarResposta.");
|
||||
}
|
||||
}
|
||||
|
||||
public void EnviarDadosContexto()
|
||||
{
|
||||
if (Variaveis.OperacaoEmAndamento.DispMvd == null) return;
|
||||
|
||||
double limiteValorPadrao = -9999;
|
||||
var a = Variaveis.OperacaoEmAndamento.Trajetoria;
|
||||
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
|
||||
|
||||
var dados = new
|
||||
{
|
||||
|
|
@ -32,17 +186,48 @@ namespace AgroBase.Services.Operadores
|
|||
dispositivo = (int)T_Code.Mod,
|
||||
payload = new
|
||||
{
|
||||
Operacao = new
|
||||
{
|
||||
debug_mode = Variaveis.DebugMode,
|
||||
iniciado = Variaveis.OperacaoEmAndamento.Iniciado,
|
||||
finalizando = Variaveis.OperacaoEmAndamento.Finalizando,
|
||||
emergencia = Variaveis.OperacaoEmAndamento.Emergencia,
|
||||
},
|
||||
Trajetoria = new
|
||||
{
|
||||
status = (int)_Sensoriamento.Trajetoria.StatusCarro,
|
||||
manobrando = _Sensoriamento.Trajetoria.ManobrandoEntreRuas,
|
||||
erro_angular = _Sensoriamento.Trajetoria.ErroOrientacaoAngularCombinado,
|
||||
CorredorAtual = new
|
||||
{
|
||||
concluido = _Sensoriamento.Trajetoria.CorredorAtual.Concluido,
|
||||
dentro = _Sensoriamento.Trajetoria.CorredorAtual.Dentro,
|
||||
ultimo = _Sensoriamento.Trajetoria.CorredorAtual.Ultimo,
|
||||
largura = _Sensoriamento.Trajetoria.CorredorAtual.Largura,
|
||||
progresso = _Sensoriamento.Trajetoria.CorredorAtual.Progresso,
|
||||
},
|
||||
},
|
||||
Gerais = new
|
||||
{
|
||||
velocidade_ms = _Sensoriamento.Movimentacao.VelocidadeMedia,
|
||||
ervas_no_radar = _Sensoriamento.Atuador.ErvasNoRadar,
|
||||
},
|
||||
Gps = new
|
||||
{
|
||||
freq_base = GPSService.TaxaAmostragemHz,
|
||||
conectado = GPSService.Iniciado,
|
||||
fix = (int)GPSService.UltimaLeitura.QualidadeFix,
|
||||
lat = _Sensoriamento.Gps.Latitude,
|
||||
lon = _Sensoriamento.Gps.Longitude,
|
||||
theta = _Sensoriamento.Gps.AnguloCarroDefinido,
|
||||
fix = (int)_Sensoriamento.Gps.QualidadeFix,
|
||||
rtk = GPSService.UltimoEnvioCorrecaoRTK.AddSeconds(5) > DateTime.Now,
|
||||
hAcc = GPSService.UltimaLeitura.PrecisaoCm,
|
||||
nSatelites = GPSService.UltimaLeitura.NumeroSatelites.valor,
|
||||
freq = GPSService.UltimaLeitura.NumeroSatelites.frequencia,
|
||||
hAcc = _Sensoriamento.Gps.PrecisaoCm,
|
||||
nSatelites = _Sensoriamento.Gps.NumeroSatelites.valor,
|
||||
freq = _Sensoriamento.Gps.NumeroSatelites.frequencia,
|
||||
},
|
||||
Dir = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Select(x => new
|
||||
{
|
||||
freq_base = Variaveis.OperacaoEmAndamento.DispMvd.Dados.tmrRegistradorDIR.IntervalHz,
|
||||
endereco = x.DirMotor._EnderecoCAN_Tx,
|
||||
angulo = x.DirMotor.Angulo,
|
||||
angulo_sp = x.DirMotor.Angulo_SP,
|
||||
|
|
@ -51,15 +236,18 @@ namespace AgroBase.Services.Operadores
|
|||
sentido = x.DirMotor.Sentido,
|
||||
sentido_sp = x.DirMotor.Sentido_SP,
|
||||
sentido_real = x.DirMotor.SentidoReal,
|
||||
rpm = x.DirMotor.RPM,
|
||||
freq = new {
|
||||
io = x.DirMotor.Leitura?.NumeroPulsos?.frequencia ?? 0,
|
||||
pulsos = x.DirMotor.Leitura?.EntradaIN1?.frequencia ?? 0
|
||||
pulsos = x.DirMotor.Leitura?.EntradaIN1?.frequencia ?? 0,
|
||||
rpm = x.DirMotor.Leitura?.RPM?.frequencia ?? 0
|
||||
}
|
||||
}).ToArray(),
|
||||
Mov = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Select(x => new
|
||||
{
|
||||
freq_base = Variaveis.OperacaoEmAndamento.DispMvd.Dados.tmrRegistradorMOV.IntervalHz,
|
||||
endereco = x.MovMotor._EnderecoCAN_Tx,
|
||||
cod_erro = (int)x.MovMotor.CodigoAlarme,
|
||||
cod_erro = x.MovMotor.CodigoAlarme,
|
||||
rpm = x.MovMotor.RPM_Roda,
|
||||
rpm_sp = x.MovMotor.RPM_SP_Leitura,
|
||||
tensao = x.MovMotor.Tensao,
|
||||
|
|
@ -70,16 +258,17 @@ namespace AgroBase.Services.Operadores
|
|||
freado = x.MovMotor.Leitura?.Freado ?? false,
|
||||
freq = new
|
||||
{
|
||||
erro = x.MovMotor.Leitura?.CodigoAlarme?.valor ?? 0,
|
||||
rpm = x.MovMotor.Leitura?.ERPM?.valor ?? 0,
|
||||
tensao = x.MovMotor.Leitura?.Tensao?.valor ?? 0,
|
||||
corrente_motor = x.MovMotor.Leitura?.CorrenteMotor?.valor ?? 0,
|
||||
corrente_barramento = x.MovMotor.Leitura?.CorrenteBarramento?.valor ?? 0,
|
||||
temperatura = x.MovMotor.Leitura?.Temperatura?.valor ?? 0,
|
||||
erro = x.MovMotor.Leitura?.CodigoAlarme?.frequencia ?? 0,
|
||||
rpm = x.MovMotor.Leitura?.ERPM?.frequencia ?? 0,
|
||||
tensao = x.MovMotor.Leitura?.Tensao?.frequencia ?? 0,
|
||||
corrente_motor = x.MovMotor.Leitura?.CorrenteMotor?.frequencia ?? 0,
|
||||
corrente_barramento = x.MovMotor.Leitura?.CorrenteBarramento?.frequencia ?? 0,
|
||||
temperatura = x.MovMotor.Leitura?.Temperatura?.frequencia ?? 0,
|
||||
}
|
||||
}).ToArray(),
|
||||
Sen = new
|
||||
{
|
||||
freq_base = Variaveis.OperacaoEmAndamento.DispSen.Dados.tmrRegistrador.IntervalHz,
|
||||
sensores = Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.Select(x => new
|
||||
{
|
||||
id = x.ID,
|
||||
|
|
@ -115,14 +304,72 @@ namespace AgroBase.Services.Operadores
|
|||
};
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await Variaveis.MqttService.PublishAsync(
|
||||
Variaveis.MqttService.Topicos.First(x => x.Topico == TopicoMQTT),
|
||||
JsonConvert.SerializeObject(dados)
|
||||
);
|
||||
await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(dados));
|
||||
});
|
||||
}
|
||||
|
||||
public void EnviarDadosOperacao()
|
||||
{
|
||||
if (Variaveis.OperacaoEmAndamento.DispMvd == null) return;
|
||||
|
||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||
|
||||
var dados = new
|
||||
{
|
||||
comando = (int)TipoComando.SetDadosOperacao,
|
||||
dispositivo = (int)T_Code.Mod,
|
||||
payload = new
|
||||
{
|
||||
modo = (int)Variaveis.OperacaoEmAndamento.Modo,
|
||||
sonar_ativado = _Controle.SonarAtivado,
|
||||
modulos_mandatorios = Variaveis.OperacaoEmAndamento.ModulosMandatorios.Select(x => (int)x.Dispositivo).ToArray(),
|
||||
parametros_mandatorios = Variaveis.OperacaoEmAndamento.ParametrosMandatorios.Select(x => (int)x.Parametro).ToArray(),
|
||||
Mov = new
|
||||
{
|
||||
percent_vel_max = _Controle.PercentualVelocidadeMax,
|
||||
percent_vel_min = _Controle.PercentualVelocidadeMin,
|
||||
},
|
||||
Dir = new
|
||||
{
|
||||
angulo_max = _Controle.Angulo_Max,
|
||||
vel_movimento = _Controle.VelocidadeMP,
|
||||
tipo_controle = (int)_Controle.TipoControleDirecional,
|
||||
mpc = new
|
||||
{
|
||||
pontos = Variaveis.OperacaoEmAndamento.Trajetoria?._TrajetoriaFixa?
|
||||
.Select(p => new
|
||||
{
|
||||
lat = p.Posicao.Latitude,
|
||||
lon = p.Posicao.Longitude,
|
||||
tipo = (int)p.Tipo,
|
||||
distanciaMargem = p.LarguraCorredor * 0.8
|
||||
})
|
||||
.ToList(),
|
||||
horizonte = 4.0,
|
||||
angulo_max_graus = _Controle.Angulo_Max,
|
||||
distancia_entre_eixos = (VariaveisEquipamento.DistanciaEntreEixos / 100.0),
|
||||
velocidade_min = FuncoesMatematicas.CalculaVelocidadeMsPercentual(_Controle.PercentualVelocidadeMin),
|
||||
velocidade_max = FuncoesMatematicas.CalculaVelocidadeMsPercentual(_Controle.PercentualVelocidadeMax)
|
||||
}
|
||||
},
|
||||
Atu = new
|
||||
{
|
||||
percent_vertical_deteccao = _Controle.PercentualInicioPulverizacao,
|
||||
capacidade_reservatorio = Variaveis.OperacaoEmAndamento.CapacidadeReservatorio,
|
||||
pressao_linha = _Controle.PressaoLinha,
|
||||
},
|
||||
Snr = new
|
||||
{
|
||||
mx_id = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Id
|
||||
}
|
||||
}
|
||||
};
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(dados));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,109 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using AgroBase.Models;
|
||||
using AgroBase.Models.Operadores;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static AgroBase.Models.Operadores.OperadoresModels;
|
||||
using static MqttService;
|
||||
|
||||
namespace AgroBase.Services.Operadores
|
||||
{
|
||||
public class ManagerWorkerService
|
||||
{
|
||||
private string TopicoMQTT_Tx = "operador/manager/rx";
|
||||
private MqttTopicosModel topicoTx;
|
||||
private string TopicoMQTT_Rx = "operador/manager/tx";
|
||||
private MqttTopicosModel topicoRx;
|
||||
public ManagerWorkerModel DadosLeitura = new ManagerWorkerModel();
|
||||
|
||||
private bool DebugMode = true;
|
||||
|
||||
private void MostrarLog(string message, int limite = 500)
|
||||
{
|
||||
if (DebugMode)
|
||||
{
|
||||
Console.WriteLine($"[ManagerWorker] {message.Substring(0, Math.Min(limite, message.Length))}{(message.Length > limite ? "..." : "")}");
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> IniciarProcessamento()
|
||||
{
|
||||
topicoRx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Rx, true, 2, MqttCallback);
|
||||
topicoTx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Tx);
|
||||
|
||||
DadosLeitura.IniciadoEm = DateTime.Now;
|
||||
DadosLeitura.Iniciado = true;
|
||||
|
||||
bool pronto() => DadosLeitura.Pronto;
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 5000);
|
||||
if (pronto())
|
||||
{
|
||||
MostrarLog("Processamento iniciado com sucesso");
|
||||
return true;
|
||||
}
|
||||
|
||||
MostrarLog("Timeout ao iniciar script");
|
||||
DadosLeitura.ReiniciarEstado();
|
||||
return false;
|
||||
}
|
||||
|
||||
private async Task<bool> MqttCallback(MqttTopicosMensagensModel Mensagem)
|
||||
{
|
||||
if (!DadosLeitura.Pronto && Mensagem.Momento > DadosLeitura.IniciadoEm && Mensagem.Mensagem == "OK")
|
||||
{
|
||||
DadosLeitura.ProntoEm = DateTime.Now;
|
||||
DadosLeitura.Pronto = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
DadosLeitura.Leitura = JsonConvert.DeserializeObject<WorkerMessageModel<ManagerWorkerMessageResponseModel>>(Mensagem.Mensagem);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MostrarLog($"Erro ao deserializar mensagem: {e.Message}");
|
||||
}
|
||||
if (DadosLeitura.Leitura != null)
|
||||
{
|
||||
AtualizarDadosLeitura(DadosLeitura.Leitura);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void AtualizarDadosLeitura(WorkerMessageModel<ManagerWorkerMessageResponseModel> msg)
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.TempoAguardando = DateTimeOffset.FromUnixTimeSeconds(msg.obj.tempo_aguardando).UtcDateTime.AddSeconds(msg.obj.tempo_aguardando % 1).ToLocalTime();
|
||||
|
||||
Variaveis.OperacaoEmAndamento.StatusAtual = msg.obj.status_operacao;
|
||||
Variaveis.OperacaoEmAndamento.OperacaoLiberada = msg.obj.operacao_liberada;
|
||||
|
||||
VariaveisOperacao.Operadores.ModulosSaude = new System.Collections.Generic.List<ManagerWorkerMessageResponseModulosPendentesModel>(msg.obj.status_modulos);
|
||||
|
||||
var mandatorios = Variaveis.OperacaoEmAndamento.ModulosMandatorios.Select(x => x.Dispositivo).ToList();
|
||||
var mods_com_falha = msg.obj.status_modulos.Where(x => mandatorios.Contains(x.modulo) && x.status == Enums.StatusModulo.Falha);
|
||||
var motivos_por_modulo = mods_com_falha.Select(x => $"{x.modulo}: {string.Join("; ", x.motivos)}");
|
||||
Variaveis.OperacaoEmAndamento.ErroOperacaoLiberada = string.Join(Environment.NewLine + Environment.NewLine, motivos_por_modulo);
|
||||
|
||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||
_Controle.Angulo = msg.obj.comando.angulo;
|
||||
_Controle.TipoMovimento = msg.obj.comando.tipo_movimento;
|
||||
_Controle.PercentualVelocidadeSP = msg.obj.comando.percentual_velocidade;
|
||||
_Controle.SimulacaoMPC = msg.obj.comando.simulacao;
|
||||
|
||||
if (Variaveis.OperacaoEmAndamento.StatusAtual == Enums.StatusOperacao.Concluido && Variaveis.OperacaoEmAndamento.Iniciado)
|
||||
{
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await Variaveis.OperacaoEmAndamento.FinalizarOperacao();
|
||||
});
|
||||
}
|
||||
|
||||
DadosLeitura.Leitura.MomentoLog = DateTime.Now;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -4,28 +4,26 @@ using Newtonsoft.Json;
|
|||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using static AgroBase.Models.Enums;
|
||||
using static AgroBase.Models.Operadores.OperadoresModels;
|
||||
using static MqttService;
|
||||
|
||||
namespace AgroBase.Services.Operadores
|
||||
{
|
||||
public class VisualWorkerService
|
||||
{
|
||||
private string mqtt_topico = "agrobot/operador/sonar";
|
||||
private MqttTopicosModel topico;
|
||||
private Process pythonProcess;
|
||||
private int cameraIndex = -1;
|
||||
public string TopicoMQTT_Tx = "operador/visual/rx";
|
||||
private MqttTopicosModel topicoTx;
|
||||
public string TopicoMQTT_Rx = "operador/visual/tx";
|
||||
private MqttTopicosModel topicoRx;
|
||||
public VisualWorkerModel DadosLeitura = new VisualWorkerModel();
|
||||
public int TimeoutRespostaComando { get; set; } = 10;
|
||||
public ConcurrentDictionary<VisualWorkerCommandType, VisualWorkerMessageModel> FilaComandos = new ConcurrentDictionary<VisualWorkerCommandType, VisualWorkerMessageModel>();
|
||||
public AsyncTaskTimerModel tmrFila;
|
||||
|
||||
public int TimeoutRespostaComando = 10;
|
||||
public ConcurrentDictionary<VisualWorkerCommandType, WorkerMessageModel<VisualWorkerMessageResponseModel>> FilaComandos = new ConcurrentDictionary<VisualWorkerCommandType, WorkerMessageModel<VisualWorkerMessageResponseModel>>();
|
||||
private Dictionary<VisualWorkerCommandType, Func<bool>> mapaRespostas;
|
||||
|
||||
|
||||
private bool DebugMode = true;
|
||||
|
||||
private void MostrarLog(string message, int limite = 500)
|
||||
|
|
@ -36,55 +34,27 @@ namespace AgroBase.Services.Operadores
|
|||
}
|
||||
}
|
||||
|
||||
public async Task<bool> IniciarProcessamento(int _cameraIndex, int distanciaMax = 3000, int sessoesSolo = 25, int percentualSolo = 30, bool iniciarScript = true)
|
||||
public async Task<bool> IniciarProcessamento()
|
||||
{
|
||||
if (_cameraIndex == -1)
|
||||
{
|
||||
MostrarLog("Camera nao selecionada");
|
||||
DadosLeitura.ReiniciarEstado();
|
||||
return false;
|
||||
}
|
||||
topicoRx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Rx, true, 2, MqttCallback);
|
||||
topicoTx = await Variaveis.MqttService.AdicionarNovoTopico(TopicoMQTT_Tx);
|
||||
|
||||
mapaRespostas = new Dictionary<VisualWorkerCommandType, Func<bool>>
|
||||
{
|
||||
{ VisualWorkerCommandType.Ping, () => DadosLeitura.Leitura.obj.ping?.newData ?? false },
|
||||
{ VisualWorkerCommandType.Get_Status_Dispositivo, () => DadosLeitura.Leitura.obj.device_status?.newData ?? false },
|
||||
{ VisualWorkerCommandType.Get_IMU_Data, () => DadosLeitura.Leitura.obj.imu?.newData ?? false },
|
||||
{ VisualWorkerCommandType.Get_RGB_Frame, () => DadosLeitura.Leitura.obj.rgb_frame?.newData ?? false },
|
||||
{ VisualWorkerCommandType.Get_Heatmap_Frame, () => DadosLeitura.Leitura.obj.heatmap_frame?.newData ?? false },
|
||||
{ VisualWorkerCommandType.Calibrar_Grades, () => DadosLeitura.Leitura.obj.calibragem?.newData ?? false },
|
||||
{ VisualWorkerCommandType.Get_Analise_Anomalia, () => DadosLeitura.Leitura.obj.analise_anomalias?.newData ?? false },
|
||||
{ VisualWorkerCommandType.Get_Analise_Solo, () => DadosLeitura.Leitura.obj.analise_solo?.newData ?? false },
|
||||
{ VisualWorkerCommandType.Get_Radar_2D, () => DadosLeitura.Leitura.obj.radar_2d?.newData ?? false },
|
||||
{ VisualWorkerCommandType.Get_Segmentacao_Semantica, () => DadosLeitura.Leitura.obj.segmentacao?.newData ?? false },
|
||||
{ VisualWorkerCommandType.SalvarFrames, () => DadosLeitura.Leitura.obj?.save_frames?.newData ?? false },
|
||||
};
|
||||
|
||||
cameraIndex = _cameraIndex;
|
||||
|
||||
topico = await Variaveis.MqttService.AdicionarNovoTopico(mqtt_topico, true, 2, MqttCallback);
|
||||
|
||||
if (iniciarScript)
|
||||
{
|
||||
pythonProcess = PythonService.RunScript(Path.Combine("visual_worker", "main.py"), new string[] {
|
||||
mqtt_topico,
|
||||
cameraIndex.ToString(),
|
||||
distanciaMax.ToString(),
|
||||
sessoesSolo.ToString(),
|
||||
percentualSolo.ToString()
|
||||
});
|
||||
}
|
||||
|
||||
DadosLeitura.IniciadoEm = DateTime.Now;
|
||||
DadosLeitura.Iniciado = true;
|
||||
|
||||
tmrFila?.Dispose();
|
||||
tmrFila = new AsyncTaskTimerModel("tmrVisualWorker_Fila", tmrFila_Tick, 10);
|
||||
tmrFila.Start();
|
||||
|
||||
bool pronto() => DadosLeitura.Pronto;
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 8000);
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 5000);
|
||||
if (pronto())
|
||||
{
|
||||
tmrFila?.Dispose();
|
||||
tmrFila = new AsyncTaskTimerModel("tmrVisualWorker_Fila", tmrFila_Tick, 10);
|
||||
tmrFila.Start();
|
||||
|
||||
MostrarLog("Processamento iniciado com sucesso");
|
||||
return true;
|
||||
}
|
||||
|
|
@ -94,33 +64,22 @@ namespace AgroBase.Services.Operadores
|
|||
return false;
|
||||
}
|
||||
|
||||
public async Task<bool> Encerrar()
|
||||
{
|
||||
if (pythonProcess != null && !pythonProcess.HasExited)
|
||||
{
|
||||
pythonProcess.Kill();
|
||||
}
|
||||
pythonProcess = null;
|
||||
await Variaveis.MqttService.UnsubscribeAsync(topico);
|
||||
topico = null;
|
||||
tmrFila?.Dispose();
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool AdicionarComandoNaFila(VisualWorkerCommandType cmd, dynamic payload = null)
|
||||
{
|
||||
VisualWorkerMessageModel msg = new VisualWorkerMessageModel()
|
||||
WorkerMessageModel<VisualWorkerMessageResponseModel> msg = new WorkerMessageModel<VisualWorkerMessageResponseModel>()
|
||||
{
|
||||
AdicionadoEm = DateTime.Now,
|
||||
tipo_cmd = VisualWorkerMessageType.TX,
|
||||
cmd = cmd,
|
||||
payload = payload
|
||||
AdicionadoEm = DateTime.Now,
|
||||
payload = payload,
|
||||
obj = new VisualWorkerMessageResponseModel()
|
||||
{
|
||||
cmd = cmd,
|
||||
}
|
||||
};
|
||||
|
||||
bool sucesso = FilaComandos.TryAdd(msg.cmd, msg);
|
||||
bool sucesso = FilaComandos.TryAdd(cmd, msg);
|
||||
if (!sucesso)
|
||||
{
|
||||
MostrarLog($"Mensagem {msg.cmd} nao adicionada na fila");
|
||||
MostrarLog($"Mensagem {cmd} nao adicionada na fila");
|
||||
}
|
||||
|
||||
return sucesso;
|
||||
|
|
@ -138,11 +97,14 @@ namespace AgroBase.Services.Operadores
|
|||
var msg = FilaComandos.Where(x => !x.Value.Enviado).OrderBy(x => x.Value.AdicionadoEm).FirstOrDefault();
|
||||
if (msg.Value == null) return;
|
||||
|
||||
await Variaveis.MqttService.PublishAsync(
|
||||
topico,
|
||||
JsonConvert.SerializeObject(msg.Value, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
|
||||
true
|
||||
);
|
||||
var mensagem = new
|
||||
{
|
||||
comando = (int)msg.Value.obj.cmd,
|
||||
dispositivo = (int)T_Code.Snr,
|
||||
payload = msg.Value.payload
|
||||
};
|
||||
|
||||
await Variaveis.MqttService.PublishAsync(topicoTx, JsonConvert.SerializeObject(mensagem), true);
|
||||
|
||||
msg.Value.Enviado = true;
|
||||
msg.Value.EnviadoEm = DateTime.Now;
|
||||
|
|
@ -157,17 +119,17 @@ namespace AgroBase.Services.Operadores
|
|||
}
|
||||
else
|
||||
{
|
||||
var msgRx = JsonConvert.DeserializeObject<VisualWorkerMessageModel>(Mensagem.Mensagem);
|
||||
var msgRx = JsonConvert.DeserializeObject<WorkerMessageModel<VisualWorkerMessageResponseModel>>(Mensagem.Mensagem);
|
||||
|
||||
if (msgRx == null || msgRx.tipo_cmd == VisualWorkerMessageType.TX)
|
||||
if (msgRx == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
FilaComandos.TryGetValue(msgRx.cmd, out var msgTx);
|
||||
FilaComandos.TryGetValue(msgRx.obj.cmd, out var msgTx);
|
||||
if (msgTx != null)
|
||||
{
|
||||
FilaComandos.TryRemove(msgTx.cmd, out var msg);
|
||||
FilaComandos.TryRemove(msgTx.obj.cmd, out var msg);
|
||||
}
|
||||
|
||||
AtualizarDadosLeitura(msgRx);
|
||||
|
|
@ -175,58 +137,17 @@ namespace AgroBase.Services.Operadores
|
|||
return true;
|
||||
}
|
||||
|
||||
private void AtualizarDadosLeitura(VisualWorkerMessageModel msg)
|
||||
private void AtualizarDadosLeitura(WorkerMessageModel<VisualWorkerMessageResponseModel> msg)
|
||||
{
|
||||
switch (msg.cmd)
|
||||
if (DadosLeitura.Leitura.obj == null)
|
||||
{
|
||||
case VisualWorkerCommandType.Ping:
|
||||
DadosLeitura.Leitura.obj = new VisualWorkerMessageResponseModel();
|
||||
}
|
||||
switch (msg.obj.cmd)
|
||||
{
|
||||
case VisualWorkerCommandType.SalvarFrames:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.ping = msg.obj.ping.Clone();
|
||||
break;
|
||||
}
|
||||
case VisualWorkerCommandType.Get_Status_Dispositivo:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.device_status = msg.obj.device_status?.Clone();
|
||||
break;
|
||||
}
|
||||
case VisualWorkerCommandType.Get_IMU_Data:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.imu = msg.obj?.imu?.Clone();
|
||||
break;
|
||||
}
|
||||
case VisualWorkerCommandType.Get_RGB_Frame:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.rgb_frame = msg.obj?.rgb_frame?.Clone();
|
||||
break;
|
||||
}
|
||||
case VisualWorkerCommandType.Get_Heatmap_Frame:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.heatmap_frame = msg.obj?.heatmap_frame?.Clone();
|
||||
break;
|
||||
}
|
||||
case VisualWorkerCommandType.Calibrar_Grades:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.calibragem = msg.obj?.calibragem?.Clone();
|
||||
break;
|
||||
}
|
||||
case VisualWorkerCommandType.Get_Analise_Anomalia:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.analise_anomalias = msg.obj?.analise_anomalias?.Clone();
|
||||
break;
|
||||
}
|
||||
case VisualWorkerCommandType.Get_Analise_Solo:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.analise_solo = msg.obj?.analise_solo?.Clone();
|
||||
break;
|
||||
}
|
||||
case VisualWorkerCommandType.Get_Radar_2D:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.radar_2d = msg.obj?.radar_2d?.Clone();
|
||||
break;
|
||||
}
|
||||
case VisualWorkerCommandType.Get_Segmentacao_Semantica:
|
||||
{
|
||||
DadosLeitura.Leitura.obj.segmentacao = msg.obj?.segmentacao?.Clone();
|
||||
DadosLeitura.Leitura.obj.save_frames = msg.obj.save_frames.Clone();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,9 +95,8 @@ namespace AgroBase.Services
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = ModbusService._PortaModbus.PortName,
|
||||
Dispositivo = T_Code.Pzm,
|
||||
Erro = !Iniciado,
|
||||
Endereco = ModbusService._PortaModbus.PortName,
|
||||
Versao = "17"
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -236,6 +236,27 @@ namespace AgroBase.Services
|
|||
DispositivosMapeados.Remove(Dispositivo);
|
||||
}
|
||||
|
||||
foreach (var cam in VariaveisOperacao.Operadores.CamerasConectadas.Where(x => x.Index > -1))
|
||||
{
|
||||
if (!DispositivosMapeados.Any(x => x.Dispositivo == cam.Dispositivo))
|
||||
{
|
||||
DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Dispositivo = cam.Dispositivo,
|
||||
Endereco = "USB",
|
||||
Versao = cam.Version
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var cam in DispositivosMapeados.Where(x => x.Tipo == TipoConexao.USB))
|
||||
{
|
||||
if (!VariaveisOperacao.Operadores.CamerasConectadas.Any(x => x.Dispositivo == cam.Dispositivo))
|
||||
{
|
||||
DispositivosMapeados.Remove(cam);
|
||||
}
|
||||
}
|
||||
|
||||
AtualizarDispositivos();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -285,68 +306,6 @@ namespace AgroBase.Services
|
|||
});
|
||||
}
|
||||
|
||||
private static bool ProcessarRespostaDispositivo(SerialPort Porta)
|
||||
{
|
||||
if (Porta.BytesToRead <= 15 || Porta.BytesToRead >= 30)
|
||||
{
|
||||
//VerificaRespostaGPS(Porta);
|
||||
VerificarRespostaPortasDesconhecidas(Porta);
|
||||
return false;
|
||||
}
|
||||
|
||||
string Recebido = ReadLineWithTimeout(Porta, 1000);
|
||||
|
||||
if (Recebido.Length > 2)
|
||||
{
|
||||
T_Code Dispositivo = T_Code.Vzo;
|
||||
F_Code Verificacao = F_Code.Nda;
|
||||
string Versao = "0";
|
||||
|
||||
var Dados = Recebido.Split(SplitMessage[0]);
|
||||
|
||||
if (Dados.Length <= 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
string Mod_ID = Dados[0];
|
||||
|
||||
int.TryParse(Dados[1], out int check);
|
||||
|
||||
if (check == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Verificacao = (F_Code)check;
|
||||
|
||||
if (Verificacao == F_Code.MsgTx)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
Dispositivo = (T_Code)(int.Parse(Dados[2]));
|
||||
|
||||
Versao = Dados[3];
|
||||
|
||||
if (Dispositivo != T_Code.Vzo && !DispositivosMapeados.Any(x => x.Dispositivo == Dispositivo && x.Mod_ID == Mod_ID))
|
||||
{
|
||||
DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = Porta.PortName,
|
||||
Dispositivo = Dispositivo,
|
||||
Erro = Verificacao == F_Code.ErrRx,
|
||||
Versao = Versao,
|
||||
Mod_ID = Mod_ID,
|
||||
});
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static string ReadLineWithTimeout(SerialPort porta, int timeout)
|
||||
{
|
||||
using (CancellationTokenSource cts = new CancellationTokenSource())
|
||||
|
|
@ -385,7 +344,6 @@ namespace AgroBase.Services
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public static void AtualizarDispositivos()
|
||||
{
|
||||
bool PrimeiraExecucao = !Variaveis.DispositivosConectados.Any();
|
||||
|
|
@ -531,22 +489,6 @@ namespace AgroBase.Services
|
|||
}
|
||||
}
|
||||
|
||||
public static byte[] VerificarRespostaPortasDesconhecidas(SerialPort Porta)
|
||||
{
|
||||
if (Porta != null && Porta.IsOpen)
|
||||
{
|
||||
int bytesToRead = Porta.BytesToRead;
|
||||
byte[] buffer = new byte[bytesToRead];
|
||||
Porta.Read(buffer, 0, bytesToRead);
|
||||
//Porta.DiscardInBuffer();
|
||||
return buffer;
|
||||
}
|
||||
else
|
||||
{
|
||||
return new byte[] { };
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] LerDadosDaPortaSerial(SerialPort porta, int tamanhoEsperado, int Timeout = 500)
|
||||
{
|
||||
DateTime inicio = DateTime.Now;
|
||||
|
|
@ -590,16 +532,6 @@ namespace AgroBase.Services
|
|||
return buffer.ToArray();
|
||||
}
|
||||
|
||||
public static async Task AguardaRespostaPorta(SerialPort _Porta, int Timeout)
|
||||
{
|
||||
DateTime inicio = DateTime.Now;
|
||||
while (_Porta.BytesToRead == 0 && DateTime.Now < inicio.AddMilliseconds(Timeout))
|
||||
{
|
||||
await Task.Delay(50);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void AtualizarConsole(string msg)
|
||||
{
|
||||
Console.WriteLine(msg);
|
||||
|
|
|
|||
|
|
@ -65,9 +65,8 @@ namespace AgroBase.Services
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = ModbusService._PortaModbus.PortName,
|
||||
Dispositivo = T_Code.A05,
|
||||
Erro = !Iniciado,
|
||||
Endereco = ModbusService._PortaModbus.PortName,
|
||||
Versao = "1"
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -105,9 +105,8 @@ namespace AgroBase.Services
|
|||
{
|
||||
SerialService.DispositivosMapeados.Add(new DispositivoDetalhesModel()
|
||||
{
|
||||
Endereco = ModbusService._PortaModbus.PortName,
|
||||
Dispositivo = T_Code.Wit,
|
||||
Erro = !Iniciado,
|
||||
Endereco = ModbusService._PortaModbus.PortName,
|
||||
Versao = _DadosLeitura.Versao,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
0:00:00 Tab1 FinishNav1
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:18:16 Widget Closed: StatusBubble
|
||||
0:21:01 Microsoft.Shutdown.OnWindowClosing
|
||||
0:02:58 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:00 Startup
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
|
|
@ -14,8 +15,7 @@
|
|||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:00:19 Widget Closed: StatusBubble
|
||||
0:03:50 Microsoft.Shutdown.OnWindowClosing
|
||||
0:03:43 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:00 Startup
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
|
|
@ -28,8 +28,9 @@
|
|||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:02:29 Widget Closed: StatusBubble
|
||||
0:07:13 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:16 Widget Closed: StatusBubble
|
||||
0:03:23 Widget Closed: StatusBubble
|
||||
0:09:24 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:00 Startup
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
|
|
@ -42,7 +43,9 @@
|
|||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:01:40 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:55 Widget Closed: StatusBubble
|
||||
0:01:55 Widget Closed: StatusBubble
|
||||
0:03:42 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:00 Startup
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
|
|
@ -55,8 +58,8 @@
|
|||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:01:17 Widget Closed: StatusBubble
|
||||
0:01:43 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:10 Widget Closed: StatusBubble
|
||||
0:04:47 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:00 Startup
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
|
|
@ -69,8 +72,8 @@
|
|||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:00:21 Widget Closed: StatusBubble
|
||||
0:03:59 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:28 Widget Closed: StatusBubble
|
||||
0:02:53 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:00 Startup
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
|
|
@ -83,7 +86,8 @@
|
|||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:01:26 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:15 Widget Closed: StatusBubble
|
||||
0:03:25 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:00 Startup
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
|
|
@ -96,17 +100,5 @@
|
|||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:01:30 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:00 Startup
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
0:00:00 Microsoft.NewBrowser_Popup
|
||||
0:00:00 Microsoft.BrowserList.AddBrowser
|
||||
0:00:00 Browser1 Insert active Tab1 at 0
|
||||
0:00:00 Tab1 StartNav1 #auto_toplevel
|
||||
0:00:00 Tab1 StartNav2 #typed
|
||||
0:00:00 Tab1 FinishNav1
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:01:31 Microsoft.Shutdown.OnWindowClosing
|
||||
0:00:18 Widget Closed: StatusBubble
|
||||
0:05:24 Microsoft.Shutdown.OnWindowClosing
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
|
@ -1,3 +1,3 @@
|
|||
2025/05/28-15:48:13.367 7670 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||
2025/05/28-15:48:13.373 7670 Recovering log #3
|
||||
2025/05/28-15:48:13.376 7670 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||
2025/06/04-16:07:07.940 1a30 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||
2025/06/04-16:07:07.946 1a30 Recovering log #3
|
||||
2025/06/04-16:07:07.949 1a30 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
2025/05/28-15:45:47.094 1cd4 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||
2025/05/28-15:45:47.100 1cd4 Recovering log #3
|
||||
2025/05/28-15:45:47.104 1cd4 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||
2025/06/04-15:46:51.069 c04 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||
2025/06/04-15:46:51.074 c04 Recovering log #3
|
||||
2025/06/04-15:46:51.077 c04 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||
|
|
|
|||
|
|
@ -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"}}}
|
||||
|
|
@ -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}
|
||||