agrobot_base/AgroBase/AgroMonitor/Forms/frmAjustesOperacao.cs

444 lines
18 KiB
C#
Raw Normal View History

2024-10-29 19:53:27 +00:00
using AgroBase.Forms;
using AgroBase.Models;
2024-07-12 19:44:56 +00:00
using AgroBase.Services;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
2024-07-26 19:54:25 +00:00
using static AgroBase.Models.Enums;
2024-07-12 19:44:56 +00:00
namespace AgroMonitor.Forms
{
public partial class frmAjustesOperacao : Form
{
2024-11-25 12:14:59 +00:00
AsyncTaskTimerModel tmrDadosMapa;
2024-07-12 19:44:56 +00:00
string path = Variaveis.CaminhoSistema + Variaveis.CaminhoOperacoes + "\\" + MapasVariaveisModel.NomeArquivoMapaInterativoSaida;
2024-10-29 19:53:27 +00:00
UltrasonicA05Configuracoes ConfigUltrassom = UltrasonicA05Helper.CarregarConfiguracaoPadrao(ConfiguracaoSensorUltrassonico.NaoUtilizado);
2024-12-17 15:32:53 +00:00
bool carregarOpPadrao = true;
2025-09-16 13:31:32 +00:00
bool carregandoOperacao = false;
MapaDinamicoModel MapaDinamico;
2024-07-12 19:44:56 +00:00
public frmAjustesOperacao()
{
InitializeComponent();
MapaDinamico = new MapaDinamicoModel(this, pnlZoomMapa);
2024-07-12 19:44:56 +00:00
}
private void frmAjustesOperacao_Load(object sender, EventArgs e)
{
2024-10-29 19:53:27 +00:00
cmbConfiguracaoUltrassom.Items.Clear();
cmbConfiguracaoUltrassom.Items.AddRange(Enum.GetNames(typeof(ConfiguracaoSensorUltrassonico)));
cmbConfiguracaoUltrassom.SelectedIndex = 0;
2025-05-07 16:54:45 +00:00
cmbTipoMovimentoDirecional.Items.Clear();
cmbTipoMovimentoDirecional.Items.AddRange(Enum.GetNames(typeof(TiposControladorDirecional)));
cmbTipoMovimentoDirecional.SelectedIndex = 1;
2024-07-12 19:44:56 +00:00
cmbModosOperacao.Items.Clear();
cmbModosOperacao.Items.AddRange(Enum.GetNames(typeof(ModoOperacao)));
cmbModosOperacao.SelectedIndex = 0;
}
private void frmAjustesOperacao_FormClosing(object sender, FormClosingEventArgs e)
{
2024-11-25 19:26:00 +00:00
tmrDadosMapa?.Dispose();
2024-07-12 19:44:56 +00:00
}
private void cmbModosOperacao_SelectedIndexChanged(object sender, EventArgs e)
{
2024-12-17 15:32:53 +00:00
AtualizarDadosOperacao();
2024-07-12 19:44:56 +00:00
}
2024-12-17 15:32:53 +00:00
private void AtualizarDadosOperacao()
2024-07-12 19:44:56 +00:00
{
2025-09-16 13:31:32 +00:00
carregandoOperacao = true;
2024-12-17 15:32:53 +00:00
if (carregarOpPadrao)
2024-07-12 19:44:56 +00:00
{
OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModosOperacao.SelectedIndex);
2025-05-07 16:54:45 +00:00
string nomeOpPadrao = "OP_" + DateTime.Now.ToString("dd_MM_yyyy_mm_ss");
Variaveis.OperacaoEmAndamento.Descricao = nomeOpPadrao;
2024-07-12 19:44:56 +00:00
}
2025-05-07 16:54:45 +00:00
foreach (var chb in pnlModulos.Controls.OfType<CheckBox>().Where(x => !x.Name.Contains("_M")))
2024-07-12 19:44:56 +00:00
{
string disp = chb.Name.Replace("chb", "");
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), disp);
2025-05-07 16:54:45 +00:00
var P = Variaveis.OperacaoEmAndamento.ModulosMandatorios.FirstOrDefault(x => x.Dispositivo == Dispositivo);
chb.Checked = P?.Utilizar ?? false;
2025-09-16 13:31:32 +00:00
var chbMandatorio = FuncoesGlobais.FindControlRecursive<CheckBox>(pnlModulos, chb.Name + "_M");
if (chb.Checked)
{
chbMandatorio.Enabled = chb.Checked;
chbMandatorio.Checked = P?.Mandatorio ?? false;
}
2025-05-07 16:54:45 +00:00
}
foreach (var chb in pnlParametrosMandatorios.Controls.OfType<CheckBox>().Where(x => !x.Name.Contains("_M")))
{
string parametro = chb.Name.Replace("chb", "");
ParametrosOperacao Parametro = (ParametrosOperacao)Enum.Parse(typeof(ParametrosOperacao), parametro);
var P = Variaveis.OperacaoEmAndamento.ParametrosMandatorios.FirstOrDefault(x => x.Parametro == Parametro);
chb.Checked = P?.Utilizar ?? false;
2025-09-16 13:31:32 +00:00
var chbMandatorio = FuncoesGlobais.FindControlRecursive<CheckBox>(pnlParametrosMandatorios, chb.Name + "_M");
if (chb.Checked)
{
chbMandatorio.Enabled = chb.Checked;
chbMandatorio.Checked = P?.Mandatorio ?? false;
}
2024-07-12 19:44:56 +00:00
}
2025-05-07 16:54:45 +00:00
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
double velMaxRoda = FuncoesMatematicas.CalculaVelocidadeRPM(VariaveisEquipamento.RPM_Max_Roda);
2025-05-07 16:54:45 +00:00
double velocidadeMax = FuncoesMatematicas.CalculaVelocidadeRPM(_Controle.RPM_Max);
2024-10-29 19:53:27 +00:00
int percentMax = (int)FuncoesMatematicas.Map(velocidadeMax, 0.0, velMaxRoda, 0, 100.0);
2025-05-07 16:54:45 +00:00
double velocidadeMin = FuncoesMatematicas.CalculaVelocidadeRPM(_Controle.RPM_Min);
2024-10-29 19:53:27 +00:00
int percentMin = (int)FuncoesMatematicas.Map(velocidadeMin, 0.0, velMaxRoda, 0, 100.0);
2024-07-12 19:44:56 +00:00
txtDescricao.Text = Variaveis.OperacaoEmAndamento.Descricao;
2024-10-29 19:53:27 +00:00
nudVelMax.Value = percentMax;
nudVelMin.Value = percentMin;
2025-05-07 16:54:45 +00:00
txtAnguloMaximo.Text = _Controle.Angulo_Max.ToString("0");
txtVelocidadeDirecional.Text = _Controle.VelocidadeMP.ToString("0");
txtPercentualAtuacao.Text = (_Controle.PercentualInicioPulverizacao * 100).ToString("0");
2024-07-12 19:44:56 +00:00
txtCapacidadeReservatorio.Text = Variaveis.OperacaoEmAndamento.CapacidadeReservatorio.ToString("0");
2025-05-07 16:54:45 +00:00
txtPressaoLinha.Text = _Controle.PressaoLinha.ToString("0");
txtDuracaoAtuacao.Text = _Controle.TempoAtuacao.ToString("0");
cmbTipoMovimentoDirecional.SelectedIndex = (int)_Controle.TipoControleDirecional;
2024-10-29 19:53:27 +00:00
if (Variaveis.OperacaoEmAndamento.DispSen != null)
{
ConfigUltrassom = Variaveis.OperacaoEmAndamento.DispSen.Dados.ConfiguracaoSensorUltrassom;
cmbConfiguracaoUltrassom.SelectedIndex = (int)ConfigUltrassom.Configuracao;
}
2025-05-07 16:54:45 +00:00
chbSonarAtivado.Checked = _Controle.SonarAtivado;
2025-09-16 13:31:32 +00:00
chbFrenagemAutomatica.Checked = _Controle.FrenagemAutomatica;
carregandoOperacao = false;
2024-07-12 19:44:56 +00:00
}
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)
2024-07-12 19:44:56 +00:00
{
2024-11-25 19:26:00 +00:00
tmrDadosMapa = new AsyncTaskTimerModel("tmrDadosMapa", tmrDadosMapa_Tick, 500, this);
2024-07-12 19:44:56 +00:00
tmrDadosMapa.Start();
}
}
2024-11-25 12:14:59 +00:00
private async Task tmrDadosMapa_Tick()
2024-07-12 19:44:56 +00:00
{
if (Variaveis.OperacaoEmAndamento.Mapa.mapaService.DadosMapa == null)
{
return;
}
//GPSService.AtualizarRuasSelecionadas(new List<string>() { "183", "182", "181" });
Variaveis.OperacaoEmAndamento.Mapa.AtualizarRuasSelecionadas();
2024-07-12 19:44:56 +00:00
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.Trajetoria?.DistanciaTotal ?? 0).ToString("0.00")} m";
2024-07-12 19:44:56 +00:00
double.TryParse(txtVelocidadeSemErvas.Text, out double velocidadeSemErvas);
double.TryParse(txtVelocidadeComErvas.Text, out double velocidadeComErvas);
Variaveis.OperacaoEmAndamento.Trajetoria?.AtualizarTempoEstimado(FuncoesMatematicas.ConverteKmhParaMs(velocidadeSemErvas), FuncoesMatematicas.ConverteKmhParaMs(velocidadeComErvas));
string tempo = Variaveis.OperacaoEmAndamento.Trajetoria?.TempoEstimadoOperacao;
2024-07-12 19:44:56 +00:00
lblTempoEstimado.Text = $"Tempo estimado: {tempo}";
if (chbMapaDinamico.Checked)
{
var _Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria;
GPSModel posicao = _Trajetoria.RuasPlantacao.Any() ? _Trajetoria.RuasPlantacao[0][_Trajetoria.ExtremoMaisProximoMapa == 0 ? 0 : _Trajetoria.RuasPlantacao[0].Count - 1] : GPSService.UltimaLeitura;
MapaDinamico.AtualizarDados(
null,
(float)0,
(float)0,
posicao,
_Trajetoria._TrajetoriaDinamica,
_Trajetoria.CorredorAtual.Pontos,
Variaveis.OperacaoEmAndamento.GPSTrajetoria,
_Trajetoria.RuasPlantacao
);
}
2024-07-12 19:44:56 +00:00
}
private void btnSalvar_Click(object sender, EventArgs e)
{
2025-03-06 20:15:56 +00:00
int.TryParse(txtQtdCameras.Text, out int qtdCameras);
2025-05-07 16:54:45 +00:00
double.TryParse(txtCapacidadeReservatorio.Text, out double capacidadeReservatorio);
double.TryParse(txtPressaoLinha.Text, out double pressaoLinha);
int.TryParse(txtDuracaoAtuacao.Text, out int duracaoAtuacao);
int.TryParse(txtPercentualAtuacao.Text, out int percentualAtuacao);
int.TryParse(txtAnguloMaximo.Text, out int anguloMaximo);
int.TryParse(txtVelocidadeDirecional.Text, out int velocidadeMovimento);
2024-07-12 19:44:56 +00:00
bool sucesso = Variaveis.OperacaoEmAndamento.SalvarParametrizacaoOperacao(
txtDescricao.Text,
2025-05-07 16:54:45 +00:00
capacidadeReservatorio,
pressaoLinha,
duracaoAtuacao,
percentualAtuacao,
anguloMaximo,
velocidadeMovimento,
2024-10-29 19:53:27 +00:00
(int)nudVelMax.Value,
(int)nudVelMin.Value,
ConfigUltrassom,
2025-03-06 20:15:56 +00:00
chbSonarAtivado.Checked,
2025-04-23 18:41:11 +00:00
qtdCameras,
(TiposControladorDirecional)cmbTipoMovimentoDirecional.SelectedIndex,
chbMovimentacaoAutomatica.Checked,
2025-09-16 13:31:32 +00:00
chbPulverizadorAutomatico.Checked,
chbFrenagemAutomatica.Checked
2024-07-12 19:44:56 +00:00
);
if (!sucesso)
{
txtDescricao.Focus();
}
}
2024-10-03 18:21:30 +00:00
private async void btnCarregar_Click(object sender, EventArgs e)
2024-07-12 19:44:56 +00:00
{
2024-10-03 18:21:30 +00:00
await CarregarOperacao();
2024-07-12 19:44:56 +00:00
}
private async Task CarregarOperacao()
{
2025-04-02 20:37:56 +00:00
(bool carregado, List<string> ruasSelecionadas) = Variaveis.OperacaoEmAndamento.CarregarParametrizacaoOperacao(pnlMapa, lblMapaCarregado);
bool condicaoOperacaoCarregada() => Variaveis.OperacaoEmAndamento.Trajetoria?.CorredorAtual != null;
2025-05-07 16:54:45 +00:00
bool resultado = await FuncoesGlobais.AguardarCondicaoAsync(condicaoOperacaoCarregada, 10000, 200);
2025-04-02 20:37:56 +00:00
if (!resultado)
{
MessageBox.Show($"Erro ao carregar operação!{Environment.NewLine}Erro ao carregar a trajetória do mapa!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (carregado && resultado)
2024-07-12 19:44:56 +00:00
{
tabControl1.SelectedIndex = 1;
2024-12-17 15:32:53 +00:00
carregarOpPadrao = false;
cmbModosOperacao.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Modo;
2025-04-23 18:41:11 +00:00
cmbTipoMovimentoDirecional.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Controle.TipoControleDirecional;
cmbConfiguracaoUltrassom.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.DispSen.Dados.ConfiguracaoSensorUltrassom.Configuracao;
2024-07-12 19:44:56 +00:00
chbMovimentacaoAutomatica.Checked = Variaveis.OperacaoEmAndamento.Controle.MovimentoAutomatico;
chbPulverizadorAutomatico.Checked = Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico;
2025-09-16 13:31:32 +00:00
chbFrenagemAutomatica.Checked = Variaveis.OperacaoEmAndamento.Controle.FrenagemAutomatica;
2024-07-12 19:44:56 +00:00
MessageBox.Show("Operação carregada com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
tmrDadosMapa?.Dispose();
2024-11-25 19:26:00 +00:00
tmrDadosMapa = new AsyncTaskTimerModel("tmrDadosMapa", tmrDadosMapa_Tick, 500, this);
tmrDadosMapa?.Start();
2024-07-12 19:44:56 +00:00
2024-12-17 15:32:53 +00:00
await Task.Delay(2000);
2024-07-12 19:44:56 +00:00
if (ruasSelecionadas.Any())
{
await Task.Delay(1000);
GPSService.AtualizarRuasSelecionadas(ruasSelecionadas);
File.Delete(path);
}
2024-12-17 15:32:53 +00:00
carregarOpPadrao = true;
2024-07-12 19:44:56 +00:00
}
}
private void chbModulo_CheckedChanged(object sender, EventArgs e)
{
2025-09-16 13:31:32 +00:00
if (carregandoOperacao) return;
2024-07-12 19:44:56 +00:00
CheckBox chb = (CheckBox)sender;
string ModID = chb.Name.Replace("chb", "");
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), ModID);
2025-05-07 16:54:45 +00:00
var d = Variaveis.OperacaoEmAndamento.ModulosMandatorios.FirstOrDefault(x => x.Dispositivo == Dispositivo);
if (d != null)
2024-07-12 19:44:56 +00:00
{
2025-05-07 16:54:45 +00:00
d.Utilizar = chb.Checked;
d.Mandatorio = false;
2024-07-12 19:44:56 +00:00
}
else
{
2025-05-07 16:54:45 +00:00
d = new OperacaoModulosMandatoriosModel()
2024-07-12 19:44:56 +00:00
{
2025-05-07 16:54:45 +00:00
Dispositivo = Dispositivo,
Conectado = false,
2024-07-12 19:44:56 +00:00
Utilizar = chb.Checked,
2025-05-07 16:54:45 +00:00
Mandatorio = false
};
Variaveis.OperacaoEmAndamento.ModulosMandatorios.Add(d);
2024-07-12 19:44:56 +00:00
}
2024-10-29 19:53:27 +00:00
2025-05-07 16:54:45 +00:00
CheckBox chbM = FuncoesGlobais.FindControlRecursive<CheckBox>(pnlModulos, chb.Name + "_M");
chbM.Enabled = chb.Checked;
chbM.Checked = false;
}
private void chbModuloMandatorio_CheckedChanged(object sender, EventArgs e)
{
2025-09-16 13:31:32 +00:00
if (carregandoOperacao) return;
2025-05-07 16:54:45 +00:00
CheckBox chb = (CheckBox)sender;
string ModID = chb.Name.Replace("chb", "").Replace("_M", "");
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), ModID);
var d = Variaveis.OperacaoEmAndamento.ModulosMandatorios.FirstOrDefault(x => x.Dispositivo == Dispositivo);
2025-04-03 14:00:55 +00:00
2025-05-07 16:54:45 +00:00
if (d != null)
2024-10-29 19:53:27 +00:00
{
2025-05-07 16:54:45 +00:00
d.Mandatorio = chb.Checked;
}
else
{
d = new OperacaoModulosMandatoriosModel()
2025-04-03 14:00:55 +00:00
{
2025-05-07 16:54:45 +00:00
Dispositivo = Dispositivo,
Conectado = false,
Utilizar = true,
Mandatorio = chb.Checked,
};
Variaveis.OperacaoEmAndamento.ModulosMandatorios.Add(d);
}
}
private void chbParametro_CheckedChanged(object sender, EventArgs e)
{
2025-09-16 13:31:32 +00:00
if (carregandoOperacao) return;
2025-05-07 16:54:45 +00:00
CheckBox chb = (CheckBox)sender;
string parametro = chb.Name.Replace("chb", "");
ParametrosOperacao Parametro = (ParametrosOperacao)Enum.Parse(typeof(ParametrosOperacao), parametro);
var p = Variaveis.OperacaoEmAndamento.ParametrosMandatorios.FirstOrDefault(x => x.Parametro == Parametro);
if (p != null)
{
p.Utilizar = chb.Checked;
p.Mandatorio = false;
}
else
{
p = new OperacaoParametrosMandatoriosModel()
{
Parametro = Parametro,
Utilizar = chb.Checked,
Mandatorio = false,
};
Variaveis.OperacaoEmAndamento.ParametrosMandatorios.Add(p);
}
CheckBox chbM = FuncoesGlobais.FindControlRecursive<CheckBox>(pnlParametrosMandatorios, chb.Name + "_M");
chbM.Enabled = chb.Checked;
chbM.Checked = false;
if (Parametro == ParametrosOperacao.Sonar)
{
gpbSensoriamento.Enabled = chb.Checked;
}
}
private void chbParametroMandatorio_CheckedChanged(object sender, EventArgs e)
{
2025-09-16 13:31:32 +00:00
if (carregandoOperacao) return;
2025-05-07 16:54:45 +00:00
CheckBox chb = (CheckBox)sender;
string parametro = chb.Name.Replace("chb", "").Replace("_M", "");
ParametrosOperacao Parametro = (ParametrosOperacao)Enum.Parse(typeof(ParametrosOperacao), parametro);
var p = Variaveis.OperacaoEmAndamento.ParametrosMandatorios.FirstOrDefault(x => x.Parametro == Parametro);
if (p != null)
{
p.Mandatorio = chb.Checked;
}
else
{
p = new OperacaoParametrosMandatoriosModel()
{
Parametro = Parametro,
Utilizar = true,
Mandatorio = chb.Checked,
};
Variaveis.OperacaoEmAndamento.ParametrosMandatorios.Add(p);
2024-10-29 19:53:27 +00:00
}
2024-07-12 19:44:56 +00:00
}
2024-10-29 19:53:27 +00:00
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;
double velocidadeMs = FuncoesMatematicas.CalculaVelocidadeMsPercentual(Percentual);
double Velocidade = FuncoesMatematicas.ConverteMsParaKmh(velocidadeMs);
2024-10-29 19:53:27 +00:00
txtVelocidadeSemErvas.Text = Velocidade.ToString("0.00");
}
private void nudVelMin_ValueChanged(object sender, EventArgs e)
{
int Percentual = (int)((NumericUpDown)sender).Value;
double velocidadeMs = FuncoesMatematicas.CalculaVelocidadeMsPercentual(Percentual);
double Velocidade = FuncoesMatematicas.ConverteMsParaKmh(velocidadeMs);
2024-10-29 19:53:27 +00:00
txtVelocidadeComErvas.Text = Velocidade.ToString("0.00");
}
private void chbMapaDinamico_CheckedChanged(object sender, EventArgs e)
{
pnlZoomMapa.Visible = chbMapaDinamico.Checked;
}
2025-05-07 16:54:45 +00:00
2025-09-16 13:31:32 +00:00
private void chbSonarAtivado_CheckedChanged(object sender, EventArgs e)
{
chbFrenagemAutomatica.Enabled = chbSonarAtivado.Checked;
if (!chbFrenagemAutomatica.Enabled)
{
chbFrenagemAutomatica.Checked = false;
}
}
2024-07-12 19:44:56 +00:00
}
}