agrobot_base/AgroBase/AgroBase/Forms/frmPrincipal.cs

471 lines
16 KiB
C#

using AgroBase.Forms;
using AgroBase.Forms.Atuador;
using AgroBase.Forms.Movimentacao;
using AgroBase.Forms.Operacoes;
using AgroBase.Forms.Sensoriamento;
using AgroBase.Models;
using AgroBase.Services;
using System;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Windows.Forms;
using static AgroBase.Models.Enums;
using System.Timers;
namespace AgroBase
{
public partial class frmPrincipal : Form
{
System.Timers.Timer tmrDispositivos = new System.Timers.Timer() { Interval = 1000, Enabled = false };
System.Timers.Timer tmrAtualizacaoArquivos = new System.Timers.Timer() { Interval = 300, Enabled = false };
public frmPrincipal()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
tmrDispositivos.Elapsed += TmrDispositivos_Elapsed;
tmrDispositivos.Start();
tmrAtualizacaoArquivos.Elapsed += TmrAtualizacaoArquivos_Elapsed;
tmrAtualizacaoArquivos.Start();
AtualizaDadosGerais();
btnJoyAtt_Click(new object(), new EventArgs());
cmbModoOperacao.Items.Clear();
cmbModoOperacao.Items.AddRange(Enum.GetNames(typeof(ModoOperacao)));
cmbModoOperacao.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Modo;
}
private void frmPrincipal_FormClosing(object sender, FormClosingEventArgs e)
{
frmInstancial.EncerrarProcessos().ConfigureAwait(false);
e.Cancel = true;
}
public void AtualizaDadosGerais()
{
Func<bool> funcVel = new Func<bool>(() =>
{
tkbVelocidade.Minimum = 0;
tkbVelocidade.Maximum = 100;
FuncoesGlobais.PreencheValorTrackBar(tkbVelocidade, Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP);
return true;
});
FuncoesGlobais.ExecutarMetodoComVerificacaoCrossThread(tkbVelocidade, funcVel);
Func<bool> funcAng = new Func<bool>(() =>
{
tkbAngulo.Minimum = 0;
tkbAngulo.Maximum = 90;
FuncoesGlobais.PreencheValorTrackBar(tkbAngulo, Variaveis.OperacaoEmAndamento.Controle.Angulo);
return true;
});
FuncoesGlobais.ExecutarMetodoComVerificacaoCrossThread(tkbAngulo, funcAng);
Func<bool> funcKmh = new Func<bool>(() =>
{
trkKmh.Minimum = 0;
trkKmh.Maximum = 100;
return true;
});
FuncoesGlobais.ExecutarMetodoComVerificacaoCrossThread(trkKmh, funcKmh);
Func<bool> funcRpm = new Func<bool>(() =>
{
trkRPM.Minimum = Variaveis.OperacaoEmAndamento.Controle.RPM_Min;
trkRPM.Maximum = VariaveisEquipamento.RPM_Max_Roda;
FuncoesGlobais.PreencheValorTrackBar(trkRPM, Variaveis.OperacaoEmAndamento.Controle.RPM_SP);
int percentual = Convert.ToInt32((trkRPM.Value / (double)VariaveisEquipamento.RPM_Max_Roda) * 100.0);
AtualizaRPM(percentual);
return true;
});
FuncoesGlobais.ExecutarMetodoComVerificacaoCrossThread(trkRPM, funcRpm);
}
private void TmrAtualizacaoArquivos_Elapsed(object sender, ElapsedEventArgs e)
{
tmrAtualizacaoArquivos.Stop();
Func<bool> func = new Func<bool>(() =>
{
lblProgressoAtualizacao.Text = VersionamentoService.AtualizandoArquivos ? $"({VersionamentoService.ProgressoAtualizacao.ToString("0.00")}%) Atualizando arquivos..." : VersionamentoService.ResultadoAtualizacao;
pgbAtualizacaoArquivos.Value = (int)VersionamentoService.ProgressoAtualizacao;
return true;
});
FuncoesGlobais.ExecutarMetodoComVerificacaoCrossThread(pgbAtualizacaoArquivos, func);
tmrAtualizacaoArquivos.Start();
}
private void btnForcarAtualizacao_Click(object sender, EventArgs e)
{
VersionamentoService.ForcarDownloadArquivos = true;
VersionamentoService.AtualizarArquivoVersionamento(true).ConfigureAwait(false);
}
#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,
new SerialPort()
);
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 async void TmrDispositivos_Elapsed(object sender, ElapsedEventArgs e)
{
((System.Timers.Timer)sender).Stop();
Func<bool> funcao = new Func<bool>(() =>
{
lstDisponiveis.Items.Clear();
lstDisponiveis.Items.AddRange(
SerialService.DispositivosMapeados
.GroupBy(x => x.Dispositivo)
.Select(x => new ListViewItem()
{
Text =
x.FirstOrDefault().Endereco + " - " + Enum.GetName(typeof(T_Code), x.Key) + " v" + x.FirstOrDefault().Versao +
(SerialService.DispositivosMultiplos.Contains(x.FirstOrDefault().Dispositivo) ? (" (" + string.Join(", ", x.Where(y => y.Conectado).Select(y => y.Mod_ID)) + ")") :
"") + " - " +
(x.Any(y => y.Conectado) ? "Conectado" : "Desconectado")
}).ToArray()
);
if (SerialService.DispositivosMapeados.Count == 0)
{
Variaveis.DispositivosConectados.Where(x => x.Dados.GetStatusConexao()).ToList().ForEach(x => x.AcaoDesconectar());
}
Variaveis.DispositivosConectados.ForEach(x =>
{
x.AcaoConexao();
});
bool opLiberada = Variaveis.OperacaoEmAndamento.OperacaoLiberada;
lblStripOperacaoLiberada.Text = "Operação Liberada: " + (opLiberada ? "Sim" : "Não");
lblStripOperacaoLiberada.ForeColor = opLiberada ? Color.Green : Color.Red;
return true;
});
FuncoesGlobais.ExecutarMetodoComVerificacaoCrossThread(lstDisponiveis, funcao);
if (chbConexaoautomatica.Checked)
{
await SerialService.RealizarVarreduraPortasUSB((System.Timers.Timer)sender);
AtualizaDadosGerais();
}
((System.Timers.Timer)sender).Start();
}
private void cmbDispositivos_SelectedIndexChanged(object sender, EventArgs e)
{
btnJoyAtt_Click(sender, e);
}
#endregion
#region OPERACAO
private void cmbModoOperacao_SelectedIndexChanged(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento = OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModoOperacao.SelectedIndex);
}
private void btnIniciarOperacao_Click(object sender, EventArgs e)
{
if (Variaveis.OperacaoEmAndamento.Iniciado)
{
Variaveis.OperacaoEmAndamento.FinalizarOperacao();
btnIniciarOperacao.Text = "Abrir Operação";
cmbModoOperacao.Enabled = true;
}
else
{
Variaveis.OperacaoEmAndamento.AbrirForm();
}
lblStripOperacaoStatus.Text = Variaveis.OperacaoEmAndamento.Iniciado ? "Iniciado" : "Não iniciado";
}
private void btnConfigurarOperacao_Click(object sender, EventArgs e)
{
frmParametrizacaoOperacao frmParametrizacaoOperacao = new frmParametrizacaoOperacao();
frmParametrizacaoOperacao.ShowDialog();
}
#endregion
#region CONTROLE
private void btnJoyAtt_Click(object sender, EventArgs e)
{
GeneralJoystick.AtualizaDispositivo();
}
private void btnJoyEdt_Click(object sender, EventArgs e)
{
}
private void btnVer_Click(object sender, EventArgs e)
{
frmInstancial.frmJoystick.Show();
}
public void AtualizaRPM(int Percentual)
{
int RPM = Convert.ToInt32((Percentual / 100.0) * VariaveisEquipamento.RPM_Max_Roda);
double Velocidade = MovimentacaoModel.CalculaVelocidadeRPM(RPM);
FuncoesGlobais.PreencheValorTrackBar(trkRPM, RPM);
FuncoesGlobais.PreencheValorTrackBar(trkKmh, Percentual);
Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP = Percentual;
lblRPM.Text = $"RPM: {RPM}";
lblKmh.Text = $"Velocidade: {Percentual.ToString("0")}% {Velocidade.ToString("0.00")} km/h";
}
private void tkbVelocidadeMP_ValueChanged(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP = tkbVelocidade.Value;
lblVelocidade.Text = "Velocidade: " + Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP + "%";
}
private void tkbAngulo_ValueChanged(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento.Controle.Angulo = tkbAngulo.Value;
lblAngulo.Text = "Angulo: " + Variaveis.OperacaoEmAndamento.Controle.Angulo + "º";
}
private void trkRPM_Scroll(object sender, EventArgs e)
{
/*try
{
int RPM = ((TrackBar)sender).Value;
AtualizaRPM(RPM);
}
catch (Exception ex)
{
}*/
}
private void trkKmh_ValueChanged(object sender, EventArgs e)
{
try
{
int Percentual = trkKmh.Value;
AtualizaRPM(Percentual);
}
catch (Exception ex)
{
}
}
#endregion
#region ATALHOS
private void btnDiagnosticos_Click(object sender, EventArgs e)
{
frmMovDiagnosticos frm = new frmMovDiagnosticos();
frm.ShowDialog();
}
private void btnAcompanhamento_Click(object sender, EventArgs e)
{
frmInstancial.frmAcompanhamento.Show();
}
private void btnCamera_Click(object sender, EventArgs e)
{
frmAtuCamera frmCamera = new frmAtuCamera();
frmCamera.Show();
}
private void btnMapas_Click(object sender, EventArgs e)
{
frmMapa frmMapa = new frmMapa();
frmMapa.Show();
}
private void btnGPS_Click(object sender, EventArgs e)
{
frmGPS frmGps = new frmGPS();
frmGps.Show();
}
private void btnSenCamera_Click(object sender, EventArgs e)
{
frmSenCamera frmCamera = new frmSenCamera();
frmCamera.Show();
}
private void btnIHM_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
frmInstancial.frmIHM.ShowDialog();
}
private void btnContornos_Click(object sender, EventArgs e)
{
frmMovCamera frmMovCamera = new frmMovCamera();
frmMovCamera.Show();
}
private void btnAtuCalibragem_Click(object sender, EventArgs e)
{
frmAtuCalibragem frm = new frmAtuCalibragem();
frm.Show();
}
private void btnSonar_Click(object sender, EventArgs e)
{
frmSonar frm = new frmSonar();
frm.Show();
}
private void btnSimulador_Click(object sender, EventArgs e)
{
frmSimulacaoMapaGPS frm = new frmSimulacaoMapaGPS();
frm.Show();
}
private void btnKinect_Click(object sender, EventArgs e)
{
if (KinectService.Iniciado)
{
frmKinect frmKinect = new frmKinect();
frmKinect.Show();
}
else
{
MessageBox.Show("Módulo Kinect não está conectado!");
}
}
private void btnResultados_Click(object sender, EventArgs e)
{
frmResultadosOperacao frmResultadosOperacao = new frmResultadosOperacao();
frmResultadosOperacao.Show();
}
private void btnLoRaConfig_Click(object sender, EventArgs e)
{
if (LoRaService.Iniciado)
{
frmLoraConfig frm = new frmLoraConfig();
frm.Show();
}
else
{
MessageBox.Show("Módulo LoRa de comunicação não está conectado ou não está no modo de parametrização!");
}
}
private void btnWT901C_Click(object sender, EventArgs e)
{
if (WT901CService.Iniciado)
{
frmWT901C frm = new frmWT901C();
frm.Show();
}
else
{
MessageBox.Show("Módulo WT901C485 não está conectado!");
}
}
private void btnBLD300R_Click(object sender, EventArgs e)
{
if (BLD300RService.Iniciado)
{
frmBLD frm = new frmBLD();
frm.Show();
}
else
{
MessageBox.Show("Driver BLD-300R não está conectado!");
}
}
private void btnMKS_Click(object sender, EventArgs e)
{
frmMKS frm = new frmMKS();
frm.Show();
}
private void btnEthernet_Click(object sender, EventArgs e)
{
frmEthernet frm = new frmEthernet();
frm.Show();
}
#endregion
}
}