Ajustado recebimento de mensagem UDP

This commit is contained in:
Diego Freitas 2026-03-05 08:02:01 -03:00
parent 270a7ed3d8
commit d93ebf48d9
2 changed files with 15 additions and 22 deletions

View File

@ -1,6 +1,7 @@
using System;
using System.Buffers.Binary; // se seu .NET não tiver, eu te passo versão sem isso
using System.Windows.Forms;
using static AgroBase.Models.Enums;
[Flags]
public enum UdpCtrlFlags : byte
@ -17,7 +18,7 @@ public sealed class UdpCtrlMessage
public byte Version = 1;
public byte Device;
public UdpCtrlFlags Flags;
public Keys Key;
public BotoesJoystick Key;
public short P1;
public short P2;
@ -61,7 +62,7 @@ public sealed class UdpCtrlMessage
m.Flags = (UdpCtrlFlags)payload[2];
ushort k = (ushort)((payload[3] << 8) | payload[4]);
m.Key = (Keys)k;
m.Key = (BotoesJoystick)k;
m.P1 = (short)((payload[5] << 8) | payload[6]);
m.P2 = (short)((payload[7] << 8) | payload[8]);

View File

@ -206,20 +206,16 @@ namespace AgroBase.Models
bool emergencia = (msg.Flags & UdpCtrlFlags.Emergencia) != 0;
bool pausa = (msg.Flags & UdpCtrlFlags.Pausa) != 0;
if (emergencia)
{
Variaveis.OperacaoEmAndamento.Emergencia = true;
return;
}
if (pausa)
{
Variaveis.OperacaoEmAndamento.Pausa = true;
return;
}
var disp = (T_Code)msg.Device;
OperacaoComandoBaseModel controle = new OperacaoComandoBaseModel()
{
Emergencia = emergencia,
Pausa = pausa,
Tecla = msg.Key,
Dispositivo = disp,
};
// aplica parâmetros por dispositivo (alinhado ao MQTT)
if ((msg.Flags & UdpCtrlFlags.HasPayload) != 0)
{
@ -229,21 +225,17 @@ namespace AgroBase.Models
var tipoMov = (TipoMovimentoDirecional)(byte)msg.P2;
// atualiza seu contexto de controle (igual mqtt faz)
Variaveis.OperacaoEmAndamento.Controle.Angulo = angulo;
Variaveis.OperacaoEmAndamento.Controle.TipoMovimento = tipoMov;
controle.Controle.AnguloSP = angulo;
controle.Controle.TipoMovimentoDirecional = tipoMov;
}
else if (disp == T_Code.Mov)
{
double velPct = msg.P1 / 100.0;
Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP = velPct;
controle.Controle.PercentualVelocidadeSP = velPct;
}
}
// aplica tecla (se tiver)
if ((msg.Flags & UdpCtrlFlags.HasKey) != 0)
{
GeneralJoystick.EnviaComandoMotor(msg.Key, disp, ForcarComando: true, ID: null);
}
Variaveis.OperacaoEmAndamento.ExecutaComandoDaBase(controle);
};
// Tick 100ms (ok). Se quiser mais responsivo, use 50ms.