Liberado calibragem direcional, padronizado Logs

This commit is contained in:
Diego Freitas 2026-04-01 09:36:20 -03:00
parent c00b08dc88
commit e03d84b498
5 changed files with 19 additions and 18 deletions

View File

@ -107,7 +107,7 @@ namespace AgroBase.Models
double dt = (DateTime.Now - MomentoUltimaLeitura).TotalMilliseconds; double dt = (DateTime.Now - MomentoUltimaLeitura).TotalMilliseconds;
double estimado = AnguloAtual + (VelocidadeEstimada * dt); double estimado = AnguloAtual + (VelocidadeEstimada * dt);
Console.WriteLine($"[Estimativa] {AnguloAtual:F2}° + ({VelocidadeEstimada:F4} * {dt:F0}ms) = {estimado:F2}°"); Variaveis.MostrarLog($"[MKS057DModel] [AnguloEstimado] [ADDR {EnderecoTx}] Estimativa {AnguloAtual:F2}° + ({VelocidadeEstimada:F4} * {dt:F0}ms) = {estimado:F2}°");
return estimado; return estimado;
} }

View File

@ -375,11 +375,11 @@ namespace AgroBase.Models.Modules
if (Referenciado) if (Referenciado)
{ {
await SetZero(); await SetZero();
Console.WriteLine($"[DIR {Mod_ID}] - Referenciamento Concluído!"); Variaveis.MostrarLog($"[DirecionalModel] [ReferenciaMotor] [DIR {Mod_ID}] - Referenciamento Concluído!");
} }
else else
{ {
Console.WriteLine($"[DIR {Mod_ID}] - Referenciamento Falhou!"); Variaveis.MostrarLog($"[DirecionalModel] [ReferenciaMotor] [DIR {Mod_ID}] - Referenciamento Falhou!");
} }
Referenciando = false; Referenciando = false;
@ -393,7 +393,7 @@ namespace AgroBase.Models.Modules
if (angControle <= 0.8) if (angControle <= 0.8)
{ {
Console.WriteLine($"[DIR {Mod_ID}] - RefAbs: AnguloReal já dentro da tolerância ({AnguloReal:F2}°)."); Variaveis.MostrarLog($"[DirecionalModel] [ReferenciaMotorAbsoluto] [DIR {Mod_ID}] - RefAbs: AnguloReal já dentro da tolerância ({AnguloReal:F2}°).");
return true; return true;
} }
@ -438,19 +438,19 @@ namespace AgroBase.Models.Modules
if (IN1_Atuado != EstadoInicial && AnguloEntrada == 9999) if (IN1_Atuado != EstadoInicial && AnguloEntrada == 9999)
{ {
AnguloEntrada = Leitura.AnguloEstimado(); AnguloEntrada = Leitura.AnguloEstimado();
Console.WriteLine($"[DIR {Mod_ID}] - Angulo de Entrada Definido: {AnguloEntrada} (Leitura: {AnguloLeitura})"); Variaveis.MostrarLog($"[DirecionalModel] [ReferenciaMotorRelativo] [DIR {Mod_ID}] - Angulo de Entrada Definido: {AnguloEntrada} (Leitura: {AnguloLeitura})");
_sentido = _sentido == Sentido.Horario ? Sentido.Antihorario : Sentido.Horario; _sentido = _sentido == Sentido.Horario ? Sentido.Antihorario : Sentido.Horario;
_anguloSP *= -1; _anguloSP *= -1;
Console.WriteLine($"[DIR {Mod_ID}] - Invertendo Sentido de Giro para {_sentido.ToString()}"); Variaveis.MostrarLog($"[DirecionalModel] [ReferenciaMotorRelativo] [DIR {Mod_ID}] - Invertendo Sentido de Giro para {_sentido.ToString()}");
} }
if (IN1_Atuado == EstadoInicial && AnguloEntrada != 9999 && AnguloSaida == 9999) if (IN1_Atuado == EstadoInicial && AnguloEntrada != 9999 && AnguloSaida == 9999)
{ {
AnguloSaida = Leitura.AnguloEstimado(); AnguloSaida = Leitura.AnguloEstimado();
Console.WriteLine($"[DIR {Mod_ID}] - Angulo de Saída Definido: {AnguloSaida} (Leitura: {AnguloLeitura})"); Variaveis.MostrarLog($"[DirecionalModel] [ReferenciaMotorRelativo] [DIR {Mod_ID}] - Angulo de Saída Definido: {AnguloSaida} (Leitura: {AnguloLeitura})");
_sentido = _sentido == Sentido.Horario ? Sentido.Antihorario : Sentido.Horario; _sentido = _sentido == Sentido.Horario ? Sentido.Antihorario : Sentido.Horario;
Console.WriteLine($"[DIR {Mod_ID}] - Invertendo Sentido de Giro para {_sentido.ToString()}"); Variaveis.MostrarLog($"[DirecionalModel] [ReferenciaMotorRelativo] [DIR {Mod_ID}] - Invertendo Sentido de Giro para {_sentido.ToString()}");
_anguloSP = CalcularCentroCompensado(AnguloEntrada, AnguloSaida, _sentido); _anguloSP = CalcularCentroCompensado(AnguloEntrada, AnguloSaida, _sentido);
} }
@ -467,7 +467,7 @@ namespace AgroBase.Models.Modules
if (!Sucesso) if (!Sucesso)
{ {
Console.WriteLine($"[DIR {Mod_ID}] - ReferenciaMotorRelativo falhou (timeout ou não inicializado). Entrada={AnguloEntrada}, Saida={AnguloSaida}"); Variaveis.MostrarLog($"[DirecionalModel] [ReferenciaMotorRelativo] [DIR {Mod_ID}] - ReferenciaMotorRelativo falhou (timeout ou não inicializado). Entrada={AnguloEntrada}, Saida={AnguloSaida}");
} }
return Sucesso; return Sucesso;
@ -491,7 +491,7 @@ namespace AgroBase.Models.Modules
double centroCompensado = centro + compensacao; double centroCompensado = centro + compensacao;
Console.WriteLine($"[DIR {Mod_ID}] - Folga: {folga}, Entrada: {entrada}, Saida: {saida}, Centro: {centro}, Compensacao: {compensacao}, Centro Compensado: {centroCompensado}"); Variaveis.MostrarLog($"[DirecionalModel] [CalcularCentroCompensado] [DIR {Mod_ID}] - Folga: {folga}, Entrada: {entrada}, Saida: {saida}, Centro: {centro}, Compensacao: {compensacao}, Centro Compensado: {centroCompensado}");
FolgaMecanica = folga; FolgaMecanica = folga;
@ -510,7 +510,7 @@ namespace AgroBase.Models.Modules
if (FuncoesMatematicas.ValorEstaEntre(AnguloLeitura, -1, 1)) if (FuncoesMatematicas.ValorEstaEntre(AnguloLeitura, -1, 1))
{ {
Console.WriteLine($"[DIR {Mod_ID}] - Set Zero"); Variaveis.MostrarLog($"[DirecionalModel] [SetZero] [DIR {Mod_ID}] - Set Zero");
break; break;
} }
else else
@ -520,7 +520,7 @@ namespace AgroBase.Models.Modules
} }
MKS057DCanService.Movimento(_EnderecoCAN_Tx, _EnderecoCAN_Rx, 0, 10, Sentido.Parado); MKS057DCanService.Movimento(_EnderecoCAN_Tx, _EnderecoCAN_Rx, 0, 10, Sentido.Parado);
Console.WriteLine($"[DIR {Mod_ID}] - Comando Angulo Zero: {AnguloLeitura}"); Variaveis.MostrarLog($"[DirecionalModel] [SetZero] [DIR {Mod_ID}] - Comando Angulo Zero: {AnguloLeitura}");
} }

View File

@ -458,10 +458,10 @@ namespace AgroBase.Models.Modules
if (calDir[Modulo.Modulo_ID]) continue; if (calDir[Modulo.Modulo_ID]) continue;
tasks.Add(Modulo.DirMotor.ReferenciaMotor().ContinueWith(t => { tasks.Add(Modulo.DirMotor.ReferenciaMotor().ContinueWith(t => {
if (t.IsFaulted) if (t.IsFaulted)
Console.WriteLine($"Erro no referenciamento do módulo {Modulo.Modulo_ID}: {t.Exception?.InnerException?.Message}"); Variaveis.MostrarLog($"[MovimentacaoUnificadaModel] [RealizarCalibragemDirAsync] Erro no referenciamento do módulo {Modulo.Modulo_ID}: {t.Exception?.InnerException?.Message}");
if (t.IsCompleted) if (t.IsCompleted)
{ {
Console.WriteLine($"Referenciamento do módulo {Modulo.Modulo_ID} concluído com sucesso!"); Variaveis.MostrarLog($"[MovimentacaoUnificadaModel] [RealizarCalibragemDirAsync] Referenciamento do módulo {Modulo.Modulo_ID} concluído com sucesso!");
calDir[Modulo.Modulo_ID] = true; calDir[Modulo.Modulo_ID] = true;
} }
})); }));

View File

@ -1254,6 +1254,8 @@ namespace AgroBase.Models
public async Task RealizarCalibragemInicialAsync(bool forcar) public async Task RealizarCalibragemInicialAsync(bool forcar)
{ {
if (Variaveis.OperacaoEmAndamento.Calibrando) return;
bool modsCalibrados = Variaveis.OperacaoEmAndamento.ModsCalibragem.All(x => x.Value.Values.Count > 0 && x.Value.Values.All(y => y == true)); bool modsCalibrados = Variaveis.OperacaoEmAndamento.ModsCalibragem.All(x => x.Value.Values.Count > 0 && x.Value.Values.All(y => y == true));
if (!forcar && modsCalibrados) return; if (!forcar && modsCalibrados) return;
@ -1267,7 +1269,6 @@ namespace AgroBase.Models
bool calibragemAtuNecessaria = pControle.PulverizadorAutomatico && (DispAtu?.Dados != null && sv.Contains(s.FirstOrDefault(x => x.modulo == T_Code.Atu)?.status ?? StatusModulo.Desconectado) && (forcar || Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Atu].Any(x => !x.Value) || !Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Atu].Any())); bool calibragemAtuNecessaria = pControle.PulverizadorAutomatico && (DispAtu?.Dados != null && sv.Contains(s.FirstOrDefault(x => x.modulo == T_Code.Atu)?.status ?? StatusModulo.Desconectado) && (forcar || Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Atu].Any(x => !x.Value) || !Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Atu].Any()));
bool calibragemDirNecessaria = (DispMvd?.Dados != null && sv.Contains(s.FirstOrDefault(x => x.modulo == T_Code.Dir)?.status ?? StatusModulo.Desconectado) && (forcar || Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Dir].Any(x => !x.Value) || !Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Dir].Any())); bool calibragemDirNecessaria = (DispMvd?.Dados != null && sv.Contains(s.FirstOrDefault(x => x.modulo == T_Code.Dir)?.status ?? StatusModulo.Desconectado) && (forcar || Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Dir].Any(x => !x.Value) || !Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Dir].Any()));
bool calibragemMovNecessaria = (DispMvd?.Dados != null && sv.Contains(s.FirstOrDefault(x => x.modulo == T_Code.Mov)?.status ?? StatusModulo.Desconectado) && (forcar || Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Mov].Any(x => !x.Value) || !Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Mov].Any())); bool calibragemMovNecessaria = (DispMvd?.Dados != null && sv.Contains(s.FirstOrDefault(x => x.modulo == T_Code.Mov)?.status ?? StatusModulo.Desconectado) && (forcar || Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Mov].Any(x => !x.Value) || !Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Mov].Any()));
calibragemDirNecessaria = false;
if (!calibragemAtuNecessaria && !calibragemDirNecessaria && !calibragemMovNecessaria) return; if (!calibragemAtuNecessaria && !calibragemDirNecessaria && !calibragemMovNecessaria) return;

View File

@ -90,11 +90,11 @@
<StackPanel> <StackPanel>
<TextBlock Text="Movimento" Foreground="White" FontSize="15" FontWeight="SemiBold" Margin="0,0,0,12"/> <TextBlock Text="Movimento" Foreground="White" FontSize="15" FontWeight="SemiBold" Margin="0,0,0,12"/>
<CheckBox Content="Automático" IsChecked="{Binding Parametros.Controle.MovimentoAutomatico}" Style="{StaticResource ParamCheckBoxStyle}"/> <CheckBox Content="Controle Automático" IsChecked="{Binding Parametros.Controle.MovimentoAutomatico}" Style="{StaticResource ParamCheckBoxStyle}"/>
<CheckBox Content="Assistido por Sonar" IsChecked="{Binding Parametros.Controle.MovAuxilioSonar}" Style="{StaticResource ParamCheckBoxStyle}" />
<CheckBox Content="Parada por Obstáculo (OAK)" IsChecked="{Binding Parametros.Controle.OakParadaPorObstaculo}" Style="{StaticResource ParamCheckBoxStyle}"/> <CheckBox Content="Parada por Obstáculo (OAK)" IsChecked="{Binding Parametros.Controle.OakParadaPorObstaculo}" Style="{StaticResource ParamCheckBoxStyle}"/>
<CheckBox Content="Parada por Inclinação (IMU)" IsChecked="{Binding Parametros.Controle.ImuParadaPorInclinacao}" Style="{StaticResource ParamCheckBoxStyle}"/> <CheckBox Content="Parada por Inclinação (IMU)" IsChecked="{Binding Parametros.Controle.ImuParadaPorInclinacao}" Style="{StaticResource ParamCheckBoxStyle}"/>
<CheckBox Content="Frenagem Automática ao Parar" IsChecked="{Binding Parametros.Controle.FrenagemAutomaticaAoParar}" Style="{StaticResource ParamCheckBoxStyle}"/> <CheckBox Content="Frenagem Automática ao Parar" IsChecked="{Binding Parametros.Controle.FrenagemAutomaticaAoParar}" Style="{StaticResource ParamCheckBoxStyle}"/>
<CheckBox Content="Assistido por Sonar" IsChecked="{Binding Parametros.Controle.MovAuxilioSonar}" Style="{StaticResource ParamCheckBoxStyle}" />
<TextBlock Text="Velocidade sem Ervas (%)" Style="{StaticResource ParamLabelStyle}"/> <TextBlock Text="Velocidade sem Ervas (%)" Style="{StaticResource ParamLabelStyle}"/>
<TextBox Text="{Binding Parametros.Controle.MovVelocidadeSErvasPercent, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource ParamTextBoxStyle}"/> <TextBox Text="{Binding Parametros.Controle.MovVelocidadeSErvasPercent, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource ParamTextBoxStyle}"/>
@ -115,7 +115,7 @@
<StackPanel> <StackPanel>
<TextBlock Text="Direcional" Foreground="White" FontSize="15" FontWeight="SemiBold" Margin="0,0,0,12"/> <TextBlock Text="Direcional" Foreground="White" FontSize="15" FontWeight="SemiBold" Margin="0,0,0,12"/>
<CheckBox Content="Direcional Automático" IsChecked="{Binding Parametros.Controle.DirecionalAutomatico}" Style="{StaticResource ParamCheckBoxStyle}"/> <CheckBox Content="Controle Automático" IsChecked="{Binding Parametros.Controle.DirecionalAutomatico}" Style="{StaticResource ParamCheckBoxStyle}"/>
<CheckBox Content="Assistido por Sonar" IsChecked="{Binding Parametros.Controle.DirAuxilioSonar}" Style="{StaticResource ParamCheckBoxStyle}" /> <CheckBox Content="Assistido por Sonar" IsChecked="{Binding Parametros.Controle.DirAuxilioSonar}" Style="{StaticResource ParamCheckBoxStyle}" />
<TextBlock Text="Ângulo Máximo (°)" Style="{StaticResource ParamLabelStyle}"/> <TextBlock Text="Ângulo Máximo (°)" Style="{StaticResource ParamLabelStyle}"/>