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

197 lines
7.7 KiB
C#

using AgroBase.Comum;
using AgroBase.Models;
using AgroBase.Models.Modules;
using AgroBase.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AgroBase.Models.Enuns;
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();
break;
}
case T_Code.Atu:
{
Sensores = ((AtuadorModel)Disp.Dados).Sensores.ToList();
break;
}
}
PopulaParametrosSensor();
PreencheParametrosSensores();
cmbBateriaParametro.Items.Clear();
cmbBateriaParametro.Items.AddRange(PZEMService.Parametros.Keys.ToArray());
cmbBateriaParametro.SelectedIndex = 0;
if (Disp != null && Disp.Dispositivo == T_Code.Sen)
{
Cameras = CameraService.AtualizaListaCameras();
cmbCaminho.Items.Clear();
cmbCaminho.Items.AddRange(Cameras.Values.ToArray());
cmbCaminho.SelectedIndex = cmbCaminho.Items.IndexOf(((SensoriamentoModel)Disp.Dados).CameraID_Caminho);
cmbSoloEsq.Items.Clear();
cmbSoloEsq.Items.AddRange(Cameras.Values.ToArray());
cmbSoloEsq.SelectedIndex = cmbCaminho.Items.IndexOf(((SensoriamentoModel)Disp.Dados).CameraID_SoloE);
cmbSoloDir.Items.Clear();
cmbSoloDir.Items.AddRange(Cameras.Values.ToArray());
cmbSoloDir.SelectedIndex = cmbCaminho.Items.IndexOf(((SensoriamentoModel)Disp.Dados).CameraID_SoloD);
}
}
private void PopulaParametrosSensor()
{
foreach (var Sensor in Sensores)
{
string gridName = "grid" + Enum.GetName(typeof(S_Code), 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[0], Parametro[0]);
}
}
}
}
private void PreencheParametrosSensores()
{
foreach (var Sensor in Sensores)
{
string gridName = "grid" + Enum.GetName(typeof(S_Code), 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;
grid.Rows[novaLinhaIndex].Cells[1].Value = Sensor.LimiteMinimo;
grid.Rows[novaLinhaIndex].Cells[2].Value = Sensor.LimiteMaximo;
for (int i = 0; i < Sensor.Parametros.Count; i++)
{
grid.Rows[novaLinhaIndex].Cells[i + ParametrosComecamEm].Value = Sensor.Parametros[i][1];
}
}
}
}
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" + Enum.GetName(typeof(S_Code), 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() });
Sensor.LimiteMinimo = Convert.ToDouble(Row.Cells[1].Value.ToString());
Sensor.LimiteMaximo = Convert.ToDouble(Row.Cells[2].Value.ToString());
for (int i = 0; i < Sensor.Parametros.Count; i++)
{
Sensor.Parametros[i][1] = 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.Sensores = Sensores.ToList();
_Disp.Dados.CameraID_Caminho = cmbCaminho.Text;
_Disp.Dados.CameraID_SoloE = cmbSoloEsq.Text;
_Disp.Dados.CameraID_SoloD = cmbSoloDir.Text;
_Disp.SalvarParametros(_Disp.Dados);
break;
}
case T_Code.Atu:
{
var _Disp = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Dispositivo);
_Disp.Dados.Sensores = Sensores.ToList();
_Disp.SalvarParametros(_Disp.Dados);
break;
}
}
}
private void btnBateriaVer_Click(object sender, EventArgs e)
{
var Comando = PZEMService.ComandoGetParametro(PZEMService.Parametros[cmbBateriaParametro.Text]);
PZEMService.EnviarComando(PZEMService.PortaPZEM, Comando);
}
private void btnBateriaDefinir_Click(object sender, EventArgs e)
{
var Comando = PZEMService.ComandoSetParametro(PZEMService.Parametros[cmbBateriaParametro.Text], Convert.ToInt32(nudBateriaValor.Value));
PZEMService.EnviarComando(PZEMService.PortaPZEM, Comando);
}
}
}