Ajustado recebimento de mensagem UDP
This commit is contained in:
parent
270a7ed3d8
commit
d93ebf48d9
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue