otimizado fluxo de controle

This commit is contained in:
Diego Freitas 2024-12-03 17:55:25 -03:00
parent 9fa0e5832e
commit c260596838
33 changed files with 824 additions and 733 deletions

Binary file not shown.

View File

@ -145,7 +145,7 @@ namespace AgroBase.Forms.Atuador
grdSensoriamento.Rows[0].Cells[1].Value = DispAtu.Dados.BombaPressurizadora.Inicializado;
grdSensoriamento.Rows[1].Cells[1].Value = DispAtu.Dados.BombaPressurizadora.ComandoAtuar;
grdSensoriamento.Rows[2].Cells[1].Value = DispAtu.Dados.BombaPressurizadora.LeituraEstado;
grdSensoriamento.Rows[3].Cells[1].Value = DispAtu.Dados.BombaPressurizadora.Potencia;
grdSensoriamento.Rows[3].Cells[1].Value = DispAtu.Dados.BombaPressurizadora.LeituraPotencia;
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.VazaoFluxoMLpS.ToString("0.00000");

View File

@ -2,15 +2,8 @@
using AgroBase.Forms.Sensoriamento;
using AgroBase.Models;
using AgroBase.Models.Modules;
using Emgu.CV.Ocl;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AgroBase.Models.Enums;
@ -32,7 +25,7 @@ namespace AgroBase.Forms.Atuador
return;
}
chbBicosAtuacao.Checked = Disp.Dados.AtuacaoNivelAlto;
chbBicosAtuacao.Checked = Disp.Dados.BicosPulverizadores.Any(x => x.AtuacaoNivelAlto);
nudBicosQtd.Value = Disp.Dados.QuantidadeBicos;
txtDensidade.Text = Disp.Dados.DensidadeHerbicida.ToString("0.00");
nudCapMax.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.CapacidadeReservatorio);
@ -46,7 +39,7 @@ namespace AgroBase.Forms.Atuador
private void btnSalvar_Click(object sender, EventArgs e)
{
Disp.Dados.AtuacaoNivelAlto = chbBicosAtuacao.Checked;
Disp.Dados.BicosPulverizadores.ForEach(x => x.AtuacaoNivelAlto = chbBicosAtuacao.Checked);
Disp.Dados.QuantidadeBicos = Convert.ToInt32(nudBicosQtd.Value);
Disp.Dados.DensidadeHerbicida = Convert.ToDouble(txtDensidade.Text.Replace(".", ","));
Variaveis.OperacaoEmAndamento.CapacidadeReservatorio = Convert.ToDouble(nudCapMax.Value);

View File

@ -814,7 +814,7 @@ namespace AgroBase.Forms.IHM
foreach (var Modulo in Dispositivo.Dados.Modulos)
{
var Leitura = MKS057DService.DadosLeitura.FirstOrDefault(x => x.Endereco == Convert.ToByte(Modulo.DirMotor.Endereco, 16));
var Leitura = Modulo.DirMotor.Leitura;
bool Conectado = SerialService.DispositivosMapeados.Any(x => x.Dispositivo == Enums.T_Code.Mks && x.Mod_ID == Modulo.Modulo_ID);
idx = PreencheDadosLinha(grid, Testes, idx, Conectado ? 1 : 0);
@ -857,7 +857,7 @@ namespace AgroBase.Forms.IHM
private async Task EnviarComandoDir(ModuloMvdModel Modulo, Enums.Direcao Sentido, ColunasDiagnosticoModel Teste, int Timeout)
{
await Modulo.DirMotor.EnviarComandoControle(Sentido);
Modulo.DirMotor.EnviarComandoControle(Sentido);
DateTime Inicio = DateTime.Now;
bool Sucesso = false;
@ -1476,7 +1476,7 @@ namespace AgroBase.Forms.IHM
await EnviarComandoSinaleiro(Dispositivo, Sinaleiro, true, 1000);
}
StatusLED Status = (((FirmwareSinaleiro)Sinaleiro.Leitura)?.Leitura ?? StatusLED.Apagado);
StatusLED Status = Sinaleiro.LeituraStatus;
idx = PreencheDadosLinha(grid, Testes, idx, Iniciado && Status == StatusLED.Aceso ? 1 : 0);
if (Iniciado)
@ -1484,7 +1484,7 @@ namespace AgroBase.Forms.IHM
await EnviarComandoSinaleiro(Dispositivo, Sinaleiro, false, 1000);
}
Status = (((FirmwareSinaleiro)Sinaleiro.Leitura)?.Leitura ?? StatusLED.Apagado);
Status = Sinaleiro.LeituraStatus;
idx = PreencheDadosLinha(grid, Testes, idx, Iniciado && Status == StatusLED.Apagado ? 0 : 1);
}

View File

@ -28,9 +28,9 @@
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea3 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend3 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
this.pnlCamerasSolo = new System.Windows.Forms.Panel();
this.pnlCameraSoloE = new System.Windows.Forms.Panel();
this.pnlCameraSoloD = new System.Windows.Forms.Panel();
@ -77,6 +77,7 @@
this.lblKmh = new System.Windows.Forms.Label();
this.cmbTipoMovimento = new System.Windows.Forms.ComboBox();
this.lblTipoMovimento = new System.Windows.Forms.Label();
this.chbPulverizador = new System.Windows.Forms.CheckBox();
this.pnlCamerasSolo.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.chartGraficos)).BeginInit();
this.tabControl1.SuspendLayout();
@ -149,17 +150,17 @@
//
this.chartGraficos.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
chartArea1.Name = "ChartArea1";
this.chartGraficos.ChartAreas.Add(chartArea1);
legend1.Name = "Legend1";
this.chartGraficos.Legends.Add(legend1);
chartArea3.Name = "ChartArea1";
this.chartGraficos.ChartAreas.Add(chartArea3);
legend3.Name = "Legend1";
this.chartGraficos.Legends.Add(legend3);
this.chartGraficos.Location = new System.Drawing.Point(640, 7);
this.chartGraficos.Margin = new System.Windows.Forms.Padding(2);
this.chartGraficos.Name = "chartGraficos";
series1.ChartArea = "ChartArea1";
series1.Legend = "Legend1";
series1.Name = "Series1";
this.chartGraficos.Series.Add(series1);
series3.ChartArea = "ChartArea1";
series3.Legend = "Legend1";
series3.Name = "Series1";
this.chartGraficos.Series.Add(series3);
this.chartGraficos.Size = new System.Drawing.Size(591, 318);
this.chartGraficos.TabIndex = 2;
this.chartGraficos.Text = "chart1";
@ -522,7 +523,7 @@
// chbSonar
//
this.chbSonar.AutoSize = true;
this.chbSonar.Location = new System.Drawing.Point(227, 311);
this.chbSonar.Location = new System.Drawing.Point(157, 310);
this.chbSonar.Margin = new System.Windows.Forms.Padding(2);
this.chbSonar.Name = "chbSonar";
this.chbSonar.Size = new System.Drawing.Size(183, 17);
@ -610,12 +611,25 @@
this.lblTipoMovimento.TabIndex = 34;
this.lblTipoMovimento.Text = "Tipo de Movimento";
//
// chbPulverizador
//
this.chbPulverizador.AutoSize = true;
this.chbPulverizador.Location = new System.Drawing.Point(342, 310);
this.chbPulverizador.Margin = new System.Windows.Forms.Padding(2);
this.chbPulverizador.Name = "chbPulverizador";
this.chbPulverizador.Size = new System.Drawing.Size(139, 17);
this.chbPulverizador.TabIndex = 35;
this.chbPulverizador.Text = "Pulverizador automático";
this.chbPulverizador.UseVisualStyleBackColor = true;
this.chbPulverizador.CheckedChanged += new System.EventHandler(this.chbPulverizador_CheckedChanged);
//
// frmOperacaoManual
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(1243, 649);
this.Controls.Add(this.chbPulverizador);
this.Controls.Add(this.lblTipoMovimento);
this.Controls.Add(this.cmbTipoMovimento);
this.Controls.Add(this.lblKmh);
@ -716,5 +730,6 @@
private System.Windows.Forms.Label lblKmh;
private System.Windows.Forms.ComboBox cmbTipoMovimento;
private System.Windows.Forms.Label lblTipoMovimento;
private System.Windows.Forms.CheckBox chbPulverizador;
}
}

View File

@ -187,8 +187,10 @@ namespace AgroBase.Forms.Operacoes
string ID = pnl.Name.Replace("pnlDir_", "");
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(m => m.Modulo_ID == ID);
double Angulo = Modulo.DirMotor.Angulo;
Label lblAngulo = pnl.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lblDir_" + ID);
lblAngulo.Text = ID + " " + (Modulo.DirMotor.Angulo).ToString("000") + "º";
lblAngulo.Text = ID + " " + Angulo.ToString("000") + "º";
// Use o objeto Graphics para desenhar a representação do motor
Graphics g = e.Graphics;
@ -238,10 +240,13 @@ namespace AgroBase.Forms.Operacoes
g.DrawLine(Pens.Green, arrowEnd, arrowPoint2);
}
if (Modulo.Modulo_ID.Contains("D"))
{
Angulo *= -1;
}
// Desenhe uma linha para representar a posição do eixo do motor
double angleInRadians = (Modulo.DirMotor.Angulo * Math.PI) / 180;
double angleInRadians = (Angulo * Math.PI) / 180;
int x = centerX + (int)(radius * Math.Sin(angleInRadians));
int y = centerY - (int)(radius * Math.Cos(angleInRadians));
g.DrawLine(Pens.Red, centerX, centerY, x, y);
@ -288,8 +293,8 @@ namespace AgroBase.Forms.Operacoes
Rectangle rect = new Rectangle(xA - radiusCircle, yA - radiusCircle, 2 * radiusCircle, 2 * radiusCircle);
bool Acionado = false;
Acionado =
(angle == 0 && !(MKS057DService.DadosLeitura.FirstOrDefault(leitura => leitura.Endereco == Convert.ToByte(Modulo.DirMotor.Endereco, 16))?.Entradas?[0] ?? true)) ||
(angle == Math.PI / 2 && !(MKS057DService.DadosLeitura.FirstOrDefault(leitura => leitura.Endereco == Convert.ToByte(Modulo.DirMotor.Endereco, 16))?.Entradas?[1] ?? true));
(angle == 0 && !Modulo.DirMotor.IN2_Atuado) ||
(angle == Math.PI / 2 && !Modulo.DirMotor.IN2_Atuado);
using (SolidBrush brush = new SolidBrush(Acionado ? Color.Red : Color.DarkRed))
{
g.FillEllipse(brush, rect);
@ -414,7 +419,7 @@ namespace AgroBase.Forms.Operacoes
gridDados.Rows[15].Cells[1].Value = Variaveis.OperacaoEmAndamento.DispAtu.Dados.PercentualReservatorio.ToString("00.00");
gridDados.Rows[16].Cells[1].Value = Variaveis.OperacaoEmAndamento.DispAtu.Dados.VolumeReservatorio.ToString("0.000");
gridDados.Rows[17].Cells[1].Value = Variaveis.OperacaoEmAndamento.DispAtu.Dados.PressaoLinha.ToString("0.00");
gridDados.Rows[18].Cells[1].Value = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora.Potencia.ToString("0.00");
gridDados.Rows[18].Cells[1].Value = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora.LeituraPotencia.ToString("0.00");
}
#endregion
@ -531,5 +536,11 @@ namespace AgroBase.Forms.Operacoes
{
Variaveis.OperacaoEmAndamento.Controle.TipoMovimento = (TipoMovimentoDirecional)cmbTipoMovimento.SelectedIndex;
}
private void chbPulverizador_CheckedChanged(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico = chbPulverizador.Checked;
}
}
}

View File

@ -53,8 +53,8 @@ namespace AgroBase.Forms.Operacoes
private void AtualizarDispositivos()
{
chbMOVativo.Checked = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.MovMotor.Inicializado) ?? false;
chbDIRativo.Checked = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.DirMotor.Inicializado) ?? false;
chbMOVativo.Checked = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.MovMotor.BLD_Inicializado) ?? false;
chbDIRativo.Checked = Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.Modulos?.Any(x => x.DirMotor.MKS_Inicializado) ?? false;
chbATUativo.Checked = Variaveis.OperacaoEmAndamento.DispAtu?.Dados.Conectado ?? false;
chbGPSativo.Checked = GPSService.PortaGPS?.IsOpen ?? false;
Variaveis.OperacaoEmAndamento.chartGraficos = chartGraficos;

View File

@ -859,12 +859,13 @@ namespace AgroBase.Forms.Operacoes
{
var Log = LogsDirecional.Where(x => x.Modulo_ID == ID).FirstOrDefault(x => x.Momento == MomentoAtual);
double Angulo = Math.Abs(Log?.Angulo ?? 0);
double Multiplicador = (Log?.Sentido ?? Enums.Sentido.Parado) == Enums.Sentido.Horario ? 1 : -1;
double Angulo = Log?.Angulo ?? 0;
double Multiplicador = 1;
Image img = Resources.roda_superior;
if (ID.StartsWith("D"))
{
img = FuncoesGlobais.EspelharImagemHorizontalmente(img);
Multiplicador = -1;
}
PictureBox pic = FuncoesGlobais.FindControlRecursive<PictureBox>(tabDirecional, "picDIR_" + ID);

View File

@ -317,8 +317,8 @@ namespace AgroBase.Forms
Rectangle rect = new Rectangle(xA - radiusCircle, yA - radiusCircle, 2 * radiusCircle, 2 * radiusCircle);
bool Acionado = false;
Acionado =
(angle == 0 && !(MKS057DService.DadosLeitura.FirstOrDefault(leitura => leitura.Endereco == Convert.ToByte(Modulo.DirMotor.Endereco, 16))?.Entradas?[0] ?? true)) ||
(angle == Math.PI / 2 && !(MKS057DService.DadosLeitura.FirstOrDefault(leitura => leitura.Endereco == Convert.ToByte(Modulo.DirMotor.Endereco, 16))?.Entradas?[1] ?? true));
(angle == 0 && !Modulo.DirMotor.IN1_Atuado) ||
(angle == Math.PI / 2 && !Modulo.DirMotor.IN2_Atuado);
using (SolidBrush brush = new SolidBrush(Acionado ? Color.Red : Color.DarkRed))
{
g.FillEllipse(brush, rect);

View File

@ -597,31 +597,26 @@ namespace AgroBase
for (int i = 0; i < 1; i++)
{
var Protocolos = new Dictionary<string, string>();
IDispositivosService Dispositivo = default(IDispositivosService);
switch (Comando.Dispositivo)
{
case T_Code.Mov:
{
Protocolos = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ToDictionary(x => x.Modulo_ID, x => x.MovMotor.ProtocoloComando(DirecaoAtual));
Dispositivo = Variaveis.OperacaoEmAndamento.DispMvd;
Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(x => x.MovMotor.EnviarComandoControle(DirecaoAtual));
break;
}
case T_Code.Dir:
{
if (MovimentosCombinados.Contains(Variaveis.OperacaoEmAndamento.Controle.TipoMovimento))
{
Variaveis.OperacaoEmAndamento.DispMvd.Dados.ExecutarMovimentoDirecionalCombinado(DirecaoAtual).ConfigureAwait(false);
Task.Run(async () => await Variaveis.OperacaoEmAndamento.DispMvd.Dados.ExecutarMovimentoDirecionalCombinado(DirecaoAtual));
}
else if (DirecaoAtual == Direcao.Referenciar)
{
Task.Run(async () => await Variaveis.OperacaoEmAndamento.DispMvd.Dados.RealizarReferenciamentoDirecional());
}
else
{
Task.Run(async () =>
{
foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos)
{
await Modulo.DirMotor.EnviarComandoControle(DirecaoAtual);
}
});
Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(x => x.DirMotor.EnviarComandoControle(DirecaoAtual));
}
break;
}
@ -637,12 +632,6 @@ namespace AgroBase
{
Ctrl.UltimaDirecao = DirecaoAtual;
}
foreach (var ProtocoloMotor in Protocolos)
{
Dispositivo.AdicionarMensagemFila(ProtocoloMotor.Key, ProtocoloMotor.Value, true, false);
Console.WriteLine(ProtocoloMotor);
}
}
UltimaDirecao = DirecaoAtual;

View File

@ -25,7 +25,6 @@ namespace AgroBase.Models.Modules
};
public int QuantidadeBicos { get; set; } = 4;
public double DensidadeHerbicida { get; set; } = 1.1;
public bool AtuacaoNivelAlto { get; set; } = true;
public List<AtuadorBicoModel> BicosPulverizadores { get; set; } = new List<AtuadorBicoModel>();
public List<AtuadorBombaModel> BombasPressurizadoras { get; set; } = new List<AtuadorBombaModel>();
public List<SensorModel> Sensores { get; set; } = new List<SensorModel>();
@ -523,9 +522,14 @@ namespace AgroBase.Models.Modules
}
if (Conectado && RequisitarDados)
if (Conectado)
{
RequisitarDadosModulo();
if (RequisitarDados)
{
RequisitarDadosModulo();
}
VerificaControleLeitura();
}
}
@ -579,6 +583,24 @@ namespace AgroBase.Models.Modules
return (_atuadorOperante, ModsComFalha);
}
private void VerificaControleLeitura()
{
// Caso a pressao de set point da bomba seja diferente da pressao de set point de controle, reenvia o comando para garantir a integridade do controle
if (BombaPressurizadora.LeituraPressaoSP != Variaveis.OperacaoEmAndamento.Controle.PressaoLinha || !FuncoesMatematicas.ValorEstaEntre(BombaPressurizadora.LeituraPressao, Variaveis.OperacaoEmAndamento.Controle.PressaoLinha, 20))
{
GeneralJoystick.EnviarComandoAtuador(S_Code.sBMB, true, BombaPressurizadora.ID);
}
// Caso o comando do bico for diferente da leitura, reenvia o comando para garantir a integridade do controle
foreach (var bico in BicosPulverizadores.Where(x => x.Comandar && x.Inicializado))
{
if (bico.ComandoAtuar != bico.LeituraStatusBico)
{
GeneralJoystick.EnviarComandoAtuador(S_Code.sBIC, bico.ComandoAtuar, bico.ID);
}
}
}
}
public class AtuadorBicoModel
@ -726,13 +748,27 @@ namespace AgroBase.Models.Modules
public bool Comandar { get; set; }
public bool Testando { get; set; }
public List<FuncoesPinout> Funcoes { get; set; } = new List<FuncoesPinout>();
public double Potencia
public double LeituraPotencia
{
get
{
return Leitura?.Potencia ?? 0;
}
}
public double LeituraPressaoSP
{
get
{
return Leitura?.PressaoSP ?? 0;
}
}
public double LeituraPressao
{
get
{
return Leitura?.Pressao ?? 0;
}
}
private FirmwareBombaPressurizadora _leitura = null;
public FirmwareBombaPressurizadora Leitura
@ -981,6 +1017,8 @@ namespace AgroBase.Models.Modules
public bool Iniciado { get; set; }
public Estado Estado { get; set; }
public double Potencia { get; set; }
public double PressaoSP { get; set; }
public double Pressao { get; set; }
}
public class AtuadorMensagemJsonModel

View File

@ -36,6 +36,8 @@ namespace AgroBase.Models.Modules
public static int LogsManter { get; set; } = 60;
public AsyncTaskTimerModel tmrRegistrador;
public AsyncTaskTimerModel tmrRegistradorBLD;
public AsyncTaskTimerModel tmrRegistradorMKS;
public List<ModuloMvdModel> Modulos { get; set; } = new List<ModuloMvdModel>();
@ -117,10 +119,8 @@ namespace AgroBase.Models.Modules
var Dados = _dados as MovimentacaoUnificadaModel;
Dados.Modulos.ForEach(x =>
{
x.MovMotor.Inicializado = false;
x.DirMotor.Inicializado = false;
x.UltimoProtocoloRecebido = DateTime.MaxValue.AddDays(-1);
x.MovMotor.Leitura = null;
x.DirMotor.Leitura = null;
});
ReiniciarLeituras(Dados);
@ -136,23 +136,13 @@ namespace AgroBase.Models.Modules
{
x.MovMotor.Alarme = false;
x.MovMotor.ConfigFreio.Leitura = false;
x.MovMotor.Ligado = false;
x.MovMotor.LogGrafico = new List<MvdMotorMOVSensorimanetoGrafico>();
x.MovMotor.TemperaturaDriver = 0;
x.MovMotor.Temperatura = 0;
//x.MovMotor.RPM_Motor = 0;
x.MovMotor.RPM_Roda = 0;
x.MovMotor.RPM_SP = 0;
x.MovMotor.RPM_SP_Controle = 0;
x.MovMotor.Corrente_Max = 0;
x.MovMotor.Sentido = Sentido.Parado;
x.MovMotor.CodigoAlarme = 0;
x.MovMotor.Corrente = 0;
x.MovMotor.Tensao = 0;
x.DirMotor.Angulo = 0;
x.DirMotor.Angulo_SP = 0;
x.DirMotor.Sentido = Sentido.Parado;
x.DirMotor.Sentido_SP = Sentido.Parado;
});
}
@ -170,164 +160,7 @@ namespace AgroBase.Models.Modules
public void RecebeProtocoloModulo(string Protocolo)
{
string Mod_ID = Protocolo.Split(SerialService.SplitMessage[0])[0];
string mensagem = Protocolo.Substring(Mod_ID.Length + 1, Protocolo.Length - Mod_ID.Length - 1);
if (!string.IsNullOrEmpty(Protocolo) && mensagem[0].ToString() == SerialService.BeginSensor)
{
try
{
string[] Dados = mensagem.Replace(SerialService.BeginSensor, "").Split(SerialService.EndLine[0])[0].Split(SerialService.SplitMessage[0]);
S_Code TipoSensor = (S_Code)(int.Parse(Dados[0]));
string _IDcomponente = Dados[1];
ModuloMvdModel Modulo = Modulos.FirstOrDefault(x => x.Modulo_ID == Mod_ID);
if (Modulo == null)
{
Console.WriteLine("Módulo " + Mod_ID + " não encontrado!");
return;
}
Modulo.UltimoProtocoloRecebido = DateTime.Now;
/*if (_IDcomponente == Modulo.Modulo_ID)
{
return;
}*/
try
{
switch (TipoSensor)
{
case S_Code.sBLD:
{
Modulo.MovMotor.Inicializado = Dados[2] == "1";
double rpm = 0;
double.TryParse(Dados[3].Replace(".", ","), out rpm);
//Modulo.MovMotor.RPM_Motor = rpm;
Modulo.MovMotor.RPM_Roda = rpm;
double temperatura = 0;
double.TryParse(Dados[4].Replace(".", ","), out temperatura);
temperatura = FuncoesMatematicas.CalcularTemperatura(temperatura, 0.0);
Modulo.MovMotor.Temperatura = temperatura;
double tensao = 0;
double.TryParse(Dados[5].Replace(".", ","), out tensao);
Modulo.MovMotor.Tensao = tensao;
double corrente_max = 0;
double.TryParse(Dados[6].Replace(".", ","), out corrente_max);
Modulo.MovMotor.Corrente_Max = corrente_max;
bool ligado = Dados[7] == "1";
Modulo.MovMotor.Ligado = ligado;
int sentido = 0;
int.TryParse(Dados[8], out sentido);
Modulo.MovMotor.Sentido = (Sentido)sentido;
bool freio = Dados[9] == "1";
Modulo.MovMotor.ConfigFreio.Leitura = freio;
int codAlarme = 0;
int.TryParse(Dados[10], out codAlarme);
Modulo.MovMotor.CodigoAlarme = codAlarme;
double tempDriver = 0;
double.TryParse(Dados[11].Replace(".", ","), out tempDriver);
Modulo.MovMotor.TemperaturaDriver = tempDriver;
RegistrarLogMov(Modulo);
break;
}
case S_Code.sENC:
{
int _sentido = 0;
int.TryParse(Dados[2].ToString(), out _sentido);
Modulo.DirMotor.Sentido = (Sentido)_sentido;
int _angulo = 0;
int.TryParse(Dados[3].ToString(), out _angulo);
Modulo.DirMotor.Angulo = _angulo;
break;
}
case S_Code.sCFG:
{
bool Inicializado = Dados[2] == "1";
if (_IDcomponente == Modulo.MovMotor.ID)
{
Modulo.MovMotor.Inicializado = Inicializado;
}
else if (_IDcomponente == Modulo.DirMotor.ID)
{
Modulo.DirMotor.Inicializado = Inicializado;
}
break;
}
case S_Code.sMVD:
{
Modulo.MovMotor.Inicializado = Dados[2] == "1";
double rpm = 0;
double.TryParse(Dados[3].Replace(".", ","), out rpm);
//Modulo.MovMotor.RPM_Motor = rpm;
Modulo.MovMotor.RPM_Roda = rpm;
double temperatura = 0;
double.TryParse(Dados[4].Replace(".", ","), out temperatura);
temperatura = FuncoesMatematicas.CalcularTemperatura(temperatura, 0.0);
Modulo.MovMotor.Temperatura = temperatura;
double tensao = 0;
double.TryParse(Dados[5].Replace(".", ","), out tensao);
Modulo.MovMotor.Tensao = tensao;
double corrente_max = 0;
double.TryParse(Dados[6].Replace(".", ","), out corrente_max);
Modulo.MovMotor.Corrente_Max = corrente_max;
bool ligado = Dados[7] == "1";
Modulo.MovMotor.Ligado = ligado;
int sentido = 0;
int.TryParse(Dados[8], out sentido);
Modulo.MovMotor.Sentido = (Sentido)sentido;
bool freio = Dados[9] == "1";
Modulo.MovMotor.ConfigFreio.Leitura = freio;
int codAlarme = 0;
int.TryParse(Dados[10], out codAlarme);
Modulo.MovMotor.CodigoAlarme = codAlarme;
double tempDriver = 0;
double.TryParse(Dados[11].Replace(".", ","), out tempDriver);
Modulo.MovMotor.TemperaturaDriver = tempDriver;
Modulo.DirMotor.Inicializado = Dados[12] == "1";
int _sentido = 0;
int.TryParse(Dados[13].ToString(), out _sentido);
Modulo.DirMotor.Sentido = (Sentido)_sentido;
double _angulo = 0;
double.TryParse(Dados[14].ToString().Replace(".", ","), out _angulo);
Modulo.DirMotor.Angulo = _angulo;
/*Modulo.MovMotor.Inicializado = Dados[2] == "1";
double temperatura = 0;
double.TryParse(Dados[3].Replace(".", ","), out temperatura);
temperatura = FuncoesMatematicas.CalcularTemperatura(temperatura, 0.0);
Modulo.DirMotor.Inicializado = Dados[4] == "1";
int _sentido = 0;
int.TryParse(Dados[5].ToString(), out _sentido);
Modulo.DirMotor.Sentido = (Sentido)_sentido;
double _angulo = 0;
double.TryParse(Dados[6].ToString().Replace(".", ","), out _angulo);
Modulo.DirMotor.Angulo = _angulo;*/
RegistrarLogMov(Modulo);
break;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
public void RegistrarLogMov(ModuloMvdModel Modulo)
@ -392,12 +225,20 @@ namespace AgroBase.Models.Modules
tmrRegistrador = new AsyncTaskTimerModel("tmrRegistrador_" + T_Code.Mvd.ToString(), tmrRegistrador_Tick, _TaxaAmostragem);
tmrRegistrador.Start();
tmrRegistradorBLD = new AsyncTaskTimerModel("tmrRegistrador_" + T_Code.Bld.ToString(), tmrRegistradorBLD_Tick, BLD300RService.TaxaAmostragem);
tmrRegistradorBLD.Start();
tmrRegistradorMKS = new AsyncTaskTimerModel("tmrRegistrador_" + T_Code.Mks.ToString(), tmrRegistradorMKS_Tick, MKS057DService.TaxaAmostragem);
tmrRegistradorMKS.Start();
}
}
public void PararRegistrador()
{
tmrRegistrador?.Dispose();
tmrRegistradorBLD?.Dispose();
tmrRegistradorMKS?.Dispose();
}
public async Task tmrRegistrador_Tick()
@ -413,35 +254,99 @@ namespace AgroBase.Models.Modules
DistanciaPercorridaOperacao += 1 * VelocidadeMedia;
Variaveis.OperacaoEmAndamento.Sensoriamento.VelocidadeMedia = VelocidadeMedia;
}
}
DateTime Agora = DateTime.Now;
if (Modulos.Any(x => x.Conectado && x.UltimoProtocoloRecebido.AddMilliseconds(_TaxaAmostragem * 20) < Agora))
private async Task tmrRegistradorBLD_Tick()
{
if (!BLD300RService.Iniciado && SerialService.DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Bld))
{
foreach (var Modulo in Modulos.Where(x => x.Conectado && x.UltimoProtocoloRecebido.AddMilliseconds(_TaxaAmostragem * 20) < Agora))
foreach (var Leitura in BLD300RService.DadosLeitura.Where(x => x.UltimoComandoRecebido.AddSeconds(10) < DateTime.Now))
{
Modulo.MovMotor.Inicializado = false;
Modulo.DirMotor.Inicializado = false;
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Leitura.Endereco,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "Versao"),
Get = true,
AguardaResposta = true
});
}
tmrRegistradorBLD.SetInterval(3000);
return;
}
/*foreach (var Modulo in Modulos.Where(x => (!x.MovMotor.Inicializado && x.MovMotor.Comandar) || (!x.DirMotor.Inicializado && x.DirMotor.Comandar)))
{
if (!Modulo.MovMotor.Inicializado && Modulo.MovMotor.Comandar)
{
string Protocolo = Modulo.MovMotor.ProtocoloConfiguracao(true);
Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(Modulo.Modulo_ID, Protocolo, true, false);
}
if (!Modulo.DirMotor.Inicializado && Modulo.DirMotor.Comandar)
{
string Protocolo = Modulo.DirMotor.ProtocoloConfiguracao(true);
Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(Modulo.Modulo_ID, Protocolo, true, false);
}
}*/
tmrRegistradorBLD.SetInterval(BLD300RService.TaxaAmostragem);
foreach (var Modulo in Modulos.Where(x => x.RequisitarDados && (x.MovMotor.Inicializado || x.DirMotor.Inicializado)))
var Controle = Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov);
foreach (var Modulo in Modulos.Where(x => x.MovMotor.BLD_Inicializado).OrderBy(x => x.MovMotor.EnderecoByte))
{
string Protocolo = Modulo.ProtocoloAquisicaoDados();
Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(Modulo.Modulo_ID, Protocolo, false, false);
foreach (var Parametro in BLD300RService.Parametros.Where(x => x.LeituraLoop))
{
var Comando = new BLD300RService.BLDComandoModel()
{
Endereco = Modulo.MovMotor.EnderecoByte,
AguardaResposta = true,
Parametro = Parametro,
Get = true,
TimeoutResposta = 500
};
BLD300RService.AdicionarComandoNaFila(Comando);
}
// Tenta reiniciar o alarme dos modulos se a operacao nao estiver liberada
if (Modulo.MovMotor.CodigoAlarme > 0 && Modulo.MovMotor.CodigoAlarme <= 99 && !Variaveis.OperacaoEmAndamento.OperacaoLiberada)
{
BLD300RService.RegisrarErrosComunicacao(Modulo.MovMotor.EnderecoByte, $"Módulo com código de alarme {Modulo.MovMotor.CodigoAlarme}, reiniciando o módulo...");
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Modulo.MovMotor.EnderecoByte,
AguardaResposta = true,
TimeoutResposta = 200,
Get = false,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "AlarmeCode"),
Valor = 0
});
}
Modulo.MovMotor.EnviarComandoControle(Controle.UltimaDirecao);
Modulo.MovMotor.ConfigFreio.Leitura = Modulo.MovMotor.Leitura?.Freado ?? false;
Variaveis.OperacaoEmAndamento.DispMvd.Dados.RegistrarLogMov(Modulo);
}
}
private async Task tmrRegistradorMKS_Tick()
{
if (!MKS057DService.Iniciado && SerialService.DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Mks))
{
foreach (var Leitura in MKS057DService.DadosLeitura.Where(x => x.UltimoComandoRecebido.AddSeconds(10) < DateTime.Now))
{
MKS057DService.AdicionarComandoNaFila(MKS057DService.MontarComandoRequisicaoPulsos(Leitura.Endereco));
}
tmrRegistradorMKS.SetInterval(3000);
return;
}
MKS057DService.TaxaAmostragem = MKS057DService.Referenciando ? 200 : 1000;
tmrRegistradorMKS.SetInterval(MKS057DService.TaxaAmostragem);
var Controle = Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Dir);
foreach (var Modulo in Modulos.Where(x => x.DirMotor.MKS_Inicializado))
{
byte modAddr = Modulo.DirMotor.EnderecoByte;
if (!MKS057DService.Referenciando || (MKS057DService.Referenciando && MKS057DService.AddrRef == modAddr))
{
MKS057DService.AdicionarComandoNaFila(MKS057DService.MontarComandoRequisicaoPulsos(modAddr));
MKS057DService.AdicionarComandoNaFila(MKS057DService.MontarComandoRequisicaoIO(modAddr));
// Verifica se o angulo de set point do motor em questao e diferente do angulo atual, e se for, reenvia o comando para garantir que o motor esteja coerente com o set point
if (!MKS057DService.Referenciando)
{
Modulo.DirMotor.EnviarComandoControle(Controle.UltimaDirecao);
}
}
}
}
@ -453,7 +358,7 @@ namespace AgroBase.Models.Modules
{
foreach (var Modulo in Modulos)
{
Modulo.MovMotor.ProtocoloComando(Direcao.Parado);
Modulo.MovMotor.EnviarComandoControle(Direcao.Parado);
}
await Task.Delay(1000);
@ -466,7 +371,7 @@ namespace AgroBase.Models.Modules
foreach (var Modulo in Modulos.Where(x => x.DirMotor.MKS_Inicializado && !x.DirMotor.PosicaoTipoMovimentoConcluido(DirecaoAtual)))
{
await Modulo.DirMotor.EnviarComandoControle(DirecaoAtual);
Modulo.DirMotor.EnviarComandoControle(DirecaoAtual);
}
DateTime Agora = DateTime.Now;
@ -482,7 +387,7 @@ namespace AgroBase.Models.Modules
Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP = 20;
foreach (var Modulo in Modulos)
{
Modulo.MovMotor.ProtocoloComando(
Modulo.MovMotor.EnviarComandoControle(
DirecaoAtual == Direcao.Direita ? Direcao.Frente :
DirecaoAtual == Direcao.Esquerda ? Direcao.Tras :
Direcao.Parado
@ -495,6 +400,21 @@ namespace AgroBase.Models.Modules
}
}
public async Task RealizarReferenciamentoDirecional()
{
if (!MKS057DService.Referenciando)
{
TipoMovimentoDirecional tipoControle = Variaveis.OperacaoEmAndamento.Controle.TipoMovimento;
Variaveis.OperacaoEmAndamento.Controle.TipoMovimento = TipoMovimentoDirecional.Diagnostico;
foreach (var Modulo in Modulos.Where(x => x.DirMotor.Comandar && x.DirMotor.MKS_Inicializado))
{
await Modulo.DirMotor.ReferenciaMotor();
}
Variaveis.OperacaoEmAndamento.Controle.TipoMovimento = tipoControle;
}
}
}
@ -512,7 +432,6 @@ namespace AgroBase.Models.Modules
return MovMotor.BLD_Inicializado || DirMotor.MKS_Inicializado;
}
}
public DateTime UltimoProtocoloRecebido { get; set; } = DateTime.MaxValue.AddDays(-1);
public MvdMotorBLDC MovMotor { get; set; }
public MvdMotorPasso DirMotor { get; set; }
@ -595,16 +514,6 @@ namespace AgroBase.Models.Modules
}
}
public string ProtocoloAquisicaoDados()
{
string ProtocoloMotor =
((int)F_Code.Req).ToString() + SerialService.SplitMessage +
Modulo_ID + SerialService.SplitParams +
"";
return ProtocoloMotor;
}
public void AtualizarSensoresMotor()
{
var sensorTmp = Variaveis.OperacaoEmAndamento.DispSen.Dados.DadosLeitura.SensoresTemperatura.FirstOrDefault(x => x.ID.Contains(Modulo_ID));
@ -627,7 +536,6 @@ namespace AgroBase.Models.Modules
if (sensorCor != null)
{
MovMotor.Corrente = (double)sensorCor.Current;
MovMotor.Tensao = sensorCor.BusVoltage;
AlarmeModel _Alarme = new AlarmeModel()
{
@ -658,7 +566,7 @@ namespace AgroBase.Models.Modules
if (MovMotor.BLD_Inicializado && (!AlarmeAnterior || Adicionado) && AlarmeAtual) // Motor iniciado, Não estava em alarme anteriormente ou foi adicionado agora, alarme atual
{
Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(Modulo_ID, MovMotor.ProtocoloComando(Direcao.Parado, true), true, false);
MovMotor.EnviarComandoControle(Direcao.Parado, true);
}
Alm.Valor = _Alarme.Valor;
@ -676,9 +584,29 @@ namespace AgroBase.Models.Modules
// SETs
public string Endereco { get; set; }
public bool Ligado { get; set; } = false;
public byte EnderecoByte
{
get
{
return Convert.ToByte(Endereco.Replace("0x", ""), 16);
}
}
public bool LeituraLigado
{
get
{
return Leitura?.Ativado ?? false;
}
}
public bool ComandoLigado { get; set; } = false;
//public bool Freio { get; set; } = false;
public int CodigoAlarme { get; set; } = 0;
public int CodigoAlarme
{
get
{
return Leitura?.CodigoAlarme ?? 0;
}
}
public int RPM_SP { get; set; } = 0;
public int RPM_SP_Controle { get; set; } = 0;
public int RPM_SP_Leitura
@ -695,12 +623,42 @@ namespace AgroBase.Models.Modules
// GETs
public double RPM_Roda { get; set; } = 0;
public Sentido Sentido { get; set; } = Sentido.Parado;
public double RPM_Roda
{
get
{
return (Leitura?.RPM ?? 0) * OffsetLeitura;
}
}
public Sentido Sentido
{
get
{
return Leitura?.Direcao ?? Sentido.Parado;
}
}
public double Temperatura { get; set; } = 0;
public double TemperaturaDriver { get; set; } = 0;
public double Tensao { get; set; } = 0;
public double Corrente_Max { get; set; } = 0;
public double TemperaturaDriver
{
get
{
return Math.Round(Leitura?.Temperatura ?? 0, 2);
}
}
public double Tensao
{
get
{
return Math.Round(Leitura?.Tensao ?? 0, 2);
}
}
public double Corrente_Max
{
get
{
return Math.Round(Leitura?.CorrenteMax ?? 0, 2);
}
}
public double Corrente { get; set; } = 0;
public double RPM_Motor
{
@ -722,15 +680,26 @@ namespace AgroBase.Models.Modules
public bool Comandar { get; set; } = false;
public bool Alarme { get; set; } = false;
public bool Inicializado { get; set; } = false;
public bool BLD_Inicializado
{
get
{
return BLD300RService.DadosLeitura.Any(x => x.Iniciado && Convert.ToByte(Endereco.Replace("0x", ""), 16) == x.Endereco);
return Leitura?.Iniciado ?? false;
}
}
private BLD300RModel _leitura = null;
public BLD300RModel Leitura
{
get
{
_leitura = BLD300RService.DadosLeitura?.FirstOrDefault(x => x.Endereco == EnderecoByte);
return _leitura;
}
set
{
_leitura = value;
}
}
public Dictionary<TipoMovimentoDirecional,ConfiguracaoSentidoMotor> ConfigSentidos { get; set; }
@ -862,14 +831,12 @@ namespace AgroBase.Models.Modules
return Protocolo;
}
public string ProtocoloComando(Direcao DirecaoAtual, bool CmdAlarme = false)
public void EnviarComandoControle(Direcao DirecaoAtual, bool CmdAlarme = false)
{
string ProtocoloMotor = "";
bool Freado = DirecaoAtual == Direcao.EmFreio;
(bool AtuarServo, int AnguloFreio) = ConfigFreio.AtualizarDadosFreio(Freado, 0, -1, 5);
if (Comandar && ((!Alarme && CodigoAlarme == 0) || CmdAlarme))
if (Comandar && ((!Alarme && CodigoAlarme == 0) || CmdAlarme) && BLD_Inicializado)
{
if (!CmdAlarme)
{
@ -881,7 +848,7 @@ namespace AgroBase.Models.Modules
DirecaoAtual == Direcao.Parado || Freado || CmdAlarme ? 0 :
RPM_SP_Controle;
Ligado = RPM_SP > 0;
ComandoLigado = RPM_SP > 0;
switch (DirecaoAtual)
{
@ -893,69 +860,56 @@ namespace AgroBase.Models.Modules
break;
}
if (BLD_Inicializado)
{
byte Addr = Convert.ToByte(Endereco.Replace("0x", ""), 16);
var Leitura = BLD300RService.DadosLeitura.FirstOrDefault(x => x.Endereco == Addr);
DateTime Agora = DateTime.Now;
byte Addr = EnderecoByte;
DateTime Agora = DateTime.Now;
if (Leitura == null || Leitura.Direcao != Sentido_SP)
{
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Addr,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "Direction"),
Valor = Sentido_SP == Sentido.Horario ? 1 : 0,
Get = false,
AguardaResposta = true,
TimeoutResposta = 500,
});
}
if (Ligado && (Leitura == null || Leitura.RPM_SP != RPM_SP_Controle))
{
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Addr,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "RPM_SP"),
Valor = RPM_SP,
Get = false,
AguardaResposta = true,
TimeoutResposta = 500,
});
}
if (Leitura == null || Leitura.Freado != ConfigFreio.Leitura)
{
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Addr,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "Breaked"),
Valor = Freado ? 1 : 0,
Get = false,
AguardaResposta = true,
TimeoutResposta = 500,
});
}
if (Leitura == null || Leitura.Ativado != Ligado)
{
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Addr,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "Enabled"),
Valor = RPM_SP > 0 ? 1 : 0,
Get = false,
AguardaResposta = true,
TimeoutResposta = 500,
});
}
}
else if (Inicializado)
if (Leitura == null || Leitura.Direcao != Sentido_SP)
{
ProtocoloMotor =
((int)F_Code.Cmd).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams +
((int)Sentido_SP).ToString() + SerialService.SplitParams +
RPM_SP.ToString() + SerialService.SplitParams +
(Freado ? "1" : "0");
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Addr,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "Direction"),
Valor = Sentido_SP == Sentido.Horario ? 1 : 0,
Get = false,
AguardaResposta = true,
TimeoutResposta = 500,
});
}
if (ComandoLigado && (Leitura == null || Leitura.RPM_SP != RPM_SP_Controle))
{
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Addr,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "RPM_SP"),
Valor = RPM_SP,
Get = false,
AguardaResposta = true,
TimeoutResposta = 500,
});
}
if (Leitura == null || Leitura.Freado != ConfigFreio.Leitura)
{
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Addr,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "Breaked"),
Valor = Freado ? 1 : 0,
Get = false,
AguardaResposta = true,
TimeoutResposta = 500,
});
}
if (Leitura == null || ComandoLigado != LeituraLigado)
{
BLD300RService.AdicionarComandoNaFila(new BLD300RService.BLDComandoModel()
{
Endereco = Addr,
Parametro = BLD300RService.Parametros.First(x => x.Chave == "Enabled"),
Valor = ComandoLigado ? 1 : 0,
Get = false,
AguardaResposta = true,
TimeoutResposta = 500,
});
}
}
@ -968,11 +922,10 @@ namespace AgroBase.Models.Modules
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sFRO, ServoFreio.ID, AnguloFreio);
}
}
return ProtocoloMotor;
}
}
public class MvdMotorPasso
@ -981,26 +934,85 @@ namespace AgroBase.Models.Modules
// SETs
public string Endereco { get; set; }
public byte EnderecoByte
{
get
{
return Convert.ToByte(Endereco.Replace("0x", ""), 16);
}
}
public Sentido Sentido_SP { get; set; } = Sentido.Parado;
public double Angulo_SP { get; set; } = 0;
public double Angulo_Offset { get; set; } = 0;
public double Velocidade_Max { get; set; } = 600;
public int Velocidade
{
get
{
return Convert.ToInt32(((Variaveis.OperacaoEmAndamento.Controle?.VelocidadeMP ?? 0) / 100.0) * Velocidade_Max);
}
}
// GETs
public Sentido Sentido { get; set; } = Sentido.Parado;
public double Angulo { get; set; } = 0;
public Sentido Sentido
{
get
{
return Leitura?.Direcao ?? Sentido.Parado;
}
}
public double Angulo
{
get
{
return MKS057DService.PulsosParaAngulo(Leitura?.NumeroPulsos ?? 0);
}
}
public double RPM
{
get
{
return Leitura?.RPM ?? 0;
}
}
public bool IN1_Atuado
{
get
{
return Leitura?.Entradas?[0] ?? true;
}
}
public bool IN2_Atuado
{
get
{
return Leitura?.Entradas?[1] ?? true;
}
}
public bool Comandar { get; set; } = false;
public bool Inicializado { get; set; } = false;
public bool MKS_Inicializado
{
get
{
return MKS057DService.DadosLeitura.Any(x => x.Iniciado && Convert.ToByte(Endereco.Replace("0x", ""), 16) == x.Endereco);
return Leitura?.Iniciado ?? false;
}
}
private MKS057DModel _leitura = null;
public MKS057DModel Leitura
{
get
{
_leitura = MKS057DService.DadosLeitura?.FirstOrDefault(x => x.Endereco == EnderecoByte);
return _leitura;
}
set
{
_leitura = value;
}
}
public bool PosicaoTipoMovimentoConcluido(Direcao DirecaoAtual)
{
var TipoMovimento = Variaveis.OperacaoEmAndamento.Controle.TipoMovimento;
@ -1121,90 +1133,9 @@ namespace AgroBase.Models.Modules
};
}
public string ProtocoloConfiguracao(bool Conectar)
public void EnviarComandoControle(Direcao Direcao)
{
var _pinout = new PinoutDataModel()
{
ExpansorGPIO = ModuloMvdModel.Pinout.ExpansorGPIO,
EnderecoExpansor = ModuloMvdModel.Pinout.EnderecoExpansor,
Pinos = ModuloMvdModel.Pinout.Pinos.ToList(),
};
_pinout.Pinos = _pinout.Pinos.Where(x => x.ComponenteID == ID).ToList();
string Protocolo =
((int)F_Code.Cfg).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams +
(Conectar ? "1" : "0") + SerialService.SplitParams +
//(Estabilizar ? "1" : "0") + SerialService.SplitParams +
Angulo_Offset.ToString() + SerialService.SplitParams +
PinoutModel.PinoProtocolo(_pinout, Funcoes, SerialService.SplitParams);
return Protocolo;
}
public string ProtocoloComando(Direcao Direcao)
{
string ProtocoloMotor = "";
if (Comandar)
{
int AnguloTipoMovimento = VariaveisEquipamento.AnguloMovimento[Variaveis.OperacaoEmAndamento.Controle.TipoMovimento];
Angulo_SP =
(Direcao != Direcao.Esquerda && Direcao != Direcao.Direita) ? 0 :
AnguloTipoMovimento != -1 ? AnguloTipoMovimento :
Variaveis.OperacaoEmAndamento.Controle.Angulo;
Sentido_SP =
Direcao == Direcao.Direita ? ConfigSentidos[Variaveis.OperacaoEmAndamento.Controle.TipoMovimento].Direita :
Direcao == Direcao.Esquerda ? ConfigSentidos[Variaveis.OperacaoEmAndamento.Controle.TipoMovimento].Esquerda :
Sentido_SP == Sentido.Horario ? Sentido.Antihorario :
Sentido_SP == Sentido.Antihorario ? Sentido.Horario :
Sentido.Parado;
if (MKS_Inicializado)
{
if (Direcao == Direcao.Referenciar)
{
ReferenciaMotor().ConfigureAwait(false);
}
else
{
int mx = Sentido_SP == Sentido.Antihorario ? -1 : 1;
int vel = Convert.ToInt32((Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP / 100.0) * Velocidade_Max);
MKS057DService.AdicionarComandoNaFila(new MKS057ComandoModel()
{
Get = false,
Comando = Convert.ToByte("13"),
Endereco = Convert.ToByte(Endereco, 16),
Angulo = Angulo_SP * mx,
Velocidade = vel,
_Sentido = Sentido_SP,
ModoControle = ModosControle.AnguloAbsoluto,
AguardaResposta = false,
});
}
}
else if (Inicializado)
{
ProtocoloMotor =
((int)F_Code.Cmd).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams +
((int)Sentido_SP).ToString() + SerialService.SplitParams +
Angulo_SP.ToString() + SerialService.SplitParams +
Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP.ToString();
}
}
return ProtocoloMotor;
}
public async Task EnviarComandoControle(Direcao Direcao)
{
if (Comandar)
if (Comandar && MKS_Inicializado)
{
int AnguloTipoMovimento = VariaveisEquipamento.AnguloMovimento[Variaveis.OperacaoEmAndamento.Controle.TipoMovimento];
@ -1224,39 +1155,28 @@ namespace AgroBase.Models.Modules
Angulo_SP = Math.Abs(Angulo_SP) * mx;
if (MKS_Inicializado)
if (!FuncoesMatematicas.ValorEstaEntre(Angulo, Angulo_SP, 3) && RPM == 0)
{
if (Direcao == Direcao.Referenciar)
{
await ReferenciaMotor();
}
else
{
int vel = Convert.ToInt32((Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP / 100.0) * Velocidade_Max);
MKS057DService.AdicionarComandoNaFila(MKS057DService.MontarComandoMovimento(Convert.ToByte(Endereco.Replace("0x", ""), 16), Angulo_SP, vel, Sentido_SP));
}
MKS057DService.AdicionarComandoNaFila(MKS057DService.MontarComandoMovimento(EnderecoByte, Angulo_SP, Velocidade, Sentido_SP));
}
}
}
private async Task ReferenciaMotor()
public async Task ReferenciaMotor()
{
byte Addr = Convert.ToByte(Endereco, 16);
byte Addr = EnderecoByte;
MKS057DService.AddrRef = Addr;
MKS057DService.UltimoReferenciamento = DateTime.Now;
await Task.Delay(2000);
await RequisitarDadosReferenciamento(Addr);
await MKS057DService.EnviarComandoControle(MKS057DService.MontarComandoSetZero(Addr));
await Task.Delay(500);
bool Sucesso = false;
bool EstadoInicial = ReferenciaEstaEmZero(Addr);
bool EstadoInicial = ReferenciaEstaEmZero();
bool EstadoAnterior = EstadoInicial;
double _anguloAnterior = Angulo;
@ -1282,9 +1202,7 @@ namespace AgroBase.Models.Modules
bool inverterGiro = false;
while (!Sucesso && !inverterGiro && Inicio.AddSeconds(40) > DateTime.Now)
{
await RequisitarDadosReferenciamento(Addr);
bool _ref = ReferenciaEstaEmZero(Addr);
bool _ref = ReferenciaEstaEmZero();
//Sucesso = (EstadoInicial && !_ref) || (!EstadoInicial && _ref);
@ -1380,20 +1298,12 @@ namespace AgroBase.Models.Modules
MKS057DService.AddrRef = 0x00;
}
private bool ReferenciaEstaEmZero(byte Addr)
private bool ReferenciaEstaEmZero()
{
var Leitura = MKS057DService.DadosLeitura.FirstOrDefault(x => x.Endereco == Addr);
bool atuado = (Leitura?.Entradas?[0] ?? true) == false;
bool atuado = !IN1_Atuado;
return atuado;
}
private async Task RequisitarDadosReferenciamento(byte Addr)
{
await MKS057DService.EnviarComandoControle(MKS057DService.MontarComandoRequisicaoPulsos(Addr));
await MKS057DService.EnviarComandoControle(MKS057DService.MontarComandoRequisicaoIO(Addr));
}
}

View File

@ -1,4 +1,5 @@
using AgroBase.Services;
using AgroBase.Forms.IHM;
using AgroBase.Services;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@ -728,9 +729,14 @@ namespace AgroBase.Models.Modules
}
if (Conectado && RequisitarDados)
if (Conectado)
{
RequisitarDadosModulo();
if (RequisitarDados)
{
RequisitarDadosModulo();
}
VerificaControleLeitura();
}
}
@ -773,6 +779,51 @@ namespace AgroBase.Models.Modules
return (_sensoriamentoOperante, ModsComFalha);
}
private void VerificaControleLeitura()
{
if (!frmDiagnosticos.Diagnosticando)
{
var ledOP = Sinaleiros.FirstOrDefault(x => x.ID == "LEDOP" && x.Inicializado);
var ledAT = Sinaleiros.FirstOrDefault(x => x.ID == "LEDAT" && x.Inicializado);
var ledMN = Sinaleiros.FirstOrDefault(x => x.ID == "LEDMN" && x.Inicializado);
var comportamento = VariaveisEquipamento.ComportamentoPorStatus();
if (ledOP != null && (!ledOP.Comportamento.Equals(comportamento) || (ledOP.LeituraComando != comportamento.statusLED)))
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, ledOP.ID, comportamento);
}
var statusLedAt = Variaveis.OperacaoEmAndamento.Modo == ModoOperacao.MapaGPS ? StatusLED.Aceso : StatusLED.Apagado;
if (ledAT != null && (!ledAT.Comportamento.statusLED.Equals(statusLedAt) || (ledAT.LeituraComando != statusLedAt)))
{
ledAT.Comportamento.statusLED = statusLedAt;
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, ledAT.ID, ledAT.Comportamento);
}
var statusLedMn = Variaveis.OperacaoEmAndamento.Modo == ModoOperacao.Manual ? StatusLED.Aceso : StatusLED.Apagado;
if (ledMN != null && (!ledMN.Comportamento.statusLED.Equals(statusLedMn) || (ledMN.LeituraComando != statusLedMn)))
{
ledMN.Comportamento.statusLED = statusLedMn;
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, ledMN.ID, ledMN.Comportamento);
}
}
foreach (var rele in Reles.Where(x => x.Controlar && x.Inicializado))
{
if (rele.StatusControle != rele.LeituraEstado)
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sRLE, rele.ID, rele.StatusControle);
}
}
foreach (var servo in Servos.Where(x => x.Controlar && x.Inicializado))
{
if (servo._AnguloControle != servo.LeituraAngulo)
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sFRO, servo.ID, servo._AnguloControle);
}
}
}
}
@ -883,6 +934,20 @@ namespace AgroBase.Models.Modules
return Leitura?.Iniciado ?? false;
}
}
public StatusLED LeituraComando
{
get
{
return Leitura?.Comando ?? StatusLED.Apagado;
}
}
public StatusLED LeituraStatus
{
get
{
return Leitura?.Leitura ?? StatusLED.Apagado;
}
}
public string ProtocoloConfiguracao(PinoutDataModel Pinout, bool Conectar)
{
@ -946,6 +1011,13 @@ namespace AgroBase.Models.Modules
return Leitura?.Iniciado ?? false;
}
}
public Estado LeituraEstado
{
get
{
return Leitura?.Leitura ?? Estado.Desligado;
}
}
public string ProtocoloConfiguracao(PinoutDataModel Pinout, bool Conectar)
{
@ -1006,6 +1078,13 @@ namespace AgroBase.Models.Modules
return Leitura?.Iniciado ?? false;
}
}
public double LeituraAngulo
{
get
{
return Leitura?.Angulo ?? 0;
}
}
public string ProtocoloConfiguracao(PinoutDataModel Pinout, bool Conectar)
{
@ -1261,6 +1340,7 @@ namespace AgroBase.Models.Modules
public string ID { get; set; }
public bool Iniciado { get; set; }
public StatusLED Leitura { get; set; }
public StatusLED Comando { get; set; }
}
public class FirmwareRele

View File

@ -15,9 +15,9 @@ using static AgroBase.Models.Enums;
using System.Drawing;
using System.Text;
using System.Windows.Forms.DataVisualization.Charting;
using AgroBase.Forms.IHM;
using OpenHardwareMonitor.Hardware;
using CefSharp.WinForms;
using MathNet.Numerics;
namespace AgroBase.Models
{
@ -867,8 +867,6 @@ namespace AgroBase.Models
SalvarLogs(false);
}
AtualizarSinaleiroOperacao();
Variaveis.OperacaoEmAndamento.Finalizando = false;
tmrLogs?.Stop();
@ -908,7 +906,7 @@ namespace AgroBase.Models
if (DispMvd != null)
{
// Referenciar motores de passo
if (DispMvd.Dados.Modulos.Any(x => x.DirMotor.Inicializado))
if (DispMvd.Dados.Modulos.Any(x => x.DirMotor.MKS_Inicializado))
{
GeneralJoystick.EnviaComandoMotor(Keys.R);
}
@ -1170,7 +1168,6 @@ namespace AgroBase.Models
OperacaoControleTipoModel ControleMov = _Controle.TiposControle != null ? _Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov) : null;
OperacaoControleTipoModel ControleDir = _Controle.TiposControle != null ? _Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Dir) : null;
OperacaoControleTipoModel ControleAtu = _Controle.TiposControle != null ? _Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Atu) : null;
if (ControleMov != null && _Controle.RPM_SP != _ControleAnterior.RPM_SP && (Agora - ControleMov.UltimoComando).TotalMilliseconds > ControleMov.DelayEnvioComando)
{
@ -1190,23 +1187,36 @@ namespace AgroBase.Models
_ControleAnterior.Angulo = _Controle.Angulo;
}
if (ControleAtu != null && !_Controle.BicosAtuados.Select(x => x.ComandoAtuar).SequenceEqual(_ControleAnterior.BicosAtuados.Select(x => x.ComandoAtuar)) && (Agora - ControleAtu.UltimoComando).TotalMilliseconds > ControleAtu.DelayEnvioComando)
{
// Enviar comando ATU
var Protocolos = EnviarProtocoloComando(Variaveis.OperacaoEmAndamento.DispAtu, T_Code.Atu, ForcarEnvio);
ControleAtu.UltimoComando = Agora;
ControleAtu.Comandos.AddRange(Protocolos);
_ControleAnterior.BicosAtuados = new List<AtuadorBicoModel>();
foreach (var bico in _Controle.BicosAtuados)
{
_ControleAnterior.BicosAtuados.Add(bico.Clone());
}
}
AtualizarDadosOperacao();
}
public void AtualizarDadosControlePulverizador(bool ForcarEnvio)
{
if (Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico)
{
DateTime Agora = DateTime.Now;
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
var _ControleAnterior = Variaveis.OperacaoEmAndamento.ControleAnterior;
OperacaoControleTipoModel ControleAtu = _Controle.TiposControle != null ? _Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Atu) : null;
if (ControleAtu != null && !_Controle.BicosAtuados.Select(x => x.ComandoAtuar).SequenceEqual(_ControleAnterior.BicosAtuados.Select(x => x.ComandoAtuar)) && (Agora - ControleAtu.UltimoComando).TotalMilliseconds > ControleAtu.DelayEnvioComando)
{
// Enviar comando ATU
var Protocolos = EnviarProtocoloComando(Variaveis.OperacaoEmAndamento.DispAtu, T_Code.Atu, ForcarEnvio);
ControleAtu.UltimoComando = Agora;
ControleAtu.Comandos.AddRange(Protocolos);
_ControleAnterior.BicosAtuados = new List<AtuadorBicoModel>();
foreach (var bico in _Controle.BicosAtuados)
{
_ControleAnterior.BicosAtuados.Add(bico.Clone());
}
}
}
}
public List<string> EnviarProtocoloComando(IDispositivosService Dispositivo, T_Code Tipo, bool ForcarEnvio)
{
if (Dispositivo == null || !Iniciado)
@ -1587,6 +1597,7 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.AtualizarControleAtuadores();
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false);
}
Variaveis.OperacaoEmAndamento.AtualizarDadosControlePulverizador(false);
}
private void AtualizarGrafico()
@ -1600,7 +1611,7 @@ namespace AgroBase.Models
// Primeiro, coletar todos os logs alinhados por índice em uma lista de tuplas (index, moduloLog)
var Logs = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos
.Where(x => x.MovMotor.Inicializado)
.Where(x => x.MovMotor.BLD_Inicializado)
.SelectMany(m => m.MovMotor.LogGrafico.Select((log, index) => new { Index = index, Log = log }))
.GroupBy(x => x.Index) // Agrupa por índice
.OrderBy(g => g.Key) // Ordena pelos índices (opcional, mas ajuda na leitura)
@ -1728,6 +1739,7 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Controle.Angulo = 0; // Angulo Zero (direcional reto)
Variaveis.OperacaoEmAndamento.Controle.BicosAtuados.ForEach(x => x.ComandoAtuar = false); // Bicos desatuados
AtualizarDadosControle(true);
AtualizarDadosControlePulverizador(true);
Variaveis.OperacaoEmAndamento.Controle.TiposControle.ForEach(x => x.UltimaDirecao = Direcao.Parado);
}
@ -1837,8 +1849,6 @@ namespace AgroBase.Models
{
SalvarLogs(false);
}
AtualizarSinaleiroOperacao();
}
public void SalvarLogs(bool Fim)
@ -1850,21 +1860,21 @@ namespace AgroBase.Models
OperacaoSensoriamentoLogModel logGeral = new OperacaoSensoriamentoLogModel()
{
Momento = Agora,
CodigoFalha = Variaveis.OperacaoEmAndamento.RetornaCodigoFalha(),
VelocidadeMedia = Variaveis.OperacaoEmAndamento.Sensoriamento.VelocidadeMedia,
PorcentagemBateria = Variaveis.OperacaoEmAndamento.Sensoriamento.PorcentagemBateria,
CodigoFalha = Variaveis.OperacaoEmAndamento.RetornaCodigoFalha(),
VelocidadeMedia = Variaveis.OperacaoEmAndamento.Sensoriamento.VelocidadeMedia,
PorcentagemBateria = Variaveis.OperacaoEmAndamento.Sensoriamento.PorcentagemBateria,
BateriaConsumida = Variaveis.OperacaoEmAndamento.Sensoriamento.BateriaConsumida,
DistanciaDireita = Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaDireita,
DistanciaEsquerda = Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaEsquerda,
DistanciaPercorrida = new List<double>(Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaPercorrida),
AnguloCarroGPS = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarroGPS,
AnguloCarroBussola = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarroBussola,
AnguloCarro = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarro,
SonarFrontal_Kinect = Variaveis.OperacaoEmAndamento.Sensoriamento.SonarFrontal_Kinect,
StatusOperacao = Variaveis.OperacaoEmAndamento.Sensoriamento.StatusOperacao,
AnguloCarroGPS = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarroGPS,
AnguloCarroBussola = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarroBussola,
AnguloCarro = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarro,
SonarFrontal_Kinect = Variaveis.OperacaoEmAndamento.Sensoriamento.SonarFrontal_Kinect,
StatusOperacao = Variaveis.OperacaoEmAndamento.Sensoriamento.StatusOperacao,
TempoMovimento = Variaveis.OperacaoEmAndamento.DispMvd.Dados.TempoEmAtividade,
StatusCarro = Variaveis.OperacaoEmAndamento.OpMapaGPS.ReferencialRuaGPS.StatusAtual,
ErvasNoRadar = Variaveis.OperacaoEmAndamento.OpMapaGPS.Sensoriamento.ErvasNoRadar,
ErvasNoRadar = Variaveis.OperacaoEmAndamento.OpMapaGPS.Sensoriamento.ErvasNoRadar,
ErvasIdentificadas = new List<Dictionary<string, int>>(Variaveis.OperacaoEmAndamento.OpMapaGPS.Sensoriamento.AtuacoesPorBico),
HerbicidaConsumido = Variaveis.OperacaoEmAndamento.Sensoriamento.HerbicidaConsumido,
HerbicidaPorErva = Variaveis.OperacaoEmAndamento.Sensoriamento.HerbicidaPorErva,
@ -1877,25 +1887,26 @@ namespace AgroBase.Models
IdxRuaAtual = Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual,
AnguloDif = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloDif,
TipoMovimento = Variaveis.OperacaoEmAndamento.Controle.TipoMovimento,
Temperatura = Variaveis.OperacaoEmAndamento.Sensoriamento.Temperatura,
Temperatura = Variaveis.OperacaoEmAndamento.Sensoriamento.Temperatura,
Altitude = Variaveis.OperacaoEmAndamento.Sensoriamento.Altitude,
InclinacaoX = Variaveis.OperacaoEmAndamento.Sensoriamento.InclinacaoX,
InclinacaoY = Variaveis.OperacaoEmAndamento.Sensoriamento.InclinacaoY,
InclinacaoZ = Variaveis.OperacaoEmAndamento.Sensoriamento.InclinacaoZ,
InclinacaoX = Variaveis.OperacaoEmAndamento.Sensoriamento.InclinacaoX,
InclinacaoY = Variaveis.OperacaoEmAndamento.Sensoriamento.InclinacaoY,
InclinacaoZ = Variaveis.OperacaoEmAndamento.Sensoriamento.InclinacaoZ,
Pressao = Variaveis.OperacaoEmAndamento.Sensoriamento.Pressao,
AnguloRuaCamera = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloRuaCamera,
CPU_load = Variaveis.OperacaoEmAndamento.Sensoriamento.CPU_load,
GPU_load = Variaveis.OperacaoEmAndamento.Sensoriamento.GPU_load,
HDD_load = Variaveis.OperacaoEmAndamento.Sensoriamento.HDD_load,
RAM_usage = Variaveis.OperacaoEmAndamento.Sensoriamento.RAM_usage,
CPU_load = Variaveis.OperacaoEmAndamento.Sensoriamento.CPU_load,
GPU_load = Variaveis.OperacaoEmAndamento.Sensoriamento.GPU_load,
HDD_load = Variaveis.OperacaoEmAndamento.Sensoriamento.HDD_load,
RAM_usage = Variaveis.OperacaoEmAndamento.Sensoriamento.RAM_usage,
CPU_temp = Variaveis.OperacaoEmAndamento.Sensoriamento.CPU_temp,
GPU_temp = Variaveis.OperacaoEmAndamento.Sensoriamento.GPU_temp,
OperacaoLiberada = Variaveis.OperacaoEmAndamento.OperacaoLiberada,
Dir_Status = Variaveis.OperacaoEmAndamento.DispMvd.Dados.StatusModulosMKS(Variaveis.OperacaoEmAndamento.Controle.TipoMovimento),
MovEsq_Status = Variaveis.OperacaoEmAndamento.DispMvd.Dados.StatusModulosBLD(Direcao.Esquerda),
MovDir_Status = Variaveis.OperacaoEmAndamento.DispMvd.Dados.StatusModulosBLD(Direcao.Direita),
PercentualErvasTerreno = Variaveis.OperacaoEmAndamento.Sensoriamento.PercentualErvasTerreno,
SonarFrontal_old = null
OperacaoLiberada = Variaveis.OperacaoEmAndamento.OperacaoLiberada,
Dir_Status = Variaveis.OperacaoEmAndamento.DispMvd.Dados.StatusModulosMKS(Variaveis.OperacaoEmAndamento.Controle.TipoMovimento),
MovEsq_Status = Variaveis.OperacaoEmAndamento.DispMvd.Dados.StatusModulosBLD(Direcao.Esquerda),
MovDir_Status = Variaveis.OperacaoEmAndamento.DispMvd.Dados.StatusModulosBLD(Direcao.Direita),
PercentualErvasTerreno = Variaveis.OperacaoEmAndamento.Sensoriamento.PercentualErvasTerreno,
SonarFrontal_old = null,
Controle = Variaveis.OperacaoEmAndamento.Controle,
};
SalvarLog("operacao", logGeral, Fim);
@ -1935,7 +1946,7 @@ namespace AgroBase.Models
Velocidade = Modulo.MovMotor.VelocidadeInstantanea,
CodAlarme = Modulo.MovMotor.CodigoAlarme,
EmFreio = Modulo.MovMotor.ConfigFreio.Leitura,
Ativado = Modulo.MovMotor.Ligado,
Ativado = Modulo.MovMotor.LeituraLigado,
};
SalvarLog(T_Code.Mov.ToString(), logMov, false);
@ -1963,7 +1974,7 @@ namespace AgroBase.Models
VolumeReservatorio = Variaveis.OperacaoEmAndamento.DispAtu.Dados.VolumeReservatorio,
PressaoLinha_SP = Variaveis.OperacaoEmAndamento.Controle.PressaoLinha,
PressaoLinha = Variaveis.OperacaoEmAndamento.DispAtu.Dados.PressaoLinha,
PotenciaBomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora.Potencia,
PotenciaBomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora.LeituraPotencia,
BombaLigada = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora.ComandoAtuar,
VazaoFluxoMLpS = Variaveis.OperacaoEmAndamento.DispAtu.Dados.VazaoFluxoMLpS,
VolumeVazaoML = Variaveis.OperacaoEmAndamento.DispAtu.Dados.VolumeVazaoML,
@ -2233,36 +2244,6 @@ namespace AgroBase.Models
#endregion
public void AtualizarSinaleiroOperacao()
{
if (DispSen != null && DispSen.Dados.Conectado && !frmDiagnosticos.Diagnosticando)
{
var ledOP = DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDOP");
var ledAT = DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDAT");
var ledMN = DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDMN");
var comportamento = VariaveisEquipamento.ComportamentoPorStatus();
if (!ledOP.Comportamento.Equals(comportamento))
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, ledOP.ID, comportamento);
}
var statusLedAt = Modo == ModoOperacao.MapaGPS ? StatusLED.Aceso : StatusLED.Apagado;
if (!ledAT.Comportamento.statusLED.Equals(statusLedAt))
{
ledAT.Comportamento.statusLED = statusLedAt;
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, ledAT.ID, ledAT.Comportamento);
}
var statusLedMn = Modo == ModoOperacao.Manual ? StatusLED.Aceso : StatusLED.Apagado;
if (!ledMN.Comportamento.statusLED.Equals(statusLedMn))
{
ledMN.Comportamento.statusLED = statusLedMn;
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, ledMN.ID, ledMN.Comportamento);
}
}
}
public void AbrirForm()
{
if (Variaveis.OperacaoEmAndamento.OperacaoLiberada)
@ -2915,6 +2896,7 @@ namespace AgroBase.Models
public List<OperacaoControleTipoModel> TiposControle { get; set; }
public PIDModel PIDdirecional { get; set; } = new PIDModel();
public bool PulverizadorAutomatico { get; set; } = true;
}
public class OperacaoControleTipoModel
@ -3022,6 +3004,7 @@ namespace AgroBase.Models
public (bool, List<string>) MovDir_Status { get; set; }
public (bool, List<string>) Dir_Status { get; set; }
public double PercentualErvasTerreno { get; set; }
public OperacaoControleModel Controle { get; set; }
public void ReiniciarLeituras()
{

View File

@ -183,7 +183,6 @@ namespace AgroBase.Services
private static readonly object FilaLock = new object();
private static AsyncTaskTimerModel tmrLoopComandos;
private static AsyncTaskTimerModel tmrReceberDados;
private static bool EnvioLiberado { get; set; } = true;
@ -193,15 +192,11 @@ namespace AgroBase.Services
tmrLoopComandos = new AsyncTaskTimerModel("tmrLoopComandos", tmrLoopComandos_Tick, 100);
tmrLoopComandos.Start();
tmrReceberDados = new AsyncTaskTimerModel("tmrReceberDados", tmrReceberDados_Tick, TaxaAmostragem);
tmrReceberDados.Start();
}
public static void PararRotinas()
{
tmrLoopComandos?.Dispose();
tmrReceberDados?.Dispose();
}
@ -249,7 +244,7 @@ namespace AgroBase.Services
byte Addr = 0;
try
{
Addr = Convert.ToByte(Modulo.MovMotor.Endereco, 16);
Addr = Modulo.MovMotor.EnderecoByte;
}
catch
{
@ -363,7 +358,7 @@ namespace AgroBase.Services
foreach (var Mod_ID in Mod_IDs)
{
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == Mod_ID);
byte Addr = Convert.ToByte(Modulo.MovMotor.Endereco.Replace("0x", ""), 16);
byte Addr = Modulo.MovMotor.EnderecoByte;
if (DadosLeitura.Any(x => x.Endereco == Addr && !x.Configurado))
{
@ -387,7 +382,7 @@ namespace AgroBase.Services
private static void ConfigurarDriver(byte Addr)
{
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => Convert.ToByte(x.MovMotor.Endereco.Replace("0x", ""), 16) == Addr);
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.EnderecoByte == Addr);
AdicionarComandoNaFila(new BLDComandoModel()
{
Endereco = Addr,
@ -519,7 +514,7 @@ namespace AgroBase.Services
}
}
private static void RegisrarErrosComunicacao(byte addr, string mensagem)
public static void RegisrarErrosComunicacao(byte addr, string mensagem)
{
try
{
@ -549,79 +544,6 @@ namespace AgroBase.Services
}
}
private static async Task tmrReceberDados_Tick()
{
if (!Iniciado && SerialService.DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Bld))
{
foreach (var Leitura in DadosLeitura.Where(x => x.UltimoComandoRecebido.AddSeconds(10) < DateTime.Now))
{
AdicionarComandoNaFila(new BLDComandoModel()
{
Endereco = Leitura.Endereco,
Parametro = Parametros.First(x => x.Chave == "Versao"),
Get = true,
AguardaResposta = true
});
}
TaxaAmostragem = 3000;
tmrReceberDados.SetInterval(TaxaAmostragem);
return;
}
foreach (var Leitura in DadosLeitura.Where(x => x.Iniciado).OrderBy(x => x.Endereco))
{
foreach (var Parametro in Parametros.Where(x => x.LeituraLoop))
{
var Comando = new BLDComandoModel()
{
Endereco = Leitura.Endereco,
AguardaResposta = true,
Parametro = Parametro,
Get = true,
TimeoutResposta = 500
};
AdicionarComandoNaFila(Comando);
}
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => Convert.ToByte(x.MovMotor.Endereco.Replace("0x", ""), 16) == Leitura.Endereco);
if (Modulo != null)
{
//Modulo.MovMotor.RPM_Motor = Leitura.RPM;
Modulo.MovMotor.RPM_Roda = Leitura.RPM * Modulo.MovMotor.OffsetLeitura;
Modulo.MovMotor.TemperaturaDriver = Math.Round(Leitura.Temperatura, 2);
Modulo.MovMotor.Corrente_Max = Math.Round(Leitura.CorrenteMax, 2);
Modulo.MovMotor.Tensao = Math.Round(Leitura.Tensao, 2);
Modulo.MovMotor.Ligado = Leitura.Ativado;
Modulo.MovMotor.ConfigFreio.Leitura = Leitura.Freado;
Modulo.MovMotor.Sentido = Leitura.Direcao;
Modulo.MovMotor.CodigoAlarme = Leitura.CodigoAlarme;
Variaveis.OperacaoEmAndamento.DispMvd.Dados.RegistrarLogMov(Modulo);
// Tenta reiniciar o alarme dos modulos se a operacao nao estiver liberada
if (Modulo.MovMotor.CodigoAlarme > 0 && Modulo.MovMotor.CodigoAlarme <= 99 && !Variaveis.OperacaoEmAndamento.OperacaoLiberada)
{
RegisrarErrosComunicacao(Leitura.Endereco, $"Módulo com código de alarme {Modulo.MovMotor.CodigoAlarme}, reiniciando o módulo...");
AdicionarComandoNaFila(new BLDComandoModel()
{
Endereco = Leitura.Endereco,
AguardaResposta = true,
TimeoutResposta = 200,
Get = false,
Parametro = Parametros.First(x => x.Chave == "AlarmeCode"),
Valor = 0
});
}
var Controle = Variaveis.OperacaoEmAndamento.Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov);
Modulo.MovMotor.ProtocoloComando(Controle.UltimaDirecao);
}
}
}
private static async Task tmrLoopComandos_Tick()
{
if (!EnvioLiberado)

View File

@ -22,7 +22,6 @@ namespace AgroBase.Services
}
public static int TaxaAmostragem { get; set; } = 1000;
private static AsyncTaskTimerModel tmrLoopComandos;
private static AsyncTaskTimerModel tmrReceberDados;
private static List<MKS057ComandoModel> FilaComandos = new List<MKS057ComandoModel>();
private static readonly object FilaLock = new object();
private static bool EnvioLiberado { get; set; } = true;
@ -46,15 +45,11 @@ namespace AgroBase.Services
tmrLoopComandos = new AsyncTaskTimerModel("tmrLoopComandos", tmrLoopComandos_Tick, 100);
tmrLoopComandos.Start();
tmrReceberDados = new AsyncTaskTimerModel("tmrReceberDados", tmrReceberDados_Tick, TaxaAmostragem);
tmrReceberDados.Start();
}
public static void PararRotinas()
{
tmrLoopComandos?.Dispose();
tmrReceberDados?.Dispose();
}
// Inicializa o serviço Ethernet com IP e porta específicos
@ -97,7 +92,7 @@ namespace AgroBase.Services
// Verifica e inicializa cada módulo conectado
foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(x => !x.DirMotor.MKS_Inicializado))
{
byte Addr = Convert.ToByte(Modulo.DirMotor.Endereco, 16);
byte Addr = Modulo.DirMotor.EnderecoByte;
DataSended = Convert.ToByte("43");
// Envia comando relevante para verificar o dispositivo
@ -171,7 +166,7 @@ namespace AgroBase.Services
foreach (var Mod_ID in Mod_IDs)
{
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == Mod_ID);
byte Addr = Convert.ToByte(Modulo.DirMotor.Endereco.Replace("0x", ""), 16);
byte Addr = Modulo.DirMotor.EnderecoByte;
if (!SerialService.DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Mks && x.Mod_ID == Mod_ID))
{
@ -193,37 +188,9 @@ namespace AgroBase.Services
private static bool EnderecoValido(byte addr)
{
return Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Any(x => Convert.ToByte(x.DirMotor.Endereco.Replace("0x", ""), 16) == addr);
return Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Any(x => x.DirMotor.EnderecoByte == addr);
}
private static async Task tmrReceberDados_Tick()
{
if (!Iniciado && SerialService.DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Mks))
{
foreach (var Leitura in DadosLeitura.Where(x => x.UltimoComandoRecebido.AddSeconds(10) < DateTime.Now))
{
AdicionarComandoNaFila(MontarComandoRequisicaoPulsos(Leitura.Endereco));
}
TaxaAmostragem = 3000;
return;
}
TaxaAmostragem = 1000;
if (Variaveis.OperacaoEmAndamento.DispMvd != null)
{
foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(x => x.DirMotor.MKS_Inicializado))
{
AdicionarComandoNaFila(MontarComandoRequisicaoPulsos(Convert.ToByte(Modulo.DirMotor.Endereco, 16)));
AdicionarComandoNaFila(MontarComandoRequisicaoIO(Convert.ToByte(Modulo.DirMotor.Endereco, 16)));
}
}
}
public static void AdicionarComandoNaFila(MKS057ComandoModel Comando)
{
@ -583,48 +550,18 @@ namespace AgroBase.Services
Comando.Momento = DateTime.Now.AddMilliseconds(500);
}
}
public static void AdicionaComandosGoHomeFila(byte Endereco)
{
// Configura o GoHome
AdicionarComandoNaFila(new MKS057ComandoModel()
{
Get = false,
Comando = Convert.ToByte("46"),
Endereco = Endereco,
Angulo = 0,
Velocidade = 1, // 0 ~ 4
_Sentido = Sentido.Horario,
ModoControle = ModosControle.AnguloAbsoluto,
AguardaResposta = false,
});
// Inicia o GoHome
AdicionarComandoNaFila(new MKS057ComandoModel()
{
Get = false,
Comando = Convert.ToByte("32"),
Endereco = Endereco,
Angulo = 0,
Velocidade = 1,
_Sentido = Sentido.Horario,
ModoControle = ModosControle.AnguloAbsoluto,
AguardaResposta = false,
});
}
private static void DefinirDadosModulo(MKS057DModel leitura)
{
if (Variaveis.OperacaoEmAndamento.DispMvd != null)
/*if (Variaveis.OperacaoEmAndamento.DispMvd != null)
{
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => Convert.ToByte(x.DirMotor.Endereco, 16) == leitura.Endereco);
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.DirMotor.EnderecoByte == leitura.Endereco);
if (Modulo != null)
{
Modulo.DirMotor.Angulo = PulsosParaAngulo(leitura.NumeroPulsos);
Modulo.DirMotor.Sentido = leitura.Direcao;
}
}
}*/
}

View File

@ -94023,3 +94023,161 @@ Parameter name: values
02/12/2024 15:38:26:833 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
02/12/2024 15:38:26:865 - Endereço 1 (192.168.105.10): Resposta inválida. 10
02/12/2024 15:38:26:865 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:35:881 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:36:100 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:36:315 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:36:519 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:36:722 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:36:939 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:37:141 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:37:343 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:37:552 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:37:765 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:37:982 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:38:183 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:38:387 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:38:591 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:38:794 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:38:998 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:39:200 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:39:417 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:39:623 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:39:826 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:40:345 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:07:40:858 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:07:41:062 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:41:264 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:41:466 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:41:682 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:41:884 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:42:086 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:42:304 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:42:507 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:42:711 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:42:916 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:43:120 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:43:324 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:43:527 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:43:744 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:43:963 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:44:181 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:44:386 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:44:603 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:44:806 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:45:009 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:45:525 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:07:46:028 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:07:46:232 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:46:447 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:46:650 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:46:854 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:47:071 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:47:275 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:47:478 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:47:681 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:47:886 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:48:091 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:48:294 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:48:495 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:48:697 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:48:900 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:49:104 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:49:321 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:49:524 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:49:726 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:49:931 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:50:148 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:50:664 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:07:51:182 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:07:51:400 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:51:603 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:51:805 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:52:010 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:52:214 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:52:417 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:52:620 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:52:823 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:53:025 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:53:227 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:53:432 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:53:636 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:53:838 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:54:054 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:54:258 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:54:462 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:54:663 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:54:867 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:55:070 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:55:274 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:55:789 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:07:56:307 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:07:56:509 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:56:711 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:56:915 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:57:131 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:57:349 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:57:554 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:57:760 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:57:965 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:58:170 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:58:372 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:58:575 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:07:58:794 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:07:58:996 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:07:59:201 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:07:59:417 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:07:59:635 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:07:59:839 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:08:00:043 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:08:00:248 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:00:466 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:00:984 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:08:01:500 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:08:01:705 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:01:910 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:02:112 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:08:02:316 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:08:02:533 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:08:02:739 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:08:02:955 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:03:158 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:03:359 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:08:03:576 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:08:03:782 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:08:03:985 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:08:04:189 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:04:394 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:04:598 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:08:04:820 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:08:05:024 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:08:05:242 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:08:05:476 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:05:696 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:06:213 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:08:06:729 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:08:06:946 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:07:151 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:07:368 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:08:07:572 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:08:07:778 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:08:07:991 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:08:08:210 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:08:415 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:08:620 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:08:08:836 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:08:09:039 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:08:09:241 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:08:09:445 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:09:646 - Endereço 2 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:09:848 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1
03/12/2024 17:08:10:053 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=AlarmeCode, Valor=0
03/12/2024 17:08:10:256 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=NumPolos, Valor=10
03/12/2024 17:08:10:460 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=RPM_Max, Valor=500
03/12/2024 17:08:10:664 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:10:868 - Endereço 4 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:11:369 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:08:11:885 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Direction, Valor=1
03/12/2024 17:08:12:091 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Rampa, Valor=0
03/12/2024 17:08:12:309 - Endereço 1 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=Enabled, Valor=0
03/12/2024 17:08:12:336 - Endereço 3 (192.168.105.10): Resposta inválida. 0E
03/12/2024 17:08:12:336 - Endereço 3 (192.168.105.10): Timeout ou erro ao receber resposta. GET=False, Parametro=ControleRS485, Valor=1

View File

@ -8927,3 +8927,63 @@ Parameter name: source
02/12/2024 15:26:42:706 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Index was outside the bounds of the array.
02/12/2024 15:28:52:959 - Endereço 252 (192.168.105.11): Dados recebidos de um endereço inválido: [251 252]
02/12/2024 15:32:30:636 - Endereço 191 (192.168.105.11): Dados recebidos de um endereço inválido: [251 191 179 159 247 1 48]
03/12/2024 17:07:30:345 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:30:346 - Endereço 1 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:408 - Endereço 1 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:422 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:30:424 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:438 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:30:438 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:503 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:514 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:30:515 - Endereço 2 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:526 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:30:526 - Endereço 2 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:583 - Endereço 2 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:594 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:30:594 - Endereço 4 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:607 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:30:607 - Endereço 4 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:660 - Endereço 4 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
03/12/2024 17:07:30:682 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:39:044 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:40:047 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:41:124 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:42:304 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:43:308 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:44:386 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:45:399 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:46:478 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:47:493 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:48:495 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:49:570 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:50:758 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:51:774 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:52:853 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:53:870 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:54:944 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:55:948 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:56:961 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:07:58:029 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:07:59:201 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:08:00:217 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:08:01:282 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:08:02:286 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:08:03:360 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:08:04:378 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:08:05:383 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:08:06:447 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:08:07:633 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:08:08:650 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:08:09:725 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:08:10:744 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:08:11:807 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:08:12:838 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:08:13:853 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
03/12/2024 17:08:14:918 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:08:16:099 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
03/12/2024 17:08:16:726 - Endereço 251 (192.168.105.11): Dados recebidos de um endereço inválido: [65 251 2 51 0 0 0 0]
03/12/2024 17:09:35:953 - Endereço 195 (192.168.105.11): Dados recebidos de um endereço inválido: [251 195]
03/12/2024 17:12:39:312 - Endereço 209 (192.168.105.11): Dados recebidos de um endereço inválido: [251 209 4 245 2 246 244 254]
03/12/2024 17:13:45:089 - Endereço 245 (192.168.105.11): Dados recebidos de um endereço inválido: [3 245 2 245]
03/12/2024 17:15:04:958 - Endereço 159 (192.168.105.11): Dados recebidos de um endereço inválido: [160 159 245]

View File

@ -1 +1 @@
{"tmrRegistrador":{"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":1000,"StackTrace":"AtuadorModel.IniciarRegistrador","Id":"tmrRegistrador_Atu","TimeTick":"00:00:00"},"Modulo_ID":"Atu","IP":"192.168.100.13","RequisitarDados":true,"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"AtuacaoNivelAlto":true,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Componente":422,"AtuacaoNivelAlto":false,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B02","Posicao":2,"Componente":422,"AtuacaoNivelAlto":false,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B03","Posicao":3,"Componente":422,"AtuacaoNivelAlto":false,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B04","Posicao":4,"Componente":422,"AtuacaoNivelAlto":false,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0}],"BombasPressurizadoras":[{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"Potencia":0.0,"Leitura":null,"Inicializado":false}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","LimiteMaximo":120.0,"LimiteMinimo":60.0}],"BombaPressurizadora":{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"Potencia":0.0,"Leitura":null,"Inicializado":false},"ScriptDeteccaoErvas":"weed_detector-1_0.py","DadosLeitura":{"Conectado":false,"Mod_ID":null,"Momento":"0001-01-01T00:00:00","BicosPulverizadores":[],"BombasPressurizadoras":[],"SensoresFluxo":[],"SensoresMassa":[],"SensoresPressao":[]},"_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"MassaReservatorio":0.0,"VolumeReservatorio":0.0,"PercentualReservatorio":0.0,"VolumeVazaoAferido":0.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"VazaoFluxoMLpS":0.0,"VolumeVazaoML":0.0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"PressaoLinha":0.0,"PressaoLinhaCalc":0.0}
{"tmrRegistrador":{"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":1000,"StackTrace":"AtuadorModel.IniciarRegistrador","Id":"tmrRegistrador_Atu","TimeTick":"00:00:00"},"Modulo_ID":"Atu","IP":"192.168.100.13","RequisitarDados":true,"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B02","Posicao":2,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B03","Posicao":3,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B04","Posicao":4,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0}],"BombasPressurizadoras":[{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","LimiteMaximo":120.0,"LimiteMinimo":60.0}],"BombaPressurizadora":{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false},"ScriptDeteccaoErvas":"weed_detector-1_0.py","DadosLeitura":{"Conectado":false,"Mod_ID":null,"Momento":"0001-01-01T00:00:00","BicosPulverizadores":[],"BombasPressurizadoras":[],"SensoresFluxo":[],"SensoresMassa":[],"SensoresPressao":[]},"_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"MassaReservatorio":0.0,"VolumeReservatorio":0.0,"PercentualReservatorio":0.0,"VolumeVazaoAferido":0.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"VazaoFluxoMLpS":0.0,"VolumeVazaoML":0.0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"PressaoLinha":0.0,"PressaoLinhaCalc":0.0}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -25,7 +25,7 @@
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_c0a5b8b94387d9cfe32ff1a870dcfc93 {
#map_25eea00ac1923151642c61c60e0aa577 {
position: relative;
width: 100.0%;
height: 100.0%;
@ -39,14 +39,14 @@
<body>
<div class="folium-map" id="map_c0a5b8b94387d9cfe32ff1a870dcfc93" ></div>
<div class="folium-map" id="map_25eea00ac1923151642c61c60e0aa577" ></div>
</body>
<script>
var map_c0a5b8b94387d9cfe32ff1a870dcfc93 = L.map(
"map_c0a5b8b94387d9cfe32ff1a870dcfc93",
var map_25eea00ac1923151642c61c60e0aa577 = L.map(
"map_25eea00ac1923151642c61c60e0aa577",
{
center: [0.0, 0.0],
crs: L.CRS.EPSG3857,
@ -59,15 +59,6 @@
var tile_layer_25d47e42b5225c1d55453f85875cf674 = L.tileLayer(
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
);
tile_layer_25d47e42b5225c1d55453f85875cf674.addTo(map_c0a5b8b94387d9cfe32ff1a870dcfc93);
</script>
<script>
@ -87,7 +78,7 @@
}
trajeto_json_add({"features": []});
trajeto_json.addTo(map_c0a5b8b94387d9cfe32ff1a870dcfc93);
trajeto_json.addTo(map_25eea00ac1923151642c61c60e0aa577);
function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria);
@ -145,7 +136,7 @@
var marcadorDinamico = L.marker([0, 0], {
icon: customIcon
}).addTo(map_c0a5b8b94387d9cfe32ff1a870dcfc93);
}).addTo(map_25eea00ac1923151642c61c60e0aa577);
// Conectar ao broker MQTT
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
@ -183,7 +174,7 @@
marcadorDinamico.setRotationAngle(angulo);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
map_c0a5b8b94387d9cfe32ff1a870dcfc93.setView(novaPosicao, map_c0a5b8b94387d9cfe32ff1a870dcfc93.getZoom());
map_25eea00ac1923151642c61c60e0aa577.setView(novaPosicao, map_25eea00ac1923151642c61c60e0aa577.getZoom());
});
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {

File diff suppressed because one or more lines are too long

View File

@ -170,6 +170,8 @@ String MontarMensagemSensores() {
sensorData["Iniciado"] = sensor->Iniciado;
sensorData["Estado"] = sensor->EstadoLeitura;
sensorData["Potencia"] = sensor->PercentualPotenciaLeitura;
sensorData["PressaoSP"] = sensor->_PressaoSP;
sensorData["Pressao"] = sensor->sensorPressao->Pressao;
}
// Array JSON para sensores de fluxo

View File

@ -177,6 +177,7 @@ String MontarMensagemSensores() {
sensorData["Id"] = sensor->_ID;
sensorData["Iniciado"] = sensor->Iniciado;
sensorData["Leitura"] = sensor->_StatusLeitura;
sensorData["Comando"] = sensor->_Status;
}
// Array JSON para reles