ajustes nas operacoes

This commit is contained in:
Diego Freitas 2024-07-05 15:59:05 -03:00
parent 0dab81aad7
commit 2ba82fd286
82 changed files with 1571 additions and 567 deletions

Binary file not shown.

View File

@ -109,8 +109,9 @@ namespace AgroBase.Forms.IHM
if ( if (
Variaveis.OperacaoEmAndamento.DispAtu == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Atu) || Variaveis.OperacaoEmAndamento.DispAtu == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Atu) ||
Variaveis.OperacaoEmAndamento.DispDir == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Dir) || //Variaveis.OperacaoEmAndamento.DispDir == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Dir) ||
Variaveis.OperacaoEmAndamento.DispMov == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mov) || //Variaveis.OperacaoEmAndamento.DispMov == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mov) ||
Variaveis.OperacaoEmAndamento.DispMvd == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mvd) ||
Variaveis.OperacaoEmAndamento.DispSen == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Sen) Variaveis.OperacaoEmAndamento.DispSen == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Sen)
) )
{ {

View File

@ -543,17 +543,22 @@ namespace AgroBase.Forms.Operacoes
MvdMotorMOVSensorimanetoGrafico Log = null; MvdMotorMOVSensorimanetoGrafico Log = null;
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == "ET" && x.MovMotor.LogGrafico.Any()); // Primeiro, coletar todos os logs alinhados por índice em uma lista de tuplas (index, moduloLog)
var Logs = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos
if (Modulo == null) .SelectMany(m => m.MovMotor.LogGrafico.Select((log, index) => new { Index = index, Log = log }))
{ .GroupBy(x => x.Index) // Agrupa por índice
return; .OrderBy(g => g.Key) // Ordena pelos índices (opcional, mas ajuda na leitura)
} .Select(g => new MvdMotorMOVSensorimanetoGrafico()
{
if (Modulo.MovMotor.LogGrafico.Count > 0) // Calcula a média de cada propriedade no grupo
{ Momento = new DateTime((long)g.Average(x => x.Log.Momento.Ticks)),
Log = Modulo.MovMotor.LogGrafico.Last(); Velocidade = g.Average(x => x.Log.Velocidade),
} RPM = Convert.ToInt32(g.Average(x => x.Log.RPM)),
RPM_SP = Convert.ToInt32(g.Average(x => x.Log.RPM_SP)),
Temperatura = g.Average(x => x.Log.Temperatura),
Tensao = g.Average(x => x.Log.Tensao),
})
.ToList();
double Minimo = 0; double Minimo = 0;
double Maximo = 0; double Maximo = 0;
@ -561,7 +566,7 @@ namespace AgroBase.Forms.Operacoes
Chart chart = chartGraficos; Chart chart = chartGraficos;
chart.Titles.Clear(); chart.Titles.Clear();
//chart.Titles.Add("Acompanhamento"); //chart.Titles.Add("Acompanhamento");
var Logs = (Modulo.MovMotor.LogGrafico.Count > MovimentacaoModel.LogsManter ? Modulo.MovMotor.LogGrafico.Skip(Math.Max(0, Modulo.MovMotor.LogGrafico.Count - MovimentacaoModel.LogsManter)).Take(MovimentacaoModel.LogsManter).ToList() : Modulo.MovMotor.LogGrafico).Where(log => log.Modulo_ID == Modulo.Modulo_ID).ToList(); //var Logs = (Modulo.MovMotor.LogGrafico.Count > MovimentacaoModel.LogsManter ? Modulo.MovMotor.LogGrafico.Skip(Math.Max(0, Modulo.MovMotor.LogGrafico.Count - MovimentacaoModel.LogsManter)).Take(MovimentacaoModel.LogsManter).ToList() : Modulo.MovMotor.LogGrafico).Where(log => log.Modulo_ID == Modulo.Modulo_ID).ToList();
chart.Series.Clear(); chart.Series.Clear();
List<string> Momentos = Logs.Select(x => x.Momento.ToString("mm:ss:fff")).ToList(); List<string> Momentos = Logs.Select(x => x.Momento.ToString("mm:ss:fff")).ToList();

View File

@ -280,12 +280,26 @@ namespace AgroBase.Forms.Operacoes
{ {
MvdMotorMOVSensorimanetoGrafico Log = null; MvdMotorMOVSensorimanetoGrafico Log = null;
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == "ET" && x.MovMotor.LogGrafico.Any()); // Primeiro, coletar todos os logs alinhados por índice em uma lista de tuplas (index, moduloLog)
var Motor = Modulo.MovMotor; var Logs = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos
.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)
.Select(g => new MvdMotorMOVSensorimanetoGrafico()
{
// Calcula a média de cada propriedade no grupo
Momento = new DateTime((long)g.Average(x => x.Log.Momento.Ticks)),
Velocidade = g.Average(x => x.Log.Velocidade),
RPM = Convert.ToInt32(g.Average(x => x.Log.RPM)),
RPM_SP = Convert.ToInt32(g.Average(x => x.Log.RPM_SP)),
Temperatura = g.Average(x => x.Log.Temperatura),
Tensao = g.Average(x => x.Log.Tensao),
})
.ToList();
if (Motor.LogGrafico.Count > 0) if (Logs.Count > 0)
{ {
Log = Motor.LogGrafico.Last(); Log = Logs.Last();
} }
double Minimo = 0; double Minimo = 0;
@ -294,7 +308,7 @@ namespace AgroBase.Forms.Operacoes
Chart chart = chartGraficos; Chart chart = chartGraficos;
chart.Titles.Clear(); chart.Titles.Clear();
chart.Titles.Add("Acompanhamento"); chart.Titles.Add("Acompanhamento");
var Logs = (Motor.LogGrafico.Count > MovimentacaoModel.LogsManter ? Motor.LogGrafico.Skip(Math.Max(0, Motor.LogGrafico.Count - MovimentacaoModel.LogsManter)).Take(MovimentacaoModel.LogsManter).ToList() : Motor.LogGrafico).Where(log => log.Modulo_ID == Modulo.Modulo_ID).ToList(); //var Logs = (Motor.LogGrafico.Count > MovimentacaoModel.LogsManter ? Motor.LogGrafico.Skip(Math.Max(0, Motor.LogGrafico.Count - MovimentacaoModel.LogsManter)).Take(MovimentacaoModel.LogsManter).ToList() : Motor.LogGrafico).Where(log => log.Modulo_ID == Modulo.Modulo_ID).ToList();
chart.Series.Clear(); chart.Series.Clear();
List<string> Momentos = Logs.Select(x => x.Momento.ToString("mm:ss:fff")).ToList(); List<string> Momentos = Logs.Select(x => x.Momento.ToString("mm:ss:fff")).ToList();

View File

@ -36,9 +36,10 @@ namespace AgroBase.Forms
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(278, 152); this.ClientSize = new System.Drawing.Size(278, 152);
this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "frmInstancial"; this.Name = "frmInstancial";
this.Text = "frmInstancial"; this.Text = "frmInstancial";
this.Load += new System.EventHandler(this.frmInstancial_Load);
this.Shown += new System.EventHandler(this.frmInstancial_Shown); this.Shown += new System.EventHandler(this.frmInstancial_Shown);
this.ResumeLayout(false); this.ResumeLayout(false);

View File

@ -1,4 +1,7 @@
using AgroBase.Forms.Movimentacao; using AgroBase.Forms.IHM;
using AgroBase.Forms.Movimentacao;
using AgroBase.Models;
using AgroBase.Models.Modules;
using AgroBase.Services; using AgroBase.Services;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -9,14 +12,25 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using static AgroBase.Models.Enuns;
namespace AgroBase.Forms namespace AgroBase.Forms
{ {
public partial class frmInstancial : Form public partial class frmInstancial : Form
{ {
public bool DebugMode = true;
public static bool Fechando = false;
public static frmPrincipal frmPrincipal = new frmPrincipal(); public static frmPrincipal frmPrincipal = new frmPrincipal();
public static frmJoystick frmJoystick = new frmJoystick(); public static frmJoystick frmJoystick = new frmJoystick();
public static frmAcompanhamento frmAcompanhamento = new frmAcompanhamento(); public static frmAcompanhamento frmAcompanhamento = new frmAcompanhamento();
public static frmIHM frmIHM = new frmIHM()
{
FormBorderStyle = FormBorderStyle.None,
WindowState = FormWindowState.Maximized,
TopMost = true
};
public frmInstancial() public frmInstancial()
{ {
@ -26,9 +40,64 @@ namespace AgroBase.Forms
private void frmInstancial_Shown(object sender, EventArgs e) private void frmInstancial_Shown(object sender, EventArgs e)
{ {
frmPrincipal.Show(); if (DebugMode)
{
frmPrincipal.FormClosing += frmPrincipal_FormClosing;
frmPrincipal.Show();
}
else
{
frmIHM.FormClosing += frmPrincipal_FormClosing;
frmIHM.Show();
}
this.Hide(); this.Hide();
} }
private void frmInstancial_Load(object sender, EventArgs e)
{
FuncoesGlobais.AddApplicationToStartup();
IniciarConexaoMqtt();
}
private async void IniciarConexaoMqtt()
{
await Variaveis.MqttService.ConnectAsync();
}
public static async Task EncerrarProcessos()
{
Fechando = true;
foreach (var Disp in Variaveis.DispositivosConectados)
{
if (Disp._Porta.IsOpen)
{
Disp.btnConectar_Click(new object(), new EventArgs());
}
if (Disp.Dispositivo == T_Code.Sen)
{
((SensoriamentoModel)Disp.Dados).ultimoFrameSoloE = null;
((SensoriamentoModel)Disp.Dados).ultimoFrameSoloD = null;
((SensoriamentoModel)Disp.Dados).ultimoFrameCaminho = null;
}
Disp.SalvarParametros(Disp.Dados);
}
while (!FilaService.Liberado)
{
await Task.Delay(500);
}
Environment.Exit(0);
}
private void frmPrincipal_FormClosing(object sender, FormClosingEventArgs e)
{
EncerrarProcessos().ConfigureAwait(false);
e.Cancel = true;
}
} }
} }

View File

@ -76,6 +76,7 @@ namespace AgroBase
this.gpbControleDirecional = new System.Windows.Forms.GroupBox(); this.gpbControleDirecional = new System.Windows.Forms.GroupBox();
this.gpbAtalhos = new System.Windows.Forms.GroupBox(); this.gpbAtalhos = new System.Windows.Forms.GroupBox();
this.pnlAtalhos = new System.Windows.Forms.Panel(); this.pnlAtalhos = new System.Windows.Forms.Panel();
this.btnMKS = new System.Windows.Forms.Button();
this.btnBLD300R = new System.Windows.Forms.Button(); this.btnBLD300R = new System.Windows.Forms.Button();
this.btnWT901C = new System.Windows.Forms.Button(); this.btnWT901C = new System.Windows.Forms.Button();
this.btnLoRaConfig = new System.Windows.Forms.Button(); this.btnLoRaConfig = new System.Windows.Forms.Button();
@ -93,7 +94,6 @@ namespace AgroBase
this.btnIniciarOperacao = new System.Windows.Forms.Button(); this.btnIniciarOperacao = new System.Windows.Forms.Button();
this.lblModoOperacao = new System.Windows.Forms.Label(); this.lblModoOperacao = new System.Windows.Forms.Label();
this.cmbModoOperacao = new System.Windows.Forms.ComboBox(); this.cmbModoOperacao = new System.Windows.Forms.ComboBox();
this.btnMKS = new System.Windows.Forms.Button();
this.gpbAcoes.SuspendLayout(); this.gpbAcoes.SuspendLayout();
this.erroStrip.SuspendLayout(); this.erroStrip.SuspendLayout();
this.pnlLateral.SuspendLayout(); this.pnlLateral.SuspendLayout();
@ -623,6 +623,17 @@ namespace AgroBase
this.pnlAtalhos.Size = new System.Drawing.Size(112, 286); this.pnlAtalhos.Size = new System.Drawing.Size(112, 286);
this.pnlAtalhos.TabIndex = 0; this.pnlAtalhos.TabIndex = 0;
// //
// btnMKS
//
this.btnMKS.Location = new System.Drawing.Point(5, 367);
this.btnMKS.Margin = new System.Windows.Forms.Padding(2);
this.btnMKS.Name = "btnMKS";
this.btnMKS.Size = new System.Drawing.Size(84, 20);
this.btnMKS.TabIndex = 29;
this.btnMKS.Text = "MKS 057D";
this.btnMKS.UseVisualStyleBackColor = true;
this.btnMKS.Click += new System.EventHandler(this.btnMKS_Click);
//
// btnBLD300R // btnBLD300R
// //
this.btnBLD300R.Location = new System.Drawing.Point(5, 343); this.btnBLD300R.Location = new System.Drawing.Point(5, 343);
@ -815,17 +826,6 @@ namespace AgroBase
this.cmbModoOperacao.TabIndex = 13; this.cmbModoOperacao.TabIndex = 13;
this.cmbModoOperacao.SelectedIndexChanged += new System.EventHandler(this.cmbModoOperacao_SelectedIndexChanged); this.cmbModoOperacao.SelectedIndexChanged += new System.EventHandler(this.cmbModoOperacao_SelectedIndexChanged);
// //
// btnMKS
//
this.btnMKS.Location = new System.Drawing.Point(5, 367);
this.btnMKS.Margin = new System.Windows.Forms.Padding(2);
this.btnMKS.Name = "btnMKS";
this.btnMKS.Size = new System.Drawing.Size(84, 20);
this.btnMKS.TabIndex = 29;
this.btnMKS.Text = "MKS 057D";
this.btnMKS.UseVisualStyleBackColor = true;
this.btnMKS.Click += new System.EventHandler(this.btnMKS_Click);
//
// frmPrincipal // frmPrincipal
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -843,7 +843,6 @@ namespace AgroBase
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Agro Base"; this.Text = "Agro Base";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmPrincipal_FormClosing); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmPrincipal_FormClosing);
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmPrincipal_FormClosed);
this.Load += new System.EventHandler(this.Form1_Load); this.Load += new System.EventHandler(this.Form1_Load);
this.gpbAcoes.ResumeLayout(false); this.gpbAcoes.ResumeLayout(false);
this.gpbAcoes.PerformLayout(); this.gpbAcoes.PerformLayout();

View File

@ -28,10 +28,6 @@ namespace AgroBase
{ {
public partial class frmPrincipal : Form public partial class frmPrincipal : Form
{ {
public static bool Fechando = false;
public frmPrincipal() public frmPrincipal()
{ {
InitializeComponent(); InitializeComponent();
@ -41,50 +37,14 @@ namespace AgroBase
{ {
timerDispositivos.Enabled = true; timerDispositivos.Enabled = true;
AtualizaDadosGerais(); AtualizaDadosGerais();
IniciarConexaoMqtt();
} }
private void frmPrincipal_FormClosing(object sender, FormClosingEventArgs e) private void frmPrincipal_FormClosing(object sender, FormClosingEventArgs e)
{ {
EncerrarProcessos().ConfigureAwait(false); frmInstancial.EncerrarProcessos().ConfigureAwait(false);
e.Cancel = true; e.Cancel = true;
} }
private async Task EncerrarProcessos()
{
Fechando = true;
foreach (var Disp in Variaveis.DispositivosConectados)
{
if (Disp._Porta.IsOpen)
{
Disp.btnConectar_Click(new object(), new EventArgs());
}
if (Disp.Dispositivo == T_Code.Sen)
{
((SensoriamentoModel)Disp.Dados).ultimoFrameSoloE = null;
((SensoriamentoModel)Disp.Dados).ultimoFrameSoloD = null;
((SensoriamentoModel)Disp.Dados).ultimoFrameCaminho = null;
}
Disp.SalvarParametros(Disp.Dados);
}
while (!FilaService.Liberado)
{
await Task.Delay(500);
}
Environment.Exit(0);
}
private async void IniciarConexaoMqtt()
{
await Variaveis.MqttService.ConnectAsync();
}
public void AtualizaDadosGerais() public void AtualizaDadosGerais()
{ {
btnJoyAtt_Click(new object(), new EventArgs()); btnJoyAtt_Click(new object(), new EventArgs());
@ -98,6 +58,9 @@ namespace AgroBase
cmbModoOperacao.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Modo; cmbModoOperacao.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Modo;
} }
#region DISPOSITIVOS
private void btnNovoDispositivo_Click(object sender, EventArgs e) private void btnNovoDispositivo_Click(object sender, EventArgs e)
{ {
gpbNovoDispositivo.Enabled = true; gpbNovoDispositivo.Enabled = true;
@ -145,23 +108,6 @@ namespace AgroBase
} }
} }
private void btnJoyAtt_Click(object sender, EventArgs e)
{
GeneralJoystick.AtualizaDispositivo();
}
private void btnJoyEdt_Click(object sender, EventArgs e)
{
}
private void btnVer_Click(object sender, EventArgs e)
{
frmInstancial.frmJoystick.Show();
}
private void timerDispositivos_Tick(object sender, EventArgs e) private void timerDispositivos_Tick(object sender, EventArgs e)
{ {
lstDisponiveis.Items.Clear(); lstDisponiveis.Items.Clear();
@ -170,18 +116,18 @@ namespace AgroBase
.GroupBy(x => x.Dispositivo) .GroupBy(x => x.Dispositivo)
.Select(x => new ListViewItem() .Select(x => new ListViewItem()
{ {
Text = Text =
x.FirstOrDefault().PortaCOM + " - " + Enum.GetName(typeof(T_Code), x.Key) + " v" + x.FirstOrDefault().Versao + x.FirstOrDefault().PortaCOM + " - " + Enum.GetName(typeof(T_Code), x.Key) + " v" + x.FirstOrDefault().Versao +
(x.FirstOrDefault().Dispositivo == T_Code.Mvd ? (" (" + string.Join(", ", x.Select(y => y.Mod_ID)) + ")") : (x.FirstOrDefault().Dispositivo == T_Code.Mvd ? (" (" + string.Join(", ", x.Select(y => y.Mod_ID)) + ")") :
(x.FirstOrDefault().Dispositivo == T_Code.Bld ? (" (" + string.Join(", ", x.Select(y => y.Mod_ID)) + ")") : (x.FirstOrDefault().Dispositivo == T_Code.Bld ? (" (" + string.Join(", ", x.Select(y => y.Mod_ID)) + ")") :
"")) + " - " + "")) + " - " +
(x.FirstOrDefault().Dispositivo == T_Code.Gps ? (GPSService.Iniciado ? "Conectado" : "Desconectado") : (x.FirstOrDefault().Dispositivo == T_Code.Gps ? (GPSService.Iniciado ? "Conectado" : "Desconectado") :
x.FirstOrDefault().Dispositivo == T_Code.Pzm ? (PZEMService.Iniciado ? "Conectado" : "Desconectado") : x.FirstOrDefault().Dispositivo == T_Code.Pzm ? (PZEMService.Iniciado ? "Conectado" : "Desconectado") :
x.FirstOrDefault().Dispositivo == T_Code.Lra ? (LoRaService.Iniciado ? "Conectado" : "Desconectado") : x.FirstOrDefault().Dispositivo == T_Code.Lra ? (LoRaService.Iniciado ? "Conectado" : "Desconectado") :
x.FirstOrDefault().Dispositivo == T_Code.Wit ? (WT901CService.Iniciado ? "Conectado" : "Desconectado") : x.FirstOrDefault().Dispositivo == T_Code.Wit ? (WT901CService.Iniciado ? "Conectado" : "Desconectado") :
x.FirstOrDefault().Dispositivo == T_Code.Bld ? (Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Any(y => y.MovMotor.DadosDriver.Iniciado) ? "Conectado" : "Desconectado") : x.FirstOrDefault().Dispositivo == T_Code.Bld ? (Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Any(y => y.MovMotor.DadosDriver.Iniciado) ? "Conectado" : "Desconectado") :
(Variaveis.DispositivosConectados.FirstOrDefault(y => y.PortaCOM() == x.FirstOrDefault().PortaCOM)?.StatusPorta() ?? "Desconectado")) (Variaveis.DispositivosConectados.FirstOrDefault(y => y.PortaCOM() == x.FirstOrDefault().PortaCOM)?.StatusPorta() ?? "Desconectado"))
}).ToArray() }).ToArray()
); );
@ -189,12 +135,12 @@ namespace AgroBase
{ {
Variaveis.DispositivosConectados.Where(x => x.Dados.GetStatusConexao()).ToList().ForEach(x => x.AcaoDesconectar()); Variaveis.DispositivosConectados.Where(x => x.Dados.GetStatusConexao()).ToList().ForEach(x => x.AcaoDesconectar());
} }
//SerialService.RealizarVarreduraPortasUSB().ConfigureAwait(false); SerialService.RealizarVarreduraPortasUSB().ConfigureAwait(false);
if ( if (
Variaveis.OperacaoEmAndamento.DispAtu == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Atu) || Variaveis.OperacaoEmAndamento.DispAtu == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Atu) ||
Variaveis.OperacaoEmAndamento.DispDir == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Dir) || //Variaveis.OperacaoEmAndamento.DispDir == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Dir) ||
Variaveis.OperacaoEmAndamento.DispMov == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mov) || //Variaveis.OperacaoEmAndamento.DispMov == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mov) ||
Variaveis.OperacaoEmAndamento.DispMvd == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mvd) || Variaveis.OperacaoEmAndamento.DispMvd == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mvd) ||
Variaveis.OperacaoEmAndamento.DispSen == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Sen) Variaveis.OperacaoEmAndamento.DispSen == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Sen)
) )
@ -214,119 +160,15 @@ namespace AgroBase
}); });
} }
private void frmPrincipal_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
PythonService.EncerrarProcessos();
Environment.Exit(0);
}
catch
{
}
}
private void btnDiagnosticos_Click(object sender, EventArgs e)
{
frmMovDiagnosticos frm = new frmMovDiagnosticos();
frm.ShowDialog();
}
public void AtualizaRPM(int valor)
{
if (valor >= trkRPM.Minimum && valor <= trkRPM.Maximum)
{
double Velocidade = MovimentacaoModel.CalculaVelocidadeRPM(valor);
trkRPM.Value = valor;
trkKmh.Value = Convert.ToInt32(Velocidade);
GeneralJoystick.RPM = trkRPM.Value;
lblRPM.Text = "RPM: " + GeneralJoystick.RPM;
lblKmh.Text = "Velocidade: " + Velocidade.ToString("0.00") + " km/h";
}
}
private void btnMovConfig_Click(object sender, EventArgs e)
{
frmMovConfig frm = new frmMovConfig();
frm.ShowDialog();
}
private void cmbDispositivos_SelectedIndexChanged(object sender, EventArgs e) private void cmbDispositivos_SelectedIndexChanged(object sender, EventArgs e)
{ {
btnJoyAtt_Click(sender, e); btnJoyAtt_Click(sender, e);
} }
private void tkbPotencia_ValueChanged(object sender, EventArgs e)
{
GeneralJoystick.Velocidade = tkbVelocidade.Value;
lblVelocidade.Text = "Velocidade: " + GeneralJoystick.Velocidade + "%";
}
private void tkbRampa_ValueChanged(object sender, EventArgs e) #endregion
{
GeneralJoystick.Angulo = tkbAngulo.Value;
lblAngulo.Text = "Angulo: " + GeneralJoystick.Angulo + "º";
}
#region OPERACAO
private void trkRPM_ValueChanged(object sender, EventArgs e)
{
try
{
int RPM = ((TrackBar)sender).Value;
AtualizaRPM(RPM);
}
catch (Exception ex)
{
}
}
private void trkKmh_ValueChanged(object sender, EventArgs e)
{
try
{
int RPM = Convert.ToInt32(MovimentacaoModel.CalculaRPMVelocidade(((TrackBar)sender).Value));
AtualizaRPM(RPM);
}
catch (Exception ex)
{
}
}
private void btnAcompanhamento_Click(object sender, EventArgs e)
{
frmInstancial.frmAcompanhamento.Show();
}
private void btnCamera_Click(object sender, EventArgs e)
{
frmAtuCamera frmCamera = new frmAtuCamera();
frmCamera.Show();
}
private void btnMapas_Click(object sender, EventArgs e)
{
frmMapa frmMapa = new frmMapa();
frmMapa.Show();
}
private void btnGPS_Click(object sender, EventArgs e)
{
frmGPS frmGps = new frmGPS();
frmGps.Show();
}
private void btnSenCamera_Click(object sender, EventArgs e)
{
frmSenCamera frmCamera = new frmSenCamera();
frmCamera.Show();
}
private void cmbModoOperacao_SelectedIndexChanged(object sender, EventArgs e) private void cmbModoOperacao_SelectedIndexChanged(object sender, EventArgs e)
{ {
@ -357,6 +199,117 @@ namespace AgroBase
frmParametrizacaoOperacao.ShowDialog(); frmParametrizacaoOperacao.ShowDialog();
} }
#endregion
#region CONTROLE
private void btnJoyAtt_Click(object sender, EventArgs e)
{
GeneralJoystick.AtualizaDispositivo();
}
private void btnJoyEdt_Click(object sender, EventArgs e)
{
}
private void btnVer_Click(object sender, EventArgs e)
{
frmInstancial.frmJoystick.Show();
}
public void AtualizaRPM(int valor)
{
if (valor >= trkRPM.Minimum && valor <= trkRPM.Maximum)
{
double Velocidade = MovimentacaoModel.CalculaVelocidadeRPM(valor);
trkRPM.Value = valor;
trkKmh.Value = Convert.ToInt32(Velocidade);
GeneralJoystick.RPM = trkRPM.Value;
lblRPM.Text = "RPM: " + GeneralJoystick.RPM;
lblKmh.Text = "Velocidade: " + Velocidade.ToString("0.00") + " km/h";
}
}
private void tkbPotencia_ValueChanged(object sender, EventArgs e)
{
GeneralJoystick.Velocidade = tkbVelocidade.Value;
lblVelocidade.Text = "Velocidade: " + GeneralJoystick.Velocidade + "%";
}
private void tkbRampa_ValueChanged(object sender, EventArgs e)
{
GeneralJoystick.Angulo = tkbAngulo.Value;
lblAngulo.Text = "Angulo: " + GeneralJoystick.Angulo + "º";
}
private void trkRPM_ValueChanged(object sender, EventArgs e)
{
try
{
int RPM = ((TrackBar)sender).Value;
AtualizaRPM(RPM);
}
catch (Exception ex)
{
}
}
private void trkKmh_ValueChanged(object sender, EventArgs e)
{
try
{
int RPM = Convert.ToInt32(MovimentacaoModel.CalculaRPMVelocidade(((TrackBar)sender).Value));
AtualizaRPM(RPM);
}
catch (Exception ex)
{
}
}
#endregion
#region ATALHOS
private void btnDiagnosticos_Click(object sender, EventArgs e)
{
frmMovDiagnosticos frm = new frmMovDiagnosticos();
frm.ShowDialog();
}
private void btnAcompanhamento_Click(object sender, EventArgs e)
{
frmInstancial.frmAcompanhamento.Show();
}
private void btnCamera_Click(object sender, EventArgs e)
{
frmAtuCamera frmCamera = new frmAtuCamera();
frmCamera.Show();
}
private void btnMapas_Click(object sender, EventArgs e)
{
frmMapa frmMapa = new frmMapa();
frmMapa.Show();
}
private void btnGPS_Click(object sender, EventArgs e)
{
frmGPS frmGps = new frmGPS();
frmGps.Show();
}
private void btnSenCamera_Click(object sender, EventArgs e)
{
frmSenCamera frmCamera = new frmSenCamera();
frmCamera.Show();
}
private void btnIHM_Click(object sender, EventArgs e) private void btnIHM_Click(object sender, EventArgs e)
{ {
frmIHM frmIHM = new frmIHM(); frmIHM frmIHM = new frmIHM();
@ -443,5 +396,8 @@ namespace AgroBase
frmMKS frm = new frmMKS(); frmMKS frm = new frmMKS();
frm.Show(); frm.Show();
} }
#endregion
} }
} }

View File

@ -10,6 +10,7 @@ namespace AgroBase.Models
{ {
public class MKS057DModel public class MKS057DModel
{ {
public byte Endereco { get; set; }
public bool Iniciado { get; set; } public bool Iniciado { get; set; }
public double ErroCarregado { get; set; } public double ErroCarregado { get; set; }
public string ErroCarregado_Hex { get; set; } public string ErroCarregado_Hex { get; set; }
@ -34,6 +35,7 @@ namespace AgroBase.Models
public class MKS057ComandoModel public class MKS057ComandoModel
{ {
public bool Get { get; set; }
public byte Comando { get; set; } public byte Comando { get; set; }
public string Endereco { get; set; } public string Endereco { get; set; }
public double Angulo { get; set; } public double Angulo { get; set; }

View File

@ -228,7 +228,7 @@ namespace AgroBase.Models
if (RuaEsquerda.Any()) if (RuaEsquerda.Any())
{ {
distancia = DistanciaAteRua(RuaEsquerda); distancia = DistanciaAteRua(RuaEsquerda, VariaveisEquipamento.LarguraEsquerda);
} }
else else
{ {
@ -273,7 +273,7 @@ namespace AgroBase.Models
if (RuaDireita.Any()) if (RuaDireita.Any())
{ {
distancia = DistanciaAteRua(RuaDireita); distancia = DistanciaAteRua(RuaDireita, VariaveisEquipamento.LarguraDireita);
} }
else else
{ {
@ -463,7 +463,7 @@ namespace AgroBase.Models
return menorDistancia; return menorDistancia;
} }
public double DistanciaAteRua(List<GPSModel> Rua) public double DistanciaAteRua(List<GPSModel> Rua, double larguraRobo)
{ {
GPSModel pontoAtual = GPSService.UltimaLeitura; GPSModel pontoAtual = GPSService.UltimaLeitura;
@ -479,7 +479,7 @@ namespace AgroBase.Models
double distancia = FuncoesMatematicas.CalcularAlturaTriangulo(a, b, c); double distancia = FuncoesMatematicas.CalcularAlturaTriangulo(a, b, c);
distancia -= (VariaveisEquipamento.Largura / 2.0 / 100.0); distancia -= (larguraRobo / 100.0);
return distancia; return distancia;
} }

View File

@ -286,7 +286,7 @@ namespace AgroBase.Models.Modules
{ {
Conectado = conecatdo; Conectado = conecatdo;
Variaveis.OperacaoEmAndamento.DispDir.AcaoConexao(); //Variaveis.OperacaoEmAndamento.DispDir.AcaoConexao();
} }
} }

View File

@ -275,7 +275,7 @@ namespace AgroBase.Models
{ {
Conectado = conecatdo; Conectado = conecatdo;
Variaveis.OperacaoEmAndamento.DispMov.AcaoConexao(); //Variaveis.OperacaoEmAndamento.DispMov.AcaoConexao();
} }
} }
@ -512,7 +512,7 @@ namespace AgroBase.Models
if (Inicializado && (!AlarmeAnterior || Adicionado) && AlarmeAtual) // Motor iniciado, Não estava em alarme anteriormente ou foi adicionado agora, alarme atual if (Inicializado && (!AlarmeAnterior || Adicionado) && AlarmeAtual) // Motor iniciado, Não estava em alarme anteriormente ou foi adicionado agora, alarme atual
{ {
Variaveis.OperacaoEmAndamento.DispMov.AdicionarMensagemFila(Variaveis.OperacaoEmAndamento.DispMov.Dados.Modulo_ID, ProtocoloComando(Direcao.Frente, true), true, false); //Variaveis.OperacaoEmAndamento.DispMov.AdicionarMensagemFila(Variaveis.OperacaoEmAndamento.DispMov.Dados.Modulo_ID, ProtocoloComando(Direcao.Frente, true), true, false);
} }
Alm.Valor = _Alarme.Valor; Alm.Valor = _Alarme.Valor;

View File

@ -111,55 +111,35 @@ namespace AgroBase.Models.Modules
{ {
case S_Code.sBLD: case S_Code.sBLD:
{ {
Modulo.MovMotor.Inicializado = Dados[2] == "1";
double rpm = 0; double rpm = 0;
double.TryParse(Dados[2].Replace(".", ","), out rpm); double.TryParse(Dados[3].Replace(".", ","), out rpm);
Modulo.MovMotor.RPM = rpm; Modulo.MovMotor.RPM = rpm;
double temperatura = 0; double temperatura = 0;
double.TryParse(Dados[3].Replace(".", ","), out temperatura); double.TryParse(Dados[4].Replace(".", ","), out temperatura);
temperatura = FuncoesMatematicas.CalcularTemperatura(temperatura, -1.038); temperatura = FuncoesMatematicas.CalcularTemperatura(temperatura, 0.0);
Modulo.MovMotor.Temperatura = temperatura; Modulo.MovMotor.Temperatura = temperatura;
double tensao = 0; double tensao = 0;
double.TryParse(Dados[4].Replace(".", ","), out tensao); double.TryParse(Dados[5].Replace(".", ","), out tensao);
Modulo.MovMotor.Tensao = tensao; Modulo.MovMotor.Tensao = tensao;
double corrente_max = 0; double corrente_max = 0;
double.TryParse(Dados[5].Replace(".", ","), out corrente_max); double.TryParse(Dados[6].Replace(".", ","), out corrente_max);
corrente_max = FuncoesMatematicas.Map(corrente_max, 15780, 16799, 0, 20.6);
Modulo.MovMotor.Corrente_Max = corrente_max; Modulo.MovMotor.Corrente_Max = corrente_max;
bool ligado = Dados[6] == "1"; bool ligado = Dados[7] == "1";
Modulo.MovMotor.Ligado = ligado; Modulo.MovMotor.Ligado = ligado;
int sentido = 0; int sentido = 0;
int.TryParse(Dados[7], out sentido); int.TryParse(Dados[8], out sentido);
Modulo.MovMotor.Sentido = (Sentido)sentido; Modulo.MovMotor.Sentido = (Sentido)sentido;
bool freio = Dados[8] == "1"; bool freio = Dados[9] == "1";
Modulo.MovMotor.Freio = freio; Modulo.MovMotor.Freio = freio;
int codAlarme = 0; int codAlarme = 0;
int.TryParse(Dados[9], out codAlarme); int.TryParse(Dados[10], out codAlarme);
Modulo.MovMotor.CodigoAlarme = codAlarme; Modulo.MovMotor.CodigoAlarme = codAlarme;
double tempDriver = 0; double tempDriver = 0;
double.TryParse(Dados[10].Replace(".", ","), out tempDriver); double.TryParse(Dados[11].Replace(".", ","), out tempDriver);
tempDriver = FuncoesMatematicas.CalcularTemperatura(tempDriver, 0);
Modulo.MovMotor.TemperaturaDriver = tempDriver; Modulo.MovMotor.TemperaturaDriver = tempDriver;
Modulo.MovMotor.LogGrafico.Add(new MvdMotorMOVSensorimanetoGrafico() RegistrarLog(Modulo);
{
Momento = DateTime.Now,
Modulo_ID = Modulo.Modulo_ID,
RPM_SP = Modulo.MovMotor.RPM_SP,
RPM = Modulo.MovMotor.RPM,
Corrente = Modulo.MovMotor.Corrente,
Sentido = Modulo.MovMotor.Sentido,
Temperatura = Modulo.MovMotor.Temperatura,
TemperaturaDriver = Modulo.MovMotor.TemperaturaDriver,
Tensao = Modulo.MovMotor.Tensao,
Velocidade = Modulo.MovMotor.VelocidadeInstantanea
});
if (Modulo.MovMotor.LogGrafico.Count > 60)
{
Modulo.MovMotor.LogGrafico.RemoveAt(0);
}
frmInstancial.frmAcompanhamento.AtualizaGrafico();
break; break;
} }
@ -361,6 +341,8 @@ namespace AgroBase.Models.Modules
{ {
string Protocolo = Modulo.ProtocoloAquisicaoDados(); string Protocolo = Modulo.ProtocoloAquisicaoDados();
Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(Modulo.Modulo_ID, Protocolo, false, false); Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(Modulo.Modulo_ID, Protocolo, false, false);
Modulo.DirMotor.ProtocoloAquisicaoDados();
} }
} }
@ -426,10 +408,10 @@ namespace AgroBase.Models.Modules
{ {
Config.Add(MovMotor.ProtocoloConfiguracao(Conectar)); Config.Add(MovMotor.ProtocoloConfiguracao(Conectar));
} }
if (DirMotor.Comandar) /*if (DirMotor.Comandar)
{ {
Config.Add(DirMotor.ProtocoloConfiguracao(Conectar)); Config.Add(DirMotor.ProtocoloConfiguracao(Conectar));
} }*/
if (!Conectar) if (!Conectar)
{ {
@ -666,8 +648,6 @@ namespace AgroBase.Models.Modules
public ConfiguracaoSentidoMotor ConfigSentidos { get; set; } public ConfiguracaoSentidoMotor ConfigSentidos { get; set; }
public List<FuncoesPinout> Funcoes { get; set; } public List<FuncoesPinout> Funcoes { get; set; }
public MKS057DModel DadosDriver { get; set; } = new MKS057DModel();
public static MvdMotorPasso CarregarParametrosIniciais(string Mod_ID, string _Endereco) public static MvdMotorPasso CarregarParametrosIniciais(string Mod_ID, string _Endereco)
{ {
@ -716,7 +696,8 @@ namespace AgroBase.Models.Modules
public string ProtocoloComando(Direcao Direcao) public string ProtocoloComando(Direcao Direcao)
{ {
if ((Inicializado || (MKS057DService.Iniciado && DadosDriver.Iniciado)) && Comandar && (Controlar)) bool mksIniciado = MKS057DService.DadosLeitura.Any(x => x.Iniciado && Convert.ToByte(Endereco.Replace("0x", ""), 16) == x.Endereco);
if ((Inicializado || mksIniciado) && Comandar && (Controlar))
{ {
Sentido_SP = Sentido_SP =
Direcao == Direcao.Cima ? ConfigSentidos.Direita : Direcao == Direcao.Cima ? ConfigSentidos.Direita :
@ -735,12 +716,13 @@ namespace AgroBase.Models.Modules
Angulo_SP.ToString() + SerialService.SplitParams + Angulo_SP.ToString() + SerialService.SplitParams +
Velocidade.ToString(); Velocidade.ToString();
if (MKS057DService.Iniciado && DadosDriver.Iniciado) if (mksIniciado)
{ {
int mx = Sentido_SP == Sentido.Antihorario ? -1 : 1; int mx = Sentido_SP == Sentido.Antihorario ? -1 : 1;
MKS057DService.EnviarComandoControle(new MKS057ComandoModel() MKS057DService.EnviarComandoControle(new MKS057ComandoModel()
{ {
Get = false,
Comando = Convert.ToByte("13"), Comando = Convert.ToByte("13"),
Endereco = Endereco, Endereco = Endereco,
Angulo = Angulo_SP * mx, Angulo = Angulo_SP * mx,
@ -760,13 +742,21 @@ namespace AgroBase.Models.Modules
public string ProtocoloAquisicaoDados() public string ProtocoloAquisicaoDados()
{ {
if (Inicializado) bool mksIniciado = MKS057DService.DadosLeitura.Any(x => x.Iniciado && Convert.ToByte(Endereco.Replace("0x", ""), 16) == x.Endereco);
if (Inicializado || mksIniciado)
{ {
string ProtocoloMotor = string ProtocoloMotor =
((int)F_Code.Req).ToString() + SerialService.SplitMessage + ((int)F_Code.Req).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams + ID + SerialService.SplitParams +
""; "";
if (mksIniciado)
{
MKS057DService.EnviarComandoRequisicao(Endereco).ConfigureAwait(false);
ProtocoloMotor = "";
}
return ProtocoloMotor; return ProtocoloMotor;
} }
return ""; return "";

View File

@ -660,7 +660,7 @@ namespace AgroBase.Models.Modules
if ( if (
Variaveis.OperacaoEmAndamento.Sensoriamento.SonarFrontal.DesvioNecessario && Variaveis.OperacaoEmAndamento.Sensoriamento.SonarFrontal.DesvioNecessario &&
Variaveis.OperacaoEmAndamento.Sensoriamento.SonarFrontal.DirecaoDesvio == Direcao.Parado && Variaveis.OperacaoEmAndamento.Sensoriamento.SonarFrontal.DirecaoDesvio == Direcao.Parado &&
Variaveis.OperacaoEmAndamento.DispMov.Dados.Conectado Variaveis.OperacaoEmAndamento.DispMvd.Dados.Conectado
) )
{ {
foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos) foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos)

View File

@ -29,8 +29,8 @@ namespace AgroBase.Models
{ {
this.Modo = Modo; this.Modo = Modo;
this.DispMov = Mov; //this.DispMov = Mov;
this.DispDir = Dir; //this.DispDir = Dir;
this.DispAtu = Atu; this.DispAtu = Atu;
if (Modo == ModoOperacao.MapaGPS) if (Modo == ModoOperacao.MapaGPS)
@ -91,8 +91,8 @@ namespace AgroBase.Models
public OperacaoManualModel OpManual { get; set; } = new OperacaoManualModel(); public OperacaoManualModel OpManual { get; set; } = new OperacaoManualModel();
public DispositivosService<MovimentacaoUnificadaModel> DispMvd { get; set; } public DispositivosService<MovimentacaoUnificadaModel> DispMvd { get; set; }
public DispositivosService<SensoriamentoModel> DispSen { get; set; } public DispositivosService<SensoriamentoModel> DispSen { get; set; }
public DispositivosService<MovimentacaoModel> DispMov { get; set; } /*public DispositivosService<MovimentacaoModel> DispMov { get; set; }
public DispositivosService<DirecionalModel> DispDir { get; set; } public DispositivosService<DirecionalModel> DispDir { get; set; }*/
public DispositivosService<AtuadorModel> DispAtu { get; set; } public DispositivosService<AtuadorModel> DispAtu { get; set; }
public MapasModel Mapa { get; set; } = new MapasModel(); public MapasModel Mapa { get; set; } = new MapasModel();
public OperacaoSensoriamentoLogModel Sensoriamento { get; set; } public OperacaoSensoriamentoLogModel Sensoriamento { get; set; }
@ -183,16 +183,16 @@ namespace AgroBase.Models
{ {
if (Modulo.Dispositivo == T_Code.Gps) if (Modulo.Dispositivo == T_Code.Gps)
{ {
Modulo.Conectado = GPSService.PortaGPS != null; Modulo.Conectado = GPSService.Iniciado;
} }
else else
{ {
Modulo.Conectado = !Modulo.Mandatorio || Variaveis.DispositivosConectados.Any(x => x.Dispositivo == Modulo.Dispositivo && x._Porta.IsOpen); Modulo.Conectado = Variaveis.DispositivosConectados.Any(x => x.Dispositivo == Modulo.Dispositivo && x._Porta.IsOpen);
} }
}); });
bool _modulosConectados = bool _modulosConectados =
(ModulosMandatorios.Where(x => x.Mandatorio).All(x => x.Conectado) && ModulosMandatorios.Any(x => x.Mandatorio)) || (ModulosMandatorios.Any(x => x.Mandatorio) && ModulosMandatorios.Where(x => x.Mandatorio).All(x => x.Conectado)) ||
(ModulosMandatorios.All(x => !x.Mandatorio) && ModulosMandatorios.Any(x => x.Conectado)); (ModulosMandatorios.All(x => !x.Mandatorio) && ModulosMandatorios.Any(x => x.Conectado));
@ -254,8 +254,8 @@ namespace AgroBase.Models
public static OperacaoModel CarregarParametrosOperacaoPadrao(ModoOperacao Modo) public static OperacaoModel CarregarParametrosOperacaoPadrao(ModoOperacao Modo)
{ {
var SenConectado = (DispositivosService<SensoriamentoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Sen); var SenConectado = (DispositivosService<SensoriamentoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Sen);
var MovConectado = (DispositivosService<MovimentacaoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mov); //var MovConectado = (DispositivosService<MovimentacaoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mov);
var DirConectado = (DispositivosService<DirecionalModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Dir); //var DirConectado = (DispositivosService<DirecionalModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Dir);
var AtuConectado = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Atu); var AtuConectado = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Atu);
var MvdConectado = (DispositivosService<MovimentacaoUnificadaModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mvd); var MvdConectado = (DispositivosService<MovimentacaoUnificadaModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mvd);
@ -268,8 +268,8 @@ namespace AgroBase.Models
TimestampInicio = 0, TimestampInicio = 0,
TimestampFim = 0, TimestampFim = 0,
DispAtu = AtuConectado, DispAtu = AtuConectado,
DispDir = DirConectado, /*DispDir = DirConectado,
DispMov = MovConectado, DispMov = MovConectado,*/
DispSen = SenConectado, DispSen = SenConectado,
DispMvd = MvdConectado, DispMvd = MvdConectado,
Sensoriamento = new OperacaoSensoriamentoLogModel(), Sensoriamento = new OperacaoSensoriamentoLogModel(),
@ -298,6 +298,13 @@ namespace AgroBase.Models
Comandos = new List<string>(), Comandos = new List<string>(),
UltimoComando = DateTime.Now UltimoComando = DateTime.Now
}, },
new OperacaoControleTipoModel()
{
Tipo = T_Code.Atu,
DelayEnvioComando = 10,
Comandos = new List<string>(),
UltimoComando = DateTime.Now
}
}, },
}; };
OperacaoCarregar.ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>() OperacaoCarregar.ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>()
@ -305,8 +312,18 @@ namespace AgroBase.Models
new OperacaoModulosMandatoriosModel() new OperacaoModulosMandatoriosModel()
{ {
Dispositivo = T_Code.Mvd, Dispositivo = T_Code.Mvd,
Mandatorio = true, Mandatorio = false
}, },
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Mks,
Mandatorio = false
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Atu,
Mandatorio = false
}
}; };
OperacaoCarregar.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>() OperacaoCarregar.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
{ {
@ -357,12 +374,12 @@ namespace AgroBase.Models
{ {
new OperacaoModulosMandatoriosModel() new OperacaoModulosMandatoriosModel()
{ {
Dispositivo = T_Code.Mov, Dispositivo = T_Code.Mvd,
Mandatorio = true, Mandatorio = true,
}, },
new OperacaoModulosMandatoriosModel() new OperacaoModulosMandatoriosModel()
{ {
Dispositivo = T_Code.Dir, Dispositivo = T_Code.Mks,
Mandatorio = true, Mandatorio = true,
}, },
new OperacaoModulosMandatoriosModel() new OperacaoModulosMandatoriosModel()
@ -379,6 +396,16 @@ namespace AgroBase.Models
{ {
Dispositivo = T_Code.Sen, Dispositivo = T_Code.Sen,
Mandatorio = false, Mandatorio = false,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Wit,
Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Pzm,
Mandatorio = true,
} }
}; };
OperacaoCarregar.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>() OperacaoCarregar.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
@ -883,11 +910,30 @@ namespace AgroBase.Models
{ {
if (DispSen != null && DispSen.Dados.Conectado) if (DispSen != null && DispSen.Dados.Conectado)
{ {
DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDOP").Comportamento = Variaveis.ComportamentoPorStatus(); var ledOP = DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDOP");
DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDAT").Comportamento.statusLED = Modo == ModoOperacao.MapaGPS ? StatusLED.Aceso : StatusLED.Apagado; var ledAT = DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDAT");
DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDMN").Comportamento.statusLED = Modo == ModoOperacao.Manual ? StatusLED.Aceso : StatusLED.Apagado; var ledMN = DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDMN");
DispSen.Dados.Sinaleiros.ForEach(x => DispSen.AdicionarMensagemFila(DispSen.Dados.Modulo_ID, x.ProtocoloComando(), true, false)); var comportamento = Variaveis.ComportamentoPorStatus();
if (ledOP.Comportamento != comportamento)
{
ledOP.Comportamento = comportamento;
DispSen.AdicionarMensagemFila(DispSen.Dados.Modulo_ID, ledOP.ProtocoloComando(), true, false);
}
var statusLedAt = Modo == ModoOperacao.MapaGPS ? StatusLED.Aceso : StatusLED.Apagado;
if (ledAT.Comportamento.statusLED != statusLedAt)
{
ledAT.Comportamento.statusLED = statusLedAt;
DispSen.AdicionarMensagemFila(DispSen.Dados.Modulo_ID, ledAT.ProtocoloComando(), true, false);
}
var statusLedMn = Modo == ModoOperacao.Manual ? StatusLED.Aceso : StatusLED.Apagado;
if (ledMN.Comportamento.statusLED != statusLedMn)
{
ledMN.Comportamento.statusLED = statusLedMn;
DispSen.AdicionarMensagemFila(DispSen.Dados.Modulo_ID, ledMN.ProtocoloComando(), true, false);
}
} }
} }

View File

@ -627,7 +627,7 @@ namespace AgroBase.Models
if (Adireita && !Aesquerda) if (Adireita && !Aesquerda)
{ {
//return DistanciaInicial + SonarModel.MargemSegurancaDesvio; //return DistanciaInicial + SonarModel.MargemSegurancaDesvio;
double deslocamento = (VariaveisEquipamento.Largura / 2) - DistanciaFinal + SonarModel.MargemSegurancaDesvio; double deslocamento = VariaveisEquipamento.LarguraDireita - DistanciaFinal + SonarModel.MargemSegurancaDesvio;
if (deslocamento < 0) if (deslocamento < 0)
{ {
deslocamento = 0; deslocamento = 0;
@ -637,7 +637,7 @@ namespace AgroBase.Models
else if (Aesquerda && !Adireita) else if (Aesquerda && !Adireita)
{ {
//return DistanciaFinal + SonarModel.MargemSegurancaDesvio + (VariaveisEquipamento.Largura / 2); //return DistanciaFinal + SonarModel.MargemSegurancaDesvio + (VariaveisEquipamento.Largura / 2);
double deslocamento = (VariaveisEquipamento.Largura / 2) + DistanciaFinal + SonarModel.MargemSegurancaDesvio; double deslocamento = VariaveisEquipamento.LarguraEsquerda + DistanciaFinal + SonarModel.MargemSegurancaDesvio;
if (deslocamento < 0) if (deslocamento < 0)
{ {
deslocamento = 0; deslocamento = 0;
@ -646,7 +646,7 @@ namespace AgroBase.Models
} }
else if (Adireita && Aesquerda) else if (Adireita && Aesquerda)
{ {
double deslocamento = (VariaveisEquipamento.Largura / 2) + DistanciaFinal + SonarModel.MargemSegurancaDesvio; double deslocamento = ((VariaveisEquipamento.LarguraEsquerda + VariaveisEquipamento.LarguraDireita) / 2) + DistanciaFinal + SonarModel.MargemSegurancaDesvio;
if (deslocamento < 0) if (deslocamento < 0)
{ {
deslocamento = 0; deslocamento = 0;
@ -666,7 +666,7 @@ namespace AgroBase.Models
if (Adireita && !Aesquerda) if (Adireita && !Aesquerda)
{ {
//return DistanciaInicial + SonarModel.MargemSegurancaDesvio + (VariaveisEquipamento.Largura / 2); //return DistanciaInicial + SonarModel.MargemSegurancaDesvio + (VariaveisEquipamento.Largura / 2);
double deslocamento = (VariaveisEquipamento.Largura / 2) + DistanciaInicial + SonarModel.MargemSegurancaDesvio; double deslocamento = VariaveisEquipamento.LarguraDireita + DistanciaInicial + SonarModel.MargemSegurancaDesvio;
if(deslocamento < 0) if(deslocamento < 0)
{ {
deslocamento = 0; deslocamento = 0;
@ -676,7 +676,7 @@ namespace AgroBase.Models
else if (Aesquerda && !Adireita) else if (Aesquerda && !Adireita)
{ {
//return DistanciaFinal + SonarModel.MargemSegurancaDesvio; //return DistanciaFinal + SonarModel.MargemSegurancaDesvio;
double deslocamento = (VariaveisEquipamento.Largura / 2) - DistanciaInicial + SonarModel.MargemSegurancaDesvio; double deslocamento = VariaveisEquipamento.LarguraEsquerda - DistanciaInicial + SonarModel.MargemSegurancaDesvio;
if (deslocamento < 0) if (deslocamento < 0)
{ {
deslocamento = 0; deslocamento = 0;
@ -685,7 +685,7 @@ namespace AgroBase.Models
} }
else if (Adireita && Aesquerda) else if (Adireita && Aesquerda)
{ {
double deslocamento = (VariaveisEquipamento.Largura / 2) + DistanciaInicial + SonarModel.MargemSegurancaDesvio; double deslocamento = ((VariaveisEquipamento.LarguraEsquerda + VariaveisEquipamento.LarguraDireita) / 2) + DistanciaInicial + SonarModel.MargemSegurancaDesvio;
if (deslocamento < 0) if (deslocamento < 0)
{ {
deslocamento = 0; deslocamento = 0;

View File

@ -11,6 +11,8 @@ using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using static AgroBase.Models.Enuns; using static AgroBase.Models.Enuns;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using Microsoft.Win32;
using System.Reflection;
namespace AgroBase.Models namespace AgroBase.Models
{ {
@ -116,9 +118,11 @@ namespace AgroBase.Models
public static class VariaveisEquipamento public static class VariaveisEquipamento
{ {
public static double Largura { get; } = 80; public static double LarguraEsquerda { get; } = 40;
public static double LarguraDireita { get; } = 40;
public static double DiametroRoda { get; set; } = 0.3556; public static double DiametroRoda { get; set; } = 0.3556;
public static double BateriaMax { get; set; } = 20; public static double BateriaMax { get; set; } = 20;
public static double ReducaoDirecional { get; set; } = 20.0;
public static LoRaParametrosModel ComunicacaoLoRaBaseConfig { get; set; } = new LoRaParametrosModel() public static LoRaParametrosModel ComunicacaoLoRaBaseConfig { get; set; } = new LoRaParametrosModel()
{ {
address = 0x01, address = 0x01,
@ -135,6 +139,18 @@ namespace AgroBase.Models
public static class FuncoesGlobais public static class FuncoesGlobais
{ {
public static void AddApplicationToStartup()
{
string appName = Assembly.GetExecutingAssembly().GetCustomAttribute<AssemblyTitleAttribute>()?.Title ?? "DefaultAppName";
string appPath = Application.ExecutablePath;
RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
if (registryKey.GetValue(appName) == null)
{
registryKey.SetValue(appName, appPath);
}
}
public static string TimestampToDate(double timestamp, string Formatacao = "HH:mm:ss.fff") public static string TimestampToDate(double timestamp, string Formatacao = "HH:mm:ss.fff")
{ {
// Converta o timestamp Unix para DateTime // Converta o timestamp Unix para DateTime

View File

@ -24,7 +24,7 @@ namespace AgroBase.Comum
public string _Nome { get; set; } public string _Nome { get; set; }
public string _Descricao { get; set; } public string _Descricao { get; set; }
public DateTime _CriadoEm { get; set; } public DateTime _CriadoEm { get; set; }
public SerialPort _Porta { get; set; } public SerialPort _Porta { get; set; } = null;
public GroupBox gpbItem { get; set; } public GroupBox gpbItem { get; set; }
public ComboBox cmbPorta { get; set; } public ComboBox cmbPorta { get; set; }
public ComboBox cmbBaudRate { get; set; } public ComboBox cmbBaudRate { get; set; }
@ -85,7 +85,7 @@ namespace AgroBase.Comum
if (!cmbPorta.Items.Contains(DispositivosTipo[i].PortaCOM)) if (!cmbPorta.Items.Contains(DispositivosTipo[i].PortaCOM))
{ {
string PortaCom = DispositivosTipo[i].PortaCOM; string PortaCom = DispositivosTipo[i].PortaCOM;
SerialPort _Porta = new SerialPort() { PortName = PortaCom }; var _Porta = new SerialPort() { PortName = PortaCom, BaudRate = 115200 };
try try
{ {
_Porta.Open(); _Porta.Open();

View File

@ -1,4 +1,7 @@
using AgroBase.Models; using AgroBase.Models;
using CefSharp.DevTools.Page;
using OpenTK.Audio.OpenAL;
using SharpDX.DirectInput;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO.Ports; using System.IO.Ports;
@ -28,13 +31,29 @@ namespace AgroBase.Services
foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos) foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos)
{ {
try
{
Addr = Convert.ToByte(Modulo.DirMotor.Endereco, 16);
}
catch
{
Console.WriteLine("Erro ao definir endereco");
}
if (DadosLeitura.Any(x => x.Endereco == Addr && x.Iniciado))
{
continue;
}
DataSended = Convert.ToByte("43"); DataSended = Convert.ToByte("43");
await SendRelevantData(QueryCommand[DataSended], Modulo.DirMotor.Endereco); await SendRelevantData(QueryCommand[DataSended]);
await Task.Delay(500); await Task.Delay(500);
//ProcessarDadosRecebidos(); //ProcessarDadosRecebidos();
if (!DadosLeitura.Any(x => x.Endereco == Addr))
Modulo.DirMotor.DadosDriver.Iniciado = !string.IsNullOrEmpty(HV) && !string.IsNullOrEmpty(FV); {
DadosLeitura.Add(new MKS057DModel() { Endereco = Addr });
}
if (string.IsNullOrEmpty(oldHV) && !string.IsNullOrEmpty(HV)) if (string.IsNullOrEmpty(oldHV) && !string.IsNullOrEmpty(HV))
{ {
@ -51,7 +70,7 @@ namespace AgroBase.Services
HV = oldHV; HV = oldHV;
FV = oldFV; FV = oldFV;
Iniciado = !string.IsNullOrEmpty(HV) && !string.IsNullOrEmpty(FV); Iniciado = DadosLeitura.Any(x => x.Iniciado);
if (Iniciado) if (Iniciado)
{ {
@ -240,20 +259,34 @@ namespace AgroBase.Services
public static string _VelocidadeRetornoOrigem { get; set; } = "2"; public static string _VelocidadeRetornoOrigem { get; set; } = "2";
public static string _TipoLimiteZero { get; set; } = "Definir"; public static string _TipoLimiteZero { get; set; } = "Definir";
public static string _Velocidade { get; set; } = "600"; public static Dictionary<byte, string> _Velocidade { get; set; } = new Dictionary<byte, string>();
public static ModosControle _ModoControle { get; set; } = ModosControle.AnguloAbsoluto; public static Dictionary<byte, ModosControle> _ModoControle { get; set; } = new Dictionary<byte, ModosControle>();
public static Sentido _Sentido { get; set; } = Sentido.Parado; public static Dictionary<byte, Sentido> _Sentido { get; set; } = new Dictionary<byte, Sentido>();
public static string _Angulo { get; set; } = "0"; public static Dictionary<byte, string> _Angulo { get; set; } = new Dictionary<byte, string>();
#endregion #endregion
public static MKS057DModel DadosLeitura = new MKS057DModel(); public static List<MKS057DModel> DadosLeitura = new List<MKS057DModel>();
public static bool EnvioLiberado = true; public static bool EnvioLiberado = true;
public static bool FilaEmEspera = false; public static bool FilaEmEspera = false;
public static bool Respondido = false; public static bool Respondido = false;
public static async Task EnviarComandoRequisicao(string Endereco)
{
await EnviarComandoControle(
new MKS057ComandoModel()
{
Get = true,
Comando = Convert.ToByte("1"),
Endereco = Endereco,
Angulo = -1,
AguardaResposta = true,
}
);
}
public static async Task EnviarComandoControle(MKS057ComandoModel Comando) public static async Task EnviarComandoControle(MKS057ComandoModel Comando)
{ {
while (!EnvioLiberado) while (!EnvioLiberado)
@ -266,13 +299,43 @@ namespace AgroBase.Services
FilaEmEspera = false; FilaEmEspera = false;
Respondido = false; Respondido = false;
_Angulo = ConverterAnguloParaValor(Comando.Angulo).ToString(); try
_Velocidade = Comando.Velocidade.ToString(); {
_ModoControle = Comando.ModoControle; Addr = Convert.ToByte(Comando.Endereco, 16);
_Sentido = Comando._Sentido; }
catch
{
Console.WriteLine("Erro ao definir endereco");
}
if (!Comando.Get)
{
if (!_Angulo.ContainsKey(Addr))
{
_Angulo.Add(Addr, "0");
}
if (!_Velocidade.ContainsKey(Addr))
{
_Velocidade.Add(Addr, "0");
}
if (!_ModoControle.ContainsKey(Addr))
{
_ModoControle.Add(Addr, Comando.ModoControle);
}
if (!_Sentido.ContainsKey(Addr))
{
_Sentido.Add(Addr, Comando._Sentido);
}
_Angulo[Addr] = ConverterAnguloParaValor(Comando.Angulo).ToString();
_Velocidade[Addr] = Comando.Velocidade.ToString();
_ModoControle[Addr] = Comando.ModoControle;
_Sentido[Addr] = Comando._Sentido;
}
DataSended = Comando.Comando; DataSended = Comando.Comando;
await SendRelevantData(QueryCommand[DataSended], Comando.Endereco); await SendRelevantData(QueryCommand[DataSended]);
DateTime Inicio = DateTime.Now; DateTime Inicio = DateTime.Now;
@ -289,23 +352,45 @@ namespace AgroBase.Services
public static int ConverterAnguloParaValor(double _angulo) public static int ConverterAnguloParaValor(double _angulo)
{ {
int val = 0; int val = 0;
double reducao = 20.0;
if (_ModoControle == ModosControle.Pulsos) if (_ModoControle[Addr] == ModosControle.Pulsos)
{ {
int.TryParse(_MStep, out int mstep); int.TryParse(_MStep, out int mstep);
double pulsos = mstep * 200; double pulsos = mstep * 200;
double relacao = (pulsos * reducao) / 360.0; double relacao = (pulsos * VariaveisEquipamento.ReducaoDirecional) / 360.0;
val = Convert.ToInt32(_angulo * relacao); val = Convert.ToInt32(_angulo * relacao);
} }
else else
{ {
val = Convert.ToInt32(_angulo * reducao); val = Convert.ToInt32(_angulo * VariaveisEquipamento.ReducaoDirecional);
} }
return val; return val;
} }
private static double ConverterPulsosParaAngulo(int pulsos)
{
double relacao = (pulsos * VariaveisEquipamento.ReducaoDirecional) / 360.0;
double angulo = pulsos * relacao;
return angulo;
}
private static void DefinirDadosModulo(MKS057DModel leitura)
{
if (Variaveis.OperacaoEmAndamento.DispMvd != null)
{
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => Convert.ToByte(x.DirMotor.Endereco, 16) == Addr);
if (Modulo != null)
{
Modulo.DirMotor.Angulo = ConverterPulsosParaAngulo(leitura.NumeroPulsos);
Modulo.DirMotor.Sentido = leitura.Direcao;
}
}
}
#region METODOS PRINCIPAIS #region METODOS PRINCIPAIS
private static void WriteByteToSerialPort(byte[] data, byte start, byte length) private static void WriteByteToSerialPort(byte[] data, byte start, byte length)
@ -335,7 +420,7 @@ namespace AgroBase.Services
{ {
SerialBuffer_RX = new byte[11] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // SerialBuffer_RX[0] Cabeçalho do quadro [1] Endereço do escravo [2] Número da instrução SerialBuffer_RX = new byte[11] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // SerialBuffer_RX[0] Cabeçalho do quadro [1] Endereço do escravo [2] Número da instrução
Data_Number = _PortaMKS.BytesToRead; // Número de bytes recebidos Data_Number = _PortaMKS.BytesToRead; // Número de bytes recebidos
if (_PortaMKS.BytesToRead > 0) if (_PortaMKS.BytesToRead > 0 && _PortaMKS.BytesToRead <= SerialBuffer_RX.Length)
{ {
for (int a = 0; a <= Data_Number - 1; a++) for (int a = 0; a <= Data_Number - 1; a++)
{ {
@ -345,7 +430,7 @@ namespace AgroBase.Services
} }
} }
private static async Task SendRelevantData(int data, string slaveAddress) // Verifica o tipo de dados e envia private static async Task SendRelevantData(int data) // Verifica o tipo de dados e envia
{ {
ushort SpeedText; ushort SpeedText;
ushort SpeedText2; ushort SpeedText2;
@ -365,14 +450,6 @@ namespace AgroBase.Services
byte HomeTrig = 0x00, HomeDir = 0x00, EndLimit = 0x00; byte HomeTrig = 0x00, HomeDir = 0x00, EndLimit = 0x00;
byte Mode_0 = 0x00, Set_0 = 0x00, Speed_0 = 0x00, Dir_0 = 0x00; byte Mode_0 = 0x00, Set_0 = 0x00, Speed_0 = 0x00, Dir_0 = 0x00;
try
{
Addr = Convert.ToByte(slaveAddress, 16);
}
catch
{
Console.WriteLine("Erro ao definir endereco");
}
if (Addr <= 0xff && Addr >= 0x00) if (Addr <= 0xff && Addr >= 0x00)
{ {
if (DataSended < 6 || DataSended == 37 || DataSended == 39 || DataSended == 40 || DataSended == 43 || DataSended == 46) if (DataSended < 6 || DataSended == 37 || DataSended == 39 || DataSended == 40 || DataSended == 43 || DataSended == 46)
@ -498,25 +575,25 @@ namespace AgroBase.Services
{ {
try try
{ {
SpeedText2 = Convert.ToUInt16(_Velocidade, 10); SpeedText2 = Convert.ToUInt16(_Velocidade[Addr], 10);
Speed_2 = BitConverter.GetBytes(SpeedText2); Speed_2 = BitConverter.GetBytes(SpeedText2);
if (_ModoControle == ModosControle.Pulsos) // Se o controle for através de pulsos if (_ModoControle[Addr] == ModosControle.Pulsos) // Se o controle for através de pulsos
{ {
try try
{ {
PulseText = Convert.ToUInt32(_Angulo, 10); PulseText = Convert.ToUInt32(_Angulo[Addr], 10);
Pulse = BitConverter.GetBytes(PulseText); Pulse = BitConverter.GetBytes(PulseText);
if (SpeedText2 <= 3000 && SpeedText2 >= 1) if (SpeedText2 <= 3000 && SpeedText2 >= 1)
{ {
if (PulseText <= 4294967295 && PulseText >= 1) if (PulseText <= 4294967295 && PulseText >= 1)
{ {
if (_Sentido == Sentido.Antihorario) if (_Sentido[Addr] == Sentido.Antihorario)
{ {
//Speed2 = Convert.ToByte(SpeedText2 | RWD); //Speed2 = Convert.ToByte(SpeedText2 | RWD);
Speed_2[1] |= RWD; Speed_2[1] |= RWD;
//Pulse = Convert.ToByte(PulseText); //Pulse = Convert.ToByte(PulseText);
} }
else if (_Sentido == Sentido.Horario) else if (_Sentido[Addr] == Sentido.Horario)
{ {
//Speed2 = Convert.ToByte(SpeedText2 | FWD); //Speed2 = Convert.ToByte(SpeedText2 | FWD);
Speed_2[1] |= FWD; Speed_2[1] |= FWD;
@ -541,29 +618,29 @@ namespace AgroBase.Services
Console.WriteLine("Erro ao definir controle Pulses"); Console.WriteLine("Erro ao definir controle Pulses");
} }
} }
else if (_ModoControle == ModosControle.AnguloRelativo) else if (_ModoControle[Addr] == ModosControle.AnguloRelativo)
{ {
DataSended = 44; DataSended = 44;
data = 0xF4; data = 0xF4;
try try
{ {
Text_BUF = _Angulo; Text_BUF = _Angulo[Addr];
if (Text_BUF.Length > 1) if (Text_BUF.Length > 1)
{ {
if (Text_BUF[0] == '0' && (Text_BUF[1] == 'x' || Text_BUF[1] == 'X')) if (Text_BUF[0] == '0' && (Text_BUF[1] == 'x' || Text_BUF[1] == 'X'))
{ {
RelAxisText = Convert.ToInt32(_Angulo, 16); RelAxisText = Convert.ToInt32(_Angulo[Addr], 16);
RelAxis = BitConverter.GetBytes(RelAxisText); RelAxis = BitConverter.GetBytes(RelAxisText);
} }
else else
{ {
RelAxisText = Convert.ToInt32(_Angulo, 10); RelAxisText = Convert.ToInt32(_Angulo[Addr], 10);
RelAxis = BitConverter.GetBytes(RelAxisText * 16384 / 360); RelAxis = BitConverter.GetBytes(RelAxisText * 16384 / 360);
} }
} }
else else
{ {
RelAxisText = Convert.ToInt32(_Angulo, 10); RelAxisText = Convert.ToInt32(_Angulo[Addr], 10);
RelAxis = BitConverter.GetBytes(RelAxisText * 16384 / 360); RelAxis = BitConverter.GetBytes(RelAxisText * 16384 / 360);
} }
if (SpeedText2 <= 3000 && SpeedText2 >= 1) if (SpeedText2 <= 3000 && SpeedText2 >= 1)
@ -583,29 +660,29 @@ namespace AgroBase.Services
Console.WriteLine("Erro ao definir controle RelAxis"); Console.WriteLine("Erro ao definir controle RelAxis");
} }
} }
else if (_ModoControle == ModosControle.AnguloAbsoluto) else if (_ModoControle[Addr] == ModosControle.AnguloAbsoluto)
{ {
DataSended = 45; DataSended = 45;
data = 0xF5; data = 0xF5;
try try
{ {
Text_BUF = _Angulo; Text_BUF = _Angulo[Addr];
if (Text_BUF.Length > 1) if (Text_BUF.Length > 1)
{ {
if (Text_BUF[0] == '0' && (Text_BUF[1] == 'x' || Text_BUF[1] == 'X')) if (Text_BUF[0] == '0' && (Text_BUF[1] == 'x' || Text_BUF[1] == 'X'))
{ {
AbsAxisText = Convert.ToInt32(_Angulo, 16); AbsAxisText = Convert.ToInt32(_Angulo[Addr], 16);
AbsAxis = BitConverter.GetBytes(AbsAxisText); AbsAxis = BitConverter.GetBytes(AbsAxisText);
} }
else else
{ {
AbsAxisText = Convert.ToInt32(_Angulo, 10); AbsAxisText = Convert.ToInt32(_Angulo[Addr], 10);
AbsAxis = BitConverter.GetBytes(AbsAxisText * 16384 / 360); AbsAxis = BitConverter.GetBytes(AbsAxisText * 16384 / 360);
} }
} }
else else
{ {
AbsAxisText = Convert.ToInt32(_Angulo, 10); AbsAxisText = Convert.ToInt32(_Angulo[Addr], 10);
AbsAxis = BitConverter.GetBytes(AbsAxisText * 16384 / 360); AbsAxis = BitConverter.GetBytes(AbsAxisText * 16384 / 360);
} }
if (SpeedText2 <= 3000 && SpeedText2 >= 1) if (SpeedText2 <= 3000 && SpeedText2 >= 1)
@ -1143,15 +1220,15 @@ namespace AgroBase.Services
if (DataSended == 38) //(38 Parar modo de controle de posição do motor) if (DataSended == 38) //(38 Parar modo de controle de posição do motor)
{ {
if (_ModoControle == ModosControle.Pulsos) if (_ModoControle[Addr] == ModosControle.Pulsos)
{ {
} }
else if (_ModoControle == ModosControle.AnguloRelativo) else if (_ModoControle[Addr] == ModosControle.AnguloRelativo)
{ {
data = 0xF4; data = 0xF4;
} }
else if (_ModoControle == ModosControle.AnguloAbsoluto) else if (_ModoControle[Addr] == ModosControle.AnguloAbsoluto)
{ {
data = 0xF5; data = 0xF5;
} }
@ -1294,6 +1371,17 @@ namespace AgroBase.Services
{ {
rxDisplay(); //计算rCHK rxDisplay(); //计算rCHK
byte addr = SerialBuffer_RX[1];
MKS057DModel leitura = DadosLeitura.FirstOrDefault(x => x.Endereco == addr);
if (leitura == null)
{
leitura = new MKS057DModel()
{
Endereco = addr,
};
DadosLeitura.Add(leitura);
}
if ((byte)rCHK == SerialBuffer_RX[Data_Number - 1]) if ((byte)rCHK == SerialBuffer_RX[Data_Number - 1])
{ {
switch (SerialBuffer_RX[2]) switch (SerialBuffer_RX[2])
@ -1301,18 +1389,18 @@ namespace AgroBase.Services
case 0x30: // 0 Encoder de valor em modo posicional FB + 01 + 30 + int32_t valor posicional + uint16_t valor do encoder + CRC case 0x30: // 0 Encoder de valor em modo posicional FB + 01 + 30 + int32_t valor posicional + uint16_t valor do encoder + CRC
if (ModoLeitura == "Hex") // Hexadecimal if (ModoLeitura == "Hex") // Hexadecimal
{ {
DadosLeitura.ErroCarregado_Hex = ""; leitura.ErroCarregado_Hex = "";
DadosLeitura.ErroCarregado_Hex += "0x"; leitura.ErroCarregado_Hex += "0x";
for (int a = 3; a < 9; a++) for (int a = 3; a < 9; a++)
{ {
str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper(); str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper();
DadosLeitura.ErroCarregado_Hex += str.Length == 1 ? "0" + str : str; leitura.ErroCarregado_Hex += str.Length == 1 ? "0" + str : str;
} }
} }
else if (ModoLeitura == "Decimal") // Decimal else if (ModoLeitura == "Decimal") // Decimal
{ {
DadosLeitura.ErroCarregado = 0; leitura.ErroCarregado = 0;
word32 = "0"; word32 = "0";
for (int a = 3; a < 7; a++) for (int a = 3; a < 7; a++)
@ -1332,7 +1420,7 @@ namespace AgroBase.Services
str = Convert.ToString(data32 * 360 + data16 * 360 / 16384, 10); str = Convert.ToString(data32 * 360 + data16 * 360 / 16384, 10);
double.TryParse(str, out double val); double.TryParse(str, out double val);
DadosLeitura.ErroCarregado = val; leitura.ErroCarregado = val;
} }
else else
{ {
@ -1343,18 +1431,18 @@ namespace AgroBase.Services
case 0x33: // 1 Contagem acumulada de pulsos FB + 01 + 33 + int32_t contagem acumulada de pulsos + CRC case 0x33: // 1 Contagem acumulada de pulsos FB + 01 + 33 + int32_t contagem acumulada de pulsos + CRC
if (ModoLeitura == "Hex") // Hexadecimal if (ModoLeitura == "Hex") // Hexadecimal
{ {
DadosLeitura.NumeroPulsos_Hex = ""; leitura.NumeroPulsos_Hex = "";
DadosLeitura.NumeroPulsos_Hex += "0x"; leitura.NumeroPulsos_Hex += "0x";
for (int a = 3; a < 7; a++) for (int a = 3; a < 7; a++)
{ {
str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper(); str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper();
DadosLeitura.NumeroPulsos_Hex += str.Length == 1 ? "0" + str : str; leitura.NumeroPulsos_Hex += str.Length == 1 ? "0" + str : str;
} }
} }
else if (ModoLeitura == "Decimal") // Decimal else if (ModoLeitura == "Decimal") // Decimal
{ {
DadosLeitura.NumeroPulsos = 0; leitura.NumeroPulsos = 0;
word32 = "0"; word32 = "0";
for (int a = 3; a < 7; a++) for (int a = 3; a < 7; a++)
@ -1366,7 +1454,9 @@ namespace AgroBase.Services
str = Convert.ToString(data32, 10); str = Convert.ToString(data32, 10);
int.TryParse(str, out int val); int.TryParse(str, out int val);
DadosLeitura.NumeroPulsos = val; leitura.NumeroPulsos = val;
DefinirDadosModulo(leitura);
} }
else else
{ {
@ -1377,17 +1467,17 @@ namespace AgroBase.Services
case 0x39: // 2 Erro de ângulo de posição FB + 01 + 39 + int32_t erro de ângulo de posição + CRC case 0x39: // 2 Erro de ângulo de posição FB + 01 + 39 + int32_t erro de ângulo de posição + CRC
if (ModoLeitura == "Hex") // Hexadecimal if (ModoLeitura == "Hex") // Hexadecimal
{ {
DadosLeitura.ErroAngulo_Hex = ""; leitura.ErroAngulo_Hex = "";
DadosLeitura.ErroAngulo_Hex += "0x"; leitura.ErroAngulo_Hex += "0x";
for (int a = 3; a < 7; a++) for (int a = 3; a < 7; a++)
{ {
str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper(); str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper();
DadosLeitura.ErroAngulo_Hex += str.Length == 1 ? "0" + str : str; leitura.ErroAngulo_Hex += str.Length == 1 ? "0" + str : str;
} }
} }
else if (ModoLeitura == "Decimal") // Decimal else if (ModoLeitura == "Decimal") // Decimal
{ {
DadosLeitura.ErroAngulo = 0; leitura.ErroAngulo = 0;
word32 = "0"; word32 = "0";
for (int a = 3; a < 7; a++) for (int a = 3; a < 7; a++)
{ {
@ -1398,7 +1488,7 @@ namespace AgroBase.Services
str = Convert.ToString(data32, 10); str = Convert.ToString(data32, 10);
double.TryParse(str, out double val); double.TryParse(str, out double val);
DadosLeitura.ErroAngulo = val; leitura.ErroAngulo = val;
} }
else else
{ {
@ -1409,8 +1499,8 @@ namespace AgroBase.Services
case 0x3A: // 3 Estado de habilitação da placa de acionamento FB + 01 + 3A + uint8_t estado de habilitação do loop fechado da placa de acionamento + CRC case 0x3A: // 3 Estado de habilitação da placa de acionamento FB + 01 + 3A + uint8_t estado de habilitação do loop fechado da placa de acionamento + CRC
// Habilitado: 01 // Habilitado: 01
// Desabilitado: 00 // Desabilitado: 00
DadosLeitura.StatusDriver = SerialBuffer_RX[3] == EN_STATE_ON ? Estado.Ligado : SerialBuffer_RX[3] == EN_STATE_OFF ? Estado.Desligado : Estado.Reset; leitura.StatusDriver = SerialBuffer_RX[3] == EN_STATE_ON ? Estado.Ligado : SerialBuffer_RX[3] == EN_STATE_OFF ? Estado.Desligado : Estado.Reset;
if (DadosLeitura.StatusDriver == Estado.Reset) if (leitura.StatusDriver == Estado.Reset)
{ {
MessageBox.Show("Erro ao ler dados de driver habilitado"); // Erro de dados MessageBox.Show("Erro ao ler dados de driver habilitado"); // Erro de dados
} }
@ -1422,15 +1512,15 @@ namespace AgroBase.Services
// Falha ao retornar para a posição inicial: 02 // Falha ao retornar para a posição inicial: 02
if (SerialBuffer_RX[3] == 0x00) if (SerialBuffer_RX[3] == 0x00)
{ {
DadosLeitura.StatusModoLimiteZero = StatusComando.Retornando; // Texto1 de retorno para zero leitura.StatusModoLimiteZero = StatusComando.Retornando; // Texto1 de retorno para zero
} }
else if (SerialBuffer_RX[3] == 0x01) else if (SerialBuffer_RX[3] == 0x01)
{ {
DadosLeitura.StatusModoLimiteZero = StatusComando.Sucesso; // Texto2 de retorno para zero leitura.StatusModoLimiteZero = StatusComando.Sucesso; // Texto2 de retorno para zero
} }
else if (SerialBuffer_RX[3] == 0x02) else if (SerialBuffer_RX[3] == 0x02)
{ {
DadosLeitura.StatusModoLimiteZero = StatusComando.Falha; // Texto3 de retorno para zero leitura.StatusModoLimiteZero = StatusComando.Falha; // Texto3 de retorno para zero
} }
break; break;
@ -1439,15 +1529,15 @@ namespace AgroBase.Services
// Não bloqueado: 00 // Não bloqueado: 00
if (SerialBuffer_RX[3] == 0x01) if (SerialBuffer_RX[3] == 0x01)
{ {
DadosLeitura.StatusTravaMotor = Estado.Ligado; // Texto1 de bloqueio leitura.StatusTravaMotor = Estado.Ligado; // Texto1 de bloqueio
} }
else if (SerialBuffer_RX[3] == 0x00) else if (SerialBuffer_RX[3] == 0x00)
{ {
DadosLeitura.StatusTravaMotor = Estado.Desligado; // Texto2 de bloqueio leitura.StatusTravaMotor = Estado.Desligado; // Texto2 de bloqueio
} }
else else
{ {
DadosLeitura.StatusTravaMotor = Estado.Reset; leitura.StatusTravaMotor = Estado.Reset;
} }
break; break;
@ -1456,11 +1546,11 @@ namespace AgroBase.Services
// Falha no desbloqueio: retorna FB 01 3D 00 39 // Falha no desbloqueio: retorna FB 01 3D 00 39
if (SerialBuffer_RX[3] == 0x01) if (SerialBuffer_RX[3] == 0x01)
{ {
DadosLeitura.StatusBloqueioMotor = StatusComando.Sucesso; // Texto1 de bloqueio leitura.StatusBloqueioMotor = StatusComando.Sucesso; // Texto1 de bloqueio
} }
else if (SerialBuffer_RX[3] == 0x00) else if (SerialBuffer_RX[3] == 0x00)
{ {
DadosLeitura.StatusBloqueioMotor = StatusComando.Falha; // Texto2 de bloqueio leitura.StatusBloqueioMotor = StatusComando.Falha; // Texto2 de bloqueio
} }
break; break;
@ -1469,48 +1559,52 @@ namespace AgroBase.Services
{ {
if (SerialBuffer_RX[3] == 0x01) // Sucesso if (SerialBuffer_RX[3] == 0x01) // Sucesso
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Completo; // Texto1 de movimento leitura.StatusMovimentoMotor = StatusComando.Completo; // Texto1 de movimento
} }
else if (SerialBuffer_RX[3] == 0x00) // Falha else if (SerialBuffer_RX[3] == 0x00) // Falha
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; // Texto3 de movimento leitura.StatusMovimentoMotor = StatusComando.Falha; // Texto3 de movimento
break; break;
} }
else else
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Erro; // Texto1 de erro de comunicação leitura.StatusMovimentoMotor = StatusComando.Erro; // Texto1 de erro de comunicação
break; break;
} }
double.TryParse(_Velocidade, out double vel); double.TryParse(_Velocidade[addr], out double vel);
double.TryParse(Start_ACC[0].ToString(), out double acl); double.TryParse(Start_ACC[0].ToString(), out double acl);
DadosLeitura.Direcao = _Sentido; leitura.Direcao = _Sentido[addr];
DadosLeitura.Velocidade = vel; leitura.Velocidade = vel;
DadosLeitura.Aceleracao = acl; leitura.Aceleracao = acl;
DefinirDadosModulo(leitura);
} }
else if (DataSended == 9) else if (DataSended == 9)
{ {
if (SerialBuffer_RX[3] == 0x02) // Concluído if (SerialBuffer_RX[3] == 0x02) // Concluído
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; // Texto2 de parada leitura.StatusMovimentoMotor = StatusComando.Sucesso; // Texto2 de parada
} }
else if (SerialBuffer_RX[3] == 0x01) // Iniciado else if (SerialBuffer_RX[3] == 0x01) // Iniciado
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Parando; // Texto4 de parada leitura.StatusMovimentoMotor = StatusComando.Parando; // Texto4 de parada
} }
else if (SerialBuffer_RX[3] == 0x00) // Falha else if (SerialBuffer_RX[3] == 0x00) // Falha
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; // Texto3 de parada leitura.StatusMovimentoMotor = StatusComando.Falha; // Texto3 de parada
break; break;
} }
else else
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Erro; // Texto1 de erro de comunicação leitura.StatusMovimentoMotor = StatusComando.Erro; // Texto1 de erro de comunicação
break; break;
} }
double.TryParse(Stop_ACC[0].ToString(), out double acl); double.TryParse(Stop_ACC[0].ToString(), out double acl);
DadosLeitura.Direcao = Sentido.Parado; // Texto3 de direção leitura.Direcao = Sentido.Parado; // Texto3 de direção
DadosLeitura.Velocidade = 0; // Velocidade alvo zero leitura.Velocidade = 0; // Velocidade alvo zero
DadosLeitura.Aceleracao = acl; // Aceleração alvo de parada leitura.Aceleracao = acl; // Aceleração alvo de parada
DefinirDadosModulo(leitura);
} }
break; break;
@ -1519,54 +1613,58 @@ namespace AgroBase.Services
{ {
if (SerialBuffer_RX[3] == 0x02) // Concluído if (SerialBuffer_RX[3] == 0x02) // Concluído
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; // Texto2 de movimento leitura.StatusMovimentoMotor = StatusComando.Sucesso; // Texto2 de movimento
break; break;
} }
else if (SerialBuffer_RX[3] == 0x01) // Iniciado else if (SerialBuffer_RX[3] == 0x01) // Iniciado
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Movendo; // Texto4 de movimento leitura.StatusMovimentoMotor = StatusComando.Movendo; // Texto4 de movimento
} }
else if (SerialBuffer_RX[3] == 0x00) // Falha else if (SerialBuffer_RX[3] == 0x00) // Falha
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; // Texto3 de movimento leitura.StatusMovimentoMotor = StatusComando.Falha; // Texto3 de movimento
break; break;
} }
else else
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Erro; // Texto1 de erro de comunicação leitura.StatusMovimentoMotor = StatusComando.Erro; // Texto1 de erro de comunicação
break; break;
} }
DadosLeitura.Direcao = _Sentido; leitura.Direcao = _Sentido[addr];
double.TryParse(_Velocidade, out double vel); double.TryParse(_Velocidade[addr], out double vel);
double.TryParse(Start_ACC[0].ToString(), out double acl); double.TryParse(Start_ACC[0].ToString(), out double acl);
DadosLeitura.Velocidade = vel; // Velocidade alvo leitura.Velocidade = vel; // Velocidade alvo
DadosLeitura.Aceleracao = acl; // Aceleração alvo leitura.Aceleracao = acl; // Aceleração alvo
DefinirDadosModulo(leitura);
} }
else if (DataSended == 38) else if (DataSended == 38)
{ {
if (SerialBuffer_RX[3] == 0x02) // Concluído if (SerialBuffer_RX[3] == 0x02) // Concluído
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; // Texto2 de parada leitura.StatusMovimentoMotor = StatusComando.Sucesso; // Texto2 de parada
break; break;
} }
else if (SerialBuffer_RX[3] == 0x01) // Iniciado else if (SerialBuffer_RX[3] == 0x01) // Iniciado
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Parando; // Texto4 de parada leitura.StatusMovimentoMotor = StatusComando.Parando; // Texto4 de parada
} }
else if (SerialBuffer_RX[3] == 0x00) // Falha else if (SerialBuffer_RX[3] == 0x00) // Falha
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; // Texto3 de parada leitura.StatusMovimentoMotor = StatusComando.Falha; // Texto3 de parada
break; break;
} }
else else
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Erro; // Texto1 de erro de comunicação leitura.StatusMovimentoMotor = StatusComando.Erro; // Texto1 de erro de comunicação
break; break;
} }
DadosLeitura.Direcao = Sentido.Parado; // Texto3 de direção leitura.Direcao = Sentido.Parado; // Texto3 de direção
DadosLeitura.Velocidade = 0; // Velocidade alvo zero leitura.Velocidade = 0; // Velocidade alvo zero
double.TryParse(Stop_ACC[0].ToString(), out double acl); double.TryParse(Stop_ACC[0].ToString(), out double acl);
DadosLeitura.Aceleracao = acl; // Aceleração alvo de parada leitura.Aceleracao = acl; // Aceleração alvo de parada
DefinirDadosModulo(leitura);
} }
break; break;
@ -1575,53 +1673,55 @@ namespace AgroBase.Services
{ {
if (SerialBuffer_RX[3] == 0x02) // Completo if (SerialBuffer_RX[3] == 0x02) // Completo
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; leitura.StatusMovimentoMotor = StatusComando.Sucesso;
break; break;
} }
else if (SerialBuffer_RX[3] == 0x01) // Iniciar else if (SerialBuffer_RX[3] == 0x01) // Iniciar
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Movendo; leitura.StatusMovimentoMotor = StatusComando.Movendo;
} }
else if (SerialBuffer_RX[3] == 0x00) // Falha else if (SerialBuffer_RX[3] == 0x00) // Falha
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; leitura.StatusMovimentoMotor = StatusComando.Falha;
break; break;
} }
else else
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Erro; leitura.StatusMovimentoMotor = StatusComando.Erro;
break; break;
} }
double.TryParse(_Velocidade, out double vel); double.TryParse(_Velocidade[addr], out double vel);
double.TryParse(Start_ACC[0].ToString(), out double acl); double.TryParse(Start_ACC[0].ToString(), out double acl);
DadosLeitura.Velocidade = vel; // Velocidade alvo leitura.Velocidade = vel; // Velocidade alvo
DadosLeitura.Aceleracao = acl; // Aceleração alvo leitura.Aceleracao = acl; // Aceleração alvo
} }
else if (DataSended == 38) else if (DataSended == 38)
{ {
if (SerialBuffer_RX[3] == 0x02) // Completo if (SerialBuffer_RX[3] == 0x02) // Completo
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; leitura.StatusMovimentoMotor = StatusComando.Sucesso;
break; break;
} }
else if (SerialBuffer_RX[3] == 0x01) // Iniciar else if (SerialBuffer_RX[3] == 0x01) // Iniciar
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Parando; leitura.StatusMovimentoMotor = StatusComando.Parando;
} }
else if (SerialBuffer_RX[3] == 0x00) // Falha else if (SerialBuffer_RX[3] == 0x00) // Falha
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; leitura.StatusMovimentoMotor = StatusComando.Falha;
break; break;
} }
else else
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Erro; leitura.StatusMovimentoMotor = StatusComando.Erro;
break; break;
} }
double.TryParse(Start_ACC[0].ToString(), out double acl); double.TryParse(Start_ACC[0].ToString(), out double acl);
DadosLeitura.Direcao = Sentido.Parado; leitura.Direcao = Sentido.Parado;
DadosLeitura.Velocidade = 0; leitura.Velocidade = 0;
DadosLeitura.Aceleracao = acl; leitura.Aceleracao = acl;
DefinirDadosModulo(leitura);
} }
break; break;
@ -1630,72 +1730,74 @@ namespace AgroBase.Services
{ {
if (SerialBuffer_RX[3] == 0x02) // Completo if (SerialBuffer_RX[3] == 0x02) // Completo
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; leitura.StatusMovimentoMotor = StatusComando.Sucesso;
break; break;
} }
else if (SerialBuffer_RX[3] == 0x01) // Iniciar else if (SerialBuffer_RX[3] == 0x01) // Iniciar
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Movendo; leitura.StatusMovimentoMotor = StatusComando.Movendo;
} }
else if (SerialBuffer_RX[3] == 0x00) // Falha else if (SerialBuffer_RX[3] == 0x00) // Falha
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; leitura.StatusMovimentoMotor = StatusComando.Falha;
break; break;
} }
else else
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Erro; leitura.StatusMovimentoMotor = StatusComando.Erro;
break; break;
} }
double.TryParse(_Velocidade, out double vel); double.TryParse(_Velocidade[addr], out double vel);
double.TryParse(Start_ACC[0].ToString(), out double acl); double.TryParse(Start_ACC[0].ToString(), out double acl);
DadosLeitura.Velocidade = vel; // Velocidade alvo leitura.Velocidade = vel; // Velocidade alvo
DadosLeitura.Aceleracao = acl; // Aceleração alvo leitura.Aceleracao = acl; // Aceleração alvo
} }
else if (DataSended == 38) else if (DataSended == 38)
{ {
if (SerialBuffer_RX[3] == 0x02) // Completo if (SerialBuffer_RX[3] == 0x02) // Completo
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; leitura.StatusMovimentoMotor = StatusComando.Sucesso;
break; break;
} }
else if (SerialBuffer_RX[3] == 0x01) // Iniciar else if (SerialBuffer_RX[3] == 0x01) // Iniciar
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Parando; leitura.StatusMovimentoMotor = StatusComando.Parando;
} }
else if (SerialBuffer_RX[3] == 0x00) // Falha else if (SerialBuffer_RX[3] == 0x00) // Falha
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; leitura.StatusMovimentoMotor = StatusComando.Falha;
break; break;
} }
else else
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Erro; leitura.StatusMovimentoMotor = StatusComando.Erro;
break; break;
} }
DadosLeitura.Direcao = Sentido.Parado; leitura.Direcao = Sentido.Parado;
double.TryParse(_Velocidade, out double vel); double.TryParse(_Velocidade[addr], out double vel);
double.TryParse(Start_ACC[0].ToString(), out double acl); double.TryParse(Start_ACC[0].ToString(), out double acl);
DadosLeitura.Velocidade = vel; // Velocidade alvo leitura.Velocidade = vel; // Velocidade alvo
DadosLeitura.Aceleracao = acl; // Aceleração alvo leitura.Aceleracao = acl; // Aceleração alvo
DefinirDadosModulo(leitura);
} }
break; break;
case 0x31:// 39 Valor do Codificador Incremental FB + 01 + 31 + Valor do Codificador uint48_t + CRC case 0x31:// 39 Valor do Codificador Incremental FB + 01 + 31 + Valor do Codificador uint48_t + CRC
if (ModoLeitura == "Hex") // Hexadecimal if (ModoLeitura == "Hex") // Hexadecimal
{ {
DadosLeitura.ErroCarregado_Hex = ""; leitura.ErroCarregado_Hex = "";
DadosLeitura.ErroCarregado_Hex += "0x"; leitura.ErroCarregado_Hex += "0x";
for (int a = 3; a < 9; a++) for (int a = 3; a < 9; a++)
{ {
str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper(); str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper();
DadosLeitura.ErroCarregado_Hex += str.Length == 1 ? "0" + str : str; leitura.ErroCarregado_Hex += str.Length == 1 ? "0" + str : str;
} }
} }
else if (ModoLeitura == "Decimal") // Decimal else if (ModoLeitura == "Decimal") // Decimal
{ {
DadosLeitura.ErroCarregado = 0; leitura.ErroCarregado = 0;
word64 = "0"; word64 = "0";
for (int a = 3; a < 9; a++) for (int a = 3; a < 9; a++)
@ -1715,7 +1817,7 @@ namespace AgroBase.Services
str = Convert.ToString(data64 * 360 / 16384, 10); str = Convert.ToString(data64 * 360 / 16384, 10);
double.TryParse(str, out double val); double.TryParse(str, out double val);
DadosLeitura.ErroCarregado = val; leitura.ErroCarregado = val;
} }
else else
{ {
@ -1726,17 +1828,17 @@ namespace AgroBase.Services
case 0x32:// 40 Velocidade Atual do Motor case 0x32:// 40 Velocidade Atual do Motor
if (ModoLeitura == "Hex") // Hexadecimal if (ModoLeitura == "Hex") // Hexadecimal
{ {
DadosLeitura.RPM_Hex = ""; leitura.RPM_Hex = "";
DadosLeitura.RPM_Hex += "0x"; leitura.RPM_Hex += "0x";
for (int a = 3; a < 5; a++) for (int a = 3; a < 5; a++)
{ {
str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper(); str = Convert.ToString(SerialBuffer_RX[a], 16).ToUpper();
DadosLeitura.RPM_Hex += str.Length == 1 ? "0" + str : str; leitura.RPM_Hex += str.Length == 1 ? "0" + str : str;
} }
} }
else if (ModoLeitura == "Decimal") // Decimal else if (ModoLeitura == "Decimal") // Decimal
{ {
DadosLeitura.RPM = 0; leitura.RPM = 0;
word16 = "0"; word16 = "0";
for (int a = 3; a < 5; a++) for (int a = 3; a < 5; a++)
{ {
@ -1746,7 +1848,7 @@ namespace AgroBase.Services
data16 = Convert.ToInt16(word16, 16); data16 = Convert.ToInt16(word16, 16);
str = Convert.ToString(data16, 10); str = Convert.ToString(data16, 10);
double.TryParse(str, out double val); double.TryParse(str, out double val);
DadosLeitura.RPM = val; leitura.RPM = val;
} }
else else
{ {
@ -1757,15 +1859,15 @@ namespace AgroBase.Services
case 0x80:// 14 Calibrar Codificador case 0x80:// 14 Calibrar Codificador
if (SerialBuffer_RX[3] == 0x00) if (SerialBuffer_RX[3] == 0x00)
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Calibrando; leitura.StatusMovimentoMotor = StatusComando.Calibrando;
} }
else if (SerialBuffer_RX[3] == 0x01) else if (SerialBuffer_RX[3] == 0x01)
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; leitura.StatusMovimentoMotor = StatusComando.Sucesso;
} }
else if (SerialBuffer_RX[3] == 0x02) else if (SerialBuffer_RX[3] == 0x02)
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; leitura.StatusMovimentoMotor = StatusComando.Falha;
} }
break; break;
@ -1793,11 +1895,11 @@ namespace AgroBase.Services
Temp1++; Temp1++;
if (SerialBuffer_RX[3] == 0x00) if (SerialBuffer_RX[3] == 0x00)
{ {
DadosLeitura.Mensagem = "Erro ao configurar: (" + Temp1 + ")"; leitura.Mensagem = "Erro ao configurar: (" + Temp1 + ")";
} }
else if (SerialBuffer_RX[3] == 0x01) else if (SerialBuffer_RX[3] == 0x01)
{ {
DadosLeitura.Mensagem = "Sucesso ao configurar: (" + Temp1 + ")"; leitura.Mensagem = "Sucesso ao configurar: (" + Temp1 + ")";
} }
} }
catch catch
@ -1809,26 +1911,26 @@ namespace AgroBase.Services
case 0x91:// 32 Reiniciar Limites case 0x91:// 32 Reiniciar Limites
if (SerialBuffer_RX[3] == 0x00) if (SerialBuffer_RX[3] == 0x00)
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; leitura.StatusMovimentoMotor = StatusComando.Falha;
} }
else if (SerialBuffer_RX[3] == 0x01) else if (SerialBuffer_RX[3] == 0x01)
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Retornando; leitura.StatusMovimentoMotor = StatusComando.Retornando;
} }
else if (SerialBuffer_RX[3] == 0x02) else if (SerialBuffer_RX[3] == 0x02)
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; leitura.StatusMovimentoMotor = StatusComando.Sucesso;
} }
break; break;
case 0x92:// 33 Reinicialização Direta case 0x92:// 33 Reinicialização Direta
if (SerialBuffer_RX[3] == 0x00) if (SerialBuffer_RX[3] == 0x00)
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Falha; leitura.StatusMovimentoMotor = StatusComando.Falha;
} }
else if (SerialBuffer_RX[3] == 0x01) else if (SerialBuffer_RX[3] == 0x01)
{ {
DadosLeitura.StatusMovimentoMotor = StatusComando.Sucesso; leitura.StatusMovimentoMotor = StatusComando.Sucesso;
} }
break; break;
@ -1843,7 +1945,7 @@ namespace AgroBase.Services
} }
if (DataSended == 43) if (DataSended == 43)
{ {
if (Iniciado) if (leitura.Iniciado)
{ {
MessageBox.Show("Versão do hardware: " + HV + "\nVersão da firmware: " + FV, "Versão"); MessageBox.Show("Versão do hardware: " + HV + "\nVersão da firmware: " + FV, "Versão");
} }
@ -1900,6 +2002,8 @@ namespace AgroBase.Services
} }
} }
leitura.Iniciado = true;
Respondido = true; Respondido = true;
} }
@ -1926,6 +2030,8 @@ namespace AgroBase.Services
} }
#endregion #endregion
} }

View File

@ -1,4 +1,5 @@
using System; using AgroBase.Forms;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO.Ports; using System.IO.Ports;
using System.Linq; using System.Linq;
@ -19,6 +20,10 @@ namespace AgroBase.Services
{ {
get get
{ {
if (!SerialService.DispositivosMapeados.Any(x => SerialService.DispositivosModbus.Contains(x.Dispositivo)))
{
return false;
}
if (_PortaModbus != null && !_PortaModbus.IsOpen) if (_PortaModbus != null && !_PortaModbus.IsOpen)
{ {
try try
@ -45,7 +50,7 @@ namespace AgroBase.Services
FilaEmEspera = false; FilaEmEspera = false;
if (frmPrincipal.Fechando) if (frmInstancial.Fechando)
{ {
EnvioLiberado = true; EnvioLiberado = true;
return; return;

View File

@ -56,8 +56,8 @@ namespace AgroBase.Services
var comando = ComandoGetParametro(Parametros["AlarmeTensaoMaxima"]); var comando = ComandoGetParametro(Parametros["AlarmeTensaoMaxima"]);
EnviarComando(porta, comando); EnviarComando(porta, comando);
await Task.Delay(1000); var resposta = SerialService.LerDadosDaPortaSerial(porta, 7, 1000);
var resposta = SerialService.VerificarRespostaPortasDesconhecidas(porta); //var resposta = SerialService.VerificarRespostaPortasDesconhecidas(porta);
ModbusService.Verificando = false; ModbusService.Verificando = false;
@ -157,7 +157,7 @@ namespace AgroBase.Services
byte[] resposta = SerialService.VerificarRespostaPortasDesconhecidas(ModbusService._PortaModbus); byte[] resposta = SerialService.VerificarRespostaPortasDesconhecidas(ModbusService._PortaModbus);
Iniciado = DecifrarRespostaAquisicao(resposta) != null; DecifrarRespostaAquisicao(resposta);
ContadorCarga.AtualizarConsumo(); ContadorCarga.AtualizarConsumo();
@ -167,10 +167,16 @@ namespace AgroBase.Services
Variaveis.OperacaoEmAndamento.Sensoriamento.BateriaConsumida = ContadorCarga.PercentualConsumido; Variaveis.OperacaoEmAndamento.Sensoriamento.BateriaConsumida = ContadorCarga.PercentualConsumido;
await Task.Delay(TaxaAmostragem); await Task.Delay(TaxaAmostragem);
return await ReceberDados(); if (ModbusService.Iniciado)
{
return await ReceberDados();
}
else
{
return false;
}
} }
#region Comandos #region Comandos
@ -359,7 +365,10 @@ namespace AgroBase.Services
{ {
var parametro_raw = "0x" + resposta[3].ToString("X") + resposta[4].ToString("X"); var parametro_raw = "0x" + resposta[3].ToString("X") + resposta[4].ToString("X");
double Valor = Convert.ToInt16(parametro_raw, 16) * 0.01; double Valor = Convert.ToInt16(parametro_raw, 16) * 0.01;
MessageBox.Show("Valor do parâmetro: " + Valor); if (Iniciado)
{
MessageBox.Show("Valor do parâmetro: " + Valor);
}
} }
else if (resposta[1] == CodigosFuncoes["GravacaoParametro"]) else if (resposta[1] == CodigosFuncoes["GravacaoParametro"])
{ {

View File

@ -1,5 +1,6 @@
using AgroBase.Forms; using AgroBase.Forms;
using AgroBase.Models; using AgroBase.Models;
using CefSharp.DevTools.Network;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
@ -41,117 +42,124 @@ namespace AgroBase.Services
public static async Task RealizarVarreduraPortasUSB() public static async Task RealizarVarreduraPortasUSB()
{ {
if (VarreduraEmAndamento || frmPrincipal.Fechando) if (VarreduraEmAndamento || frmInstancial.Fechando)
{ {
return; return;
} }
VarreduraEmAndamento = true; VarreduraEmAndamento = true;
var dispositivosMapeados = DispositivosMapeados.ToList(); try
var Portas = SerialPort.GetPortNames();
var PortasNaoMapeadas = Portas.Where(x => !dispositivosMapeados.Select(y => y.PortaCOM).Contains(x)).ToList();
for (int i = 0; i < PortasNaoMapeadas.Count(); i++)
{ {
string PortaCom = PortasNaoMapeadas[i].ToString(); var dispositivosMapeados = DispositivosMapeados.ToList();
SerialPort _Porta = new SerialPort() { PortName = PortaCom, BaudRate = 115200 };
bool PortaDispositivoProprio = false; var Portas = SerialPort.GetPortNames();
var PortasNaoMapeadas = Portas.Where(x => !dispositivosMapeados.Select(y => y.PortaCOM).Contains(x)).ToList();
if (Variaveis.OperacaoEmAndamento.DispMvd == null) for (int i = 0; i < PortasNaoMapeadas.Count(); i++)
{ {
//await TentarIdentificarDispositivo(_Porta); string PortaCom = PortasNaoMapeadas[i].ToString();
continue; Console.WriteLine("Procurando dispositivos conectados à porta " + PortaCom + "...");
} SerialPort _Porta = new SerialPort() { PortName = PortaCom, BaudRate = 115200 };
try bool PortaDispositivoProprio = false;
{
_Porta.Open();
bool DispositivoMvd = false; if (Variaveis.OperacaoEmAndamento.DispMvd == null)
foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos)
{ {
string ProtocoloCheck = Modulo.ProtocoloVerificacao(true); //await TentarIdentificarDispositivo(_Porta);
continue;
}
_Porta.Write(ProtocoloCheck); try
await AguardaRespostaPorta(_Porta, 1000);
bool respondeu = ProcessarRespostaDispositivo(_Porta);
if (!DispositivoMvd)
{
DispositivoMvd = respondeu;
}
};
bool DispositivoAtu = false;
if (!DispositivoMvd)
{ {
bool DispositivoAtu = false;
bool DispositivoSen = false;
bool DispositivoMvd = false;
string ProtocoloCheck = Variaveis.OperacaoEmAndamento.DispAtu.Dados.ProtocoloVerificacao(true); string ProtocoloCheck = Variaveis.OperacaoEmAndamento.DispAtu.Dados.ProtocoloVerificacao(true);
_Porta.Open();
_Porta.Write(ProtocoloCheck); _Porta.Write(ProtocoloCheck);
await AguardaRespostaPorta(_Porta, 1000); await AguardaRespostaPorta(_Porta, 1000);
bool respondeu = ProcessarRespostaDispositivo(_Porta); DispositivoAtu = ProcessarRespostaDispositivo(_Porta);
_Porta.Close();
if (!DispositivoAtu) if (!DispositivoAtu)
{ {
DispositivoAtu = respondeu; ProtocoloCheck = Variaveis.OperacaoEmAndamento.DispSen.Dados.ProtocoloVerificacao(true);
_Porta.Open();
_Porta.Write(ProtocoloCheck);
await AguardaRespostaPorta(_Porta, 1000);
DispositivoSen = ProcessarRespostaDispositivo(_Porta);
_Porta.Close();
if (!DispositivoSen)
{
DispositivoMvd = await ProcuraDispositivoMvd(_Porta);
}
} }
PortaDispositivoProprio = DispositivoMvd || DispositivoAtu || DispositivoSen;
} }
bool DispositivoSen = false; catch (Exception ex)
if (!DispositivoMvd && !DispositivoAtu)
{ {
string ProtocoloCheck = Variaveis.OperacaoEmAndamento.DispSen.Dados.ProtocoloVerificacao(true); Console.WriteLine(ex.Message.ToString());
}
_Porta.Write(ProtocoloCheck); finally
{
await AguardaRespostaPorta(_Porta, 1000); _Porta.Close();
}
bool respondeu = ProcessarRespostaDispositivo(_Porta);
if (!DispositivoSen) if (!PortaDispositivoProprio)
{ {
DispositivoSen = respondeu; await TentarIdentificarDispositivo(_Porta);
}
} }
PortaDispositivoProprio = DispositivoMvd || DispositivoAtu || DispositivoSen;
} }
catch (Exception ex)
var DispositivosRemovidos = dispositivosMapeados.Where(x => !Portas.Contains(x.PortaCOM)).ToList();
foreach (var Dispositivo in DispositivosRemovidos)
{ {
Console.WriteLine(ex.Message.ToString()); DispositivosMapeados.Remove(Dispositivo);
} }
finally
if (!Variaveis.CaminhoSistema.Contains("AgroMonitor"))
{ {
_Porta.Close(); AtualizarDispositivos();
} }
if (!PortaDispositivoProprio) // Se algum dispositivo no barramento RS485 para Modbus já foi identificado
if (ModbusService.Iniciado)
{ {
await TentarIdentificarDispositivo(_Porta); await ProcuraDispositivoModbus(ModbusService._PortaModbus, false);
} }
if (MKS057DService.Iniciado)
{
if (DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Mks))
{
await ProcuraDispositivoMKS(MKS057DService._PortaMKS);
}
else
{
MKS057DService.Iniciado = false;
}
}
/*if (DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Mvd) && Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Any(x => !DispositivosMapeados.Any(y => y.Mod_ID == x.Modulo_ID)))
{
await ProcuraDispositivoMvd(new SerialPort() { PortName = DispositivosMapeados.First(x => x.Dispositivo == T_Code.Mvd).PortaCOM, BaudRate = 115200 });
}*/
} }
catch (Exception ex)
var DispositivosRemovidos = dispositivosMapeados.Where(x => !Portas.Contains(x.PortaCOM)).ToList();
foreach (var Dispositivo in DispositivosRemovidos)
{ {
DispositivosMapeados.Remove(Dispositivo); Console.WriteLine(ex.Message);
} }
finally
if (!Variaveis.CaminhoSistema.Contains("AgroMonitor"))
{ {
AtualizarDispositivos(); VarreduraEmAndamento = false;
} }
// Se algum dispositivo no barramento RS485 para Modbus já foi identificado
if (ModbusService.Iniciado && (DispositivosMapeados.Where(x => DispositivosModbus.Contains(x.Dispositivo)).Count() != DispositivosModbus.Count()))
{
await ProcuraDispositivoModbus(ModbusService._PortaModbus, false);
}
VarreduraEmAndamento = false;
} }
private static bool ProcessarRespostaDispositivo(SerialPort Porta) private static bool ProcessarRespostaDispositivo(SerialPort Porta)
@ -177,9 +185,20 @@ namespace AgroBase.Services
var Dados = Recebido.Split(SplitMessage[0]); var Dados = Recebido.Split(SplitMessage[0]);
if (Dados.Length <= 1)
{
return false;
}
string Mod_ID = Dados[0]; string Mod_ID = Dados[0];
int.TryParse(Dados[1], out int check); int.TryParse(Dados[1], out int check);
if (check == 0)
{
return false;
}
Verificacao = (F_Code)check; Verificacao = (F_Code)check;
if (Verificacao == F_Code.Msg) if (Verificacao == F_Code.Msg)
@ -251,14 +270,12 @@ namespace AgroBase.Services
return true; return true;
} }
if (!MKS057DService.Iniciado) bool DispMks = await ProcuraDispositivoMKS(porta);
if (DispMks)
{ {
bool Encontrado = await MKS057DService.VerificaPortaMKS(porta); return true;
if (Encontrado)
{
return Encontrado;
}
} }
if (!LoRaService.Iniciado) if (!LoRaService.Iniciado)
{ {
bool Encontrado = await LoRaService.VerificaPortaLoRa(porta); bool Encontrado = await LoRaService.VerificaPortaLoRa(porta);
@ -295,11 +312,62 @@ namespace AgroBase.Services
return false; return false;
} }
private static async Task<bool> ProcuraDispositivoMvd(SerialPort porta)
{
bool DispositivoMvd = false;
if (porta == null)
{
return false;
}
if (DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Mvd) && porta.PortName != DispositivosMapeados.First(x => x.Dispositivo == T_Code.Mvd).PortaCOM)
{
return false;
}
bool conectado = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Conectado;
if (!conectado)
{
porta.Open();
}
foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(x => !DispositivosMapeados.Select(y => y.Mod_ID).Contains(x.Modulo_ID)))
{
try
{
string ProtocoloCheck = Modulo.ProtocoloVerificacao(true);
porta.Write(ProtocoloCheck);
await AguardaRespostaPorta(porta, 1000);
bool respondeu = ProcessarRespostaDispositivo(porta);
if (!DispositivoMvd)
{
DispositivoMvd = respondeu;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
if (!conectado)
{
porta.Close();
}
return DispositivoMvd;
}
private static async Task<bool> ProcuraDispositivoModbus(SerialPort porta, bool PararAoEncontrar) private static async Task<bool> ProcuraDispositivoModbus(SerialPort porta, bool PararAoEncontrar)
{ {
bool Encontrado = false; bool Encontrado = false;
if (!PZEMService.Iniciado) if (!PZEMService.Iniciado || !DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Pzm))
{ {
Encontrado = await PZEMService.VerificaPortaPZEM(ModbusService.Iniciado ? ModbusService._PortaModbus : porta); Encontrado = await PZEMService.VerificaPortaPZEM(ModbusService.Iniciado ? ModbusService._PortaModbus : porta);
@ -308,7 +376,7 @@ namespace AgroBase.Services
return Encontrado; return Encontrado;
} }
} }
if (!WT901CService.Iniciado) if (!WT901CService.Iniciado || !DispositivosMapeados.Any(x => x.Dispositivo == T_Code.Wit))
{ {
Encontrado = await WT901CService.VerificaPortaWT901C(ModbusService.Iniciado ? ModbusService._PortaModbus : porta); Encontrado = await WT901CService.VerificaPortaWT901C(ModbusService.Iniciado ? ModbusService._PortaModbus : porta);
if (Encontrado && PararAoEncontrar) if (Encontrado && PararAoEncontrar)
@ -335,6 +403,25 @@ namespace AgroBase.Services
return Encontrado; return Encontrado;
} }
private static async Task<bool> ProcuraDispositivoMKS(SerialPort porta)
{
if (MKS057DService.Iniciado && porta.PortName != MKS057DService._PortaMKS.PortName)
{
return false;
}
if (!MKS057DService.Iniciado || MKS057DService.DadosLeitura.Any(x => !x.Iniciado))
{
bool Encontrado = await MKS057DService.VerificaPortaMKS(porta);
if (Encontrado)
{
return Encontrado;
}
}
return MKS057DService.Iniciado;
}
public static byte[] VerificarRespostaPortasDesconhecidas(SerialPort Porta) public static byte[] VerificarRespostaPortasDesconhecidas(SerialPort Porta)
{ {
if (Porta != null && Porta.IsOpen) if (Porta != null && Porta.IsOpen)
@ -351,11 +438,11 @@ namespace AgroBase.Services
} }
} }
public static byte[] LerDadosDaPortaSerial(SerialPort porta, int tamanhoEsperado) public static byte[] LerDadosDaPortaSerial(SerialPort porta, int tamanhoEsperado, int Timeout = 500)
{ {
DateTime inicio = DateTime.Now; DateTime inicio = DateTime.Now;
List<byte> buffer = new List<byte>(); List<byte> buffer = new List<byte>();
while (buffer.Count < tamanhoEsperado && inicio.AddMilliseconds(500) > DateTime.Now) while (buffer.Count < tamanhoEsperado && inicio.AddMilliseconds(Timeout) > DateTime.Now)
{ {
int bytesDisponiveis = porta.BytesToRead; int bytesDisponiveis = porta.BytesToRead;
if (bytesDisponiveis > 0) if (bytesDisponiveis > 0)

View File

@ -31,8 +31,8 @@ namespace AgroBase.Services
var comando = ModbusService.ComandoGetParametro(slaveAddress, new ModbusParametrosModel() { FuncaoGet = 0x03, N_Registros = 2, Registro = 0x2e }); var comando = ModbusService.ComandoGetParametro(slaveAddress, new ModbusParametrosModel() { FuncaoGet = 0x03, N_Registros = 2, Registro = 0x2e });
EnviarComando(porta, comando); EnviarComando(porta, comando);
await Task.Delay(1000); var resposta = SerialService.LerDadosDaPortaSerial(porta, 7, 1000);
var resposta = SerialService.VerificarRespostaPortasDesconhecidas(porta); //var resposta = SerialService.VerificarRespostaPortasDesconhecidas(porta);
ModbusService.Verificando = false; ModbusService.Verificando = false;
@ -112,7 +112,14 @@ namespace AgroBase.Services
await Task.Delay(TaxaAmostragem); await Task.Delay(TaxaAmostragem);
return await ReceberDados(); if (ModbusService.Iniciado)
{
return await ReceberDados();
}
else
{
return false;
}
} }
private static void DefinirDispositivo() private static void DefinirDispositivo()

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-01T15:05:41.5766417-03:00","Protocolo":"@1;EF;258;EF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T15:05:41.5866629-03:00","Protocolo":"EF;655;1;$\r","Enviado":false},{"Momento":"2024-07-01T15:05:41.5981854-03:00","Protocolo":"@2;EF;258;Mov,1,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T15:05:42.6209546-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T15:05:43.1162914-03:00","Protocolo":"@3;EF;244;check$","Enviado":true},{"Momento":"2024-07-01T15:05:43.631607-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T15:05:43.6421232-03:00","Protocolo":"EF;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-01T15:05:51.0157092-03:00","Protocolo":"@2;EF;258;Mov,1,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T15:05:51.0157092-03:00","Protocolo":"EF;655;2;$\r","Enviado":false},{"Momento":"2024-07-01T15:05:51.0373094-03:00","Protocolo":"EF;244;109;6;0;$\r","Enviado":false},{"Momento":"2024-07-01T15:05:56.2348606-03:00","Protocolo":"@4;EF;258;EF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T15:05:56.245383-03:00","Protocolo":"EF;655;4;$\r","Enviado":false},{"Momento":"2024-07-01T15:05:56.2539003-03:00","Protocolo":"@5;EF;258;Mov,1,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T15:05:57.2749672-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T15:05:57.7630299-03:00","Protocolo":"@6;EF;244;check$","Enviado":true},{"Momento":"2024-07-01T15:05:58.2880203-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T15:05:58.2985504-03:00","Protocolo":"EF;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-01T15:05:59.0915496-03:00","Protocolo":"EF;655;5;$\r","Enviado":false},{"Momento":"2024-07-01T15:05:59.1156242-03:00","Protocolo":"EF;244;109;6;0;$\r","Enviado":false},{"Momento":"2024-07-01T15:17:06.942396-03:00","Protocolo":"@7;EF;258;EF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T15:17:06.9479533-03:00","Protocolo":"EF;655;7;$\r","Enviado":false},{"Momento":"2024-07-01T15:17:06.9710638-03:00","Protocolo":"@8;EF;258;Mov,1,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T15:17:06.9856542-03:00","Protocolo":"Comando enviado: 02 06 00 B6 00 01 A9 DF \r","Enviado":false},{"Momento":"2024-07-01T15:17:07.9946172-03:00","Protocolo":"Resposta recebida: 00 00 \r","Enviado":false},{"Momento":"2024-07-01T15:17:07.9996372-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T15:17:08.4820396-03:00","Protocolo":"@9;EF;244;check$","Enviado":true},{"Momento":"2024-07-01T15:17:09.0068392-03:00","Protocolo":"Comando enviado: 02 06 00 B6 00 01 A9 DF \r","Enviado":false},{"Momento":"2024-07-01T15:17:09.0173991-03:00","Protocolo":"Resposta recebida: 00 00 00 \r","Enviado":false},{"Momento":"2024-07-01T15:17:09.0223991-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T15:17:09.0329467-03:00","Protocolo":"EF;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-01T15:17:26.4745571-03:00","Protocolo":"@8;EF;258;Mov,1,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T15:17:26.4755659-03:00","Protocolo":"EF;655;8;$\r","Enviado":false}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-01T17:07:29.7995304-03:00","Protocolo":"@1;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T17:07:29.8090452-03:00","Protocolo":"ET;655;1;$\r","Enviado":false},{"Momento":"2024-07-01T17:07:29.8280756-03:00","Protocolo":"@2;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T17:07:30.8523896-03:00","Protocolo":"Timeout ao aguardar resposta Modbus\r","Enviado":false},{"Momento":"2024-07-01T17:07:31.3392217-03:00","Protocolo":"@3;ET;244;check$","Enviado":true},{"Momento":"2024-07-01T17:07:31.8623533-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T17:07:31.8653714-03:00","Protocolo":"Timeout ao aguardar resposta Modbus\r","Enviado":false},{"Momento":"2024-07-01T17:07:31.87492-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T17:07:31.8874769-03:00","Protocolo":"ET;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-01T17:07:31.8980268-03:00","Protocolo":"ET;655;2;$\r","Enviado":false},{"Momento":"2024-07-01T17:07:32.8670773-03:00","Protocolo":"@3;ET;244;check$","Enviado":true},{"Momento":"2024-07-01T17:07:32.8755927-03:00","Protocolo":"ET;244;109;6;0;$\r","Enviado":false}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-01T16:19:14.4014585-03:00","Protocolo":"@1;EF;258;EF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T16:19:25.2140235-03:00","Protocolo":"@4;EF;258;EF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-01T16:20:10.7655198-03:00","Protocolo":"@1;DT;258;DT,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T16:20:10.7750364-03:00","Protocolo":"DT;655;1;$\r","Enviado":false},{"Momento":"2024-07-01T16:20:10.7885544-03:00","Protocolo":"@2;DT;258;Mov,1,0x03,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T16:20:11.1643318-03:00","Protocolo":"DT;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-07-01T16:20:11.1748552-03:00","Protocolo":"DT;655;2;$\r","Enviado":false},{"Momento":"2024-07-01T16:20:11.1808579-03:00","Protocolo":"@3;DT;244;check$","Enviado":true},{"Momento":"2024-07-01T16:20:11.1959024-03:00","Protocolo":"DT;244;109;6;1;$\r","Enviado":false},{"Momento":"2024-07-01T16:20:11.1988791-03:00","Protocolo":"DT;655;3;$\r","Enviado":false},{"Momento":"2024-07-01T16:20:12.6182727-03:00","Protocolo":"DT;#544;DT;1;0.00;447.00;41.21;19.05;0;0;0;0;21.92$\r","Enviado":false},{"Momento":"2024-07-01T16:20:15.9472225-03:00","Protocolo":"DT;#544;DT;1;0.00;769.93;41.21;19.05;0;0;0;0;21.94$\r","Enviado":false},{"Momento":"2024-07-01T16:20:15.9492205-03:00","Protocolo":"DT;#544;DT;1;0.00;856.23;41.21;19.05;0;0;0;0;21.94$\r","Enviado":false},{"Momento":"2024-07-01T16:20:17.1243159-03:00","Protocolo":"DT;#544;DT;1;0.00;875.23;41.21;19.05;0;0;0;0;21.96$\r","Enviado":false},{"Momento":"2024-07-01T16:20:18.628605-03:00","Protocolo":"DT;#544;DT;1;0.00;880.92;41.21;19.05;0;0;0;0;21.82$\r","Enviado":false},{"Momento":"2024-07-01T16:20:20.1319475-03:00","Protocolo":"DT;#544;DT;1;0.00;885.04;41.21;19.05;0;0;0;0;21.94$\r","Enviado":false},{"Momento":"2024-07-01T16:20:21.6346446-03:00","Protocolo":"DT;#544;DT;1;0.00;887.41;41.21;19.05;0;0;0;0;21.92$\r","Enviado":false},{"Momento":"2024-07-01T16:20:23.1368609-03:00","Protocolo":"DT;#544;DT;1;0.00;888.13;41.18;19.05;0;0;0;0;21.96$\r","Enviado":false},{"Momento":"2024-07-01T16:20:24.6405794-03:00","Protocolo":"DT;#544;DT;1;0.00;888.28;41.21;19.05;0;0;0;0;21.99$\r","Enviado":false},{"Momento":"2024-07-01T16:20:26.1436377-03:00","Protocolo":"DT;#544;DT;1;0.00;888.82;41.21;19.05;0;0;0;0;21.94$\r","Enviado":false},{"Momento":"2024-07-01T16:20:27.6465654-03:00","Protocolo":"DT;#544;DT;1;0.00;889.10;41.24;19.13;0;0;0;0;21.96$\r","Enviado":false},{"Momento":"2024-07-01T16:20:29.1489593-03:00","Protocolo":"DT;#544;DT;1;0.00;889.20;41.18;19.13;0;0;0;0;21.94$\r","Enviado":false},{"Momento":"2024-07-01T16:20:30.6522056-03:00","Protocolo":"DT;#544;DT;1;0.00;878.90;41.21;19.05;0;0;0;0;21.96$\r","Enviado":false},{"Momento":"2024-07-01T16:20:32.1557643-03:00","Protocolo":"DT;#544;DT;1;0.00;880.80;41.21;19.05;0;0;0;0;21.90$\r","Enviado":false},{"Momento":"2024-07-01T16:20:33.6589372-03:00","Protocolo":"DT;#544;DT;1;0.00;885.23;41.18;19.13;0;0;0;0;21.96$\r","Enviado":false},{"Momento":"2024-07-01T16:20:35.1623014-03:00","Protocolo":"DT;#544;DT;1;0.00;886.10;41.21;19.05;0;0;0;0;21.96$\r","Enviado":false},{"Momento":"2024-07-01T16:20:36.6653807-03:00","Protocolo":"DT;#544;DT;1;0.00;887.15;41.21;19.05;0;0;0;0;21.96$\r","Enviado":false},{"Momento":"2024-07-01T16:20:37.5990319-03:00","Protocolo":"@4;DT;258;Mov,0,0x03,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T16:20:37.6110532-03:00","Protocolo":"DT;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-01T16:20:37.6215745-03:00","Protocolo":"DT;655;4;$\r","Enviado":false},{"Momento":"2024-07-01T16:20:37.6336199-03:00","Protocolo":"@5;DT;258;DT,0,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T16:20:37.6431506-03:00","Protocolo":"DT;655;5;$\r","Enviado":false},{"Momento":"2024-07-01T16:20:37.6471488-03:00","Protocolo":"@6;DT;244;check$","Enviado":true},{"Momento":"2024-07-01T16:20:37.6556667-03:00","Protocolo":"DT;244;109;6;0;$\r","Enviado":false}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-01T16:46:39.382281-03:00","Protocolo":"@1;EF;258;EF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T16:46:39.3953104-03:00","Protocolo":"EF;655;1;$\r","Enviado":false},{"Momento":"2024-07-01T16:46:39.4089249-03:00","Protocolo":"@2;EF;258;Mov,1,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T16:46:39.4220675-03:00","Protocolo":"Comando enviado: 02 06 00 B6 00 01 A9 DF \r","Enviado":false},{"Momento":"2024-07-01T16:46:39.431588-03:00","Protocolo":"Resposta recebida: 00 00 00 00 00 FC \r","Enviado":false},{"Momento":"2024-07-01T16:46:39.4391127-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T16:46:39.4451111-03:00","Protocolo":"Comando enviado: 02 06 00 B6 00 01 A9 DF \r","Enviado":false},{"Momento":"2024-07-01T16:46:39.4466241-03:00","Protocolo":"Resposta recebida: 00 06 00 6C 00 01 52 57 \r","Enviado":false},{"Momento":"2024-07-01T16:46:39.4536327-03:00","Protocolo":"Comando enviado: 02 06 00 76 00 00 68 23 \r","Enviado":false},{"Momento":"2024-07-01T16:46:39.4591666-03:00","Protocolo":"Resposta recebida: 00 00 00 00 00 \r","Enviado":false},{"Momento":"2024-07-01T16:46:40.4653109-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T16:46:40.4713485-03:00","Protocolo":"Comando enviado: 02 06 00 76 00 00 68 23 \r","Enviado":false},{"Momento":"2024-07-01T16:46:40.4778937-03:00","Protocolo":"Resposta recebida: 00 00 \r","Enviado":false},{"Momento":"2024-07-01T16:46:40.9191857-03:00","Protocolo":"@3;EF;244;check$","Enviado":true},{"Momento":"2024-07-01T16:46:40.9257011-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-01T16:46:40.9362684-03:00","Protocolo":"EF;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-01T16:46:42.433345-03:00","Protocolo":"@2;EF;258;Mov,1,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T16:46:42.4473955-03:00","Protocolo":"EF;655;2;$\r","Enviado":false},{"Momento":"2024-07-01T16:46:42.4579375-03:00","Protocolo":"EF;244;109;5;0;$\r","Enviado":false},{"Momento":"2024-07-01T16:47:12.2362802-03:00","Protocolo":"@4;DT;258;DT,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T16:47:12.2453068-03:00","Protocolo":"DT;655;4;$\r","Enviado":false},{"Momento":"2024-07-01T16:47:12.2578446-03:00","Protocolo":"@5;DT;258;Mov,1,0x03,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T16:47:12.6350457-03:00","Protocolo":"DT;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-07-01T16:47:12.6450758-03:00","Protocolo":"DT;655;5;$\r","Enviado":false},{"Momento":"2024-07-01T16:47:12.6520963-03:00","Protocolo":"@6;DT;244;check$","Enviado":true},{"Momento":"2024-07-01T16:47:12.6651185-03:00","Protocolo":"DT;244;109;6;1;$\r","Enviado":false},{"Momento":"2024-07-01T16:47:12.6691323-03:00","Protocolo":"DT;655;6;$\r","Enviado":false},{"Momento":"2024-07-01T16:47:13.7678779-03:00","Protocolo":"DT;#544;DT;1;0.00;448.50;41.13;19.13;0;0;0;0;21.44$\r","Enviado":false},{"Momento":"2024-07-01T16:47:15.2703629-03:00","Protocolo":"DT;#544;DT;1;0.00;767.63;41.21;19.13;0;0;0;0;21.42$\r","Enviado":false},{"Momento":"2024-07-01T16:47:15.751294-03:00","Protocolo":"@7;DT;258;Mov,0,0x03,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T16:47:15.7618177-03:00","Protocolo":"DT;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-01T16:47:15.7723351-03:00","Protocolo":"DT;655;7;$\r","Enviado":false},{"Momento":"2024-07-01T16:47:15.7853634-03:00","Protocolo":"@8;DT;258;DT,0,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T16:47:15.7949692-03:00","Protocolo":"DT;655;8;$\r","Enviado":false},{"Momento":"2024-07-01T16:47:15.8124159-03:00","Protocolo":"@9;DT;244;check$","Enviado":true},{"Momento":"2024-07-01T16:47:15.8264561-03:00","Protocolo":"DT;244;109;6;0;$\r","Enviado":false}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-01T15:59:05.6689452-03:00","Protocolo":"@1;DT;258;DT,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-01T15:59:05.6789809-03:00","Protocolo":"DT;655;1;$\r","Enviado":false},{"Momento":"2024-07-01T15:59:05.6960121-03:00","Protocolo":"@2;DT;258;Mov,1,0x03,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-01T15:59:05.7180603-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-02T10:06:55.7761418-03:00","Protocolo":"@1;EF;258;EF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T10:06:55.7846587-03:00","Protocolo":"EF;655;1;$\r","Enviado":false},{"Momento":"2024-07-02T10:06:55.7951734-03:00","Protocolo":"@2;EF;258;Mov,1,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T10:06:56.1689644-03:00","Protocolo":"EF;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-07-02T10:06:56.1794878-03:00","Protocolo":"EF;655;2;$\r","Enviado":false},{"Momento":"2024-07-02T10:06:56.18801-03:00","Protocolo":"@3;EF;244;check$","Enviado":true},{"Momento":"2024-07-02T10:06:56.2005353-03:00","Protocolo":"EF;244;109;6;1;$\r","Enviado":false},{"Momento":"2024-07-02T10:06:56.2050522-03:00","Protocolo":"EF;655;3;$\r","Enviado":false},{"Momento":"2024-07-02T10:06:57.3108786-03:00","Protocolo":"EF;#544;EF;1;0.00;439.50;41.13;19.67;0;0;0;0;21.63$\r","Enviado":false},{"Momento":"2024-07-02T10:06:58.8136483-03:00","Protocolo":"EF;#544;EF;1;0.00;798.07;41.13;19.67;0;0;0;0;21.65$\r","Enviado":false},{"Momento":"2024-07-02T10:07:00.3162692-03:00","Protocolo":"EF;#544;EF;1;0.00;859.61;41.13;19.75;0;0;0;0;21.65$\r","Enviado":false},{"Momento":"2024-07-02T10:07:00.7138593-03:00","Protocolo":"@4;EF;258;Mov,0,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T10:07:00.7243793-03:00","Protocolo":"EF;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-02T10:07:00.7349001-03:00","Protocolo":"EF;655;4;$\r","Enviado":false},{"Momento":"2024-07-02T10:07:00.7444234-03:00","Protocolo":"@5;EF;258;EF,0,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T10:07:00.752936-03:00","Protocolo":"EF;655;5;$\r","Enviado":false},{"Momento":"2024-07-02T10:07:00.7604417-03:00","Protocolo":"@6;EF;244;check$","Enviado":true},{"Momento":"2024-07-02T10:07:00.7659588-03:00","Protocolo":"EF;244;109;6;0;$\r","Enviado":false}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-02T14:16:01.6876639-03:00","Protocolo":"@1;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T14:16:26.7060724-03:00","Protocolo":"@4;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-02T13:40:36.7513825-03:00","Protocolo":"@1;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:40:41.8023838-03:00","Protocolo":"@4;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:40:45.8183834-03:00","Protocolo":"@7;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:40:47.3233887-03:00","Protocolo":"@8;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T13:40:50.1303837-03:00","Protocolo":"@10;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:40:51.6473902-03:00","Protocolo":"@11;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T13:40:53.1633901-03:00","Protocolo":"@12;ET;244;check$","Enviado":true},{"Momento":"2024-07-02T13:41:05.5953845-03:00","Protocolo":"@13;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:41:07.0983914-03:00","Protocolo":"@14;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-02T14:42:01.1721753-03:00","Protocolo":"@1;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-02T13:41:35.7213848-03:00","Protocolo":"@1;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:41:45.3223839-03:00","Protocolo":"@4;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:42:20.7403868-03:00","Protocolo":"@7;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:44:16.8354146-03:00","Protocolo":"@10;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:44:24.8144133-03:00","Protocolo":"@11;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T13:44:42.8924123-03:00","Protocolo":"@13;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:44:50.537414-03:00","Protocolo":"@16;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:45:03.5784113-03:00","Protocolo":"@19;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T13:45:05.0816261-03:00","Protocolo":"@20;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T13:45:06.5846258-03:00","Protocolo":"@21;ET;244;check$","Enviado":true}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-02T14:43:05.8390975-03:00","Protocolo":"@1;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T14:43:07.3511092-03:00","Protocolo":"@2;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T14:43:08.8655774-03:00","Protocolo":"@3;ET;244;check$","Enviado":true}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-02T14:46:55.9307038-03:00","Protocolo":"@1;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T14:46:55.9417027-03:00","Protocolo":"ET;655;1;$\r","Enviado":false},{"Momento":"2024-07-02T14:46:55.9627025-03:00","Protocolo":"@2;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T14:47:08.3827704-03:00","Protocolo":"@4;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T14:47:08.3917657-03:00","Protocolo":"ET;655;4;$\r","Enviado":false},{"Momento":"2024-07-02T14:47:08.3937664-03:00","Protocolo":"@5;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T14:47:08.4057692-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-07-02T14:47:08.4167688-03:00","Protocolo":"ET;655;5;$\r","Enviado":false},{"Momento":"2024-07-02T14:47:08.425767-03:00","Protocolo":"@6;ET;244;check$","Enviado":true},{"Momento":"2024-07-02T14:47:08.4387662-03:00","Protocolo":"ET;244;109;6;1;$\r","Enviado":false},{"Momento":"2024-07-02T14:47:08.4427681-03:00","Protocolo":"ET;655;6;$\r","Enviado":false},{"Momento":"2024-07-02T14:47:09.7313394-03:00","Protocolo":"ET;#544;ET;1;0.00;806.37;41.00;20.68;0;0;0;0;26.72$\r","Enviado":false},{"Momento":"2024-07-02T14:47:11.2341578-03:00","Protocolo":"ET;#544;ET;1;0.00;805.18;41.00;20.68;0;0;0;0;26.72$\r","Enviado":false},{"Momento":"2024-07-02T14:47:12.741659-03:00","Protocolo":"ET;#544;ET;1;0.00;804.34;41.00;20.68;0;0;0;0;26.74$\r","Enviado":false},{"Momento":"2024-07-02T14:47:14.2414984-03:00","Protocolo":"ET;#544;ET;1;0.00;803.72;41.00;20.68;0;0;0;0;26.72$\r","Enviado":false},{"Momento":"2024-07-02T14:47:15.7445207-03:00","Protocolo":"ET;#544;ET;1;0.00;804.65;41.00;20.68;0;0;0;0;26.74$\r","Enviado":false},{"Momento":"2024-07-02T14:47:17.1747863-03:00","Protocolo":"@7;ET;258;Mov,0,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-02T14:47:17.1857852-03:00","Protocolo":"ET;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-02T14:47:17.196786-03:00","Protocolo":"ET;655;7;$\r","Enviado":false},{"Momento":"2024-07-02T14:47:17.2037861-03:00","Protocolo":"@8;ET;258;ET,0,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-02T14:47:17.2117862-03:00","Protocolo":"ET;655;8;$\r","Enviado":false},{"Momento":"2024-07-02T14:47:17.2197842-03:00","Protocolo":"@9;ET;244;check$","Enviado":true},{"Momento":"2024-07-02T14:47:17.2337846-03:00","Protocolo":"ET;244;109;6;0;$\r","Enviado":false}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-03T08:03:16.0067748-03:00","Protocolo":"@1;EF;258;EF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-03T08:03:16.0152317-03:00","Protocolo":"EF;655;1;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:16.0227417-03:00","Protocolo":"@2;EF;258;Mov,1,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-03T08:03:16.4002018-03:00","Protocolo":"EF;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-07-03T08:03:16.4102826-03:00","Protocolo":"EF;655;2;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:16.4178209-03:00","Protocolo":"@3;EF;244;check$","Enviado":true},{"Momento":"2024-07-03T08:03:16.4369132-03:00","Protocolo":"EF;244;109;6;1;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:16.4424487-03:00","Protocolo":"EF;655;3;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:17.8351622-03:00","Protocolo":"EF;#544;EF;1;0.00;430.50;41.00;19.75;0;0;0;0;20.75$\r","Enviado":false},{"Momento":"2024-07-03T08:03:19.3415777-03:00","Protocolo":"EF;#544;EF;1;0.00;731.52;41.00;19.83;0;0;0;0;20.64$\r","Enviado":false},{"Momento":"2024-07-03T08:03:20.8403695-03:00","Protocolo":"EF;#544;EF;1;0.00;809.19;41.00;19.83;0;0;0;0;20.62$\r","Enviado":false},{"Momento":"2024-07-03T08:03:22.3432764-03:00","Protocolo":"EF;#544;EF;1;0.00;827.26;41.00;19.83;0;0;0;0;20.64$\r","Enviado":false},{"Momento":"2024-07-03T08:03:23.8462365-03:00","Protocolo":"EF;#544;EF;1;0.00;832.46;41.00;19.83;0;0;0;0;20.64$\r","Enviado":false},{"Momento":"2024-07-03T08:03:25.3486867-03:00","Protocolo":"EF;#544;EF;1;0.00;836.94;41.00;19.83;0;0;0;0;20.66$\r","Enviado":false},{"Momento":"2024-07-03T08:03:26.8517726-03:00","Protocolo":"EF;#544;EF;1;0.00;842.40;41.03;19.83;0;0;0;0;20.66$\r","Enviado":false},{"Momento":"2024-07-03T08:03:28.3539953-03:00","Protocolo":"EF;#544;EF;1;0.00;838.97;41.00;19.83;0;0;0;0;20.66$\r","Enviado":false},{"Momento":"2024-07-03T08:03:29.8582352-03:00","Protocolo":"EF;#544;EF;1;0.00;836.40;41.00;19.83;0;0;0;0;20.66$\r","Enviado":false},{"Momento":"2024-07-03T08:03:31.3612161-03:00","Protocolo":"EF;#544;EF;1;0.00;837.81;41.00;19.83;0;0;0;0;20.68$\r","Enviado":false},{"Momento":"2024-07-03T08:03:32.8638224-03:00","Protocolo":"EF;#544;EF;1;0.00;838.72;41.00;19.83;0;0;0;0;20.66$\r","Enviado":false},{"Momento":"2024-07-03T08:03:34.3667377-03:00","Protocolo":"EF;#544;EF;1;0.00;839.41;41.00;19.90;0;0;0;0;20.71$\r","Enviado":false},{"Momento":"2024-07-03T08:03:35.8713877-03:00","Protocolo":"EF;#544;EF;1;0.00;840.08;41.00;19.83;0;0;0;0;20.68$\r","Enviado":false},{"Momento":"2024-07-03T08:03:37.2997493-03:00","Protocolo":"@4;EF;293;Mov,2,60,0$","Enviado":true},{"Momento":"2024-07-03T08:03:37.3063096-03:00","Protocolo":"EF;655;4;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:37.3725603-03:00","Protocolo":"EF;#544;EF;1;0.00;840.07;41.00;19.83;0;0;0;0;20.71$\r","Enviado":false},{"Momento":"2024-07-03T08:03:37.8269301-03:00","Protocolo":"@5;EF;293;Mov,0,0,0$","Enviado":true},{"Momento":"2024-07-03T08:03:37.8334815-03:00","Protocolo":"EF;655;5;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:38.8200076-03:00","Protocolo":"@6;EF;293;Mov,1,60,0$","Enviado":true},{"Momento":"2024-07-03T08:03:38.8270766-03:00","Protocolo":"EF;655;6;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:38.8768161-03:00","Protocolo":"EF;#544;EF;1;190.00;858.03;41.00;19.90;0;0;0;0;20.68$\r","Enviado":false},{"Momento":"2024-07-03T08:03:39.9146446-03:00","Protocolo":"@7;EF;293;Mov,0,0,0$","Enviado":true},{"Momento":"2024-07-03T08:03:39.9211572-03:00","Protocolo":"EF;655;7;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:40.3792426-03:00","Protocolo":"EF;#544;EF;1;234.00;852.01;41.03;19.90;0;0;0;0;20.71$\r","Enviado":false},{"Momento":"2024-07-03T08:03:41.8823805-03:00","Protocolo":"EF;#544;EF;1;0.00;850.58;41.00;19.83;0;0;0;0;20.73$\r","Enviado":false},{"Momento":"2024-07-03T08:03:43.3856267-03:00","Protocolo":"EF;#544;EF;1;0.00;848.65;41.03;19.83;0;0;0;0;20.73$\r","Enviado":false},{"Momento":"2024-07-03T08:03:44.4825858-03:00","Protocolo":"@8;EF;258;Mov,0,0x02,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-03T08:03:44.4941174-03:00","Protocolo":"EF;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-03T08:03:44.504633-03:00","Protocolo":"EF;655;8;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:44.5086355-03:00","Protocolo":"@9;EF;258;EF,0,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-03T08:03:44.5181534-03:00","Protocolo":"EF;655;9;$\r","Enviado":false},{"Momento":"2024-07-03T08:03:44.5266739-03:00","Protocolo":"@10;EF;244;check$","Enviado":true},{"Momento":"2024-07-03T08:03:44.5337079-03:00","Protocolo":"EF;244;109;6;0;$\r","Enviado":false}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-03T08:07:38.7427778-03:00","Protocolo":"@1;ET;258;ET,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-03T08:07:40.2556601-03:00","Protocolo":"@2;ET;258;Mov,1,0x01,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-03T08:07:41.7718449-03:00","Protocolo":"@3;ET;244;check$","Enviado":true},{"Momento":"2024-07-03T08:07:56.0820628-03:00","Protocolo":"@4;DT;258;DT,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-03T08:07:56.093596-03:00","Protocolo":"DT;655;4;$\r","Enviado":false},{"Momento":"2024-07-03T08:07:56.1091191-03:00","Protocolo":"@5;DT;258;Mov,1,0x03,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-03T08:07:56.4848871-03:00","Protocolo":"DT;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-07-03T08:07:56.4954026-03:00","Protocolo":"DT;655;5;$\r","Enviado":false},{"Momento":"2024-07-03T08:07:56.4974034-03:00","Protocolo":"@6;DT;244;check$","Enviado":true},{"Momento":"2024-07-03T08:07:56.5144433-03:00","Protocolo":"DT;244;109;6;1;$\r","Enviado":false},{"Momento":"2024-07-03T08:07:56.5194423-03:00","Protocolo":"DT;655;6;$\r","Enviado":false},{"Momento":"2024-07-03T08:07:57.8915909-03:00","Protocolo":"DT;#544;DT;1;0.00;436.50;40.92;19.13;0;0;0;0;20.89$\r","Enviado":false},{"Momento":"2024-07-03T08:07:59.394042-03:00","Protocolo":"DT;#544;DT;1;0.00;750.82;41.00;19.13;0;0;0;0;20.94$\r","Enviado":false},{"Momento":"2024-07-03T08:08:00.8964969-03:00","Protocolo":"DT;#544;DT;1;0.00;830.40;40.92;19.05;0;0;0;0;20.94$\r","Enviado":false},{"Momento":"2024-07-03T08:08:02.4007584-03:00","Protocolo":"DT;#544;DT;1;0.00;868.87;40.92;19.05;0;0;0;0;20.92$\r","Enviado":false},{"Momento":"2024-07-03T08:08:03.9032067-03:00","Protocolo":"DT;#544;DT;1;0.00;869.34;40.98;19.13;0;0;0;0;20.92$\r","Enviado":false},{"Momento":"2024-07-03T08:08:05.407401-03:00","Protocolo":"DT;#544;DT;1;0.00;869.83;40.92;19.05;0;0;0;0;20.92$\r","Enviado":false},{"Momento":"2024-07-03T08:08:05.9093508-03:00","Protocolo":"@7;DT;258;Mov,0,0x03,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-03T08:08:05.9203753-03:00","Protocolo":"DT;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-03T08:08:05.9308924-03:00","Protocolo":"DT;655;7;$\r","Enviado":false},{"Momento":"2024-07-03T08:08:05.9424234-03:00","Protocolo":"@8;DT;258;DT,0,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-03T08:08:05.9519341-03:00","Protocolo":"DT;655;8;$\r","Enviado":false},{"Momento":"2024-07-03T08:08:05.95694-03:00","Protocolo":"@9;DT;244;check$","Enviado":true},{"Momento":"2024-07-03T08:08:05.9719791-03:00","Protocolo":"DT;244;109;6;0;$\r","Enviado":false}

View File

@ -0,0 +1 @@
[{"Momento":"2024-07-03T08:13:32.5920904-03:00","Protocolo":"@1;DF;258;DF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-03T08:13:32.5996011-03:00","Protocolo":"DF;655;1;$\r","Enviado":false},{"Momento":"2024-07-03T08:13:32.6131281-03:00","Protocolo":"@2;DF;258;Mov,1,0x04,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-03T08:13:32.6266407-03:00","Protocolo":"Comando enviado: 04 06 00 B6 00 01 A9 B9 \r","Enviado":false},{"Momento":"2024-07-03T08:13:40.9629534-03:00","Protocolo":"@4;DF;258;DF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-03T08:13:40.9704664-03:00","Protocolo":"DF;655;4;$\r","Enviado":false},{"Momento":"2024-07-03T08:13:40.9809855-03:00","Protocolo":"@5;DF;258;Mov,1,0x04,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-03T08:13:40.9950171-03:00","Protocolo":"Comando enviado: 04 06 00 B6 00 01 A9 B9 \r","Enviado":false},{"Momento":"2024-07-03T08:13:42.0055264-03:00","Protocolo":"Timeout ao aguardar resposta Modbus\r","Enviado":false},{"Momento":"2024-07-03T08:13:42.0100325-03:00","Protocolo":"Erro ao enviar comando\r","Enviado":false},{"Momento":"2024-07-03T08:13:42.4945025-03:00","Protocolo":"@6;DF;244;check$","Enviado":true},{"Momento":"2024-07-03T08:13:43.0166751-03:00","Protocolo":"Comando enviado: 04 06 00 B6 00 01 A9 B9 \r","Enviado":false},{"Momento":"2024-07-03T08:13:43.0221978-03:00","Protocolo":"Timeout ao aguardar resposta Modbus\r","Enviado":false}

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

@ -0,0 +1 @@
[{"Momento":"2024-07-03T08:34:40.7595203-03:00","Protocolo":"@1;DF;258;DF,1,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-03T08:34:40.7700388-03:00","Protocolo":"DF;655;1;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:40.7805525-03:00","Protocolo":"@2;DF;258;Mov,1,0x04,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-03T08:34:41.1582696-03:00","Protocolo":"DF;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-07-03T08:34:41.1683627-03:00","Protocolo":"DF;655;2;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:41.1753574-03:00","Protocolo":"@3;DF;244;check$","Enviado":true},{"Momento":"2024-07-03T08:34:41.197001-03:00","Protocolo":"DF;244;109;6;1;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:41.1990117-03:00","Protocolo":"DF;655;3;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:42.5418196-03:00","Protocolo":"DF;#544;DF;1;0.00;444.00;41.13;20.83;0;0;0;0;21.55$\r","Enviado":false},{"Momento":"2024-07-03T08:34:44.0440589-03:00","Protocolo":"DF;#544;DF;1;0.00;768.65;41.13;20.83;0;0;0;0;21.55$\r","Enviado":false},{"Momento":"2024-07-03T08:34:45.5471152-03:00","Protocolo":"DF;#544;DF;1;0.00;857.33;41.18;20.83;0;0;0;0;21.57$\r","Enviado":false},{"Momento":"2024-07-03T08:34:47.0498507-03:00","Protocolo":"DF;#544;DF;1;0.00;880.11;41.13;20.83;0;0;0;0;21.57$\r","Enviado":false},{"Momento":"2024-07-03T08:34:48.5530613-03:00","Protocolo":"DF;#544;DF;1;0.00;885.96;41.18;20.83;0;0;0;0;21.55$\r","Enviado":false},{"Momento":"2024-07-03T08:34:50.0570751-03:00","Protocolo":"DF;#544;DF;1;0.00;887.76;41.13;20.83;0;0;0;0;21.55$\r","Enviado":false},{"Momento":"2024-07-03T08:34:51.5593049-03:00","Protocolo":"DF;#544;DF;1;0.00;890.16;41.13;20.75;0;0;0;0;21.55$\r","Enviado":false},{"Momento":"2024-07-03T08:34:52.2368098-03:00","Protocolo":"@4;DF;293;Mov,1,60,0$","Enviado":true},{"Momento":"2024-07-03T08:34:52.2438165-03:00","Protocolo":"DF;655;4;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:52.8771095-03:00","Protocolo":"@5;DF;293;Mov,0,0,0$","Enviado":true},{"Momento":"2024-07-03T08:34:52.8836393-03:00","Protocolo":"DF;655;5;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:53.1241492-03:00","Protocolo":"DF;#544;DF;1;71.00;892.10;41.13;20.75;1;1;0;0;21.57$\r","Enviado":false},{"Momento":"2024-07-03T08:34:53.3955492-03:00","Protocolo":"@6;DF;293;Mov,2,60,0$","Enviado":true},{"Momento":"2024-07-03T08:34:53.4020702-03:00","Protocolo":"DF;655;6;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:53.9123079-03:00","Protocolo":"@7;DF;293;Mov,0,0,0$","Enviado":true},{"Momento":"2024-07-03T08:34:53.9188248-03:00","Protocolo":"DF;655;7;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:54.6273978-03:00","Protocolo":"DF;#544;DF;1;243.00;892.26;41.13;20.75;0;0;0;0;21.57$\r","Enviado":false},{"Momento":"2024-07-03T08:34:56.1297469-03:00","Protocolo":"DF;#544;DF;1;0.00;896.48;41.13;20.68;0;0;0;0;21.61$\r","Enviado":false},{"Momento":"2024-07-03T08:34:57.6332603-03:00","Protocolo":"DF;#544;DF;1;0.00;896.85;41.18;20.75;0;0;0;0;21.63$\r","Enviado":false},{"Momento":"2024-07-03T08:34:58.687728-03:00","Protocolo":"@8;DF;258;Mov,0,0x04,2,0,800,0,34,0,14,0,12,0,27,0,26$","Enviado":true},{"Momento":"2024-07-03T08:34:58.6987596-03:00","Protocolo":"DF;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-07-03T08:34:58.7092826-03:00","Protocolo":"DF;655;8;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:58.7198045-03:00","Protocolo":"@9;DF;258;DF,0,1000,0,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-07-03T08:34:58.7293252-03:00","Protocolo":"DF;655;9;$\r","Enviado":false},{"Momento":"2024-07-03T08:34:58.736838-03:00","Protocolo":"@10;DF;244;check$","Enviado":true},{"Momento":"2024-07-03T08:34:58.7438433-03:00","Protocolo":"DF;244;109;6;0;$\r","Enviado":false}

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

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

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"Modulo_ID":"Atu","RequisitarDados":false,"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"CapacidadeReservatorio":30.0,"AtuacaoNivelAlto":true,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":17.1964398137526},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":14.876485059544191},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.103588945512129},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.437319738098896}],"BombaPressurizadora":{"ID":"BOMBA","BombaAtuada":true,"Ligado":true,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[14,35,36,37,5],"PressaoSP":85.0,"Pressao":103.82,"Potencia":0.0},"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":25222.0,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":[1188069.0],"ValorMinimo":-1.281631101976581E+32,"ValorMaximo":2.8836731440342142E+24,"LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","Leituras":[103.82],"ValorMinimo":0.0,"ValorMaximo":127.63,"LimiteMaximo":120.0,"LimiteMinimo":60.0}],"PercentualInicioPulverizacao":0.3,"ScriptDeteccaoErvas":"weed-detector-v7.py","_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"_MassaLeitura":1188069.0,"MassaReservatorio":13.851151655589771,"VolumeReservatorio":13.191573005323591,"PercentualReservatorio":43.9719100177453,"VolumeVazaoAferido":102.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"_LeituraPulsos":0,"_LeituraPeriodo":0,"VazaoFluxoMLpS":0.0,"VolumeVazaoML":880.33879833854928,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"_LeituraPressao":3331.0,"PressaoLinha":103.82,"PressaoLinhaCalc":103.82064053724054} {"Modulo_ID":"Atu","RequisitarDados":false,"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"CapacidadeReservatorio":30.0,"AtuacaoNivelAlto":true,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":17.1964398137526},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":14.876485059544191},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.103588945512129},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.437319738098896}],"BombaPressurizadora":{"ID":"BOMBA","BombaAtuada":false,"Ligado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[14,35,36,37,5],"PressaoSP":85.0,"Pressao":46.61,"Potencia":0.0},"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":25222.0,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":[2010623.62],"ValorMinimo":-1.281631101976581E+32,"ValorMaximo":2.8836731440342142E+24,"LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Inicializado":true,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","Leituras":[46.61],"ValorMinimo":0.0,"ValorMaximo":127.63,"LimiteMaximo":120.0,"LimiteMinimo":60.0}],"PercentualInicioPulverizacao":0.3,"ScriptDeteccaoErvas":"weed-detector-v7.py","_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"_MassaLeitura":2010623.62,"MassaReservatorio":-2.2472371201258845,"VolumeReservatorio":-2.1402258286913183,"PercentualReservatorio":-7.1340860956377279,"VolumeVazaoAferido":102.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"_LeituraPulsos":0,"_LeituraPeriodo":0,"VazaoFluxoMLpS":0.0,"VolumeVazaoML":978.53188147416961,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"_LeituraPressao":1495.64,"PressaoLinha":46.61,"PressaoLinhaCalc":46.616122129426124}

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, <meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style> <style>
#map_487150d07168e27859c014539a529f87 { #map_85649393d37d95a04d4a673695a1001c {
position: relative; position: relative;
width: 100.0%; width: 100.0%;
height: 100.0%; height: 100.0%;
@ -39,14 +39,14 @@
<body> <body>
<div class="folium-map" id="map_487150d07168e27859c014539a529f87" ></div> <div class="folium-map" id="map_85649393d37d95a04d4a673695a1001c" ></div>
</body> </body>
<script> <script>
var map_487150d07168e27859c014539a529f87 = L.map( var map_85649393d37d95a04d4a673695a1001c = L.map(
"map_487150d07168e27859c014539a529f87", "map_85649393d37d95a04d4a673695a1001c",
{ {
center: [0.0, 0.0], center: [0.0, 0.0],
crs: L.CRS.EPSG3857, crs: L.CRS.EPSG3857,
@ -60,13 +60,13 @@
var tile_layer_ce5a855eda901aed36e6d1496051253f = L.tileLayer( var tile_layer_a738e8dfc73e3a6f0518a4edcb353236 = L.tileLayer(
"https://tile.openstreetmap.org/{z}/{x}/{y}.png", "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} {"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_ce5a855eda901aed36e6d1496051253f.addTo(map_487150d07168e27859c014539a529f87); tile_layer_a738e8dfc73e3a6f0518a4edcb353236.addTo(map_85649393d37d95a04d4a673695a1001c);
</script> </script>
@ -87,7 +87,7 @@
} }
trajeto_json_add({"features": []}); trajeto_json_add({"features": []});
trajeto_json.addTo(map_487150d07168e27859c014539a529f87); trajeto_json.addTo(map_85649393d37d95a04d4a673695a1001c);
function adicionarGeometria(novaGeometria) { function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria); trajeto_json.addData(novaGeometria);
@ -145,7 +145,7 @@
var marcadorDinamico = L.marker([0, 0], { var marcadorDinamico = L.marker([0, 0], {
icon: customIcon icon: customIcon
}).addTo(map_487150d07168e27859c014539a529f87); }).addTo(map_85649393d37d95a04d4a673695a1001c);
// Conectar ao broker MQTT // Conectar ao broker MQTT
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
@ -183,7 +183,7 @@
marcadorDinamico.setRotationAngle(angulo); marcadorDinamico.setRotationAngle(angulo);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]); adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
map_487150d07168e27859c014539a529f87.setView(novaPosicao, map_487150d07168e27859c014539a529f87.getZoom()); map_85649393d37d95a04d4a673695a1001c.setView(novaPosicao, map_85649393d37d95a04d4a673695a1001c.getZoom());
}); });
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) { function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {

File diff suppressed because one or more lines are too long

View File

@ -277,8 +277,9 @@ String MontarDadosProtocoloSonarM(int distancias[36], int angulos[36], int posic
} }
String MontarDadosProtocoloBLD(float rpm, double temperatura, double tensao, double corrente_max, bool ligado, Sentido sentido, bool freio, int codigo_alarme, double temp_driver) { String MontarDadosProtocoloBLD(bool iniciado, float rpm, double temperatura, double tensao, double corrente_max, bool ligado, Sentido sentido, bool freio, int codigo_alarme, double temp_driver) {
String Protocolo = String Protocolo = (String)"" +
(iniciado ? "1" : "0") + SplitMessage +
(String)rpm + SplitMessage + (String)rpm + SplitMessage +
(String)temperatura + SplitMessage + (String)temperatura + SplitMessage +
(String)tensao + SplitMessage + (String)tensao + SplitMessage +

View File

@ -0,0 +1,476 @@
// Dispositivo: Movimentação e Direcional Unificados
// Versão Firmware: 6
// Ultima atualização: 01/07/2024
// Atualização: Removido dados do motor de passo
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\ModbusService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\utils.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\Pinout.h"
#include <SimpleKalmanFilter.h>
#define D_Code Mvd
#define VERSION 6
String Mod_ID = "";
#define _pinoAddr0 36
#define _pinoAddr1 39
int _pinModbusRX = 16;
int _pinModbusTX = 17;
int _pinModbusMD = 4;
void AtualizarEnderecoModulo() {
bool A0 = digitalRead(_pinoAddr0) == 1;
bool A1 = digitalRead(_pinoAddr1) == 1;
if (!A0 && !A1) {
Mod_ID = "ET";
}
else if (A0 && !A1) {
Mod_ID = "EF";
}
else if (!A0 && A1) {
Mod_ID = "DT";
}
else if (A0 && A1) {
Mod_ID = "DF";
}
}
long _baudRate = 115200;
volatile bool Conectado = false;
volatile int _TaxaAmostragem = 500;
volatile bool RequisitarDados = false;
class MotorBLDC {
public:
String _ID = "Mov";
int _canal = 4;
volatile bool Iniciado = false;
bool Testando = false;
PinoModel _pinoEN;
PinoModel _pinoFR;
PinoModel _pinoSV;
PinoModel _pinoBK;
PinoModel _pinoTMP;
SimpleKalmanFilter tempKalman = SimpleKalmanFilter(2, 2, 0.01);
byte _endereco;
int _numPolos;
int _rampa;
int _rpmMax;
// Consumo
double RPM;
double RPM_SP;
double Temperatura;
double TemperaturaDriver;
double Tensao;
double CorrenteMax;
bool Ligado;
bool Freio;
Sentido _Sentido = Parado;
int CodAlarme;
// Entrada de dados
double _RPM_SP;
bool _Ligado = false;
bool _Freio = false;
Sentido _SentidoSP = Parado;
volatile bool ComandoEnviado = false;
void Inicializar() {
if (Iniciado) {
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
Iniciado = ConfigurarDriver();
if (_pinoEN.Definido()) {
_pinoEN.Conectar(true);
}
if (_pinoFR.Definido()) {
_pinoFR.Conectar();
}
if (_pinoBK.Definido()) {
_pinoBK.Conectar(true);
}
if (_pinoSV.Definido()) {
AtualizarPWM();
}
if (_pinoTMP.Definido()) {
_pinoTMP.Conectar();
}
if (Iniciado) {
AtualizarDadosControle(true);
}
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void Desligar() {
if (!Iniciado) {
//EnviarDadosSerial(Mod_ID, _ID + " nao esta inicializado");
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
// Parar a execução das tarefas
//vTaskDelete(MovTaskHandle);
// Redefinir as configurações para os valores iniciais
_pinoEN.Desconectar();
_pinoFR.Desconectar();
_pinoSV.Desconectar();
_pinoBK.Desconectar();
_pinoTMP.Desconectar();
//EnviarDadosSerial(Mod_ID, _ID + " Desligado");
Iniciado = false;
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
AtualizarDadosControle(true);
}
void AtualizarDadosControle(bool reset = false) {
if (!Iniciado) {
return;
}
if (reset) {
_Ligado = false;
_Freio = false;
_SentidoSP = Parado;
_RPM_SP = 0;
}
int val = map(_RPM_SP, 0, _rpmMax, 0, 1023);
ledcWrite(_canal, val);
_pinoFR.set(_SentidoSP == Horario ? false : true);
_pinoBK.set(!_Freio);
_pinoEN.set(!_Ligado);
/*ComandoEnviado = true;
EnviarComandoModbus(_endereco, 0x06, 0x006D, _SentidoSP == Horario ? 1 : 0, false);
EnviarComandoModbus(_endereco, 0x06, 0x0056, _RPM_SP, false);
EnviarComandoModbus(_endereco, 0x06, 0x006A, _Freio ? 1 : 0, false);
EnviarComandoModbus(_endereco, 0x06, 0x0066, _Ligado ? 1 : 0, false);
vTaskDelay(100);
ComandoEnviado = false;*/
}
void RequisitarDados() {
AferirDadosDriver();
AferirTemperatura();
//EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sBLD, _ID, MontarDadosProtocoloBLD(RPM, Temperatura, Tensao, CorrenteMax, Ligado, _Sentido, Freio, CodAlarme, TemperaturaDriver)));
}
private:
ModbusGetResponse EnviarComandoModbus(byte endereco, byte funcao, byte registro, int valor, bool aguardarResposta = true) {
const int maxTentativas = 2;
int tentativas = 0;
bool sucesso = false;
ModbusGetResponse resposta;
while (tentativas < maxTentativas && !sucesso) {
uint8_t response[256];
uint8_t length = 0;
sendModbusCommand(endereco, funcao, registro, valor, response, length, aguardarResposta);
if (aguardarResposta) {
if (funcao == 0x03) {
if (length >= 5) {
resposta._success = true;
resposta._address = response[0];
resposta._command_code = response[1];
resposta._num_registers = response[2];
if (resposta._num_registers == 2) {
uint16_t value = (response[3] << 8) | response[4];
resposta._value = static_cast<double>(value);
sucesso = true;
} else if (resposta._num_registers == 4 && length >= 7) {
uint16_t highBytes = (response[3] << 8) | response[4];
uint16_t lowBytes = (response[5] << 8) | response[6];
// Combinar os bytes de alta e baixa ordem em um valor de 32 bits
uint32_t combined = (static_cast<uint32_t>(highBytes) << 16) | lowBytes;
// Reinterpretar o valor combinado como um float
float floatValue;
memcpy(&floatValue, &combined, sizeof(floatValue));
resposta._value = static_cast<double>(floatValue);
sucesso = true;
} else {
resposta._success = false;
}
} else {
resposta._success = false;
}
} else if (funcao == 0x06) {
if (length >= 8) {
resposta._success = true;
resposta._address = response[0];
resposta._command_code = response[1];
resposta._num_registers = 0;
resposta._value = (response[4] << 8) | response[5];
sucesso = true;
} else {
Serial.println("Erro ao enviar comando");
resposta._success = false;
}
}
tentativas++;
} else {
sucesso = true;
resposta._success = sucesso;
}
}
return resposta;
}
bool ConfigurarDriver() {
ModbusGetResponse a = EnviarComandoModbus(_endereco, 0x06, 0x00B6, 1);
if (a._success) {
ModbusGetResponse b = EnviarComandoModbus(_endereco, 0x06, 0x0076, 0);
if (b._success) {
ModbusGetResponse c = EnviarComandoModbus(_endereco, 0x06, 0x0086, _numPolos);
if (c._success) {
ModbusGetResponse d = EnviarComandoModbus(_endereco, 0x06, 0x008A, _rampa);
if (d._success) {
ModbusGetResponse e = EnviarComandoModbus(_endereco, 0x06, 0x0092, _rpmMax);
if (e._success) {
ModbusGetResponse f = EnviarComandoModbus(_endereco, 0x06, 0x00B6, 0);
return f._success;
}
}
}
}
}
return false;
}
void AferirDadosDriver() {
AguardaEnvioComando();
RPM_SP = EnviarComandoModbus(_endereco, 0x03, 0x0056, 1)._value;
AguardaEnvioComando();
RPM = EnviarComandoModbus(_endereco, 0x03, 0x005F, 1)._value;
AguardaEnvioComando();
Ligado = EnviarComandoModbus(_endereco, 0x03, 0x0066, 1)._value == 1;
AguardaEnvioComando();
Freio = EnviarComandoModbus(_endereco, 0x03, 0x006A, 1)._value == 1;
AguardaEnvioComando();
_Sentido = Ligado ? EnviarComandoModbus(_endereco, 0x03, 0x006D, 1)._value == 1 ? Horario : Antihorario : Parado;
AguardaEnvioComando();
CodAlarme = EnviarComandoModbus(_endereco, 0x03, 0x0076, 1)._value;
AguardaEnvioComando();
Tensao = EnviarComandoModbus(_endereco, 0x03, 0x00C8, 2)._value;
AguardaEnvioComando();
CorrenteMax = EnviarComandoModbus(_endereco, 0x03, 0x0096, 2)._value;
AguardaEnvioComando();
TemperaturaDriver = EnviarComandoModbus(_endereco, 0x03, 0x00D2, 2)._value;
}
void AferirTemperatura() {
int leitura = _pinoTMP.get();
float leituraNormalizada = tempKalman.updateEstimate(leitura);
Temperatura = leituraNormalizada;
}
void AguardaEnvioComando() {
while (ComandoEnviado) {
vTaskDelay(50);
}
}
};
MotorBLDC MotorMOV;
void AtualizarPWM() {
if (MotorMOV.Iniciado && MotorMOV._pinoSV.Definido()) {
ledcSetup(MotorMOV._canal, 1000, 10);
ledcAttachPin(MotorMOV._pinoSV.num, MotorMOV._canal);
ledcWrite(MotorMOV._canal, MotorMOV._RPM_SP);
}
}
void SensoriamentoTask(void *pvParameters);
TaskHandle_t SensoriamentoTaskHandle = NULL;
void setup() {
pinMode(_pinoAddr0, INPUT);
pinMode(_pinoAddr1, INPUT);
AtualizarEnderecoModulo();
Serial.begin(_baudRate, SERIAL_8N1, 1, 3);
//Serial.begin(_baudRate);
analogReadResolution(10);
delay(10);
ConfigurarModbus(true, _pinModbusRX, _pinModbusTX, _pinModbusMD);
delay(10);
if (xTaskCreatePinnedToCore(SensoriamentoTask, "SensoriamentoTask", 8000, NULL, 5, &SensoriamentoTaskHandle, tskNO_AFFINITY) != pdPASS) {
Serial.println("Erro ao criar tarefa SensoriamentoTask");
}
}
void SensoriamentoTask(void *pvParameters) {
while (1)
{
Conectado = MotorMOV.Iniciado;
if (!RequisitarDados && Conectado) {
ProcessarReq();
}
vTaskDelay(_TaxaAmostragem);
}
}
void loop() {
std::vector<ProtocoloSerial> protocolos = LerBufferSerialFila(Mod_ID);
for (int i = 0; i < protocolos.size(); i++) {
ProcessarProtocolo(protocolos[i]);
}
delay(1);
}
void ProcessarProtocolo(ProtocoloSerial Mensagem) {
switch (Mensagem.funcao) {
case Chk:
ProcessarChk(Mensagem);
break;
case Cfg:
ProcessarCfg(Mensagem);
break;
case Cmd:
ProcessarCmd(Mensagem);
break;
case Req:
ProcessarReq();
break;
}
if (Mensagem.idMensagem > 0) {
EnviarDadosSerial(Mod_ID, MontarProtocoloMensagemRecebida(Mensagem.idMensagem));
}
}
void ProcessarChk(ProtocoloSerial Mensagem) {
Conectado = MotorMOV.Iniciado;
EnviarDadosSerial(Mod_ID, MontarProtocoloVerificacao(D_Code, VERSION, Conectado));
}
void ProcessarCfg(ProtocoloSerial Mensagem) {
std::vector<String> Partes = SplitString(Mensagem.protocolo, SplitParams);
String ID = Partes[0];
bool Conectar = Partes[1] == "1";
if (ID == Mod_ID) {
_TaxaAmostragem = Partes[2].toInt();
RequisitarDados = Partes[3].toInt();
TiposBarramentos txB = (TiposBarramentos)Partes[4].toInt();
int txP = Partes[5].toInt();
TiposBarramentos rxB = (TiposBarramentos)Partes[6].toInt();
int rxP = Partes[7].toInt();
TiposBarramentos MtxB = (TiposBarramentos)Partes[8].toInt();
int MtxP = Partes[9].toInt();
TiposBarramentos MrxB = (TiposBarramentos)Partes[10].toInt();
int MrxP = Partes[11].toInt();
TiposBarramentos MmdB = (TiposBarramentos)Partes[12].toInt();
int MmdP = Partes[13].toInt();
_pinModbusMD = MmdP;
_pinModbusRX = MrxP;
_pinModbusTX = MtxP;
//ConfigurarModbus(Conectar, _pinModbusRX, _pinModbusTX, _pinModbusMD);
}
else if (ID == MotorMOV._ID) {
if (Conectar) {
MotorMOV._endereco = stringToByte(Partes[2]);
MotorMOV._numPolos = Partes[3].toInt();
MotorMOV._rampa = Partes[4].toInt();
MotorMOV._rpmMax = Partes[5].toInt();
MotorMOV._pinoTMP = PinoModel(Partes[7].toInt(), (TiposBarramentos)Partes[6].toInt(), _INPUT, ANALOGICO);
MotorMOV._pinoEN = PinoModel(Partes[9].toInt(), (TiposBarramentos)Partes[8].toInt(), _OUTPUT);
MotorMOV._pinoFR = PinoModel(Partes[11].toInt(), (TiposBarramentos)Partes[10].toInt(), _OUTPUT);
MotorMOV._pinoSV = PinoModel(Partes[13].toInt(), (TiposBarramentos)Partes[12].toInt(), _PWM);
MotorMOV._pinoBK = PinoModel(Partes[15].toInt(), (TiposBarramentos)Partes[14].toInt(), _OUTPUT);
MotorMOV.Inicializar();
}
else {
MotorMOV.Desligar();
}
}
}
void ProcessarCmd(ProtocoloSerial Mensagem) {
std::vector<String> Partes = SplitString(Mensagem.protocolo, SplitParams);
String ID = Partes[0];
if (ID == MotorMOV._ID && MotorMOV.Iniciado) {
MotorMOV._SentidoSP = (Sentido)Partes[1].toInt();
MotorMOV._Ligado = MotorMOV._SentidoSP != Parado;
MotorMOV._RPM_SP = Partes[2].toInt();
MotorMOV._Freio = Partes[3] == "1";
MotorMOV.AtualizarDadosControle();
}
}
void ProcessarReq() {
//std::vector<String> Partes = SplitString(Mensagem.protocolo, SplitParams);
//Serial.println("Processando req...");
if (MotorMOV.Iniciado) {
MotorMOV.RequisitarDados();
}
if (MotorMOV.Iniciado) {
//Serial.println("Enviando dados...");
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sBLD, Mod_ID, MontarDadosProtocoloBLD(
MotorMOV.Iniciado,
MotorMOV.RPM,
MotorMOV.Temperatura,
MotorMOV.Tensao,
MotorMOV.CorrenteMax,
MotorMOV.Ligado,
MotorMOV._Sentido,
MotorMOV.Freio,
MotorMOV.CodAlarme,
MotorMOV.TemperaturaDriver
)));
}
}

View File

@ -1,6 +1,6 @@
// Dispositivo: Sensoriamento // Dispositivo: Sensoriamento
// Versão Firmware: 9 // Versão Firmware: 9
// Ultima atualização: 28/06/2024 // Ultima atualização: 01/07/2024
// Atualização: Atualizado protocolo de comunicação padrão // Atualização: Atualizado protocolo de comunicação padrão
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h" #include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
@ -254,14 +254,22 @@ class SensorCorrente {
return; return;
} }
if (_Endereco > 0x00) { if (_Endereco > 0x00) {
if (_INA == 219) { Wire.beginTransmission(_Endereco);
sINA219 = new Adafruit_INA219(_Endereco); byte error = Wire.endTransmission();
Iniciado = sINA219->begin(); if (error == 0) {
if (_INA == 219) {
sINA219 = new Adafruit_INA219(_Endereco);
Iniciado = sINA219->begin();
}
else if (_INA == 226) {
sINA226 = new INA226(_Endereco);
Iniciado = sINA226->begin();
sINA226->setMaxCurrentShunt(1, 0.002);
}
} }
else if (_INA == 226) { else {
sINA226 = new INA226(_Endereco); Iniciado = false;
Iniciado = sINA226->begin(); EnviarDadosSerial(Mod_ID, _ID + " não iniciado, endereço " + _Endereco + " não encontrado!");
sINA226->setMaxCurrentShunt(1, 0.002);
} }
if (Iniciado) { if (Iniciado) {

View File

@ -0,0 +1,69 @@
import cv2
import os
import numpy as np
def process_image(image_path, output_image_path, output_label_path):
# Carregar a imagem
image = cv2.imread(image_path)
# Converter para escala de cinza
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Aplicar blur para reduzir o ruído
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# Aplicar a detecção de borda (Canny)
edges = cv2.Canny(blurred, 50, 150)
# Encontrar contornos
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Encontrar a maior área de contorno, assumindo que é a erva daninha
if contours:
contour = max(contours, key=cv2.contourArea)
# Obter a caixa delimitadora da erva daninha
x, y, w, h = cv2.boundingRect(contour)
# Desenhar a caixa delimitadora na imagem para visualização
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# Salvar a imagem com a caixa delimitadora
cv2.imwrite(output_image_path, image)
# Normalizar as coordenadas
height, width = image.shape[:2]
x_center = (x + x + w) / 2 / width
y_center = (y + y + h) / 2 / height
bbox_width = w / width
bbox_height = h / height
# Classe (por exemplo, 0 se for a primeira classe)
class_id = 0
# Escrever o label no formato YOLO
label = f"{class_id} {x_center:.6f} {y_center:.6f} {bbox_width:.6f} {bbox_height:.6f}"
print(f"Label for {image_path}: {label}")
# Salvar o label em um arquivo .txt
with open(output_label_path, 'w') as f:
f.write(label)
else:
print(f"No contours found for {image_path}")
def process_images(input_dir, output_dir):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.endswith(".jpg"):
image_path = os.path.join(input_dir, filename)
output_image_path = os.path.join(output_dir, filename)
output_label_path = os.path.join(output_dir, filename.replace('.jpg', '.txt'))
process_image(image_path, output_image_path, output_label_path)
input_dir = 'C:\\Users\\USER\\Downloads\\weed-datasets-master\\corn weed datasets\\bluegrass' # Substitua pelo caminho da sua pasta de entrada
output_dir = 'C:\\train\\yolov7\\train\\new_ervas\\dataset\\images\\train' # Substitua pelo caminho da sua pasta de saída
process_images(input_dir, output_dir)

View File

@ -0,0 +1,99 @@
import os
import requests
from PIL import Image, ImageDraw
import numpy as np
import json
# Função para enviar requisição para o ChatGPT e obter a resposta
def get_gpt_response(image_path):
# Dados do formulário
form = {
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "Identify the weed in this image, returning just label in yolov7 format",
}
]
}
formData = json.dumps(form)
# Abrir a imagem como arquivo binário
with open(image_path, 'rb') as f:
image_data = f.read()
# Configuração da requisição
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer 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",
}
url = "https://api.openai.com/v1/chat/completions"
# Fazendo a requisição POST
response = requests.post(url, headers=headers, data=formData)
if response.status_code == 200:
return response.json()['choices'][0]['message']['content']
else:
print(f"Erro ao obter resposta do ChatGPT: {response.status_code}")
try:
error_data = response.json()
print(error_data)
except ValueError:
print("Resposta inválida do servidor")
return None
# Função para gerar arquivo de rótulos no formato YOLOv7
def generate_yolov7_label(label_file, class_name, bbox_coords, image_size):
x_center = bbox_coords[0] + bbox_coords[2] / 2.0
y_center = bbox_coords[1] + bbox_coords[3] / 2.0
width = bbox_coords[2]
height = bbox_coords[3]
x_center /= image_size[0]
y_center /= image_size[1]
width /= image_size[0]
height /= image_size[1]
with open(label_file, 'w') as f:
f.write(f"{class_name} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")
# Função para desenhar o bbox na imagem
def draw_bbox(image_path, bbox_coords, output_image_path):
image = Image.open(image_path)
draw = ImageDraw.Draw(image)
draw.rectangle(bbox_coords, outline='red', width=3)
image.save(output_image_path)
# Pasta de entrada e saída
input_folder = 'imagens/'
output_folder = 'saida/'
# Iterar sobre todas as imagens na pasta de entrada
for filename in os.listdir(input_folder):
if filename.endswith('.jpg') or filename.endswith('.png'):
image_path = os.path.join(input_folder, filename)
output_label_file = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}.txt")
output_image_path = os.path.join(output_folder, filename)
# Obter rótulo do ChatGPT
label = get_gpt_response(image_path)
print(label)
# Suponha que o ChatGPT retorna algo como "weed: dandelion, bbox: [x, y, width, height]"
if label.startswith("weed:"):
parts = label.split(',')
class_name = parts[0].split(':')[1].strip()
bbox_coords = list(map(int, parts[1].split(':')[1].strip()[1:-1].split()))
# Gerar arquivo de rótulo YOLOv7
image_size = Image.open(image_path).size
generate_yolov7_label(output_label_file, class_name, bbox_coords, image_size)
# Desenhar o bbox na imagem
draw_bbox(image_path, bbox_coords, output_image_path)
print(f"Processado: {filename}")
else:
print(f"Não foi possível identificar a erva em: {filename}")

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB