ajustes no controle
This commit is contained in:
parent
ee9a93837a
commit
de5f1440f2
|
|
@ -799,7 +799,9 @@ namespace AgroBase.Forms.IHM
|
||||||
Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(x => x.MovMotor.Comandar = false);
|
Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(x => x.MovMotor.Comandar = false);
|
||||||
Modulo.MovMotor.Comandar = true;
|
Modulo.MovMotor.Comandar = true;
|
||||||
|
|
||||||
GeneralJoystick.EnviaComandoMotor(Sentido == Direcao.Frente ? Keys.Up : Sentido == Direcao.Tras ? Keys.Down : Keys.Escape, T_Code.Mov);
|
//GeneralJoystick.EnviaComandoMotor(Sentido == Direcao.Frente ? Keys.Up : Sentido == Direcao.Tras ? Keys.Down : Keys.Escape, T_Code.Mov);
|
||||||
|
var b = Sentido == Direcao.Frente ? BotoesJoystick.Xis : Sentido == Direcao.Tras ? BotoesJoystick.Quadrado : BotoesJoystick.Vazio;
|
||||||
|
GeneralJoystick.ProcessarDadosControle(b, b == BotoesJoystick.Vazio, valorDesejado: Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent);
|
||||||
|
|
||||||
DateTime Inicio = DateTime.Now;
|
DateTime Inicio = DateTime.Now;
|
||||||
bool Sucesso = false;
|
bool Sucesso = false;
|
||||||
|
|
|
||||||
|
|
@ -487,7 +487,9 @@ namespace AgroBase.Forms.IHM
|
||||||
{
|
{
|
||||||
// Lógica para enviar comando ao robô baseado em MovKey
|
// Lógica para enviar comando ao robô baseado em MovKey
|
||||||
Console.WriteLine($"Movimento: MovKey={MovKey}");
|
Console.WriteLine($"Movimento: MovKey={MovKey}");
|
||||||
GeneralJoystick.EnviaComandoMotor(MovKey, Enums.T_Code.Mov);
|
//GeneralJoystick.EnviaComandoMotor(MovKey, Enums.T_Code.Mov);
|
||||||
|
var comando = GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == MovKey);
|
||||||
|
GeneralJoystick.ProcessarDadosControle(comando.botaoJoy, false, valorDesejado: Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent);
|
||||||
prevMovKey = MovKey; // Atualiza o estado anterior
|
prevMovKey = MovKey; // Atualiza o estado anterior
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -496,7 +498,9 @@ namespace AgroBase.Forms.IHM
|
||||||
{
|
{
|
||||||
// Lógica para enviar comando ao robô baseado em DirKey
|
// Lógica para enviar comando ao robô baseado em DirKey
|
||||||
Console.WriteLine($"Direção: DirKey={DirKey}");
|
Console.WriteLine($"Direção: DirKey={DirKey}");
|
||||||
GeneralJoystick.EnviaComandoMotor(DirKey, Enums.T_Code.Dir);
|
//GeneralJoystick.EnviaComandoMotor(DirKey, Enums.T_Code.Dir);
|
||||||
|
var comando = GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == DirKey);
|
||||||
|
GeneralJoystick.ProcessarDadosControle(comando.botaoJoy, false, valorDesejado: Variaveis.OperacaoEmAndamento.Parametros.Controle.DirAnguloMaximo);
|
||||||
prevDirKey = DirKey; // Atualiza o estado anterior
|
prevDirKey = DirKey; // Atualiza o estado anterior
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -561,7 +565,8 @@ namespace AgroBase.Forms.IHM
|
||||||
pnlFreio.Invalidate(); // Redesenha o painel
|
pnlFreio.Invalidate(); // Redesenha o painel
|
||||||
|
|
||||||
// Enviar comando de freio
|
// Enviar comando de freio
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Space, Enums.T_Code.Mov);
|
//GeneralJoystick.EnviaComandoMotor(Keys.Space, Enums.T_Code.Mov);
|
||||||
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.Bolinha, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -592,12 +597,14 @@ namespace AgroBase.Forms.IHM
|
||||||
pnlFreio.Invalidate(); // Redesenha o painel
|
pnlFreio.Invalidate(); // Redesenha o painel
|
||||||
|
|
||||||
// Enviar comando para desativar o freio
|
// Enviar comando para desativar o freio
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Escape, Enums.T_Code.Mov);
|
//GeneralJoystick.EnviaComandoMotor(Keys.Escape, Enums.T_Code.Mov);
|
||||||
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.Bolinha, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Freio travado, mantém travado
|
// Freio travado, mantém travado
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Space, Enums.T_Code.Mov);
|
//GeneralJoystick.EnviaComandoMotor(Keys.Space, Enums.T_Code.Mov);
|
||||||
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.Bolinha, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1157,7 +1157,7 @@ namespace AgroBase.Forms.Operacoes
|
||||||
txtErvasTerreno.Text = Log.Atuador.PercentualErvasTerreno.ToString("0.00");
|
txtErvasTerreno.Text = Log.Atuador.PercentualErvasTerreno.ToString("0.00");
|
||||||
txtTipoMovimento.Text = Log.Controle.TipoMovimento.ToString();
|
txtTipoMovimento.Text = Log.Controle.TipoMovimento.ToString();
|
||||||
txtVelocidade.Text = (Log.Movimentacao.VelocidadeMedia * 3.6).ToString("0.00") + " km/h (" + Log.Movimentacao.VelocidadeMedia.ToString("0.00") + " m/s)";
|
txtVelocidade.Text = (Log.Movimentacao.VelocidadeMedia * 3.6).ToString("0.00") + " km/h (" + Log.Movimentacao.VelocidadeMedia.ToString("0.00") + " m/s)";
|
||||||
txtDirecaoControle.Text = (Log.Controle?.Direcao ?? Enums.Direcao.Parado).ToString() + " (" + (Log.Controle?.Latencia ?? 0).ToString("0.00") + " s)";
|
txtDirecaoControle.Text = (Log.Controle?.TiposControle?.FirstOrDefault(x => x.Tipo == Enums.T_Code.Dir)?.DirecaoAtual ?? Enums.Direcao.Parado).ToString() + " (" + (Log.Controle?.Latencia ?? 0).ToString("0.00") + " s)";
|
||||||
txtVelocidadeControle.Text = ((Log.Controle?.PercentualVelocidadeSP ?? 0) / VariaveisEquipamento.RPM_Max_Roda * 100).ToString() + " rpm";
|
txtVelocidadeControle.Text = ((Log.Controle?.PercentualVelocidadeSP ?? 0) / VariaveisEquipamento.RPM_Max_Roda * 100).ToString() + " rpm";
|
||||||
txtErvasIdentificadas.Text = $"{totalAtuacoes}";
|
txtErvasIdentificadas.Text = $"{totalAtuacoes}";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using AgroBase.Models;
|
||||||
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using static AgroBase.Models.Enums;
|
using static AgroBase.Models.Enums;
|
||||||
|
|
@ -27,13 +28,23 @@ namespace AgroBase.Forms
|
||||||
private void frmJoystick_KeyDown(object sender, KeyEventArgs e)
|
private void frmJoystick_KeyDown(object sender, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
var comando = GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == e.KeyCode);
|
var comando = GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == e.KeyCode);
|
||||||
GeneralJoystick.EnviaComandoMotor(e.KeyCode, comando?.Dispositivo ?? T_Code.Vzo);
|
if (comando == null) return;
|
||||||
|
switch (comando.Dispositivo)
|
||||||
|
{
|
||||||
|
case T_Code.Mov:
|
||||||
|
GeneralJoystick.ProcessarDadosControle(comando.botaoJoy, false, valorDesejado: Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent);
|
||||||
|
break;
|
||||||
|
case T_Code.Dir:
|
||||||
|
GeneralJoystick.ProcessarDadosControle(comando.botaoJoy, false, valorDesejado: Variaveis.OperacaoEmAndamento.Parametros.Controle.DirAnguloMaximo);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void frmJoystick_KeyUp(object sender, KeyEventArgs e)
|
private void frmJoystick_KeyUp(object sender, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
var comando = GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == e.KeyCode);
|
var comando = GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == e.KeyCode);
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Escape, comando?.Dispositivo ?? T_Code.Vzo);
|
if (comando == null) return;
|
||||||
|
GeneralJoystick.ProcessarDadosControle(comando.botaoJoy, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ namespace AgroBase.Forms
|
||||||
{
|
{
|
||||||
//var Mod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.EnderecoByte == Addr);
|
//var Mod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.EnderecoByte == Addr);
|
||||||
//Mod.MovMotor.EnviarComandoControle(Enums.Direcao.Frente);
|
//Mod.MovMotor.EnviarComandoControle(Enums.Direcao.Frente);
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Up, Enums.T_Code.Mov);
|
GeneralJoystick.ProcessarDadosControle(Enums.BotoesJoystick.Xis, false, valorDesejado: Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -147,7 +147,7 @@ namespace AgroBase.Forms
|
||||||
{
|
{
|
||||||
//var Mod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.EnderecoByte == Addr);
|
//var Mod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.EnderecoByte == Addr);
|
||||||
//Mod.MovMotor.EnviarComandoControle(Enums.Direcao.Tras);
|
//Mod.MovMotor.EnviarComandoControle(Enums.Direcao.Tras);
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Down, Enums.T_Code.Mov);
|
GeneralJoystick.ProcessarDadosControle(Enums.BotoesJoystick.Quadrado, false, valorDesejado: Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -161,7 +161,7 @@ namespace AgroBase.Forms
|
||||||
{
|
{
|
||||||
//var Mod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.EnderecoByte == Addr);
|
//var Mod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.EnderecoByte == Addr);
|
||||||
//Mod.MovMotor.EnviarComandoControle(Enums.Direcao.Parado);
|
//Mod.MovMotor.EnviarComandoControle(Enums.Direcao.Parado);
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Escape, Enums.T_Code.Mov);
|
GeneralJoystick.ProcessarDadosControle(Enums.BotoesJoystick.Xis, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -175,7 +175,7 @@ namespace AgroBase.Forms
|
||||||
{
|
{
|
||||||
//var Mod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.EnderecoByte == Addr);
|
//var Mod = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.MovMotor.EnderecoByte == Addr);
|
||||||
//Mod.MovMotor.EnviarComandoControle(Enums.Direcao.EmFreio);
|
//Mod.MovMotor.EnviarComandoControle(Enums.Direcao.EmFreio);
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Space, Enums.T_Code.Mov);
|
GeneralJoystick.ProcessarDadosControle(Enums.BotoesJoystick.Bolinha, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@ namespace AgroBase
|
||||||
trkKmh.Maximum = 100;
|
trkKmh.Maximum = 100;
|
||||||
|
|
||||||
trkRPM.Minimum = Variaveis.OperacaoEmAndamento.Parametros.Controle?.MovVelocidadeCErvasPercent ?? 15;
|
trkRPM.Minimum = Variaveis.OperacaoEmAndamento.Parametros.Controle?.MovVelocidadeCErvasPercent ?? 15;
|
||||||
trkRPM.Maximum = VariaveisEquipamento.RPM_Max_Roda;
|
trkRPM.Maximum = Variaveis.OperacaoEmAndamento.Parametros.Controle?.MovVelocidadeSErvasPercent ?? 50;
|
||||||
|
|
||||||
AtualizaRPM((int)Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP);
|
AtualizaRPM((int)Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,22 +22,18 @@ namespace AgroBase
|
||||||
public static List<ComandosDispositivo> Comandos = new List<ComandosDispositivo>() { };
|
public static List<ComandosDispositivo> Comandos = new List<ComandosDispositivo>() { };
|
||||||
public static List<DeParaComandos> DeParaComandos = new List<DeParaComandos>()
|
public static List<DeParaComandos> DeParaComandos = new List<DeParaComandos>()
|
||||||
{
|
{
|
||||||
new DeParaComandos() { key = Keys.Left, Dispositivo = T_Code.Dir, botaoJoy = BotoesJoystick.SEsquerda, PararAoSoltar = true },
|
new DeParaComandos() { key = Keys.Left, botaoJoy = BotoesJoystick.SEsquerda, direcao = Direcao.Esquerda, Dispositivo = T_Code.Dir, PararAoSoltar = true },
|
||||||
new DeParaComandos() { key = Keys.Left, Dispositivo = T_Code.Dir, botaoJoy = BotoesJoystick.AEEsquerda, PararAoSoltar = true },
|
new DeParaComandos() { key = Keys.Left, botaoJoy = BotoesJoystick.AEEsquerda, direcao = Direcao.Esquerda, Dispositivo = T_Code.Dir, PararAoSoltar = true },
|
||||||
new DeParaComandos() { key = Keys.Right, Dispositivo = T_Code.Dir, botaoJoy = BotoesJoystick.SDireita, PararAoSoltar = true },
|
new DeParaComandos() { key = Keys.Right, botaoJoy = BotoesJoystick.SDireita, direcao = Direcao.Direita, Dispositivo = T_Code.Dir, PararAoSoltar = true },
|
||||||
new DeParaComandos() { key = Keys.Right, Dispositivo = T_Code.Dir, botaoJoy = BotoesJoystick.AEDireita, PararAoSoltar = true },
|
new DeParaComandos() { key = Keys.Right, botaoJoy = BotoesJoystick.AEDireita, direcao = Direcao.Direita, Dispositivo = T_Code.Dir, PararAoSoltar = true },
|
||||||
new DeParaComandos() { key = Keys.R, Dispositivo = T_Code.Dir, botaoJoy = BotoesJoystick.R3, PararAoSoltar = false },
|
new DeParaComandos() { key = Keys.R, botaoJoy = BotoesJoystick.R3, direcao = Direcao.Referenciar, Dispositivo = T_Code.Dir, PararAoSoltar = false },
|
||||||
new DeParaComandos() { key = Keys.Up, Dispositivo = T_Code.Mov, botaoJoy = BotoesJoystick.Xis, PararAoSoltar = true },
|
new DeParaComandos() { key = Keys.Up, botaoJoy = BotoesJoystick.Xis, direcao = Direcao.Frente, Dispositivo = T_Code.Mov, PararAoSoltar = true },
|
||||||
new DeParaComandos() { key = Keys.Up, Dispositivo = T_Code.Mov, botaoJoy = BotoesJoystick.R2A, PararAoSoltar = true },
|
new DeParaComandos() { key = Keys.Up, botaoJoy = BotoesJoystick.R2A, direcao = Direcao.Frente, Dispositivo = T_Code.Mov, PararAoSoltar = true },
|
||||||
new DeParaComandos() { key = Keys.Down, Dispositivo = T_Code.Mov, botaoJoy = BotoesJoystick.Quadrado, PararAoSoltar = true },
|
new DeParaComandos() { key = Keys.Down, botaoJoy = BotoesJoystick.Quadrado, direcao = Direcao.Tras, Dispositivo = T_Code.Mov, PararAoSoltar = true },
|
||||||
new DeParaComandos() { key = Keys.Down, Dispositivo = T_Code.Mov, botaoJoy = BotoesJoystick.L2A, PararAoSoltar = true },
|
new DeParaComandos() { key = Keys.Down, botaoJoy = BotoesJoystick.L2A, direcao = Direcao.Tras, Dispositivo = T_Code.Mov, PararAoSoltar = true },
|
||||||
new DeParaComandos() { key = Keys.Space, Dispositivo = T_Code.Mov, botaoJoy = BotoesJoystick.Bolinha, PararAoSoltar = true },
|
new DeParaComandos() { key = Keys.Space, botaoJoy = BotoesJoystick.Bolinha, direcao = Direcao.EmFreio, Dispositivo = T_Code.Mov, PararAoSoltar = true },
|
||||||
new DeParaComandos() { key = Keys.Subtract, Dispositivo = T_Code.Mov, botaoJoy = BotoesJoystick.L1, PararAoSoltar = false },
|
new DeParaComandos() { key = Keys.Subtract, botaoJoy = BotoesJoystick.L1, Dispositivo = T_Code.Mov, PararAoSoltar = false },
|
||||||
new DeParaComandos() { key = Keys.Add, Dispositivo = T_Code.Mov, botaoJoy = BotoesJoystick.R1, PararAoSoltar = false },
|
new DeParaComandos() { key = Keys.Add, botaoJoy = BotoesJoystick.R1, Dispositivo = T_Code.Mov, PararAoSoltar = false },
|
||||||
new DeParaComandos() { key = Keys.D1, Dispositivo = T_Code.Atu, botaoJoy = BotoesJoystick.ADEsquerda, PararAoSoltar = true, IDcontrolar = "B01" },
|
|
||||||
new DeParaComandos() { key = Keys.D2, Dispositivo = T_Code.Atu, botaoJoy = BotoesJoystick.ADBaixo, PararAoSoltar = true, IDcontrolar = "B02" },
|
|
||||||
new DeParaComandos() { key = Keys.D3, Dispositivo = T_Code.Atu, botaoJoy = BotoesJoystick.ADCima, PararAoSoltar = true, IDcontrolar = "B03" },
|
|
||||||
new DeParaComandos() { key = Keys.D4, Dispositivo = T_Code.Atu, botaoJoy = BotoesJoystick.ADDireita, PararAoSoltar = true, IDcontrolar = "B04" },
|
|
||||||
};
|
};
|
||||||
public static List<BotoesJoystick> BotoesJoyPressionados = new List<BotoesJoystick>() { };
|
public static List<BotoesJoystick> BotoesJoyPressionados = new List<BotoesJoystick>() { };
|
||||||
public static List<TipoMovimentoDirecional> MovimentosCombinados = new List<TipoMovimentoDirecional>()
|
public static List<TipoMovimentoDirecional> MovimentosCombinados = new List<TipoMovimentoDirecional>()
|
||||||
|
|
@ -185,8 +181,10 @@ namespace AgroBase
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
EnviaComandoMotor(Keys.Escape, T_Code.Mov, ForcarComando: true);
|
//EnviaComandoMotor(Keys.Escape, T_Code.Mov, ForcarComando: true);
|
||||||
EnviaComandoMotor(Keys.Escape, T_Code.Dir, ForcarComando: true);
|
//EnviaComandoMotor(Keys.Escape, T_Code.Dir, ForcarComando: true);
|
||||||
|
ProcessarDadosControle(BotoesJoystick.Xis, true);
|
||||||
|
ProcessarDadosControle(BotoesJoystick.SEsquerda, true);
|
||||||
AtualizaDispositivo();
|
AtualizaDispositivo();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -517,129 +515,75 @@ namespace AgroBase
|
||||||
.ToList();
|
.ToList();
|
||||||
botoes_pressionados_g.ForEach(botao =>
|
botoes_pressionados_g.ForEach(botao =>
|
||||||
{
|
{
|
||||||
EnviarComandoMotorAnalogico(botao.botao, botao.dados?.LastOrDefault()?.valor ?? 0, false);
|
ProcessarDadosControle(botao.botao, false, valorJoy: botao.dados?.LastOrDefault()?.valor ?? 0);
|
||||||
//Console.WriteLine($"Botao pressionado: {botao.botao}, Valor: {string.Join(", ", botao.dados.Select(y => y.valor))}");
|
//Console.WriteLine($"Botao pressionado: {botao.botao}, Valor: {string.Join(", ", botao.dados.Select(y => y.valor))}");
|
||||||
BotoesJoyPressionados.Add(botao.botao);
|
BotoesJoyPressionados.Add(botao.botao);
|
||||||
var Comando = DeParaComandos.FirstOrDefault(x => x.botaoJoy == botao.botao);
|
|
||||||
if (Comando != null)
|
|
||||||
{
|
|
||||||
EnviaComandoMotor(Comando.key, Comando.Dispositivo, ID: Comando.IDcontrolar, botao: botao.botao);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
_botoesSoltos.ForEach(botao =>
|
_botoesSoltos.ForEach(botao =>
|
||||||
{
|
{
|
||||||
EnviarComandoMotorAnalogico(botao, 0, true);
|
ProcessarDadosControle(botao, true, valorJoy: 0);
|
||||||
//Console.WriteLine($"Botao solto: {botao}");
|
//Console.WriteLine($"Botao solto: {botao}");
|
||||||
BotoesJoyPressionados.Remove(botao);
|
BotoesJoyPressionados.Remove(botao);
|
||||||
var Comando = DeParaComandos.FirstOrDefault(x => x.botaoJoy == botao);
|
|
||||||
if (Comando != null && Comando.PararAoSoltar)
|
|
||||||
{
|
|
||||||
EnviaComandoMotor(Keys.Escape, Comando.Dispositivo, ID: Comando.IDcontrolar, botao: botao, ForcarComando: true);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void EnviarComandoMotorAnalogico(BotoesJoystick botao, double valor, bool solto)
|
public static void ProcessarDadosControle(BotoesJoystick botao, bool solto, double? valorJoy = null, double? valorDesejado = null, string ID = "", bool ForcarComando = false)
|
||||||
{
|
{
|
||||||
T_Code dispositivo = T_Code.Vzo;
|
var comando = DeParaComandos.FirstOrDefault(x => x.botaoJoy == botao)?.Clone();
|
||||||
Direcao direcao = Direcao.Parado;
|
comando?.CalcularValor(solto, valorJoy: valorJoy, valorDesejado: valorDesejado);
|
||||||
double percent = 0;
|
if (comando != null)
|
||||||
double centro = 32767;
|
EnviarComandoMotorAtualizado(comando, ID: ID, ForcarComando: ForcarComando);
|
||||||
double deadzone = 3000;
|
|
||||||
double maximo = 65535.0;
|
|
||||||
var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
|
|
||||||
|
|
||||||
switch (botao)
|
|
||||||
{
|
|
||||||
case BotoesJoystick.AEEsquerda:
|
|
||||||
dispositivo = T_Code.Dir;
|
|
||||||
direcao = Direcao.Esquerda;
|
|
||||||
if (valor < centro - deadzone)
|
|
||||||
percent = (centro - valor) / centro;
|
|
||||||
else
|
|
||||||
percent = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BotoesJoystick.AEDireita:
|
|
||||||
direcao = Direcao.Direita;
|
|
||||||
dispositivo = T_Code.Dir;
|
|
||||||
if (valor > centro + deadzone)
|
|
||||||
percent = (valor - centro) / (maximo - centro);
|
|
||||||
else
|
|
||||||
percent = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BotoesJoystick.AECima:
|
|
||||||
if (valor < centro - deadzone)
|
|
||||||
percent = (centro - valor) / centro;
|
|
||||||
else
|
|
||||||
percent = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BotoesJoystick.AEBaixo:
|
|
||||||
if (valor > centro + deadzone)
|
|
||||||
percent = (valor - centro) / (maximo - centro);
|
|
||||||
else
|
|
||||||
percent = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BotoesJoystick.SEsquerda:
|
|
||||||
direcao = Direcao.Esquerda;
|
|
||||||
dispositivo = T_Code.Dir;
|
|
||||||
percent = 1.0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BotoesJoystick.SDireita:
|
|
||||||
direcao = Direcao.Direita;
|
|
||||||
dispositivo = T_Code.Dir;
|
|
||||||
percent = 1.0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BotoesJoystick.L2A:
|
|
||||||
direcao = Direcao.Tras;
|
|
||||||
dispositivo = T_Code.Mov;
|
|
||||||
percent = valor / maximo;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BotoesJoystick.R2A:
|
|
||||||
direcao = Direcao.Frente;
|
|
||||||
dispositivo = T_Code.Mov;
|
|
||||||
percent = valor / maximo;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BotoesJoystick.Xis:
|
|
||||||
direcao = Direcao.Frente;
|
|
||||||
dispositivo = T_Code.Mov;
|
|
||||||
percent = ((double)pControle.MovVelocidadeCErvasPercent / (double)pControle.MovVelocidadeSErvasPercent);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BotoesJoystick.Quadrado:
|
|
||||||
direcao = Direcao.Tras;
|
|
||||||
dispositivo = T_Code.Mov;
|
|
||||||
percent = ((double)pControle.MovVelocidadeCErvasPercent / (double)pControle.MovVelocidadeSErvasPercent);
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
percent = FuncoesMatematicas.Clamp(percent, 0, 1);
|
private static void EnviarComandoMotorAtualizado(DeParaComandos Comando, string ID = "", bool ForcarComando = false)
|
||||||
|
{
|
||||||
//Console.WriteLine($"botao: {botao}, valor: {valor}, percentual: {percent * 100.0:F2}%");
|
bool deveInterromper =
|
||||||
|
!Forms.IHM.frmDiagnosticos.Diagnosticando && !ForcarComando &&
|
||||||
|
(
|
||||||
|
Variaveis.OperacaoEmAndamento.Modo == ModoOperacao.Manual && (
|
||||||
|
Variaveis.OperacaoEmAndamento.Calibrando ||
|
||||||
|
!Variaveis.OperacaoEmAndamento.OperacaoLiberada ||
|
||||||
|
!Variaveis.OperacaoEmAndamento.Iniciado ||
|
||||||
|
!VerificaComandoValidoSonar(Comando.key)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if (deveInterromper) return;
|
||||||
|
|
||||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
_Controle.Direcao = direcao;
|
if (Comando.direcao.HasValue)
|
||||||
int mx = direcao == Direcao.Esquerda || direcao == Direcao.Tras ? -1 : 1;
|
_Controle.TiposControle.FirstOrDefault(x => x.Tipo == Comando.Dispositivo).DirecaoAtual = Comando.direcao.Value;
|
||||||
switch (dispositivo)
|
|
||||||
|
for (int i = 0; i < 1; i++)
|
||||||
|
{
|
||||||
|
switch (Comando.Dispositivo)
|
||||||
{
|
{
|
||||||
case T_Code.Dir:
|
|
||||||
_Controle.Angulo = solto ? 0 : pControle.DirAnguloMaximo * percent * mx;
|
|
||||||
break;
|
|
||||||
case T_Code.Mov:
|
case T_Code.Mov:
|
||||||
double map = FuncoesMatematicas.Map(valor, 0, maximo, pControle.MovVelocidadeCErvasPercent, pControle.MovVelocidadeSErvasPercent);
|
_Controle.PercentualVelocidadeSP = Comando.ValorAplicar;
|
||||||
_Controle.PercentualVelocidadeSP = solto ? 0 : map * mx;
|
_Controle.EmFreio = Comando.EstadoAplicar;
|
||||||
|
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(ForcarComando, new List<T_Code>() { Comando.Dispositivo });
|
||||||
|
break;
|
||||||
|
case T_Code.Dir:
|
||||||
|
if (MovimentosCombinados.Contains(Variaveis.OperacaoEmAndamento.Controle.TipoMovimento))
|
||||||
|
{
|
||||||
|
Task.Run(async () => await Variaveis.OperacaoEmAndamento.DispMvd.Dados.ExecutarMovimentoDirecionalCombinado(Comando.direcao.Value));
|
||||||
|
}
|
||||||
|
else if (Comando.direcao == Direcao.Referenciar)
|
||||||
|
{
|
||||||
|
List<string> modsControlar = (!string.IsNullOrEmpty(ID)) ? new List<string>() { ID } : null;
|
||||||
|
Task.Run(async () => await Variaveis.OperacaoEmAndamento.DispMvd.Dados.RealizarReferenciamentoDirecional(ModsReferenciar: modsControlar));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_Controle.Angulo = Comando.ValorAplicar;
|
||||||
|
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(ForcarComando, new List<T_Code>() { Comando.Dispositivo });
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AtualizaConsole(_Controle.TiposControle.FirstOrDefault(x => x.Tipo == Comando.Dispositivo).DirecaoAtual.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
public static void EnviaComandoMotor(Keys Tecla, T_Code Disp = T_Code.Vzo, string ID = null, BotoesJoystick botao = BotoesJoystick.Vazio, bool ForcarComando = false)
|
public static void EnviaComandoMotor(Keys Tecla, T_Code Disp = T_Code.Vzo, string ID = null, BotoesJoystick botao = BotoesJoystick.Vazio, bool ForcarComando = false)
|
||||||
{
|
{
|
||||||
// Verifica se deve interromper o fluxo
|
// Verifica se deve interromper o fluxo
|
||||||
|
|
@ -775,25 +719,6 @@ namespace AgroBase
|
||||||
{
|
{
|
||||||
Comandos.Add(Comando);
|
Comandos.Add(Comando);
|
||||||
|
|
||||||
/*for (int i = 0; i < 1; i++)
|
|
||||||
{
|
|
||||||
var Dispositivo = DispCon.FirstOrDefault(x => x.Dispositivo == Comando.Dispositivo);
|
|
||||||
if (Dispositivo != null)
|
|
||||||
{
|
|
||||||
var Protocolos =
|
|
||||||
Dispositivo.Dados is MovimentacaoModel ? ((MovimentacaoModel)Dispositivo.Dados).Motores.Select(x => x.ProtocoloComando(DirecaoAtual)) :
|
|
||||||
Dispositivo.Dados is DirecionalModel ? ((DirecionalModel)Dispositivo.Dados).Motores.Select(x => x.ProtocoloComando(DirecaoAtual)) :
|
|
||||||
null;
|
|
||||||
foreach (var ProtocoloMotor in Protocolos)
|
|
||||||
{
|
|
||||||
Dispositivo.EnviarDadosSerial(ProtocoloMotor);
|
|
||||||
Task.Delay(10);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Task.Delay(100);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
for (int i = 0; i < 1; i++)
|
for (int i = 0; i < 1; i++)
|
||||||
{
|
{
|
||||||
switch (Comando.Dispositivo)
|
switch (Comando.Dispositivo)
|
||||||
|
|
@ -986,18 +911,6 @@ namespace AgroBase
|
||||||
if (DeveParar)
|
if (DeveParar)
|
||||||
{
|
{
|
||||||
ComandosImpedidos.Add(Keys.Up);
|
ComandosImpedidos.Add(Keys.Up);
|
||||||
/*switch (Sonar.Resumo.DirecaoDesvio)
|
|
||||||
{
|
|
||||||
case Direcao.Parado:
|
|
||||||
ComandosImpedidos.Add(Keys.Up);
|
|
||||||
break;
|
|
||||||
case Direcao.Esquerda:
|
|
||||||
ComandosImpedidos.Add(Keys.Right);
|
|
||||||
break;
|
|
||||||
case Direcao.Direita:
|
|
||||||
ComandosImpedidos.Add(Keys.Left);
|
|
||||||
break;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UltrasonicA05Service.Iniciado)
|
if (UltrasonicA05Service.Iniciado)
|
||||||
|
|
@ -1041,6 +954,171 @@ namespace AgroBase
|
||||||
public T_Code Dispositivo { get; set; }
|
public T_Code Dispositivo { get; set; }
|
||||||
public bool PararAoSoltar { get; set; }
|
public bool PararAoSoltar { get; set; }
|
||||||
public string IDcontrolar { get; set; }
|
public string IDcontrolar { get; set; }
|
||||||
|
public Direcao? direcao { get; set; }
|
||||||
|
public double ValorAplicar { get; set; }
|
||||||
|
public bool EstadoAplicar { get; set; }
|
||||||
|
|
||||||
|
public void CalcularValor(bool solto, double? valorJoy = null, double? valorDesejado = null)
|
||||||
|
{
|
||||||
|
double centro = 32767.0;
|
||||||
|
double deadzone = 3000.0;
|
||||||
|
|
||||||
|
var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
|
||||||
|
var controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
|
|
||||||
|
double velMin = pControle.MovVelocidadeCErvasPercent;
|
||||||
|
double velMax = pControle.MovVelocidadeSErvasPercent;
|
||||||
|
|
||||||
|
double valorSaida = 0;
|
||||||
|
bool estadoSaida = false;
|
||||||
|
|
||||||
|
switch (botaoJoy)
|
||||||
|
{
|
||||||
|
// =========================================================
|
||||||
|
// DIREÇÃO ANALÓGICA
|
||||||
|
// =========================================================
|
||||||
|
case BotoesJoystick.AEEsquerda:
|
||||||
|
{
|
||||||
|
double percent = 0;
|
||||||
|
if (valorJoy != null)
|
||||||
|
{
|
||||||
|
if (!solto && valorJoy.Value < centro - deadzone)
|
||||||
|
percent = (centro - valorJoy.Value) / centro;
|
||||||
|
percent = FuncoesMatematicas.Clamp(percent, 0, 1);
|
||||||
|
valorSaida = solto ? 0 : pControle.DirAnguloMaximo * percent;
|
||||||
|
}
|
||||||
|
else if (valorDesejado != null)
|
||||||
|
{
|
||||||
|
valorSaida = solto ? 0 : valorDesejado.Value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BotoesJoystick.AEDireita:
|
||||||
|
{
|
||||||
|
if (valorJoy != null)
|
||||||
|
{
|
||||||
|
double percent = 0;
|
||||||
|
if (!solto && valorJoy.Value > centro + deadzone)
|
||||||
|
percent = (valorJoy.Value - centro) / (GeneralJoystick.MaximoAnalogico - centro);
|
||||||
|
percent = FuncoesMatematicas.Clamp(percent, 0, 1);
|
||||||
|
valorSaida = solto ? 0 : pControle.DirAnguloMaximo * percent;
|
||||||
|
}
|
||||||
|
else if (valorDesejado != null)
|
||||||
|
{
|
||||||
|
valorSaida = valorDesejado.Value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Não usados por enquanto
|
||||||
|
case BotoesJoystick.AECima:
|
||||||
|
case BotoesJoystick.AEBaixo:
|
||||||
|
break;
|
||||||
|
|
||||||
|
// =========================================================
|
||||||
|
// DIREÇÃO DIGITAL
|
||||||
|
// =========================================================
|
||||||
|
case BotoesJoystick.SEsquerda:
|
||||||
|
case BotoesJoystick.SDireita:
|
||||||
|
valorSaida = solto ? 0 : valorDesejado ?? pControle.DirAnguloMaximo;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// =========================================================
|
||||||
|
// MOVIMENTO ANALÓGICO
|
||||||
|
// =========================================================
|
||||||
|
case BotoesJoystick.L2A:
|
||||||
|
case BotoesJoystick.R2A:
|
||||||
|
{
|
||||||
|
if (solto)
|
||||||
|
{
|
||||||
|
valorSaida = 0;
|
||||||
|
}
|
||||||
|
else if (valorJoy != null)
|
||||||
|
{
|
||||||
|
double gatilho = FuncoesMatematicas.Clamp(valorJoy.Value / GeneralJoystick.MaximoAnalogico, 0, 1);
|
||||||
|
valorSaida = FuncoesMatematicas.Map(gatilho, 0, 1, velMin, velMax);
|
||||||
|
}
|
||||||
|
else if (valorDesejado != null)
|
||||||
|
{
|
||||||
|
valorSaida = valorDesejado.Value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// =========================================================
|
||||||
|
// MOVIMENTO DIGITAL FIXO NO MÍNIMO
|
||||||
|
// =========================================================
|
||||||
|
case BotoesJoystick.Xis:
|
||||||
|
case BotoesJoystick.Quadrado:
|
||||||
|
valorSaida = solto ? 0 : valorDesejado ?? velMin;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// =========================================================
|
||||||
|
// FREIO
|
||||||
|
// =========================================================
|
||||||
|
case BotoesJoystick.Bolinha:
|
||||||
|
valorSaida = 0;
|
||||||
|
estadoSaida = !solto;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// =========================================================
|
||||||
|
// AJUSTE FINO DE VELOCIDADE
|
||||||
|
// Só funciona se já estiver em movimento
|
||||||
|
// =========================================================
|
||||||
|
case BotoesJoystick.L1:
|
||||||
|
{
|
||||||
|
if (solto)
|
||||||
|
{
|
||||||
|
valorSaida = controle.PercentualVelocidadeSP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var ultima_direcao = controle.TiposControle?.FirstOrDefault(x => x.Tipo == Dispositivo)?.UltimaDirecao ?? Direcao.Parado;
|
||||||
|
bool emMovimento = ultima_direcao == Direcao.Frente || ultima_direcao == Direcao.Tras;
|
||||||
|
if (emMovimento && controle.PercentualVelocidadeSP > 0)
|
||||||
|
valorSaida = Math.Max(velMin, controle.PercentualVelocidadeSP - 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BotoesJoystick.R1:
|
||||||
|
{
|
||||||
|
if (solto)
|
||||||
|
{
|
||||||
|
valorSaida = controle.PercentualVelocidadeSP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var ultima_direcao = controle.TiposControle?.FirstOrDefault(x => x.Tipo == T_Code.Mov)?.UltimaDirecao ?? Direcao.Parado;
|
||||||
|
bool emMovimento = ultima_direcao == Direcao.Frente || ultima_direcao == Direcao.Tras;
|
||||||
|
if (emMovimento && controle.PercentualVelocidadeSP > 0)
|
||||||
|
valorSaida = Math.Min(velMax, controle.PercentualVelocidadeSP + 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (solto && PararAoSoltar)
|
||||||
|
direcao = Direcao.Parado;
|
||||||
|
ValorAplicar = valorSaida;
|
||||||
|
EstadoAplicar = estadoSaida;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeParaComandos Clone()
|
||||||
|
{
|
||||||
|
return new DeParaComandos()
|
||||||
|
{
|
||||||
|
botaoJoy = botaoJoy,
|
||||||
|
key = key,
|
||||||
|
Dispositivo = Dispositivo,
|
||||||
|
PararAoSoltar = PararAoSoltar,
|
||||||
|
IDcontrolar = IDcontrolar,
|
||||||
|
direcao = direcao,
|
||||||
|
ValorAplicar = ValorAplicar,
|
||||||
|
EstadoAplicar = EstadoAplicar,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ComparativoAnalogico
|
public enum ComparativoAnalogico
|
||||||
|
|
@ -1056,4 +1134,6 @@ namespace AgroBase
|
||||||
public int valor { get; set; }
|
public int valor { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -394,7 +394,7 @@ namespace AgroBase.Models.Modules
|
||||||
|
|
||||||
int RpmCorrigido = Math.Min((int)(VariaveisEquipamento.RPM_Max_Roda * VariaveisEquipamento.RelacaoRPM), Math.Max(RPM_SP != 0 ? (int)(VariaveisEquipamento.RPM_Min_Roda * VariaveisEquipamento.RelacaoRPM) : 0, Convert.ToInt32(RPM_SP * FatorCompensacaoCurvas)));
|
int RpmCorrigido = Math.Min((int)(VariaveisEquipamento.RPM_Max_Roda * VariaveisEquipamento.RelacaoRPM), Math.Max(RPM_SP != 0 ? (int)(VariaveisEquipamento.RPM_Min_Roda * VariaveisEquipamento.RelacaoRPM) : 0, Convert.ToInt32(RPM_SP * FatorCompensacaoCurvas)));
|
||||||
//Console.WriteLine($"[{Mod_ID}] Direcao: {DirecaoAtual}, RPM_SP: {RPM_SP / VariaveisEquipamento.RelacaoRPM}, FC: {FatorCompensacaoCurvas.ToString("0.00")}, Novo RPM: {RpmCorrigido / VariaveisEquipamento.RelacaoRPM}");
|
//Console.WriteLine($"[{Mod_ID}] Direcao: {DirecaoAtual}, RPM_SP: {RPM_SP / VariaveisEquipamento.RelacaoRPM}, FC: {FatorCompensacaoCurvas.ToString("0.00")}, Novo RPM: {RpmCorrigido / VariaveisEquipamento.RelacaoRPM}");
|
||||||
RPM_SP = RpmCorrigido;
|
RPM_SP = Math.Abs(RpmCorrigido);
|
||||||
FatorCompensacaoCurvasAnterior = FatorCompensacaoCurvas;
|
FatorCompensacaoCurvasAnterior = FatorCompensacaoCurvas;
|
||||||
|
|
||||||
Variaveis.OperacaoEmAndamento.SimulacaoRpmControle = _Controle.PercentualVelocidadeSP;
|
Variaveis.OperacaoEmAndamento.SimulacaoRpmControle = _Controle.PercentualVelocidadeSP;
|
||||||
|
|
|
||||||
|
|
@ -441,10 +441,9 @@ namespace AgroBase.Models
|
||||||
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
|
Variaveis.OperacaoEmAndamento.Controle = new OperacaoControleModel()
|
||||||
{
|
{
|
||||||
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
|
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
|
||||||
Angulo = 25,
|
Angulo = 0,
|
||||||
Direcao = Direcao.Parado,
|
|
||||||
EmFreio = false,
|
EmFreio = false,
|
||||||
PercentualVelocidadeSP = 20,
|
PercentualVelocidadeSP = 0,
|
||||||
AlturaBarra = 50,
|
AlturaBarra = 50,
|
||||||
TiposControle = new List<OperacaoControleTipoModel>()
|
TiposControle = new List<OperacaoControleTipoModel>()
|
||||||
{
|
{
|
||||||
|
|
@ -455,7 +454,9 @@ namespace AgroBase.Models
|
||||||
DelayEnvioComando = 250,
|
DelayEnvioComando = 250,
|
||||||
DelayEnvioComandoExtra = 0,
|
DelayEnvioComandoExtra = 0,
|
||||||
Comandos = new List<string>(),
|
Comandos = new List<string>(),
|
||||||
UltimoComando = DateTime.Now
|
UltimoComando = DateTime.Now,
|
||||||
|
DirecaoAtual = Direcao.Parado,
|
||||||
|
UltimaDirecao = Direcao.Parado
|
||||||
},
|
},
|
||||||
new OperacaoControleTipoModel()
|
new OperacaoControleTipoModel()
|
||||||
{
|
{
|
||||||
|
|
@ -464,7 +465,9 @@ namespace AgroBase.Models
|
||||||
DelayEnvioComando = 250,
|
DelayEnvioComando = 250,
|
||||||
DelayEnvioComandoExtra = 0,
|
DelayEnvioComandoExtra = 0,
|
||||||
Comandos = new List<string>(),
|
Comandos = new List<string>(),
|
||||||
UltimoComando = DateTime.Now
|
UltimoComando = DateTime.Now,
|
||||||
|
DirecaoAtual = Direcao.Parado,
|
||||||
|
UltimaDirecao = Direcao.Parado
|
||||||
},
|
},
|
||||||
new OperacaoControleTipoModel()
|
new OperacaoControleTipoModel()
|
||||||
{
|
{
|
||||||
|
|
@ -577,7 +580,6 @@ namespace AgroBase.Models
|
||||||
{
|
{
|
||||||
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
|
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
|
||||||
Angulo = 0,
|
Angulo = 0,
|
||||||
Direcao = Direcao.Parado,
|
|
||||||
EmFreio = false,
|
EmFreio = false,
|
||||||
PercentualVelocidadeSP = 0,
|
PercentualVelocidadeSP = 0,
|
||||||
AlturaBarra = 50,
|
AlturaBarra = 50,
|
||||||
|
|
@ -590,7 +592,9 @@ namespace AgroBase.Models
|
||||||
DelayEnvioComando = 500,
|
DelayEnvioComando = 500,
|
||||||
DelayEnvioComandoExtra = 0,
|
DelayEnvioComandoExtra = 0,
|
||||||
Comandos = new List<string>(),
|
Comandos = new List<string>(),
|
||||||
UltimoComando = DateTime.Now
|
UltimoComando = DateTime.Now,
|
||||||
|
DirecaoAtual = Direcao.Parado,
|
||||||
|
UltimaDirecao = Direcao.Parado
|
||||||
},
|
},
|
||||||
new OperacaoControleTipoModel()
|
new OperacaoControleTipoModel()
|
||||||
{
|
{
|
||||||
|
|
@ -599,7 +603,9 @@ namespace AgroBase.Models
|
||||||
DelayEnvioComando = 300,
|
DelayEnvioComando = 300,
|
||||||
DelayEnvioComandoExtra = 0,
|
DelayEnvioComandoExtra = 0,
|
||||||
Comandos = new List<string>(),
|
Comandos = new List<string>(),
|
||||||
UltimoComando = DateTime.Now
|
UltimoComando = DateTime.Now,
|
||||||
|
DirecaoAtual = Direcao.Parado,
|
||||||
|
UltimaDirecao = Direcao.Parado
|
||||||
},
|
},
|
||||||
new OperacaoControleTipoModel()
|
new OperacaoControleTipoModel()
|
||||||
{
|
{
|
||||||
|
|
@ -711,7 +717,6 @@ namespace AgroBase.Models
|
||||||
{
|
{
|
||||||
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
|
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
|
||||||
Angulo = 0,
|
Angulo = 0,
|
||||||
Direcao = Direcao.Parado,
|
|
||||||
EmFreio = false,
|
EmFreio = false,
|
||||||
PercentualVelocidadeSP = 0,
|
PercentualVelocidadeSP = 0,
|
||||||
TiposControle = new List<OperacaoControleTipoModel>()
|
TiposControle = new List<OperacaoControleTipoModel>()
|
||||||
|
|
@ -723,7 +728,9 @@ namespace AgroBase.Models
|
||||||
DelayEnvioComando = 500,
|
DelayEnvioComando = 500,
|
||||||
DelayEnvioComandoExtra = 0,
|
DelayEnvioComandoExtra = 0,
|
||||||
Comandos = new List<string>(),
|
Comandos = new List<string>(),
|
||||||
UltimoComando = DateTime.Now
|
UltimoComando = DateTime.Now,
|
||||||
|
DirecaoAtual = Direcao.Parado,
|
||||||
|
UltimaDirecao = Direcao.Parado
|
||||||
},
|
},
|
||||||
new OperacaoControleTipoModel()
|
new OperacaoControleTipoModel()
|
||||||
{
|
{
|
||||||
|
|
@ -732,7 +739,9 @@ namespace AgroBase.Models
|
||||||
DelayEnvioComando = 1000,
|
DelayEnvioComando = 1000,
|
||||||
DelayEnvioComandoExtra = 0,
|
DelayEnvioComandoExtra = 0,
|
||||||
Comandos = new List<string>(),
|
Comandos = new List<string>(),
|
||||||
UltimoComando = DateTime.Now
|
UltimoComando = DateTime.Now,
|
||||||
|
DirecaoAtual = Direcao.Parado,
|
||||||
|
UltimaDirecao = Direcao.Parado
|
||||||
},
|
},
|
||||||
new OperacaoControleTipoModel()
|
new OperacaoControleTipoModel()
|
||||||
{
|
{
|
||||||
|
|
@ -814,7 +823,6 @@ namespace AgroBase.Models
|
||||||
{
|
{
|
||||||
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
|
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
|
||||||
Angulo = 0,
|
Angulo = 0,
|
||||||
Direcao = Direcao.Parado,
|
|
||||||
EmFreio = false,
|
EmFreio = false,
|
||||||
PercentualVelocidadeSP = 0,
|
PercentualVelocidadeSP = 0,
|
||||||
TiposControle = new List<OperacaoControleTipoModel>()
|
TiposControle = new List<OperacaoControleTipoModel>()
|
||||||
|
|
@ -826,7 +834,9 @@ namespace AgroBase.Models
|
||||||
DelayEnvioComando = 500,
|
DelayEnvioComando = 500,
|
||||||
DelayEnvioComandoExtra = 0,
|
DelayEnvioComandoExtra = 0,
|
||||||
Comandos = new List<string>(),
|
Comandos = new List<string>(),
|
||||||
UltimoComando = DateTime.Now
|
UltimoComando = DateTime.Now,
|
||||||
|
DirecaoAtual = Direcao.Parado,
|
||||||
|
UltimaDirecao = Direcao.Parado
|
||||||
},
|
},
|
||||||
new OperacaoControleTipoModel()
|
new OperacaoControleTipoModel()
|
||||||
{
|
{
|
||||||
|
|
@ -835,7 +845,9 @@ namespace AgroBase.Models
|
||||||
DelayEnvioComando = 200,
|
DelayEnvioComando = 200,
|
||||||
DelayEnvioComandoExtra = 0,
|
DelayEnvioComandoExtra = 0,
|
||||||
Comandos = new List<string>(),
|
Comandos = new List<string>(),
|
||||||
UltimoComando = DateTime.Now
|
UltimoComando = DateTime.Now,
|
||||||
|
DirecaoAtual = Direcao.Parado,
|
||||||
|
UltimaDirecao = Direcao.Parado
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -1344,85 +1356,55 @@ namespace AgroBase.Models
|
||||||
var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
|
var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
|
||||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
var _ControleAnterior = Variaveis.OperacaoEmAndamento.ControleAnterior;
|
var _ControleAnterior = Variaveis.OperacaoEmAndamento.ControleAnterior;
|
||||||
|
var DirecaoAtual = _Controle.TiposControle.FirstOrDefault(x => x.Tipo == Tipo).DirecaoAtual;
|
||||||
|
|
||||||
switch (Tipo)
|
switch (Tipo)
|
||||||
{
|
{
|
||||||
case T_Code.Mov:
|
case T_Code.Mov:
|
||||||
{
|
{
|
||||||
if (_Controle.EmFreio)
|
|
||||||
{
|
|
||||||
_Controle.Direcao = Direcao.EmFreio;
|
|
||||||
}
|
|
||||||
else if (_Controle.RPM_SP == 0)
|
|
||||||
{
|
|
||||||
_Controle.Direcao = Direcao.Parado;
|
|
||||||
}
|
|
||||||
else if (_Controle.RPM_SP < 0)
|
|
||||||
{
|
|
||||||
_Controle.PercentualVelocidadeSP *= -1;
|
|
||||||
_Controle.Direcao = Direcao.Tras;
|
|
||||||
}
|
|
||||||
else if (_Controle.RPM_SP > 0)
|
|
||||||
{
|
|
||||||
_Controle.Direcao = Direcao.Frente;
|
|
||||||
}
|
|
||||||
|
|
||||||
var modsAtualizar = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(Mod => Mod.MovMotor.NovoRPMNecessario).Select(x => x.Modulo_ID).ToList();
|
var modsAtualizar = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(Mod => Mod.MovMotor.NovoRPMNecessario).Select(x => x.Modulo_ID).ToList();
|
||||||
bool envioNecessario = ForcarEnvio || _Controle.RPM_SP != _ControleAnterior.RPM_SP || _Controle.EmFreio != _ControleAnterior.EmFreio;
|
bool envioNecessario = ForcarEnvio || _Controle.RPM_SP != _ControleAnterior.RPM_SP || _Controle.EmFreio != _ControleAnterior.EmFreio;
|
||||||
if (envioNecessario || modsAtualizar.Any())
|
if (envioNecessario || modsAtualizar.Any())
|
||||||
{
|
{
|
||||||
foreach (var Mod in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(x => envioNecessario ? true : modsAtualizar.Contains(x.Modulo_ID)))
|
foreach (var Mod in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(x => envioNecessario ? true : modsAtualizar.Contains(x.Modulo_ID)))
|
||||||
{
|
{
|
||||||
Mod.MovMotor.EnviarComandoControle(_Controle.Direcao);
|
Mod.MovMotor.EnviarComandoControle(DirecaoAtual);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_Controle.TiposControle.FirstOrDefault(x => x.Tipo == Tipo).UltimaDirecao = _Controle.Direcao;
|
//Variaveis.MostrarLog($"Velocidade SP alterada de {_ControleAnterior.PercentualVelocidadeSP} para {_Controle.PercentualVelocidadeSP}");
|
||||||
}
|
|
||||||
|
|
||||||
_ControleAnterior.PercentualVelocidadeSP = _Controle.PercentualVelocidadeSP;
|
_ControleAnterior.PercentualVelocidadeSP = _Controle.PercentualVelocidadeSP;
|
||||||
_ControleAnterior.Direcao = _Controle.Direcao;
|
|
||||||
_ControleAnterior.EmFreio = _Controle.EmFreio;
|
_ControleAnterior.EmFreio = _Controle.EmFreio;
|
||||||
|
|
||||||
RedisService.AtualizarCampos(
|
RedisService.AtualizarCampos(
|
||||||
CtxKey.DadosControle,
|
CtxKey.DadosControle,
|
||||||
("velocidade_sp_ant", _Controle.PercentualVelocidadeSP)
|
("velocidade_sp_ant", _Controle.PercentualVelocidadeSP),
|
||||||
|
("em_freio_ant", _Controle.EmFreio)
|
||||||
);
|
);
|
||||||
|
|
||||||
Protocolos = new List<string>()
|
Protocolos = new List<string>()
|
||||||
{
|
{
|
||||||
_Controle.Direcao.ToString() + ";" + _Controle.RPM_SP.ToString() + ";" + (ForcarEnvio ? "1": "0")
|
DirecaoAtual.ToString() + ";" + _Controle.RPM_SP.ToString() + ";" + (ForcarEnvio ? "1": "0")
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case T_Code.Dir:
|
case T_Code.Dir:
|
||||||
{
|
{
|
||||||
if (_Controle.Angulo > 0)
|
|
||||||
{
|
|
||||||
_Controle.Direcao = Direcao.Direita;
|
|
||||||
}
|
|
||||||
else if (_Controle.Angulo < 0)
|
|
||||||
{
|
|
||||||
_Controle.Direcao = Direcao.Esquerda;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_Controle.Direcao = Direcao.Parado;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool envioNecessario = ForcarEnvio || _Controle.Angulo != _ControleAnterior.Angulo || _Controle.TipoMovimento != _ControleAnterior.TipoMovimento;
|
bool envioNecessario = ForcarEnvio || _Controle.Angulo != _ControleAnterior.Angulo || _Controle.TipoMovimento != _ControleAnterior.TipoMovimento;
|
||||||
var modsAtualizar = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(Mod => !Mod.DirMotor.AtingiuAnguloSP).Select(x => x.Modulo_ID).ToList();
|
var modsAtualizar = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(Mod => !Mod.DirMotor.AtingiuAnguloSP).Select(x => x.Modulo_ID).ToList();
|
||||||
if (!MKS057DCanService.Referenciando && (envioNecessario || modsAtualizar.Any()))
|
if (!MKS057DCanService.Referenciando && (envioNecessario || modsAtualizar.Any()))
|
||||||
{
|
{
|
||||||
foreach (var Mod in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(x => envioNecessario ? true : modsAtualizar.Contains(x.Modulo_ID)))
|
foreach (var Mod in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Where(x => envioNecessario ? true : modsAtualizar.Contains(x.Modulo_ID)))
|
||||||
{
|
{
|
||||||
Mod.DirMotor.EnviarComandoControle(_Controle.Direcao);
|
Mod.DirMotor.EnviarComandoControle(DirecaoAtual);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_Controle.TiposControle.FirstOrDefault(x => x.Tipo == Tipo).UltimaDirecao = _Controle.Direcao;
|
//Variaveis.MostrarLog($"Angulo SP alterado de {_ControleAnterior.Angulo:F2} para {_Controle.Angulo:F2}");
|
||||||
}
|
|
||||||
|
|
||||||
_ControleAnterior.Angulo = _Controle.Angulo;
|
_ControleAnterior.Angulo = _Controle.Angulo;
|
||||||
_ControleAnterior.Direcao = _Controle.Direcao;
|
_ControleAnterior.TipoMovimento = _Controle.TipoMovimento;
|
||||||
|
|
||||||
RedisService.AtualizarCampos(
|
RedisService.AtualizarCampos(
|
||||||
CtxKey.DadosControle,
|
CtxKey.DadosControle,
|
||||||
|
|
@ -1432,7 +1414,7 @@ namespace AgroBase.Models
|
||||||
|
|
||||||
Protocolos = new List<string>()
|
Protocolos = new List<string>()
|
||||||
{
|
{
|
||||||
_Controle.Direcao.ToString() + ";" + _Controle.Angulo.ToString() + ";" + _Controle.TipoMovimento.ToString() + ";" + (ForcarEnvio ? "1": "0")
|
DirecaoAtual.ToString() + ";" + _Controle.Angulo.ToString() + ";" + _Controle.TipoMovimento.ToString() + ";" + (ForcarEnvio ? "1": "0")
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1469,6 +1451,8 @@ namespace AgroBase.Models
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_Controle.TiposControle.FirstOrDefault(x => x.Tipo == Tipo).UltimaDirecao = DirecaoAtual;
|
||||||
|
|
||||||
return Protocolos;
|
return Protocolos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1489,11 +1473,12 @@ namespace AgroBase.Models
|
||||||
if (Sonar?.Resumo?.EnviarComandoParada ?? false)
|
if (Sonar?.Resumo?.EnviarComandoParada ?? false)
|
||||||
{
|
{
|
||||||
Variaveis.MostrarLog("[OperacaoModel] Deve enviar o comando de parada em tmrLeituras_Tick");
|
Variaveis.MostrarLog("[OperacaoModel] Deve enviar o comando de parada em tmrLeituras_Tick");
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Escape, Disp: T_Code.Mov, ForcarComando: true);
|
//GeneralJoystick.EnviaComandoMotor(Keys.Escape, Disp: T_Code.Mov, ForcarComando: true);
|
||||||
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.Xis, true);
|
||||||
if (Variaveis.OperacaoEmAndamento.Parametros?.Controle?.FrenagemAutomaticaAoParar ?? false)
|
if (Variaveis.OperacaoEmAndamento.Parametros?.Controle?.FrenagemAutomaticaAoParar ?? false)
|
||||||
{
|
{
|
||||||
Variaveis.MostrarLog("[OperacaoModel] Deve enviar o comando de freio em tmrLeituras_Tick");
|
Variaveis.MostrarLog("[OperacaoModel] Deve enviar o comando de freio em tmrLeituras_Tick");
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Space, Disp: T_Code.Mov, ForcarComando: true);
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.Bolinha, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1502,13 +1487,13 @@ namespace AgroBase.Models
|
||||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
if ((_Controle.TiposControle?.FirstOrDefault(x => x?.Tipo == T_Code.Mov)?.UltimaDirecao ?? Direcao.Parado) != Direcao.Parado)
|
if ((_Controle.TiposControle?.FirstOrDefault(x => x?.Tipo == T_Code.Mov)?.UltimaDirecao ?? Direcao.Parado) != Direcao.Parado)
|
||||||
{
|
{
|
||||||
_Controle.PercentualVelocidadeSP = 0;
|
//GeneralJoystick.EnviaComandoMotor(Keys.Escape, Disp: T_Code.Mov, ForcarComando: true);
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Escape, Disp: T_Code.Mov, ForcarComando: true);
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.Xis, true);
|
||||||
}
|
}
|
||||||
if ((_Controle.TiposControle?.FirstOrDefault(x => x?.Tipo == T_Code.Dir)?.UltimaDirecao ?? Direcao.Parado) != Direcao.Parado)
|
if ((_Controle.TiposControle?.FirstOrDefault(x => x?.Tipo == T_Code.Dir)?.UltimaDirecao ?? Direcao.Parado) != Direcao.Parado)
|
||||||
{
|
{
|
||||||
_Controle.Angulo = 0;
|
//GeneralJoystick.EnviaComandoMotor(Keys.Escape, Disp: T_Code.Dir, ForcarComando: true);
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Escape, Disp: T_Code.Dir, ForcarComando: true);
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.SEsquerda, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1683,7 +1668,8 @@ namespace AgroBase.Models
|
||||||
|
|
||||||
if (controleBase.Dispositivo == T_Code.Dir && controleBase.Tecla == BotoesJoystick.R3)
|
if (controleBase.Dispositivo == T_Code.Dir && controleBase.Tecla == BotoesJoystick.R3)
|
||||||
{
|
{
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.R, ForcarComando: true, ID: controleBase._comp_id);
|
//GeneralJoystick.EnviaComandoMotor(Keys.R, ForcarComando: true, ID: controleBase._comp_id);
|
||||||
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.R3, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1720,14 +1706,22 @@ namespace AgroBase.Models
|
||||||
if (cmdRover?.Dispositivo == T_Code.Dir && Variaveis.OperacaoEmAndamento.Parametros.Controle.DirecionalAutomatico && Variaveis.OperacaoEmAndamento.Iniciado) return;
|
if (cmdRover?.Dispositivo == T_Code.Dir && Variaveis.OperacaoEmAndamento.Parametros.Controle.DirecionalAutomatico && Variaveis.OperacaoEmAndamento.Iniciado) return;
|
||||||
|
|
||||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
int mx = cmdRover?.key == Keys.Left || cmdRover?.key == Keys.Down ? -1 : 1;
|
if (controleBase.Controle.PercentualVelocidadeSP != null) _Controle.PercentualVelocidadeSP = (double)controleBase.Controle.PercentualVelocidadeSP;
|
||||||
if (controleBase.Controle.PercentualVelocidadeSP != null) _Controle.PercentualVelocidadeSP = (double)controleBase.Controle.PercentualVelocidadeSP * mx;
|
if (controleBase.Controle.AnguloSP != null) _Controle.Angulo = (double)controleBase.Controle.AnguloSP;
|
||||||
if (controleBase.Controle.AnguloSP != null) _Controle.Angulo = (double)controleBase.Controle.AnguloSP * mx;
|
|
||||||
if (controleBase.Controle.TipoMovimentoDirecional != null) _Controle.TipoMovimento = (TipoMovimentoDirecional)controleBase.Controle.TipoMovimentoDirecional;
|
if (controleBase.Controle.TipoMovimentoDirecional != null) _Controle.TipoMovimento = (TipoMovimentoDirecional)controleBase.Controle.TipoMovimentoDirecional;
|
||||||
if (controleBase.Controle.EmFreio != null) _Controle.EmFreio = (bool)controleBase.Controle.EmFreio;
|
if (controleBase.Controle.EmFreio != null) _Controle.EmFreio = (bool)controleBase.Controle.EmFreio;
|
||||||
|
|
||||||
Keys tecla = cmdRover?.key ?? Keys.Escape;
|
//GeneralJoystick.EnviaComandoMotor(tecla, controleBase.Dispositivo, ForcarComando: true, ID: controleBase._comp_id);
|
||||||
GeneralJoystick.EnviaComandoMotor(tecla, controleBase.Dispositivo, ForcarComando: true, ID: controleBase._comp_id);
|
|
||||||
|
switch (cmdRover?.Dispositivo)
|
||||||
|
{
|
||||||
|
case T_Code.Mov:
|
||||||
|
GeneralJoystick.ProcessarDadosControle(cmdRover.botaoJoy, controleBase.Solto, valorDesejado: _Controle.PercentualVelocidadeSP);
|
||||||
|
break;
|
||||||
|
case T_Code.Dir:
|
||||||
|
GeneralJoystick.ProcessarDadosControle(cmdRover.botaoJoy, controleBase.Solto, valorDesejado: _Controle.Angulo);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task tmrComunicacao_Tick()
|
private async Task tmrComunicacao_Tick()
|
||||||
|
|
@ -2146,7 +2140,18 @@ namespace AgroBase.Models
|
||||||
return Convert.ToInt32(RPM_SP * VariaveisEquipamento.RelacaoRPM);
|
return Convert.ToInt32(RPM_SP * VariaveisEquipamento.RelacaoRPM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public double PercentualVelocidadeSP { get; set; }
|
private double _pctVelSp;
|
||||||
|
public double PercentualVelocidadeSP
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _pctVelSp;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_pctVelSp = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
public double PercentualVelocidadeSPKmh
|
public double PercentualVelocidadeSPKmh
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
@ -2155,7 +2160,7 @@ namespace AgroBase.Models
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public bool EmFreio { get; set; } = false;
|
public bool EmFreio { get; set; } = false;
|
||||||
public Direcao Direcao { get; set; } = Direcao.Parado;
|
//public Direcao Direcao { get; set; } = Direcao.Parado;
|
||||||
public List<AtuadorBicoModel> Bicos => Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores;
|
public List<AtuadorBicoModel> Bicos => Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores;
|
||||||
public double AlturaBarra { get; set; }
|
public double AlturaBarra { get; set; }
|
||||||
private TipoMovimentoDirecional _tipoMovimento = TipoMovimentoDirecional.Diagnostico;
|
private TipoMovimentoDirecional _tipoMovimento = TipoMovimentoDirecional.Diagnostico;
|
||||||
|
|
@ -2215,12 +2220,15 @@ namespace AgroBase.Models
|
||||||
public void Reiniciar()
|
public void Reiniciar()
|
||||||
{
|
{
|
||||||
var _Parametros = Variaveis.OperacaoEmAndamento.Parametros.Controle;
|
var _Parametros = Variaveis.OperacaoEmAndamento.Parametros.Controle;
|
||||||
PercentualVelocidadeSP = _Parametros.MovimentoAutomatico ? 0 : _Parametros.MovVelocidadeCErvasPercent;
|
PercentualVelocidadeSP = 0; // _Parametros.MovimentoAutomatico ? 0 : _Parametros.MovVelocidadeCErvasPercent;
|
||||||
Angulo = _Parametros.DirecionalAutomatico ? 0 : _Parametros.DirAnguloMaximo;
|
Angulo = 0; // _Parametros.DirecionalAutomatico ? 0 : _Parametros.DirAnguloMaximo;
|
||||||
EmFreio = false;
|
EmFreio = false;
|
||||||
Direcao = Direcao.Parado;
|
|
||||||
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras;
|
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras;
|
||||||
TiposControle.ForEach(x => x.UltimaDirecao = Direcao.Parado);
|
TiposControle.ForEach(x =>
|
||||||
|
{
|
||||||
|
x.DirecaoAtual = Direcao.Parado;
|
||||||
|
x.UltimaDirecao = Direcao.Parado;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperacaoControleModel Clone()
|
public OperacaoControleModel Clone()
|
||||||
|
|
@ -2228,7 +2236,6 @@ namespace AgroBase.Models
|
||||||
return new OperacaoControleModel()
|
return new OperacaoControleModel()
|
||||||
{
|
{
|
||||||
Angulo = Angulo,
|
Angulo = Angulo,
|
||||||
Direcao = Direcao,
|
|
||||||
PercentualVelocidadeSP = PercentualVelocidadeSP,
|
PercentualVelocidadeSP = PercentualVelocidadeSP,
|
||||||
_tipoMovimento = _tipoMovimento,
|
_tipoMovimento = _tipoMovimento,
|
||||||
TipoMovimento = TipoMovimento,
|
TipoMovimento = TipoMovimento,
|
||||||
|
|
@ -2254,6 +2261,7 @@ namespace AgroBase.Models
|
||||||
public int DelayEnvioComandoExtra { get; set; }
|
public int DelayEnvioComandoExtra { get; set; }
|
||||||
public DateTime UltimoComando { get; set; }
|
public DateTime UltimoComando { get; set; }
|
||||||
public List<string> Comandos { get; set; }
|
public List<string> Comandos { get; set; }
|
||||||
|
public Direcao DirecaoAtual { get; set; } = Direcao.Parado;
|
||||||
public Direcao UltimaDirecao { get; set; } = Direcao.Parado;
|
public Direcao UltimaDirecao { get; set; } = Direcao.Parado;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2277,6 +2285,7 @@ namespace AgroBase.Models
|
||||||
{
|
{
|
||||||
public DateTime Momento { get; set; }
|
public DateTime Momento { get; set; }
|
||||||
public BotoesJoystick Tecla { get; set; }
|
public BotoesJoystick Tecla { get; set; }
|
||||||
|
public bool Solto { get; set; }
|
||||||
public T_Code Dispositivo { get; set; }
|
public T_Code Dispositivo { get; set; }
|
||||||
public bool Emergencia { get; set; }
|
public bool Emergencia { get; set; }
|
||||||
public bool Pausa { get; set; }
|
public bool Pausa { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -1037,6 +1037,7 @@ namespace AgroBase.Models
|
||||||
DateTime agora = DateTime.Now;
|
DateTime agora = DateTime.Now;
|
||||||
|
|
||||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
|
|
||||||
bool comandoMudou = novoComando != null && (_Controle.Angulo != novoComando.angulo || _Controle.PercentualVelocidadeSP != novoComando.percentual_velocidade || _Controle.TipoMovimento != novoComando.tipo_movimento || _Controle.EmFreio != novoComando.em_freio);
|
bool comandoMudou = novoComando != null && (_Controle.Angulo != novoComando.angulo || _Controle.PercentualVelocidadeSP != novoComando.percentual_velocidade || _Controle.TipoMovimento != novoComando.tipo_movimento || _Controle.EmFreio != novoComando.em_freio);
|
||||||
bool mangerDestravou = novoComando != null && (_Controle.ticks_sem_resposta.AddMilliseconds(min_ticks_sem_resposta) < agora && novoComando.heartbeat != _Controle.heartbeat);
|
bool mangerDestravou = novoComando != null && (_Controle.ticks_sem_resposta.AddMilliseconds(min_ticks_sem_resposta) < agora && novoComando.heartbeat != _Controle.heartbeat);
|
||||||
if (novoComando != null && (comandoMudou || mangerDestravou))
|
if (novoComando != null && (comandoMudou || mangerDestravou))
|
||||||
|
|
@ -1045,6 +1046,7 @@ namespace AgroBase.Models
|
||||||
|
|
||||||
if (pControle.MovimentoAutomatico)
|
if (pControle.MovimentoAutomatico)
|
||||||
{
|
{
|
||||||
|
_Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov).DirecaoAtual = novoComando.percentual_velocidade > 0 ? Direcao.Frente : Direcao.Parado;
|
||||||
_Controle.PercentualVelocidadeSP = novoComando.percentual_velocidade;
|
_Controle.PercentualVelocidadeSP = novoComando.percentual_velocidade;
|
||||||
_Controle.EmFreio = pControle.FrenagemAutomaticaAoParar && novoComando.em_freio;
|
_Controle.EmFreio = pControle.FrenagemAutomaticaAoParar && novoComando.em_freio;
|
||||||
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false, new List<T_Code>() { T_Code.Mov });
|
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false, new List<T_Code>() { T_Code.Mov });
|
||||||
|
|
@ -1052,6 +1054,7 @@ namespace AgroBase.Models
|
||||||
|
|
||||||
if (pControle.DirecionalAutomatico)
|
if (pControle.DirecionalAutomatico)
|
||||||
{
|
{
|
||||||
|
_Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Dir).DirecaoAtual = novoComando.angulo < 0 ? Direcao.Esquerda : novoComando.angulo > 0 ? Direcao.Direita : Direcao.Parado;
|
||||||
_Controle.Angulo = novoComando.angulo;
|
_Controle.Angulo = novoComando.angulo;
|
||||||
_Controle.TipoMovimento = novoComando.tipo_movimento;
|
_Controle.TipoMovimento = novoComando.tipo_movimento;
|
||||||
_Controle.SimulacaoMPC = novoComando.simulacao?.Select(x => new MPCSimulacaoModel() { latitude = x[0], longitude = x[1], orientacao = x[2] }).ToList() ?? new List<MPCSimulacaoModel>();
|
_Controle.SimulacaoMPC = novoComando.simulacao?.Select(x => new MPCSimulacaoModel() { latitude = x[0], longitude = x[1], orientacao = x[2] }).ToList() ?? new List<MPCSimulacaoModel>();
|
||||||
|
|
@ -1086,7 +1089,7 @@ namespace AgroBase.Models
|
||||||
if (Variaveis.OperacaoEmAndamento?.Sensoriamento?.Controle?.RPM_SP > 0)
|
if (Variaveis.OperacaoEmAndamento?.Sensoriamento?.Controle?.RPM_SP > 0)
|
||||||
{
|
{
|
||||||
Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Falha, 0, "Muito tempo sem receber novo comando do Manager Worker! Parando Movimento!");
|
Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Falha, 0, "Muito tempo sem receber novo comando do Manager Worker! Parando Movimento!");
|
||||||
Console.WriteLine("Muito tempo sem receber novo comando do Manager Worker! Parando Movimento!");
|
Variaveis.MostrarLog("Muito tempo sem receber novo comando do Manager Worker! Parando Movimento!");
|
||||||
RedisService.AtualizarCampos(
|
RedisService.AtualizarCampos(
|
||||||
CtxKey.DadosControle,
|
CtxKey.DadosControle,
|
||||||
("velocidade_sp", 0)
|
("velocidade_sp", 0)
|
||||||
|
|
@ -1098,7 +1101,7 @@ namespace AgroBase.Models
|
||||||
if (Variaveis.OperacaoEmAndamento?.Sensoriamento?.Controle?.RPM_SP > Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent)
|
if (Variaveis.OperacaoEmAndamento?.Sensoriamento?.Controle?.RPM_SP > Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent)
|
||||||
{
|
{
|
||||||
Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Alerta, 80, "Muito tempo sem receber novo comando do Manager Worker! Reduzindo Velocidade!");
|
Variaveis.OperacaoEmAndamento.Sensoriamento?.InserirLog(T_Code.Npc, StatusModulo.Alerta, 80, "Muito tempo sem receber novo comando do Manager Worker! Reduzindo Velocidade!");
|
||||||
Console.WriteLine("Muito tempo sem receber novo comando do Manager Worker! Reduzindo Velocidade!");
|
Variaveis.MostrarLog("Muito tempo sem receber novo comando do Manager Worker! Reduzindo Velocidade!");
|
||||||
RedisService.AtualizarCampos(
|
RedisService.AtualizarCampos(
|
||||||
CtxKey.DadosControle,
|
CtxKey.DadosControle,
|
||||||
("velocidade_sp", Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent)
|
("velocidade_sp", Variaveis.OperacaoEmAndamento.Parametros.Controle.MovVelocidadeCErvasPercent)
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,14 @@ public sealed class UdpCtrlMessage
|
||||||
public byte Device;
|
public byte Device;
|
||||||
public UdpCtrlFlags Flags;
|
public UdpCtrlFlags Flags;
|
||||||
public BotoesJoystick Key;
|
public BotoesJoystick Key;
|
||||||
|
public bool released;
|
||||||
public short P1;
|
public short P1;
|
||||||
public short P2;
|
public short P2;
|
||||||
|
|
||||||
public byte[] ToBytes()
|
public byte[] ToBytes()
|
||||||
{
|
{
|
||||||
// 10 bytes fixos
|
// 11 bytes fixos
|
||||||
var buf = new byte[10];
|
var buf = new byte[11];
|
||||||
buf[0] = Version;
|
buf[0] = Version;
|
||||||
buf[1] = Device;
|
buf[1] = Device;
|
||||||
buf[2] = (byte)Flags;
|
buf[2] = (byte)Flags;
|
||||||
|
|
@ -35,16 +36,19 @@ public sealed class UdpCtrlMessage
|
||||||
buf[3] = (byte)(k >> 8);
|
buf[3] = (byte)(k >> 8);
|
||||||
buf[4] = (byte)(k & 0xFF);
|
buf[4] = (byte)(k & 0xFF);
|
||||||
|
|
||||||
|
// botao solto
|
||||||
|
buf[5] = (byte)(released ? 1 : 0);
|
||||||
|
|
||||||
// p1 int16 BE
|
// p1 int16 BE
|
||||||
buf[5] = (byte)((ushort)P1 >> 8);
|
buf[6] = (byte)((ushort)P1 >> 8);
|
||||||
buf[6] = (byte)((ushort)P1 & 0xFF);
|
buf[7] = (byte)((ushort)P1 & 0xFF);
|
||||||
|
|
||||||
// p2 int16 BE
|
// p2 int16 BE
|
||||||
buf[7] = (byte)((ushort)P2 >> 8);
|
buf[8] = (byte)((ushort)P2 >> 8);
|
||||||
buf[8] = (byte)((ushort)P2 & 0xFF);
|
buf[9] = (byte)((ushort)P2 & 0xFF);
|
||||||
|
|
||||||
// reservado (checksum simples futuro / seq local etc)
|
// reservado (checksum simples futuro / seq local etc)
|
||||||
buf[9] = 0;
|
buf[10] = 0;
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
@ -64,8 +68,10 @@ public sealed class UdpCtrlMessage
|
||||||
ushort k = (ushort)((payload[3] << 8) | payload[4]);
|
ushort k = (ushort)((payload[3] << 8) | payload[4]);
|
||||||
m.Key = (BotoesJoystick)k;
|
m.Key = (BotoesJoystick)k;
|
||||||
|
|
||||||
m.P1 = (short)((payload[5] << 8) | payload[6]);
|
m.released = payload[5] == 1;
|
||||||
m.P2 = (short)((payload[7] << 8) | payload[8]);
|
|
||||||
|
m.P1 = (short)((payload[6] << 8) | payload[7]);
|
||||||
|
m.P2 = (short)((payload[8] << 8) | payload[9]);
|
||||||
|
|
||||||
msg = m;
|
msg = m;
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -276,6 +276,7 @@ namespace AgroBase.Models
|
||||||
Emergencia = emergencia,
|
Emergencia = emergencia,
|
||||||
Pausa = pausa,
|
Pausa = pausa,
|
||||||
Tecla = msg.Key,
|
Tecla = msg.Key,
|
||||||
|
Solto = msg.released,
|
||||||
Dispositivo = disp,
|
Dispositivo = disp,
|
||||||
Controle = new OperacaoComandoBaseControleModel(),
|
Controle = new OperacaoComandoBaseControleModel(),
|
||||||
};
|
};
|
||||||
|
|
@ -314,8 +315,10 @@ namespace AgroBase.Models
|
||||||
if (ms > FAILSAFE_MS)
|
if (ms > FAILSAFE_MS)
|
||||||
{
|
{
|
||||||
// Para por segurança
|
// Para por segurança
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Escape, T_Code.Mov, ForcarComando: true, ID: null);
|
//GeneralJoystick.EnviaComandoMotor(Keys.Escape, T_Code.Mov, ForcarComando: true, ID: null);
|
||||||
GeneralJoystick.EnviaComandoMotor(Keys.Escape, T_Code.Dir, ForcarComando: true, ID: null);
|
//GeneralJoystick.EnviaComandoMotor(Keys.Escape, T_Code.Dir, ForcarComando: true, ID: null);
|
||||||
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.Xis, true);
|
||||||
|
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.SEsquerda, true);
|
||||||
|
|
||||||
// desarma até chegar novo comando válido
|
// desarma até chegar novo comando válido
|
||||||
Interlocked.Exchange(ref _lastValidCmdTicksUtc, 0);
|
Interlocked.Exchange(ref _lastValidCmdTicksUtc, 0);
|
||||||
|
|
|
||||||
|
|
@ -292,7 +292,7 @@ namespace AgroBase.Services
|
||||||
{
|
{
|
||||||
List<byte> dados = new List<byte>();
|
List<byte> dados = new List<byte>();
|
||||||
dados.AddRange(CanPrefix(DadosLoRaParse.DadosControle));
|
dados.AddRange(CanPrefix(DadosLoRaParse.DadosControle));
|
||||||
dados.Add((byte)Controle.Direcao); // 1 byte
|
dados.Add((byte)Direcao.Parado); // 1 byte
|
||||||
dados.Add((byte)Controle.PercentualVelocidadeSP); // 1 byte
|
dados.Add((byte)Controle.PercentualVelocidadeSP); // 1 byte
|
||||||
dados.Add((byte)Controle.TipoMovimento); // 1 byte
|
dados.Add((byte)Controle.TipoMovimento); // 1 byte
|
||||||
dados.Add((byte)Controle.Angulo); // 1 byte
|
dados.Add((byte)Controle.Angulo); // 1 byte
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,7 @@ namespace AgroBase.Services.Operadores
|
||||||
var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
|
var pControle = Variaveis.OperacaoEmAndamento.Parametros.Controle;
|
||||||
if (pControle.MovimentoAutomatico)
|
if (pControle.MovimentoAutomatico)
|
||||||
{
|
{
|
||||||
|
_Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov).DirecaoAtual = novoComando.percentual_velocidade > 0 ? Direcao.Frente : Direcao.Parado;
|
||||||
_Controle.PercentualVelocidadeSP = novoComando.percentual_velocidade;
|
_Controle.PercentualVelocidadeSP = novoComando.percentual_velocidade;
|
||||||
_Controle.EmFreio = pControle.FrenagemAutomaticaAoParar && novoComando.em_freio;
|
_Controle.EmFreio = pControle.FrenagemAutomaticaAoParar && novoComando.em_freio;
|
||||||
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false, new List<T_Code>() { T_Code.Mov });
|
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false, new List<T_Code>() { T_Code.Mov });
|
||||||
|
|
@ -98,6 +99,7 @@ namespace AgroBase.Services.Operadores
|
||||||
|
|
||||||
if (pControle.DirecionalAutomatico)
|
if (pControle.DirecionalAutomatico)
|
||||||
{
|
{
|
||||||
|
_Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Dir).DirecaoAtual = novoComando.angulo < 0 ? Direcao.Esquerda : novoComando.angulo > 0 ? Direcao.Direita : Direcao.Parado;
|
||||||
_Controle.Angulo = novoComando.angulo;
|
_Controle.Angulo = novoComando.angulo;
|
||||||
_Controle.TipoMovimento = novoComando.tipo_movimento;
|
_Controle.TipoMovimento = novoComando.tipo_movimento;
|
||||||
_Controle.SimulacaoMPC = novoComando.simulacao?.Select(x => new MPCSimulacaoModel() { latitude = x[0], longitude = x[1], orientacao = x[2] }).ToList() ?? new List<MPCSimulacaoModel>();
|
_Controle.SimulacaoMPC = novoComando.simulacao?.Select(x => new MPCSimulacaoModel() { latitude = x[0], longitude = x[1], orientacao = x[2] }).ToList() ?? new List<MPCSimulacaoModel>();
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ class ProcessadorEmAndamento(ProcessadorBase):
|
||||||
if direcional_automatico:
|
if direcional_automatico:
|
||||||
comando_dir = definir_comando_dir(self.pid_dir, envio_necessario)
|
comando_dir = definir_comando_dir(self.pid_dir, envio_necessario)
|
||||||
|
|
||||||
enviar_comando = comando_dir.get("enviar_comando", False) or movimento_automatico
|
enviar_comando = comando_dir.get("enviar_comando", False) # or movimento_automatico
|
||||||
|
|
||||||
if enviar_comando:
|
if enviar_comando:
|
||||||
self.ultimo_comando_enviado = agora
|
self.ultimo_comando_enviado = agora
|
||||||
|
|
|
||||||
|
|
@ -453,13 +453,14 @@ namespace OperationControl.Models
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnviarComandoDirecional(AgroBase.Models.Enums.Direcao direcao, double angulo, AgroBase.Models.Enums.TipoMovimentoDirecional movimento, string mod_id = null)
|
public static void EnviarComandoDirecional(AgroBase.Models.Enums.BotoesJoystick botao, bool solto, double angulo, AgroBase.Models.Enums.TipoMovimentoDirecional movimento, string mod_id = null)
|
||||||
{
|
{
|
||||||
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
||||||
{
|
{
|
||||||
Momento = DateTime.Now,
|
Momento = DateTime.Now,
|
||||||
Dispositivo = AgroBase.Models.Enums.T_Code.Dir,
|
Dispositivo = AgroBase.Models.Enums.T_Code.Dir,
|
||||||
Tecla = DeParaDirecaoTecla(direcao),
|
Tecla = botao,
|
||||||
|
Solto = solto,
|
||||||
_comp_id = mod_id,
|
_comp_id = mod_id,
|
||||||
Controle = new OperacaoComandoBaseControleModel()
|
Controle = new OperacaoComandoBaseControleModel()
|
||||||
{
|
{
|
||||||
|
|
@ -469,15 +470,14 @@ namespace OperationControl.Models
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnviarComandoDirecionalUDP(AgroBase.Models.Enums.Direcao direcao, double angulo, AgroBase.Models.Enums.TipoMovimentoDirecional tipoMov)
|
public static void EnviarComandoDirecionalUDP(AgroBase.Models.Enums.BotoesJoystick botao, bool solto, double angulo, AgroBase.Models.Enums.TipoMovimentoDirecional tipoMov)
|
||||||
{
|
{
|
||||||
var key = DeParaDirecaoTecla(direcao);
|
|
||||||
|
|
||||||
var msg = new UdpCtrlMessage
|
var msg = new UdpCtrlMessage
|
||||||
{
|
{
|
||||||
Device = (byte)AgroBase.Models.Enums.T_Code.Dir,
|
Device = (byte)AgroBase.Models.Enums.T_Code.Dir,
|
||||||
Flags = UdpCtrlFlags.HasKey | UdpCtrlFlags.HasPayload,
|
Flags = UdpCtrlFlags.HasKey | UdpCtrlFlags.HasPayload,
|
||||||
Key = key,
|
Key = botao,
|
||||||
|
released = solto,
|
||||||
P1 = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, (int)Math.Round(angulo * 100.0))),
|
P1 = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, (int)Math.Round(angulo * 100.0))),
|
||||||
P2 = (short)tipoMov
|
P2 = (short)tipoMov
|
||||||
};
|
};
|
||||||
|
|
@ -486,13 +486,14 @@ namespace OperationControl.Models
|
||||||
Variaveis.ControlSenderDir.Update(msg);
|
Variaveis.ControlSenderDir.Update(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnviarComandoMovimentacao(AgroBase.Models.Enums.Direcao direcao, double velocidade)
|
public static void EnviarComandoMovimentacao(AgroBase.Models.Enums.BotoesJoystick botao, bool solto, double velocidade)
|
||||||
{
|
{
|
||||||
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
|
||||||
{
|
{
|
||||||
Momento = DateTime.Now,
|
Momento = DateTime.Now,
|
||||||
Dispositivo = AgroBase.Models.Enums.T_Code.Mov,
|
Dispositivo = AgroBase.Models.Enums.T_Code.Mov,
|
||||||
Tecla = DeParaDirecaoTecla(direcao),
|
Tecla = botao,
|
||||||
|
Solto = solto,
|
||||||
Controle = new OperacaoComandoBaseControleModel()
|
Controle = new OperacaoComandoBaseControleModel()
|
||||||
{
|
{
|
||||||
PercentualVelocidadeSP = velocidade
|
PercentualVelocidadeSP = velocidade
|
||||||
|
|
@ -500,15 +501,14 @@ namespace OperationControl.Models
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnviarComandoMovimentacaoUDP(AgroBase.Models.Enums.Direcao direcao, double velPct, bool emfreio)
|
public static void EnviarComandoMovimentacaoUDP(AgroBase.Models.Enums.BotoesJoystick botao, bool solto, double velPct, bool emfreio)
|
||||||
{
|
{
|
||||||
var key = DeParaDirecaoTecla(direcao);
|
|
||||||
|
|
||||||
var msg = new UdpCtrlMessage
|
var msg = new UdpCtrlMessage
|
||||||
{
|
{
|
||||||
Device = (byte)AgroBase.Models.Enums.T_Code.Mov,
|
Device = (byte)AgroBase.Models.Enums.T_Code.Mov,
|
||||||
Flags = UdpCtrlFlags.HasKey | UdpCtrlFlags.HasPayload,
|
Flags = UdpCtrlFlags.HasKey | UdpCtrlFlags.HasPayload,
|
||||||
Key = key,
|
Key = botao,
|
||||||
|
released = solto,
|
||||||
P1 = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, (int)Math.Round(velPct * 100.0))),
|
P1 = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, (int)Math.Round(velPct * 100.0))),
|
||||||
P2 = (short)(emfreio ? 1 : 0)
|
P2 = (short)(emfreio ? 1 : 0)
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue