controle de trafego udp
This commit is contained in:
parent
e718a3858f
commit
c95564d49f
|
|
@ -29,7 +29,7 @@ namespace AgroBase.Forms
|
|||
|
||||
Variaveis.IniciarMQTT();
|
||||
|
||||
Variaveis.IniciarUDP();
|
||||
//Variaveis.IniciarUDP();
|
||||
|
||||
APIService.IniciarRotinas();
|
||||
|
||||
|
|
|
|||
|
|
@ -1543,6 +1543,19 @@ namespace AgroBase.Models
|
|||
return;
|
||||
}
|
||||
|
||||
if (controleBase.Dispositivo == T_Code.Ipb)
|
||||
{
|
||||
if (controleBase._comp_value == true)
|
||||
{
|
||||
Variaveis.IniciarUDP();
|
||||
}
|
||||
else
|
||||
{
|
||||
Variaveis.StopUdpChannel();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (controleBase.Dispositivo == T_Code.Gps)
|
||||
{
|
||||
var (la_frontal, la_lateral) = ((JObject)controleBase._comp_value).ToObject<(double?, double?)>();
|
||||
|
|
|
|||
|
|
@ -215,12 +215,7 @@ namespace AgroBase.Models
|
|||
|
||||
private static void StartUdpChannel()
|
||||
{
|
||||
try
|
||||
{
|
||||
UdpChannel?.Stop();
|
||||
UdpChannel?.Dispose();
|
||||
}
|
||||
catch { }
|
||||
StopUdpChannel();
|
||||
|
||||
UdpChannel = new UdpReliableChannel();
|
||||
UdpChannel.Start(VariaveisPortas.Ethernet_UDP_RX);
|
||||
|
|
@ -232,6 +227,16 @@ namespace AgroBase.Models
|
|||
Interlocked.Exchange(ref _lastPacketTicksUtc, DateTime.UtcNow.Ticks);
|
||||
}
|
||||
|
||||
public static void StopUdpChannel()
|
||||
{
|
||||
try
|
||||
{
|
||||
UdpChannel?.Stop();
|
||||
UdpChannel?.Dispose();
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
private static void OnUdpPacket(byte type, byte[] payload, IPEndPoint from)
|
||||
{
|
||||
// Qualquer pacote marca link vivo (inclusive heartbeat)
|
||||
|
|
@ -384,6 +389,7 @@ namespace AgroBase.Models
|
|||
await Task.CompletedTask;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,11 +44,18 @@ public sealed class UdpReliableChannel : IDisposable
|
|||
|
||||
public void SetRemote(string ip, int port)
|
||||
{
|
||||
var addr = IPAddress.Parse(ip);
|
||||
|
||||
if (Remote == null || !Remote.Address.Equals(addr) || Remote.Port != port)
|
||||
if (string.IsNullOrEmpty(ip))
|
||||
{
|
||||
Remote = new IPEndPoint(addr, port);
|
||||
Remote = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
var addr = IPAddress.Parse(ip);
|
||||
|
||||
if (Remote == null || !Remote.Address.Equals(addr) || Remote.Port != port)
|
||||
{
|
||||
Remote = new IPEndPoint(addr, port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -297,7 +297,7 @@ namespace OperationControl.Controls
|
|||
{
|
||||
EmergencyActivated = !EmergencyActivated;
|
||||
//VariaveisControleOperacao.EnviarComandoParada(emergencia: EmergencyActivated);
|
||||
_ = VariaveisControleOperacao.EnviarComandoParadaUDP(ipRover: VariaveisControleOperacao.RoverEmFoco?.IP, emergencia: EmergencyActivated);
|
||||
_ = VariaveisControleOperacao.EnviarComandoParadaUDP(emergencia: EmergencyActivated);
|
||||
}
|
||||
|
||||
private void ManualControlPad_PauseClicked(object? sender, EventArgs e)
|
||||
|
|
@ -342,7 +342,7 @@ namespace OperationControl.Controls
|
|||
if (_lastDirKey != dir)
|
||||
{
|
||||
//VariaveisControleOperacao.EnviarComandoDirecional(dir, Convert.ToInt32(AngleControl), MoveTypeControl);
|
||||
VariaveisControleOperacao.EnviarComandoDirecionalUDP(ipRover: VariaveisControleOperacao.RoverEmFoco?.IP, dir, Convert.ToInt32(AngleControl), MoveTypeControl);
|
||||
VariaveisControleOperacao.EnviarComandoDirecionalUDP(dir, Convert.ToInt32(AngleControl), MoveTypeControl);
|
||||
_lastDirKey = dir;
|
||||
}
|
||||
|
||||
|
|
@ -353,7 +353,7 @@ namespace OperationControl.Controls
|
|||
if (_lastMovKey != mov)
|
||||
{
|
||||
//VariaveisControleOperacao.EnviarComandoMovimentacao(mov, Convert.ToInt32(SpeedControl));
|
||||
VariaveisControleOperacao.EnviarComandoMovimentacaoUDP(ipRover: VariaveisControleOperacao.RoverEmFoco?.IP, mov, Convert.ToInt32(SpeedControl));
|
||||
VariaveisControleOperacao.EnviarComandoMovimentacaoUDP(mov, Convert.ToInt32(SpeedControl));
|
||||
_lastMovKey = mov;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -289,6 +289,21 @@ namespace OperationControl.Models
|
|||
|
||||
#region Controle
|
||||
|
||||
public static void EnviarComandoIniciarUDP(string ipRover, bool iniciar)
|
||||
{
|
||||
if (iniciar)
|
||||
Variaveis.UdpChannel.SetRemote(ipRover, VariaveisPortas.Ethernet_UDP_RX);
|
||||
else
|
||||
Variaveis.UdpChannel.SetRemote(null, VariaveisPortas.Ethernet_UDP_RX);
|
||||
|
||||
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
||||
{
|
||||
Momento = DateTime.Now,
|
||||
Dispositivo = AgroBase.Models.Enums.T_Code.Ipb,
|
||||
_comp_value = iniciar
|
||||
});
|
||||
}
|
||||
|
||||
public static void EnviarComandoIniciarOperacao(bool iniciar, bool simulador = false)
|
||||
{
|
||||
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
||||
|
|
@ -319,11 +334,8 @@ namespace OperationControl.Models
|
|||
EnviarDadosControle(SelectedRoverId, cmd);
|
||||
}
|
||||
|
||||
public static Task EnviarComandoParadaUDP(string ipRover, bool emergencia = false, bool pausa = false)
|
||||
public static Task EnviarComandoParadaUDP(bool emergencia = false, bool pausa = false)
|
||||
{
|
||||
if (string.IsNullOrEmpty(ipRover)) return Task.CompletedTask;
|
||||
Variaveis.UdpChannel.SetRemote(ipRover, VariaveisPortas.Ethernet_UDP_RX);
|
||||
|
||||
var msg = new UdpCtrlMessage
|
||||
{
|
||||
Device = (byte)AgroBase.Models.Enums.T_Code.Vzo,
|
||||
|
|
@ -433,10 +445,8 @@ namespace OperationControl.Models
|
|||
});
|
||||
}
|
||||
|
||||
public static void EnviarComandoDirecionalUDP(string ipRover, AgroBase.Models.Enums.Direcao direcao, double angulo, AgroBase.Models.Enums.TipoMovimentoDirecional tipoMov)
|
||||
public static void EnviarComandoDirecionalUDP(AgroBase.Models.Enums.Direcao direcao, double angulo, AgroBase.Models.Enums.TipoMovimentoDirecional tipoMov)
|
||||
{
|
||||
if (string.IsNullOrEmpty(ipRover)) return;
|
||||
Variaveis.UdpChannel.SetRemote(ipRover, VariaveisPortas.Ethernet_UDP_RX);
|
||||
var key = DeParaDirecaoTecla(direcao);
|
||||
|
||||
var msg = new UdpCtrlMessage
|
||||
|
|
@ -466,10 +476,8 @@ namespace OperationControl.Models
|
|||
});
|
||||
}
|
||||
|
||||
public static void EnviarComandoMovimentacaoUDP(string ipRover, AgroBase.Models.Enums.Direcao direcao, double velPct)
|
||||
public static void EnviarComandoMovimentacaoUDP(AgroBase.Models.Enums.Direcao direcao, double velPct)
|
||||
{
|
||||
if (string.IsNullOrEmpty(ipRover)) return;
|
||||
Variaveis.UdpChannel.SetRemote(ipRover, VariaveisPortas.Ethernet_UDP_RX);
|
||||
var key = DeParaDirecaoTecla(direcao);
|
||||
|
||||
var msg = new UdpCtrlMessage
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ namespace OperationControl.Windows
|
|||
{
|
||||
PararStreamCameraFrontal();
|
||||
PararStreamCameraErvas();
|
||||
VariaveisControleOperacao.EnviarComandoIniciarUDP(VariaveisControleOperacao.RoverEmFoco?.IP, false);
|
||||
}
|
||||
|
||||
VariaveisControleOperacao.SelectedRoverId = selecionado.ToString();
|
||||
|
|
@ -204,6 +205,7 @@ namespace OperationControl.Windows
|
|||
btnParametros_Atualizar_Click(sender, e);
|
||||
IniciarStreamCameraFrontal();
|
||||
IniciarStreamCameraErvas();
|
||||
VariaveisControleOperacao.EnviarComandoIniciarUDP(VariaveisControleOperacao.RoverEmFoco?.IP, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue