336 lines
14 KiB
C#
336 lines
14 KiB
C#
using AgroBase.Forms.Operacoes;
|
|
using AgroBase.Models;
|
|
using AgroBase.Models.Components;
|
|
using AgroBase.Properties;
|
|
using AgroBase.Services;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using static AgroBase.Models.Enums;
|
|
|
|
namespace AgroBase.Forms.IHM
|
|
{
|
|
public partial class frmIHM : Form
|
|
{
|
|
AsyncTaskTimerModel tmrDispositivos;
|
|
public ulong CodFalha = 0;
|
|
|
|
public frmIHM()
|
|
{
|
|
InitializeComponent();
|
|
|
|
FuncoesGlobais.DefinirEventosPicBtn(picOperacao, "Erro ao carregar operação!", async () =>
|
|
{
|
|
frmInicioOperacao frm = new frmInicioOperacao();
|
|
frm.ShowDialog();
|
|
});
|
|
FuncoesGlobais.DefinirEventosPicBtn(picDiagnosticos, "Erro ao processar diagnóstico!", async () =>
|
|
{
|
|
frmDiagnosticos frm = new frmDiagnosticos();
|
|
frm.ShowDialog();
|
|
});
|
|
FuncoesGlobais.DefinirEventosPicBtn(picAjustes, "Erro ao realizar ajustes!", async () =>
|
|
{
|
|
frmAjustes frm = new frmAjustes();
|
|
frm.ShowDialog();
|
|
});
|
|
FuncoesGlobais.DefinirEventosPicBtn(picManual, "Erro ao carregar modo de controle manual!", async () =>
|
|
{
|
|
OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.Manual);
|
|
if (Variaveis.OperacaoEmAndamento.OperacaoLiberada)
|
|
{
|
|
frmDialogoMapa frm = new frmDialogoMapa();
|
|
frm.Show();
|
|
frm.InicializarModoManual();
|
|
}
|
|
else
|
|
{
|
|
CustomDialog.ShowDialog(
|
|
"Iniciar Operação Manual",
|
|
$"{Variaveis.OperacaoEmAndamento.ErroOperacaoLiberada ?? ""}",
|
|
MessageBoxIcon.Error,
|
|
new Dictionary<(string, dynamic), Action>()
|
|
{
|
|
{ ("OK", null), () => { } },
|
|
}
|
|
);
|
|
}
|
|
});
|
|
FuncoesGlobais.DefinirEventosPicBtn(picDesligar, "Erro ao desligar equipamento!", async () =>
|
|
{
|
|
if (Variaveis.Producao)
|
|
{
|
|
var res = CustomDialog.ShowDialog(
|
|
"Desligar",
|
|
"Deseja Desligar o Equipamento?",
|
|
MessageBoxIcon.Question,
|
|
new Dictionary<(string, DialogResult?), Action>()
|
|
{
|
|
{ ("Sim", DialogResult.Yes), () => { } },
|
|
{ ("Não", DialogResult.No), () => { } },
|
|
}
|
|
);
|
|
if (res == DialogResult.Yes)
|
|
{
|
|
Process.Start("shutdown", "/s /t 0");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.Close();
|
|
}
|
|
});
|
|
FuncoesGlobais.DefinirEventosPicBtn(picWifi, "Erro ao procurar por atualizações!", async () =>
|
|
{
|
|
if (APIService.HasInternet)
|
|
{
|
|
await VersionamentoService.AtualizarArquivoVersionamento(true);
|
|
|
|
var arquivosNaoEncontrados = VersionamentoService.ArquivosNaoEncontrados.ToList();
|
|
bool sucesso = !arquivosNaoEncontrados.Any();
|
|
|
|
CustomDialog.ShowDialog(
|
|
"Resultado",
|
|
"Atualização concluída com " + (sucesso ? "sucesso" : "falha") + "!\r\n\r\n" +
|
|
(!sucesso ?
|
|
("Arquivos não encontrados:\r\n\r\n" + string.Join("\r\n", arquivosNaoEncontrados)) :
|
|
"Nenhum arquivo pendente!"),
|
|
sucesso ? MessageBoxIcon.Asterisk : MessageBoxIcon.Error,
|
|
new Dictionary<(string, dynamic), Action>()
|
|
{
|
|
{ ("OK", null), () => { } },
|
|
}
|
|
);
|
|
}
|
|
else
|
|
{
|
|
CustomDialog.ShowDialog(
|
|
"Equipamento Desconectado",
|
|
"Impossível procurar por atualizações!",
|
|
MessageBoxIcon.Warning,
|
|
new Dictionary<(string, dynamic), Action>()
|
|
{
|
|
{ ("OK", null), () => { } },
|
|
}
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
private void frmIHM_Load(object sender, EventArgs e)
|
|
{
|
|
lblVersao.Text = "v " + Variaveis.Versao;
|
|
|
|
tmrDispositivos?.Dispose();
|
|
tmrDispositivos = new AsyncTaskTimerModel("tmrDispositivos", tmrDispositivos_Tick, 1000, this);
|
|
tmrDispositivos.Start();
|
|
|
|
lblCodigoFalha.Click -= LblCodigoFalha_Click;
|
|
lblCodigoFalha.Click += LblCodigoFalha_Click;
|
|
}
|
|
|
|
/*
|
|
private async Task tmrDispositivos_Tick()
|
|
{
|
|
CodFalha = Variaveis.OperacaoEmAndamento.RetornaCodigoFalha();
|
|
|
|
var Labels = this.Controls.OfType<Label>().Where(y => y.Name.Contains("lblD_")).ToList();
|
|
Labels.ForEach(lbl =>
|
|
{
|
|
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), lbl.Name.Split('_')[1]);
|
|
string Mod_ID = lbl.Name.Split('_').Length == 3 ? lbl.Name.Split('_')[2] : lbl.Name.Split('_')[1];
|
|
|
|
if (Dispositivo == T_Code.Cam)
|
|
{
|
|
var listaCameras = CameraService.AtualizaListaCameras();
|
|
|
|
var CameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminhoKinect;
|
|
if (CameraCaminho != null && Mod_ID == CameraCaminho.ID)
|
|
{
|
|
lbl.ForeColor = !listaCameras.Any(x => x.Value == CameraCaminho.CameraSelecionada) ? Color.DarkRed : CameraCaminho.camera.selectedCamera == 0 ? Color.Gold : Color.DarkGreen;
|
|
}
|
|
else
|
|
{
|
|
var CameraSolo = Variaveis.OperacaoEmAndamento.CamerasSolo.FirstOrDefault(x => x.ID == Mod_ID);
|
|
if (CameraSolo != null)
|
|
{
|
|
lbl.ForeColor = !listaCameras.Any(x => x.Value == CameraSolo.CameraSelecionada) ? Color.DarkRed : CameraSolo.camera.selectedCamera == 0 ? Color.Gold : Color.DarkGreen;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo && (x.Mod_ID == Mod_ID || x.Mod_ID == null));
|
|
if (Modulo != null)
|
|
{
|
|
lbl.ForeColor = Modulo.Erro ? Color.Gold : Modulo.Conectado ? Color.DarkGreen : Color.DarkRed;
|
|
}
|
|
else
|
|
{
|
|
lbl.ForeColor = Color.Black;
|
|
}
|
|
}
|
|
});
|
|
|
|
bool mqttConectado = Variaveis.MqttService.StatusConexao();
|
|
lblMqtt.Text = "MQTT: " + (mqttConectado ? "Conectado" : "Desconectado");
|
|
lblMqtt.ForeColor = mqttConectado ? Color.Green : Color.Red;
|
|
bool wifiConectado = WifiService.WifiConectado;
|
|
bool wifiDisponivel = WifiService.WifiDisponivel;
|
|
lblWifi.Text = "Wi-Fi: " + (wifiConectado ? "Conectado" : wifiDisponivel ? "Disponível" : "Desconectado");
|
|
lblWifi.ForeColor = wifiConectado ? Color.Green : wifiDisponivel ? Color.Yellow : Color.Red;
|
|
bool opLiberada = Variaveis.OperacaoEmAndamento.OperacaoLiberada;
|
|
lblOperacaoLiberada.Text = "Operação Liberada: " + (opLiberada ? "Sim" : "Não");
|
|
lblOperacaoLiberada.ForeColor = opLiberada ? Color.Green : Color.Red;
|
|
lblCodigoFalha.Text = $"Código de Falha: {CodFalha}";
|
|
picWifi.Image = APIService.HasInternet ? Resources.wifi_on : Resources.wifi_off;
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
private async Task tmrDispositivos_Tick()
|
|
{
|
|
try
|
|
{
|
|
// Atualizar controles da UI de forma segura
|
|
if (tmrDispositivos._uiControl.InvokeRequired)
|
|
{
|
|
tmrDispositivos._uiControl.Invoke(new Action(async () => await AtualizarControlesUI()));
|
|
}
|
|
else
|
|
{
|
|
await AtualizarControlesUI();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Erro no tmrDispositivos_Tick: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
private async Task AtualizarControlesUI()
|
|
{
|
|
CodFalha = Variaveis.OperacaoEmAndamento.RetornaCodigoFalha();
|
|
|
|
var Labels = this.Controls.OfType<Label>().Where(y => y.Name.Contains("lblD_")).ToList();
|
|
var listaCameras = OAKCameraService.GetListaCameras();
|
|
Labels.ForEach(lbl =>
|
|
{
|
|
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), lbl.Name.Split('_')[1]);
|
|
string Mod_ID = lbl.Name.Split('_').Length == 3 ? lbl.Name.Split('_')[2] : lbl.Name.Split('_')[1];
|
|
|
|
if (Dispositivo == T_Code.Cam)
|
|
{
|
|
var CameraCaminho = Variaveis.OperacaoEmAndamento.CameraCaminho;
|
|
if (CameraCaminho != null && Mod_ID == CameraCaminho.ID)
|
|
{
|
|
lbl.ForeColor = !listaCameras.Any(x => x.Id == CameraCaminho.DeviceID)
|
|
? Color.DarkRed
|
|
: CameraCaminho.camera.cameraIndex == 0
|
|
? Color.Gold
|
|
: Color.DarkGreen;
|
|
}
|
|
else
|
|
{
|
|
var CameraSolo = Variaveis.OperacaoEmAndamento.CamerasSolo.FirstOrDefault(x => x.ID == Mod_ID);
|
|
if (CameraSolo != null)
|
|
{
|
|
lbl.ForeColor = !listaCameras.Any(x => x.Id == CameraSolo.DeviceID) ?
|
|
Color.DarkRed :
|
|
CameraSolo.camera.cameraIndex == 0 ?
|
|
Color.Gold :
|
|
Color.DarkGreen;
|
|
}
|
|
}
|
|
}
|
|
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;
|
|
}
|
|
});
|
|
|
|
bool mqttConectado = Variaveis.MqttService.StatusConexao();
|
|
lblMqtt.Text = "MQTT: " + (mqttConectado ? "Conectado" : "Desconectado");
|
|
lblMqtt.ForeColor = mqttConectado ? Color.Green : Color.Red;
|
|
|
|
bool wifiConectado = WifiService.WifiConectado;
|
|
bool wifiDisponivel = WifiService.WifiDisponivel;
|
|
bool wifiConectando = WifiService.Conectando;
|
|
lblWifi.Text = "Wi-Fi: " + (wifiConectado ? "Conectado" : wifiConectando ? "Conectando..." : wifiDisponivel ? "Disponível" : "Desconectado");
|
|
lblWifi.ForeColor = wifiConectado ? Color.Green : wifiConectando ? Color.Black : wifiDisponivel ? Color.Yellow : Color.Red;
|
|
|
|
bool opLiberada = Variaveis.OperacaoEmAndamento.OperacaoLiberada;
|
|
lblOperacaoLiberada.Text = "Operação Liberada: " + (opLiberada ? "Sim" : "Não");
|
|
lblOperacaoLiberada.ForeColor = opLiberada ? Color.Green : Color.Red;
|
|
|
|
lblCodigoFalha.Text = $"Código de Falha: {CodFalha}";
|
|
picWifi.Image = APIService.HasInternet ? Resources.wifi_on : Resources.wifi_off;
|
|
|
|
await Task.CompletedTask; // Mantém a assinatura assíncrona
|
|
}
|
|
|
|
|
|
private void LblCodigoFalha_Click(object sender, EventArgs e)
|
|
{
|
|
string DescricaoFalha = OperacaoModel.DescricaoCodigoFalha(CodFalha);
|
|
CustomDialog.ShowDialog(
|
|
"Código de Falha",
|
|
$"{DescricaoFalha}",
|
|
MessageBoxIcon.Information,
|
|
new Dictionary<(string, dynamic), Action>()
|
|
{
|
|
{ ("OK", null), () => { } },
|
|
}
|
|
);
|
|
}
|
|
|
|
private void lblModulo_Click(object sender, EventArgs e)
|
|
{
|
|
Label lbl = (Label)sender;
|
|
T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), lbl.Name.Split('_')[1]);
|
|
string Mod_ID = lbl.Name.Split('_').Length == 3 ? lbl.Name.Split('_')[2] : lbl.Name.Split('_')[1];
|
|
|
|
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" :
|
|
""
|
|
);
|
|
|
|
CustomDialog.ShowDialog(
|
|
"Detalhes",
|
|
$"{msg}",
|
|
Modulo != null && Modulo.Erro ? MessageBoxIcon.Error : Modulo != null && Modulo.Conectado ? MessageBoxIcon.Information : MessageBoxIcon.Exclamation,
|
|
new Dictionary<(string, dynamic), Action>()
|
|
{
|
|
{ ("OK", null), () => { } },
|
|
}
|
|
);
|
|
}
|
|
|
|
|
|
}
|
|
}
|