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);
|
||||
bool mudou = direcao != _ultimaDirecaoMovEnviada || double.IsNaN(_ultimoValorMovEnviado) || Math.Abs(cmd.ValorAplicar - _ultimoValorMovEnviado) >= VariacaoMinimaMov;
|
||||
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;
|
||||
EnviarComandoMotorAtualizado(cmd, ForcarComando: false);
|
||||
_ultimaDirecaoMovEnviada = direcao; _ultimoValorMovEnviado = cmd.ValorAplicar; _ultimoEnvioMov = DateTime.Now;
|
||||
|
|
@ -718,7 +718,8 @@ namespace AgroBase
|
|||
if (cmd == null) return;
|
||||
cmd.CalcularValor(solto, valorJoy: valor);
|
||||
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;
|
||||
EnviarComandoMotorAtualizado(cmd, ForcarComando: false);
|
||||
_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)
|
||||
{
|
||||
_ctsMovimentoCombinado?.Cancel();
|
||||
CancellationTokenSource cts;
|
||||
|
||||
var cts = new CancellationTokenSource();
|
||||
_ctsMovimentoCombinado = cts;
|
||||
lock (_syncMovimentoCombinado)
|
||||
{
|
||||
if (_ultimaSolicitacaoMovimentoCombinado == DirecaoAtual)
|
||||
return;
|
||||
|
||||
await _gateMovimentoCombinado.WaitAsync();
|
||||
_ultimaSolicitacaoMovimentoCombinado = DirecaoAtual;
|
||||
|
||||
_ctsMovimentoCombinado?.Cancel();
|
||||
|
||||
cts = new CancellationTokenSource();
|
||||
_ctsMovimentoCombinado = cts;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (cts.IsCancellationRequested)
|
||||
return;
|
||||
await _gateMovimentoCombinado.WaitAsync(cts.Token);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
MovimentoDirecionalCombinadoEmExecucao = true;
|
||||
|
||||
var op = Variaveis.OperacaoEmAndamento;
|
||||
|
|
@ -564,8 +580,28 @@ namespace AgroBase.Models.Modules
|
|||
modulo.MovMotor.EnviarComandoControle(Direcao.Parado);
|
||||
}
|
||||
|
||||
bool parado() => op?.Sensoriamento?.Movimentacao?.RPMMotorMedio <= 5;
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(parado, 2500, 200);
|
||||
bool carroParado()
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
|
@ -578,9 +614,14 @@ namespace AgroBase.Models.Modules
|
|||
}
|
||||
|
||||
DateTime Agora = DateTime.Now;
|
||||
bool atingiuSp() => Modulos.All(x => x.DirMotor.PosicaoTipoMovimentoConcluido(DirecaoAtual));
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(atingiuSp, 5000, 200);
|
||||
bool Sucesso = atingiuSp();
|
||||
bool posicaoConcluida() => Modulos.All(x => x.DirMotor.PosicaoTipoMovimentoConcluido(DirecaoAtual));
|
||||
bool finalizarEsperaAngulo() => cts.IsCancellationRequested || posicaoConcluida();
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(finalizarEsperaAngulo, 5000, 200);
|
||||
|
||||
if (cts.IsCancellationRequested)
|
||||
return;
|
||||
|
||||
bool Sucesso = posicaoConcluida();
|
||||
|
||||
if (Sucesso && DirecaoAtual != Direcao.Parado)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1959,7 +1959,7 @@ namespace AgroBase.Models
|
|||
var dispMvd = DispMvd;
|
||||
|
||||
if (dispMvd?.Dados?.Modulos != null) // && value != Controle.TipoMovimento
|
||||
{
|
||||
{
|
||||
Controle.DefinirTipoMovimento(value, dispMvd.Dados.Modulos);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue