ajustado movimento combinado
This commit is contained in:
parent
e0259cc755
commit
8e8f06ebb2
|
|
@ -697,7 +697,7 @@ namespace AgroBase
|
||||||
cmd.CalcularValor(direcao == Direcao.Parado, valorJoy: valor);
|
cmd.CalcularValor(direcao == Direcao.Parado, valorJoy: valor);
|
||||||
bool mudou = direcao != _ultimaDirecaoMovEnviada || double.IsNaN(_ultimoValorMovEnviado) || Math.Abs(cmd.ValorAplicar - _ultimoValorMovEnviado) >= VariacaoMinimaMov;
|
bool mudou = direcao != _ultimaDirecaoMovEnviada || double.IsNaN(_ultimoValorMovEnviado) || Math.Abs(cmd.ValorAplicar - _ultimoValorMovEnviado) >= VariacaoMinimaMov;
|
||||||
bool combinado = MovimentosCombinados.Contains(Variaveis.OperacaoEmAndamento.Controle.TipoMovimento);
|
bool combinado = MovimentosCombinados.Contains(Variaveis.OperacaoEmAndamento.Controle.TipoMovimento);
|
||||||
bool heartbeat = !combinado && (DateTime.Now - _ultimoEnvioDir).TotalMilliseconds >= HeartbeatComandoMs;
|
bool heartbeat = !combinado && (DateTime.Now - _ultimoEnvioMov).TotalMilliseconds >= HeartbeatComandoMs;
|
||||||
if (!mudou && !heartbeat) return;
|
if (!mudou && !heartbeat) return;
|
||||||
EnviarComandoMotorAtualizado(cmd, ForcarComando: false);
|
EnviarComandoMotorAtualizado(cmd, ForcarComando: false);
|
||||||
_ultimaDirecaoMovEnviada = direcao; _ultimoValorMovEnviado = cmd.ValorAplicar; _ultimoEnvioMov = DateTime.Now;
|
_ultimaDirecaoMovEnviada = direcao; _ultimoValorMovEnviado = cmd.ValorAplicar; _ultimoEnvioMov = DateTime.Now;
|
||||||
|
|
@ -718,7 +718,8 @@ namespace AgroBase
|
||||||
if (cmd == null) return;
|
if (cmd == null) return;
|
||||||
cmd.CalcularValor(solto, valorJoy: valor);
|
cmd.CalcularValor(solto, valorJoy: valor);
|
||||||
bool mudou = double.IsNaN(_ultimoAnguloDirEnviado) || Math.Abs(cmd.ValorAplicar - _ultimoAnguloDirEnviado) >= VariacaoMinimaDir;
|
bool mudou = double.IsNaN(_ultimoAnguloDirEnviado) || Math.Abs(cmd.ValorAplicar - _ultimoAnguloDirEnviado) >= VariacaoMinimaDir;
|
||||||
bool heartbeat = (DateTime.Now - _ultimoEnvioDir).TotalMilliseconds >= HeartbeatComandoMs;
|
bool combinado = MovimentosCombinados.Contains(Variaveis.OperacaoEmAndamento.Controle.TipoMovimento);
|
||||||
|
bool heartbeat = !combinado && (DateTime.Now - _ultimoEnvioDir).TotalMilliseconds >= HeartbeatComandoMs;
|
||||||
if (!mudou && !heartbeat) return;
|
if (!mudou && !heartbeat) return;
|
||||||
EnviarComandoMotorAtualizado(cmd, ForcarComando: false);
|
EnviarComandoMotorAtualizado(cmd, ForcarComando: false);
|
||||||
_ultimoAnguloDirEnviado = cmd.ValorAplicar; _ultimoEnvioDir = DateTime.Now;
|
_ultimoAnguloDirEnviado = cmd.ValorAplicar; _ultimoEnvioDir = DateTime.Now;
|
||||||
|
|
|
||||||
|
|
@ -531,20 +531,36 @@ namespace AgroBase.Models.Modules
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private Direcao? _ultimaSolicitacaoMovimentoCombinado = null;
|
||||||
|
private readonly object _syncMovimentoCombinado = new object();
|
||||||
public async Task ExecutarMovimentoDirecionalCombinado(Direcao DirecaoAtual)
|
public async Task ExecutarMovimentoDirecionalCombinado(Direcao DirecaoAtual)
|
||||||
{
|
{
|
||||||
_ctsMovimentoCombinado?.Cancel();
|
CancellationTokenSource cts;
|
||||||
|
|
||||||
var cts = new CancellationTokenSource();
|
lock (_syncMovimentoCombinado)
|
||||||
_ctsMovimentoCombinado = cts;
|
{
|
||||||
|
if (_ultimaSolicitacaoMovimentoCombinado == DirecaoAtual)
|
||||||
|
return;
|
||||||
|
|
||||||
await _gateMovimentoCombinado.WaitAsync();
|
_ultimaSolicitacaoMovimentoCombinado = DirecaoAtual;
|
||||||
|
|
||||||
|
_ctsMovimentoCombinado?.Cancel();
|
||||||
|
|
||||||
|
cts = new CancellationTokenSource();
|
||||||
|
_ctsMovimentoCombinado = cts;
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (cts.IsCancellationRequested)
|
await _gateMovimentoCombinado.WaitAsync(cts.Token);
|
||||||
return;
|
}
|
||||||
|
catch (OperationCanceledException)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
MovimentoDirecionalCombinadoEmExecucao = true;
|
MovimentoDirecionalCombinadoEmExecucao = true;
|
||||||
|
|
||||||
var op = Variaveis.OperacaoEmAndamento;
|
var op = Variaveis.OperacaoEmAndamento;
|
||||||
|
|
@ -564,8 +580,28 @@ namespace AgroBase.Models.Modules
|
||||||
modulo.MovMotor.EnviarComandoControle(Direcao.Parado);
|
modulo.MovMotor.EnviarComandoControle(Direcao.Parado);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool parado() => op?.Sensoriamento?.Movimentacao?.RPMMotorMedio <= 5;
|
bool carroParado()
|
||||||
await FuncoesGlobais.AguardarCondicaoAsync(parado, 2500, 200);
|
{
|
||||||
|
double rpm = op?.Sensoriamento?.Movimentacao?.RPMMotorMedio ?? double.MaxValue;
|
||||||
|
return Math.Abs(rpm) <= 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool finalizarEsperaParada() => cts.IsCancellationRequested || carroParado();
|
||||||
|
await FuncoesGlobais.AguardarCondicaoAsync(finalizarEsperaParada, 2500, 200);
|
||||||
|
|
||||||
|
if (cts.IsCancellationRequested)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!carroParado())
|
||||||
|
{
|
||||||
|
Variaveis.MostrarLog(
|
||||||
|
$"[MVD] Movimento combinado abortado: " +
|
||||||
|
$"tração não confirmou parada | " +
|
||||||
|
$"RPM={op?.Sensoriamento?.Movimentacao?.RPMMotorMedio:F1}"
|
||||||
|
);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (op.Controle.TipoMovimento)
|
switch (op.Controle.TipoMovimento)
|
||||||
{
|
{
|
||||||
|
|
@ -578,9 +614,14 @@ namespace AgroBase.Models.Modules
|
||||||
}
|
}
|
||||||
|
|
||||||
DateTime Agora = DateTime.Now;
|
DateTime Agora = DateTime.Now;
|
||||||
bool atingiuSp() => Modulos.All(x => x.DirMotor.PosicaoTipoMovimentoConcluido(DirecaoAtual));
|
bool posicaoConcluida() => Modulos.All(x => x.DirMotor.PosicaoTipoMovimentoConcluido(DirecaoAtual));
|
||||||
await FuncoesGlobais.AguardarCondicaoAsync(atingiuSp, 5000, 200);
|
bool finalizarEsperaAngulo() => cts.IsCancellationRequested || posicaoConcluida();
|
||||||
bool Sucesso = atingiuSp();
|
await FuncoesGlobais.AguardarCondicaoAsync(finalizarEsperaAngulo, 5000, 200);
|
||||||
|
|
||||||
|
if (cts.IsCancellationRequested)
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool Sucesso = posicaoConcluida();
|
||||||
|
|
||||||
if (Sucesso && DirecaoAtual != Direcao.Parado)
|
if (Sucesso && DirecaoAtual != Direcao.Parado)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1959,7 +1959,7 @@ namespace AgroBase.Models
|
||||||
var dispMvd = DispMvd;
|
var dispMvd = DispMvd;
|
||||||
|
|
||||||
if (dispMvd?.Dados?.Modulos != null) // && value != Controle.TipoMovimento
|
if (dispMvd?.Dados?.Modulos != null) // && value != Controle.TipoMovimento
|
||||||
{
|
{
|
||||||
Controle.DefinirTipoMovimento(value, dispMvd.Dados.Modulos);
|
Controle.DefinirTipoMovimento(value, dispMvd.Dados.Modulos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue