agrobot_base/AgroBase/AgroBase/Forms/IHM/frmIHM.cs

156 lines
6.7 KiB
C#

using AgroBase.Comum;
using AgroBase.Forms.Operacoes;
using AgroBase.Models;
using AgroBase.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AgroBase.Models.Enuns;
namespace AgroBase.Forms.IHM
{
public partial class frmIHM : Form
{
Timer tmrDispositivos = new Timer() { Interval = 5000, Enabled = false };
public frmIHM()
{
InitializeComponent();
}
private void frmIHM_Load(object sender, EventArgs e)
{
tmrDispositivos.Tick += TmrDispositivos_Tick;
tmrDispositivos.Start();
cmbOperacao.Items.Clear();
cmbOperacao.Items.AddRange(Enum.GetNames(typeof(ModoOperacao)));
cmbOperacao.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Modo;
Variaveis.OperacaoEmAndamento = OperacaoModel.CarregarOperacaoPersonalizada(Application.StartupPath + "\\operacao" + Enum.GetName(typeof(ModoOperacao), Variaveis.OperacaoEmAndamento.Modo) + ".opr");
}
private void TmrDispositivos_Tick(object sender, EventArgs e)
{
SerialService.AtualizarDispositivos();
var Labels = this.Controls.OfType<Label>().Where(y => y.Name.Contains("lblD_")).ToList();
Labels.ForEach(lbl =>
{
lbl.ForeColor = Color.Black;
});
SerialService.DispositivosMapeados.ForEach(Modulo =>
{
Label lblDisp = Labels.Where(y => y.Name.Replace("lblD_", "") == Enum.GetName(typeof(T_Code), Modulo.Dispositivo)).FirstOrDefault();
if (lblDisp != null)
{
bool DispositivoConectado = false;
if (Modulo.Dispositivo == T_Code.Gps)
{
try
{
if (!GPSService.PortaGPS.IsOpen)
{
GPSService.IniciarRecepcaoDados();
}
DispositivoConectado = GPSService.PortaGPS.IsOpen;
}
catch
{
DispositivoConectado = false;
}
}
else
{
IDispositivosService dispositivoService = Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Modulo.Dispositivo && x._Porta.PortName == Modulo.PortaCOM);
if (dispositivoService == null)
{
dispositivoService = DispositivosServiceFactory.CreateDispositivoService(
Modulo.Dispositivo,
"Nome: " + Enum.GetName(typeof(T_Code), Modulo.Dispositivo),
"Descrição: " + Enum.GetName(typeof(T_Code), Modulo.Dispositivo),
new SerialPort()
);
Variaveis.DispositivosConectados.Add(dispositivoService);
dispositivoService.InstanciarDispositivo(Variaveis.DispositivosConectados.Count - 1);
}
if (!dispositivoService._Porta.IsOpen)
{
dispositivoService.btnConectar_Click(new object(), new EventArgs());
}
DispositivoConectado = dispositivoService._Porta.IsOpen;
}
lblDisp.ForeColor = DispositivoConectado ? Color.Green : Color.Red;
}
});
if (SerialService.DispositivosMapeados.Count == 0)
{
Variaveis.DispositivosConectados.Where(x => x.Dados.GetStatusConexao()).ToList().ForEach(x => x.AcaoDesconectar());
}
}
private void btnConfigurar_Click(object sender, EventArgs e)
{
frmParametrizacaoOperacao frmParametrizacaoOperacao = new frmParametrizacaoOperacao();
frmParametrizacaoOperacao.ShowDialog();
}
private void cmbOperacao_SelectedIndexChanged(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento = OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbOperacao.SelectedIndex);
}
private void btnIniciar_Click(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento.ModulosMandatorios.ForEach(Modulo =>
{
Modulo.Conectado = Variaveis.DispositivosConectados.Any(x => x.Dispositivo == Modulo.Dispositivo && x._Porta.IsOpen);
});
bool OperacaoLiberada =
(Variaveis.OperacaoEmAndamento.ModulosMandatorios.Where(x => x.Mandatorio).All(x => x.Conectado) && Variaveis.OperacaoEmAndamento.ModulosMandatorios.Any(x => x.Mandatorio)) ||
(Variaveis.OperacaoEmAndamento.ModulosMandatorios.All(x => !x.Mandatorio) && Variaveis.OperacaoEmAndamento.ModulosMandatorios.Any(x => x.Conectado));
if (Variaveis.OperacaoEmAndamento.Iniciado)
{
Variaveis.OperacaoEmAndamento.FinalizarOperacao();
}
else
{
if (OperacaoLiberada)
{
Variaveis.OperacaoEmAndamento.IniciarOperacao();
}
else
{
string MensagemErro = "Para iniciar a operação " + Enum.GetName(typeof(ModoOperacao), Variaveis.OperacaoEmAndamento.Modo) +
", é necessário que todos os módulos mandatórios estejam devidamente conectados ao equipamento, ou pelo menos um dos módulos:\r\n";
Variaveis.OperacaoEmAndamento.ModulosMandatorios.ForEach(Modulo =>
{
MensagemErro += Enum.GetName(typeof(T_Code), Modulo.Dispositivo) + ": ( " + (Modulo.Conectado ? "OK" : " ") + " ) - Mandatório: " + (Modulo.Mandatorio ? "Sim" : "Não") + "\r\n";
});
MessageBox.Show(MensagemErro, "Conexão de módulos pendentes", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
btnIniciar.Text = Variaveis.OperacaoEmAndamento.Iniciado ? "Finalizar" : "Iniciar";
cmbOperacao.Enabled = !Variaveis.OperacaoEmAndamento.Iniciado;
lblOperacaoStatus.Text = "Operação: " + Enum.GetName(typeof(ModoOperacao), Variaveis.OperacaoEmAndamento.Modo) + " " + (Variaveis.OperacaoEmAndamento.Iniciado ? "Iniciado" : "Não iniciado");
}
}
}