346 lines
15 KiB
C#
346 lines
15 KiB
C#
using AgroBase.Comum;
|
|
using AgroBase.Models;
|
|
using AgroBase.Models.Modules;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using static AgroBase.Models.Enums;
|
|
|
|
namespace AgroBase.Forms.Atuador
|
|
{
|
|
public partial class frmAtuCalibragem : Form
|
|
{
|
|
AsyncTaskTimerModel tmrLeitura;
|
|
DispositivosService<AtuadorModel> DispAtu = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Atu);
|
|
CalibragemVazao _CalibragemVazao = new CalibragemVazao();
|
|
|
|
public frmAtuCalibragem()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void frmAtuCalibragem_Load(object sender, EventArgs e)
|
|
{
|
|
PopularBicos();
|
|
|
|
nudPressaoSP.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha);
|
|
txtPressaoVmin.Text = DispAtu.Dados._PressaoVmin.ToString();
|
|
txtPressaoVmax.Text = DispAtu.Dados._PressaoVmax.ToString();
|
|
txtMLRef.Text = DispAtu.Dados.VazaoFluxoMLpSReferencia.ToString();
|
|
//txtPulsosRef.Text = DispAtu.Dados._FluxoPulsoRef.ToString();
|
|
//txtVolume.Text = DispAtu.Dados.VolumeVazaoAferido.ToString();
|
|
|
|
grdSensoriamento.Rows.Clear();
|
|
grdSensoriamento.Columns.Clear();
|
|
grdSensoriamento.Columns.Add("clDado", "Dado");
|
|
grdSensoriamento.Columns.Add("clValor", "Valor");
|
|
grdSensoriamento.Rows.Add(new object[] { "Bomba Iniciada", "Não" });
|
|
grdSensoriamento.Rows.Add(new object[] { "Bomba Cmd Ligar", "Não" });
|
|
grdSensoriamento.Rows.Add(new object[] { "Bomba Ligada", "Não" });
|
|
grdSensoriamento.Rows.Add(new object[] { "Bomba Potencia", "0" });
|
|
grdSensoriamento.Rows.Add(new object[] { "Pressão", "0" });
|
|
grdSensoriamento.Rows.Add(new object[] { "Pressão Calc", "0" });
|
|
grdSensoriamento.Rows.Add(new object[] { "Vazão", "0" });
|
|
grdSensoriamento.Rows.Add(new object[] { "Massa", "0" });
|
|
grdSensoriamento.Rows.Add(new object[] { "Volume", "0" });
|
|
grdSensoriamento.Rows.Add(new object[] { "Percentual", "0" });
|
|
|
|
|
|
tmrLeitura = new AsyncTaskTimerModel("tmrLeitura", tmrLeitura_Tick, 1000, this);
|
|
tmrLeitura.Start();
|
|
}
|
|
|
|
private void frmAtuCalibragem_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
tmrLeitura.Dispose();
|
|
}
|
|
|
|
private void PopularBicos()
|
|
{
|
|
for (int i = 0; i < Variaveis.OperacaoEmAndamento.Parametros.QtdBicos; i++)
|
|
{
|
|
string ID = DispAtu.Dados.BicosPulverizadores[i].ID;
|
|
Label lblBico = new Label()
|
|
{
|
|
Name = "lbl_" + ID,
|
|
Location = new Point(0, 0),
|
|
Text = ID
|
|
};
|
|
Panel pnlBico = new Panel()
|
|
{
|
|
Name = "pnlB_" + ID,
|
|
Size = new Size(166, 166),
|
|
Location = new Point(30 + (i * 166), 0),
|
|
};
|
|
pnlBico.Paint -= pnlBico_Paint;
|
|
pnlBico.Paint += pnlBico_Paint;
|
|
Button btnDesligar = new Button()
|
|
{
|
|
Name = "btn0_" + ID,
|
|
Size = new Size(75, 27),
|
|
Location = new Point(5, 136),
|
|
Text = "Desligar"
|
|
};
|
|
btnDesligar.Click -= btn0_Click;
|
|
btnDesligar.Click += btn0_Click;
|
|
Button btnLigar = new Button()
|
|
{
|
|
Name = "btn1_" + ID,
|
|
Size = new Size(75, 27),
|
|
Location = new Point(86, 136),
|
|
Text = "Ligar"
|
|
};
|
|
btnLigar.Click -= btn1_Click;
|
|
btnLigar.Click += btn1_Click;
|
|
Label lblCmd = new Label()
|
|
{
|
|
Name = "lblCmd_" + ID,
|
|
Size = new Size(150, 20),
|
|
Location = new Point(5, 115),
|
|
Text = "Comando: Desligado"
|
|
};
|
|
|
|
pnlBico.Controls.Add(lblBico);
|
|
pnlBico.Controls.Add(btnDesligar);
|
|
pnlBico.Controls.Add(btnLigar);
|
|
pnlBico.Controls.Add(lblCmd);
|
|
|
|
pnlBico.Location = new Point(30 + (i * 166), 22);
|
|
|
|
pnlBicos.Controls.Add(pnlBico);
|
|
}
|
|
|
|
}
|
|
|
|
private async Task tmrLeitura_Tick()
|
|
{
|
|
DispAtu = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Atu);
|
|
|
|
if (DispAtu != null)
|
|
{
|
|
lblConectado.Text = "Conectado: " + (DispAtu.Dados.ConexaoAtiva ? "Sim" : "Não");
|
|
AtualizarGridSensores();
|
|
|
|
foreach (var pnlBico in pnlBicos.Controls.OfType<Panel>().Where(x => x.Name.Contains("pnlB_")))
|
|
{
|
|
pnlBico.Invalidate();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void AtualizarGridSensores()
|
|
{
|
|
var BombaPressurizadora = DispAtu.Dados.BombaPressurizadora;
|
|
grdSensoriamento.Rows[0].Cells[1].Value = BombaPressurizadora.Inicializado;
|
|
grdSensoriamento.Rows[1].Cells[1].Value = BombaPressurizadora.ComandoAtuar;
|
|
grdSensoriamento.Rows[2].Cells[1].Value = BombaPressurizadora._EstadoLeitura;
|
|
grdSensoriamento.Rows[3].Cells[1].Value = BombaPressurizadora._Potencia;
|
|
grdSensoriamento.Rows[4].Cells[1].Value = DispAtu.Dados.PressaoLinha.ToString("0.00000");
|
|
grdSensoriamento.Rows[5].Cells[1].Value = DispAtu.Dados.PressaoLinhaCalc.ToString("0.00000");
|
|
grdSensoriamento.Rows[6].Cells[1].Value = DispAtu.Dados.VazaoMediaMLs.ToString("0.00000");
|
|
grdSensoriamento.Rows[7].Cells[1].Value = DispAtu.Dados.ContadorCarga.MassaAtual_Kg.ToString("0.00000");
|
|
grdSensoriamento.Rows[8].Cells[1].Value = DispAtu.Dados.ContadorCarga.VolumeAtual_L.ToString("0.00000");
|
|
grdSensoriamento.Rows[9].Cells[1].Value = DispAtu.Dados.ContadorCarga.PercentualAtual.ToString("0.00");
|
|
}
|
|
|
|
private void nudPressaoSP_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
var op = Variaveis.OperacaoEmAndamento;
|
|
var Bomba = op.DispAtu.Dados.BombaPressurizadora;
|
|
op.Parametros.Controle.AtuPressaoLinha = Convert.ToInt32(((NumericUpDown)sender).Value);
|
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
|
Bomba,
|
|
Services.CanMessagePosicaoDados.Command1,
|
|
setarControle: true,
|
|
status: Bomba.ComandoAtuar
|
|
);
|
|
}
|
|
|
|
private void btnLigarBomba_Click(object sender, EventArgs e)
|
|
{
|
|
var op = Variaveis.OperacaoEmAndamento;
|
|
var Bomba = op.DispAtu.Dados.BombaPressurizadora;
|
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
|
Bomba,
|
|
Services.CanMessagePosicaoDados.Command1,
|
|
setarControle: true,
|
|
status: true
|
|
);
|
|
}
|
|
|
|
private void btnDesligarBomba_Click(object sender, EventArgs e)
|
|
{
|
|
var op = Variaveis.OperacaoEmAndamento;
|
|
var Bomba = op.DispAtu.Dados.BombaPressurizadora;
|
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
|
Bomba,
|
|
Services.CanMessagePosicaoDados.Command1,
|
|
setarControle: true,
|
|
status: false
|
|
);
|
|
}
|
|
|
|
private void pnlBico_Paint(object sender, PaintEventArgs e)
|
|
{
|
|
Panel pnl = (Panel)sender;
|
|
string ID = pnl.Name.Replace("pnlB_", "");
|
|
|
|
Graphics g = e.Graphics;
|
|
int circleDiameter = 50; // Diâmetro do círculo
|
|
int circleX = (pnl.Width - circleDiameter) / 2; // Posição X do círculo (centro horizontal)
|
|
int circleY = pnl.Height / 4; // Posição Y do círculo (mais próximo ao topo)
|
|
|
|
// Desenhar o círculo
|
|
if (DispAtu.Dados.BicosPulverizadores.First(x => x.ID == ID)._EstadoLeitura == Estado.Ligado)
|
|
g.FillEllipse(Brushes.Green, circleX, circleY, circleDiameter, circleDiameter); // LED aceso (círculo preenchido)
|
|
else
|
|
g.DrawEllipse(Pens.Black, circleX, circleY, circleDiameter, circleDiameter); // LED apagado (círculo vazio)
|
|
}
|
|
|
|
private void btn0_Click(object sender, EventArgs e)
|
|
{
|
|
Button btn = (Button)sender;
|
|
string ID = btn.Name.Replace("btn0_", "");
|
|
var op = Variaveis.OperacaoEmAndamento;
|
|
var Bico = op?.DispAtu?.Dados?.BicosPulverizadores?.FirstOrDefault(x => x.ID == ID);
|
|
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
|
Bico,
|
|
Services.CanMessagePosicaoDados.Command1,
|
|
setarControle: true,
|
|
status: false
|
|
);
|
|
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Invalidate();
|
|
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: Desligado";
|
|
}
|
|
|
|
private void btn1_Click(object sender, EventArgs e)
|
|
{
|
|
Button btn = (Button)sender;
|
|
string ID = btn.Name.Replace("btn1_", "");
|
|
var op = Variaveis.OperacaoEmAndamento;
|
|
var Bico = op?.DispAtu?.Dados?.BicosPulverizadores?.FirstOrDefault(x => x.ID == ID);
|
|
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
|
Bico,
|
|
Services.CanMessagePosicaoDados.Command1,
|
|
setarControle: true,
|
|
status: true
|
|
);
|
|
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Invalidate();
|
|
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: Ligado";
|
|
}
|
|
|
|
private void btnSalvar_Click(object sender, EventArgs e)
|
|
{
|
|
Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha = Convert.ToDouble(nudPressaoSP.Value);
|
|
DispAtu.Dados._PressaoVmin = Convert.ToDouble(txtPressaoVmin.Text);
|
|
DispAtu.Dados._PressaoVmax = Convert.ToDouble(txtPressaoVmax.Text);
|
|
//DispAtu.Dados._FluxoMlRef = Convert.ToDouble(txtMLRef.Text);
|
|
//DispAtu.Dados._FluxoPulsoRef = Convert.ToDouble(txtPulsosRef.Text);
|
|
//DispAtu.Dados.VolumeVazaoAferido = Convert.ToDouble(txtVolume.Text);
|
|
}
|
|
|
|
private void btnCalibrarVazao_Click(object sender, EventArgs e)
|
|
{
|
|
if (btnCalibrarVazao.Text == "Calcular")
|
|
{
|
|
if (txtVolume.Text == "" || double.TryParse(txtVolume.Text, out double Volume) == false)
|
|
{
|
|
MessageBox.Show("Informe o volume obtido durante a calibragem!");
|
|
return;
|
|
}
|
|
_CalibragemVazao.VolumeComputado = Volume;
|
|
btnCalibrarVazao.Text = "Calibrar";
|
|
|
|
string Resultados =
|
|
"Valores iniciais" + Environment.NewLine +
|
|
"Massa = " + _CalibragemVazao.MassaInicial.ToString("0.0000") + " Kg" + Environment.NewLine +
|
|
"Pressão = " + _CalibragemVazao.PressoesAferidas.First().ToString("0.0000") + " psi" + Environment.NewLine +
|
|
Environment.NewLine +
|
|
"Medições" + Environment.NewLine +
|
|
"V = " + _CalibragemVazao.VolumeComputado.ToString("0.0000") + "mL" + Environment.NewLine +
|
|
"P = " + _CalibragemVazao.PressaoMedia.ToString("0.0000") + " psi" + Environment.NewLine +
|
|
"NP = " + _CalibragemVazao.QtdPulsos + Environment.NewLine +
|
|
"T = " + _CalibragemVazao.Periodo + " s" + Environment.NewLine +
|
|
"M = " + _CalibragemVazao.MassaFinal.ToString("0.0000") + " Kg" + Environment.NewLine +
|
|
Environment.NewLine +
|
|
"Cálculos" + Environment.NewLine +
|
|
"Massa Perdida = " + _CalibragemVazao.MassaPerdida.ToString("0.0000") + " g" + Environment.NewLine +
|
|
"d = " + _CalibragemVazao.d.ToString("0.0000") + Environment.NewLine +
|
|
"Q = " + _CalibragemVazao.Q.ToString("0.0000") + " mL/s" + Environment.NewLine +
|
|
"x = " + _CalibragemVazao.x.ToString("0.0000") + Environment.NewLine +
|
|
"Q2 = " + _CalibragemVazao.Q2.ToString("0.0000") + " mL" + Environment.NewLine +
|
|
""
|
|
;
|
|
|
|
Console.WriteLine(Resultados);
|
|
MessageBox.Show(Resultados, "Resultado da calibragem");
|
|
if (MessageBox.Show("Deseja aceitar os parâmetros de calibragem?", "Atualizar dados", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
|
{
|
|
txtMLRef.Text = _CalibragemVazao.VolumeComputado.ToString();
|
|
txtPulsosRef.Text = _CalibragemVazao.QtdPulsos.ToString();
|
|
DispAtu.Dados.DensidadeHerbicida = _CalibragemVazao.d;
|
|
btnSalvar_Click(sender, EventArgs.Empty);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
btnCalibrarVazao.Enabled = false;
|
|
btnLigarBomba_Click(sender, e);
|
|
var tmrInicioCalibragemVazao = new Timer { Interval = 1000 };
|
|
tmrInicioCalibragemVazao.Tick += tmrInicioCalibragemVazao_Tick;
|
|
tmrInicioCalibragemVazao.Start();
|
|
}
|
|
}
|
|
|
|
private void tmrInicioCalibragemVazao_Tick(object sender, EventArgs e)
|
|
{
|
|
((Timer)sender).Stop();
|
|
|
|
var tmrCalibragemVazao = new Timer() { Interval = 500 };
|
|
|
|
_CalibragemVazao = new CalibragemVazao()
|
|
{
|
|
Calibrando = true,
|
|
MassaInicial = DispAtu.Dados.ContadorCarga.MassaAtual_Kg,
|
|
PressoesAferidas = new List<double>()
|
|
{
|
|
DispAtu.Dados.PressaoLinha,
|
|
}
|
|
};
|
|
tmrCalibragemVazao.Tick += tmrCalibragemVazao_Tick;
|
|
tmrCalibragemVazao.Start();
|
|
|
|
btn1_Click(new Button() { Name = "btn1_" + DispAtu.Dados.BicosPulverizadores.First(x => x.Inicializado).ID }, e);
|
|
}
|
|
|
|
private void tmrCalibragemVazao_Tick(object sender, EventArgs e)
|
|
{
|
|
/*_CalibragemVazao.QtdPulsos = DispAtu.Dados._LeituraPulsos;
|
|
_CalibragemVazao.Periodo = DispAtu.Dados._LeituraPeriodo;
|
|
_CalibragemVazao.PressoesAferidas.Add(DispAtu.Dados.PressaoLinha);
|
|
_CalibragemVazao.MassaFinal = DispAtu.Dados.MassaReservatorio;
|
|
|
|
if (DispAtu.Dados._LeituraPeriodo >= _CalibragemVazao.TempoCalibragem)
|
|
{
|
|
((Timer)sender).Stop();
|
|
|
|
btn0_Click(new Button() { Name = "btn0_" + DispAtu.Dados.BicosPulverizadores.First(x => x.Inicializado).ID }, e);
|
|
btnDesligarBomba_Click(sender, e);
|
|
|
|
_CalibragemVazao.Periodo = _CalibragemVazao.Periodo / 1000.0;
|
|
|
|
btnCalibrarVazao.Text = "Calcular";
|
|
btnCalibrarVazao.Enabled = true;
|
|
}*/
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|