agrobot_base/AgroBase/AgroMonitor/Forms/frmAjustesOperacao.cs

242 lines
9.9 KiB
C#

using AgroBase.Forms;
using AgroBase.Models;
using AgroBase.Services;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AgroBase.Models.Enums;
namespace AgroMonitor.Forms
{
public partial class frmAjustesOperacao : Form
{
AsyncTaskTimerModel tmrDadosMapa;
string path = Variaveis.CaminhoSistema + Variaveis.CaminhoOperacoes + "\\" + MapasVariaveisModel.NomeArquivoMapaInterativoSaida;
UltrasonicA05Configuracoes ConfigUltrassom = UltrasonicA05Helper.CarregarConfiguracaoPadrao(ConfiguracaoSensorUltrassonico.NaoUtilizado);
public frmAjustesOperacao()
{
InitializeComponent();
}
private void frmAjustesOperacao_Load(object sender, EventArgs e)
{
cmbConfiguracaoUltrassom.Items.Clear();
cmbConfiguracaoUltrassom.Items.AddRange(Enum.GetNames(typeof(ConfiguracaoSensorUltrassonico)));
cmbConfiguracaoUltrassom.SelectedIndex = 0;
cmbModosOperacao.Items.Clear();
cmbModosOperacao.Items.AddRange(Enum.GetNames(typeof(ModoOperacao)));
cmbModosOperacao.SelectedIndex = 0;
}
private void frmAjustesOperacao_FormClosing(object sender, FormClosingEventArgs e)
{
tmrDadosMapa?.Dispose();
}
private void cmbModosOperacao_SelectedIndexChanged(object sender, EventArgs e)
{
AtualizarDadosOperacao(true);
}
private void AtualizarDadosOperacao(bool CarregarOperacao)
{
if (CarregarOperacao)
{
Variaveis.OperacaoEmAndamento = OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModosOperacao.SelectedIndex);
}
foreach (var chb in pnlModulos.Controls.OfType<CheckBox>())
{
string disp = chb.Name.Replace("chb", "");
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), disp);
chb.Checked = Variaveis.OperacaoEmAndamento.ModulosMandatorios.Any(x => x.Dispositivo == Dispositivo);
}
double velMaxRoda = MovimentacaoModel.CalculaVelocidadeRPM(VariaveisEquipamento.RPM_Max_Roda);
double velocidadeMax = MovimentacaoModel.CalculaVelocidadeRPM(Variaveis.OperacaoEmAndamento.Controle.RPM_Max);
int percentMax = (int)FuncoesMatematicas.Map(velocidadeMax, 0.0, velMaxRoda, 0, 100.0);
double velocidadeMin = MovimentacaoModel.CalculaVelocidadeRPM(Variaveis.OperacaoEmAndamento.Controle.RPM_Min);
int percentMin = (int)FuncoesMatematicas.Map(velocidadeMin, 0.0, velMaxRoda, 0, 100.0);
txtDescricao.Text = Variaveis.OperacaoEmAndamento.Descricao;
nudVelMax.Value = percentMax;
nudVelMin.Value = percentMin;
txtAnguloMaximo.Text = Variaveis.OperacaoEmAndamento.Controle.Angulo_Max.ToString("0");
txtVelocidadeDirecional.Text = Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP.ToString("0");
txtPercentualAtuacao.Text = (Variaveis.OperacaoEmAndamento.Controle.PercentualInicioPulverizacao * 100).ToString("0");
txtCapacidadeReservatorio.Text = Variaveis.OperacaoEmAndamento.CapacidadeReservatorio.ToString("0");
txtPressaoLinha.Text = Variaveis.OperacaoEmAndamento.Controle.PressaoLinha.ToString("0");
txtDuracaoAtuacao.Text = Variaveis.OperacaoEmAndamento.Controle.TempoAtuacao.ToString("0");
if (Variaveis.OperacaoEmAndamento.DispSen != null)
{
ConfigUltrassom = Variaveis.OperacaoEmAndamento.DispSen.Dados.ConfiguracaoSensorUltrassom;
cmbConfiguracaoUltrassom.SelectedIndex = (int)ConfigUltrassom.Configuracao;
}
}
private void btnProximo_Click(object sender, EventArgs e)
{
tabControl1.SelectedIndex = 1;
}
private void btnCarregarMapa_Click(object sender, EventArgs e)
{
List<string> ruasSelecionadas = new List<string>();
Variaveis.OperacaoEmAndamento.Mapa = new MapasModel();
Variaveis.OperacaoEmAndamento.Mapa.pnlMapa = pnlMapa;
Variaveis.OperacaoEmAndamento.Mapa.lblMapa = lblMapaCarregado;
tabControl1.SelectedIndex = 1;
Variaveis.OperacaoEmAndamento.Mapa.btnCarregar_Click(sender, e);
if (tmrDadosMapa != null && !tmrDadosMapa.IsRunning)
{
tmrDadosMapa = new AsyncTaskTimerModel("tmrDadosMapa", tmrDadosMapa_Tick, 500, this);
tmrDadosMapa.Start();
}
}
private async Task tmrDadosMapa_Tick()
{
if (Variaveis.OperacaoEmAndamento.Mapa.mapaService.DadosMapa == null)
{
return;
}
//GPSService.AtualizarRuasSelecionadas(new List<string>() { "183", "182", "181" });
Variaveis.OperacaoEmAndamento.OpMapaGPS.AtualizarRuasSelecionadas();
lblDistanciaTotal.Text = $"Distância total: {Variaveis.OperacaoEmAndamento.Mapa.mapaService.DadosMapa.features.Sum(x => x.properties.Length).ToString("0.00")} m";
lblDistanciaOperacao.Text = $"Distância da operação: {Variaveis.OperacaoEmAndamento.Mapa.DistanciaTotal.ToString("0.00")} m";
double.TryParse(txtVelocidadeSemErvas.Text, out double velocidadeSemErvas);
double.TryParse(txtVelocidadeComErvas.Text, out double velocidadeComErvas);
string tempo = Variaveis.OperacaoEmAndamento.TempoEstimadoOperacao(velocidadeSemErvas, velocidadeComErvas);
lblTempoEstimado.Text = $"Tempo estimado: {tempo}";
}
private void btnSalvar_Click(object sender, EventArgs e)
{
bool sucesso = Variaveis.OperacaoEmAndamento.SalvarParametrizacaoOperacao(
txtDescricao.Text,
txtCapacidadeReservatorio.Text,
txtPressaoLinha.Text,
txtDuracaoAtuacao.Text,
txtPercentualAtuacao.Text,
txtAnguloMaximo.Text,
txtVelocidadeDirecional.Text,
(int)nudVelMax.Value,
(int)nudVelMin.Value,
ConfigUltrassom
);
if (!sucesso)
{
txtDescricao.Focus();
}
}
private async void btnCarregar_Click(object sender, EventArgs e)
{
await CarregarOperacao();
}
private async Task CarregarOperacao()
{
(bool carregado, List<string> ruasSelecionadas) = Variaveis.OperacaoEmAndamento.CarregarParametrizacaoOperacao(pnlMapa, lblMapaCarregado);
if (carregado)
{
tabControl1.SelectedIndex = 1;
AtualizarDadosOperacao(false);
MessageBox.Show("Operação carregada com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
tmrDadosMapa = new AsyncTaskTimerModel("tmrDadosMapa", tmrDadosMapa_Tick, 500, this);
tmrDadosMapa.Start();
await Task.Delay(1000);
if (ruasSelecionadas.Any())
{
await Task.Delay(1000);
GPSService.AtualizarRuasSelecionadas(ruasSelecionadas);
File.Delete(path);
}
}
}
private void chbModulo_CheckedChanged(object sender, EventArgs e)
{
CheckBox chb = (CheckBox)sender;
string ModID = chb.Name.Replace("chb", "");
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), ModID);
if (Variaveis.OperacaoEmAndamento.ModulosMandatorios.Any(x => x.Dispositivo == Dispositivo))
{
Variaveis.OperacaoEmAndamento.ModulosMandatorios.First(x => x.Dispositivo == Dispositivo).Mandatorio = chb.Checked;
}
else
{
Variaveis.OperacaoEmAndamento.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel()
{
Dispositivo = Dispositivo,
Conectado = false,
Mandatorio = chb.Checked,
Utilizar = chb.Checked,
});
}
if (Dispositivo == T_Code.A05)
{
gpbSensoriamento.Enabled = chb.Checked;
}
}
private void btnConfigurar_Click(object sender, EventArgs e)
{
frmA05Config frm = new frmA05Config(ConfigUltrassom);
frm.ShowDialog();
ConfigUltrassom = frm.ConfiguracaoSensores;
}
private void cmbConfiguracaoUltrassom_SelectedIndexChanged(object sender, EventArgs e)
{
ConfiguracaoSensorUltrassonico Config = (ConfiguracaoSensorUltrassonico)cmbConfiguracaoUltrassom.SelectedIndex;
rtbDescricao.Text = UltrasonicA05Helper.DescricaoConfiguracoes[Config];
if (Config != ConfigUltrassom.Configuracao)
{
ConfigUltrassom = UltrasonicA05Helper.CarregarConfiguracaoPadrao(Config);
}
}
private void nudVelMax_ValueChanged(object sender, EventArgs e)
{
int Percentual = (int)((NumericUpDown)sender).Value;
int RPM = Convert.ToInt32((Percentual / 100.0) * VariaveisEquipamento.RPM_Max_Roda);
double Velocidade = MovimentacaoModel.CalculaVelocidadeRPM(RPM);
txtVelocidadeSemErvas.Text = Velocidade.ToString("0.00");
}
private void nudVelMin_ValueChanged(object sender, EventArgs e)
{
int Percentual = (int)((NumericUpDown)sender).Value;
int RPM = Convert.ToInt32((Percentual / 100.0) * VariaveisEquipamento.RPM_Max_Roda);
double Velocidade = MovimentacaoModel.CalculaVelocidadeRPM(RPM);
txtVelocidadeComErvas.Text = Velocidade.ToString("0.00");
}
}
}