agrobot_base/AgroBase/AgroBase/Forms/Sensoriamento/frmSenConfig.cs

290 lines
11 KiB
C#

using AgroBase.Comum;
using AgroBase.Models;
using AgroBase.Models.Modules;
using AgroBase.Services;
using AgroBase.Services.Operadores;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using static AgroBase.Models.Enums;
namespace AgroBase.Forms.Sensoriamento
{
public partial class frmSenConfig : Form
{
IDispositivosService Disp = null;
public T_Code Dispositivo = T_Code.Sen;
List<SensorModel> Sensores = new List<SensorModel>();
Dictionary<string, string> Cameras = new Dictionary<string, string>();
int ParametrosComecamEm = 3;
public frmSenConfig()
{
InitializeComponent();
}
private void frmSenConfig_Load(object sender, EventArgs e)
{
Disp = Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Dispositivo);
if (Disp == null)
{
return;
}
switch (Dispositivo)
{
case T_Code.Sen:
{
Sensores = ((SensoriamentoModel)Disp.Dados).Sensores.ToList();
chbRequisitarDados.Checked = ((SensoriamentoModel)Disp.Dados).RequisitarDados;
AtualizarCameras();
break;
}
case T_Code.Atu:
{
Sensores = ((AtuadorModel)Disp.Dados).Sensores.ToList();
chbRequisitarDados.Checked = ((AtuadorModel)Disp.Dados).RequisitarDados;
break;
}
}
txtEnderecoCAN_Tx.Text = FuncoesGlobais.HexByteToString(Disp.Dados._EnderecoCAN_Tx);
txtEnderecoCAN_Rx.Text = FuncoesGlobais.HexByteToString(Disp.Dados._EnderecoCAN_Rx);
PopulaParametrosSensor();
PreencheParametrosSensores();
/*cmbBateriaParametro.Items.Clear();
cmbBateriaParametro.Items.Add("Carga Consumida");
cmbBateriaParametro.Items.AddRange(PZEMService.Parametros.Keys.ToArray());
cmbBateriaParametro.SelectedIndex = 0;*/
}
private void AtualizarCameras()
{
Cameras = CameraService.ObterListaCameras();
cmbCaminho.Items.Clear();
cmbCaminho.Items.AddRange(Cameras.Values.ToArray());
string IDrua = CameraWorkerService.CameraCaminho.Id;
if (Cameras.Any(x => x.Value == IDrua))
{
cmbCaminho.SelectedIndex = cmbCaminho.Items.IndexOf(IDrua);
}
else
{
cmbCaminho.Text = IDrua;
}
var CamerasSolo = CameraWorkerService.CamerasSolo;
cmbSoloEsq.Items.Clear();
cmbSoloEsq.Items.AddRange(Cameras.Values.ToArray());
string IDsoloE = CamerasSolo.Count() > 0 ? CamerasSolo[0].Id : "";
if (Cameras.Any(x => x.Value == IDsoloE))
{
cmbSoloEsq.SelectedIndex = cmbSoloEsq.Items.IndexOf(IDsoloE);
}
else
{
cmbSoloEsq.Text = IDsoloE;
}
cmbSoloDir.Items.Clear();
cmbSoloDir.Items.AddRange(Cameras.Values.ToArray());
string IDsoloD = CamerasSolo.Count() > 1 ? CamerasSolo[1].Id : "";
if (Cameras.Any(x => x.Value == IDsoloD))
{
cmbSoloDir.SelectedIndex = cmbSoloDir.Items.IndexOf(IDsoloD);
}
else
{
cmbSoloDir.Text = IDsoloD;
}
}
private void btnAtualizarCameras_Click(object sender, EventArgs e)
{
AtualizarCameras();
}
private void PopulaParametrosSensor()
{
foreach (var Sensor in Sensores)
{
string gridName = $"grid{Sensor.Componente}";
DataGridView grid = this.Controls.OfType<DataGridView>().ToList().FirstOrDefault(x => x.Name == gridName);
if (grid != null && grid.Columns.Count == 0)
{
grid.Rows.Clear();
grid.Columns.Clear();
grid.Columns.Add("clSensor", "Sensor");
grid.Columns.Add("clLimiteMin", "Limite Mínimo");
grid.Columns.Add("clLimiteMax", "Limite Máximo");
foreach (var Parametro in Sensor.Parametros)
{
grid.Columns.Add("cl" + Parametro.Descricao, Parametro.Descricao);
}
}
}
}
private void PreencheParametrosSensores()
{
foreach (var Sensor in Sensores)
{
string gridName = $"grid{Sensor.Componente}";
DataGridView grid = this.Controls.OfType<DataGridView>().ToList().FirstOrDefault(x => x.Name == gridName);
if (grid != null && grid.Columns.Count > 0)
{
int novaLinhaIndex = grid.Rows.Add();
grid.Rows[novaLinhaIndex].Cells[0].Value = Sensor.Descricao;
for (int i = 0; i < Sensor.Parametros.Count; i++)
{
grid.Rows[novaLinhaIndex].Cells[i + ParametrosComecamEm].Value = Sensor.Parametros[i].Valor;
}
}
}
}
private void frmSenConfig_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Visible = false;
}
private void btnSalvar_Click(object sender, EventArgs e)
{
if (Disp == null)
{
return;
}
foreach (var Sensor in Sensores)
{
string gridName = $"grid{Sensor.Componente}";
DataGridView grid = this.Controls.OfType<DataGridView>().ToList().FirstOrDefault(x => x.Name == gridName);
if (grid != null && grid.Rows.Count > 1)
{
foreach (DataGridViewRow Row in grid.Rows)
{
if (Row.Cells[0].Value != null && Row.Cells[0].Value.ToString() == Sensor.Descricao)
{
//Sensor.Parametros.Add(new string[] { Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString() });
for (int i = 0; i < Sensor.Parametros.Count; i++)
{
Sensor.Parametros[i].Valor = Row.Cells[i + ParametrosComecamEm].Value.ToString();
}
break;
}
}
}
}
switch (Dispositivo)
{
case T_Code.Sen:
{
var _Disp = (DispositivosService<SensoriamentoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Dispositivo);
_Disp.Dados._EnderecoCAN_Tx = FuncoesGlobais.StringToHexByte(txtEnderecoCAN_Tx.Text);
_Disp.Dados._EnderecoCAN_Rx = FuncoesGlobais.StringToHexByte(txtEnderecoCAN_Rx.Text);
_Disp.Dados.RequisitarDados = chbRequisitarDados.Checked;
_Disp.Dados.Sensores = Sensores.ToList();
CameraWorkerService.CameraCaminho.Id = cmbCaminho.Text;
//_Disp.Dados.CamerasSolo.Clear();
//_Disp.Dados.CameraID_Solo.AddRange(new string[] { cmbSoloEsq.Text, cmbSoloDir.Text });
_Disp.SalvarParametros(_Disp.Dados);
break;
}
case T_Code.Atu:
{
var _Disp = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Dispositivo);
_Disp.Dados._EnderecoCAN_Tx = FuncoesGlobais.StringToHexByte(txtEnderecoCAN_Tx.Text);
_Disp.Dados._EnderecoCAN_Rx = FuncoesGlobais.StringToHexByte(txtEnderecoCAN_Rx.Text);
_Disp.Dados.RequisitarDados = chbRequisitarDados.Checked;
_Disp.Dados.Sensores = Sensores.ToList();
_Disp.SalvarParametros(_Disp.Dados);
break;
}
}
}
private void btnBateriaVer_Click(object sender, EventArgs e)
{
/*if (cmbBateriaParametro.SelectedIndex == 0)
{
MessageBox.Show("Carga consumida da bateria: " + PZEMService.ContadorCarga.PercentualConsumido + "%");
}
else
{
PZEMService.ModoLeitura = true;
var Comando = new ModbusComandoModel()
{
Dispositivo = T_Code.Pzm,
Endereco = PZEMService.slaveAddress,
Comando = PZEMService.ComandoGetParametro(PZEMService.Parametros[cmbBateriaParametro.Text])
};
ModbusService.AdicionarComandoNaFila(Comando);
Task.Run(async () =>
{
await Task.Delay(1000);
PZEMService.ModoLeitura = false;
});
}*/
}
private void btnBateriaDefinir_Click(object sender, EventArgs e)
{
/*if (cmbBateriaParametro.SelectedIndex == 0)
{
double consumidoAtual = Convert.ToDouble(nudBateriaValor.Value);
PZEMService.ContadorCarga.AtualizarValorConsumido(consumidoAtual);
btnBateriaVer_Click(sender, e);
}
else
{
var Comando = new ModbusComandoModel()
{
Dispositivo = T_Code.Pzm,
Endereco = PZEMService.slaveAddress,
Comando = PZEMService.ComandoSetParametro(PZEMService.Parametros[cmbBateriaParametro.Text], Convert.ToInt32(nudBateriaValor.Value))
};
ModbusService.AdicionarComandoNaFila(Comando);
}*/
}
private void btnBateriaCalibrar_Click(object sender, EventArgs e)
{
/*var Comando = new ModbusComandoModel()
{
Dispositivo = T_Code.Pzm,
Endereco = PZEMService.slaveAddress,
Comando = PZEMService.ComandoCalibragem()
};
ModbusService.AdicionarComandoNaFila(Comando);*/
}
private void btnReiniciar_Click(object sender, EventArgs e)
{
if (MessageBox.Show($"Tem certeza que deseja reiniciar o módulo {Dispositivo}?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
if (Dispositivo == T_Code.Atu)
GeneralJoystick.EnviarComandoAtuador(S_Code.sMOD, "", true);
if (Dispositivo == T_Code.Sen)
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sMOD, "", true);
}
}
}
}