iniciado acompanhamento

This commit is contained in:
Diego Freitas 2025-11-26 17:00:16 -03:00
parent 02ae378b92
commit 4b7c83414c
316 changed files with 5085 additions and 1185 deletions

Binary file not shown.

View File

@ -21,26 +21,12 @@ namespace AgroBase.Models
{
get
{
if (Endereco.Contains("USB"))
{
return TipoConexao.USB;
}
else if (Endereco.Contains("COM"))
{
return TipoConexao.PortaCOM;
}
else if (Endereco.Contains("."))
{
return TipoConexao.Ethernet;
}
else if (Endereco.Contains("CAN"))
{
return TipoConexao.CAN;
}
else
{
return TipoConexao.Desconhecido;
}
if (string.IsNullOrEmpty(Endereco)) return TipoConexao.Desconhecido;
else if (Endereco.Contains("USB")) return TipoConexao.USB;
else if (Endereco.Contains("COM")) return TipoConexao.PortaCOM;
else if (Endereco.Contains(".")) return TipoConexao.Ethernet;
else if (Endereco.Contains("CAN")) return TipoConexao.CAN;
else return TipoConexao.Desconhecido;
}
}
public StatusModulo Status { get; set; }

View File

@ -13,7 +13,7 @@ using System.Data;
namespace AgroBase
{
class GeneralJoystick
public class GeneralJoystick
{
public static Joystick JoystickConectado = null;
public static int MargemAnalogico = 100;
@ -694,7 +694,10 @@ namespace AgroBase
}
else if (DirecaoAtual == Direcao.Referenciar)
{
Task.Run(async () => await Variaveis.OperacaoEmAndamento.DispMvd.Dados.RealizarReferenciamentoDirecional());
List<string> modsRef = null;
if (!string.IsNullOrEmpty(ID))
modsRef.Add(ID);
Task.Run(async () => await Variaveis.OperacaoEmAndamento.DispMvd.Dados.RealizarReferenciamentoDirecional(modsRef));
}
else
{
@ -734,9 +737,12 @@ namespace AgroBase
public static void EnviarComandoAtuador(S_Code Componente, bool Status, string ID, bool Forcar = false)
{
if (!Variaveis.OperacaoEmAndamento.Iniciado) return;
bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Atu && x.ComponentesEmUso[ID]);
if (!componente_em_uso && Status) return; // Impede execucao de comandos que liguem componentes quando estiver marcado para nao utilizar
if (!Forcar)
{
if (!Variaveis.OperacaoEmAndamento.Iniciado) return;
bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Atu && x.ComponentesEmUso[ID]);
if (!componente_em_uso && Status) return; // Impede execucao de comandos que liguem componentes quando estiver marcado para nao utilizar
}
var DispAtu = Variaveis.OperacaoEmAndamento.DispAtu;
int id_num = -1;
@ -768,10 +774,18 @@ namespace AgroBase
}
public static void EnviarComandoSensoriamento(S_Code Componente, string ID, dynamic Status)
public static void EnviarComandoSensoriamento(S_Code Componente, string ID, dynamic Status, bool Forcar = false)
{
bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Sen && x.ComponentesEmUso[ID]);
if (!componente_em_uso && Status) return; // Impede execucao de comandos que liguem componentes quando estiver marcado para nao utilizar
if (!Forcar)
{
bool componente_em_uso = Variaveis.OperacaoEmAndamento.Parametros.ModulosMandatorios.Any(x => x.Dispositivo == T_Code.Sen && x.ComponentesEmUso[ID]);
if (!componente_em_uso)
{
// Impede execucao de comandos que liguem componentes quando estiver marcado para nao utilizar
if (Componente == S_Code.sRLE && ((Estado)Status) == Estado.Ligado) return;
if (Componente == S_Code.sFRO && ((int)Status) > 0) return;
}
}
var DispSen = Variaveis.OperacaoEmAndamento.DispSen;

View File

@ -993,6 +993,8 @@ namespace AgroBase.Models.Modules
public double TempoAtuado { get; set; } = 0;
private void AtualizaTempoAtuado()
{
if (!Variaveis.OperacaoEmAndamento.Iniciado) return;
if (_atuado)
{
if (InicioAtuacao == DateTime.MinValue)

View File

@ -370,14 +370,14 @@ namespace AgroBase.Models.Modules
}
}
public async Task<bool> RealizarReferenciamentoDirecional()
public async Task<bool> RealizarReferenciamentoDirecional(List<string> ModsReferenciar = null)
{
if (!MKS057DCanService.Referenciando)
{
TipoMovimentoDirecional tipoControle = Variaveis.OperacaoEmAndamento.Controle.TipoMovimento;
Variaveis.OperacaoEmAndamento.Controle.TipoMovimento = TipoMovimentoDirecional.Diagnostico;
var ModsRef = Modulos.Where(x => x.DirMotor.Comandar && x.DirMotor.Inicializado).ToList();
var ModsRef = Modulos.Where(x => x.DirMotor.Comandar && x.DirMotor.Inicializado && (ModsReferenciar != null ? ModsReferenciar.Contains(x.DirMotor.Mod_ID) : true)).ToList();
foreach (var Modulo in ModsRef)
{
Task.Run(async () => await Modulo.DirMotor.ReferenciaMotor());

View File

@ -45,6 +45,7 @@ namespace AgroBase.Models
public ModoOperacao Modo { get; set; }
public StatusModulo Status { get; set; }
public string Descricao { get; set; }
public string OprPath { get; set; }
public OperacaoControleModel Controle { get; set; } = new OperacaoControleModel();
@ -102,6 +103,13 @@ namespace AgroBase.Models
}
Variaveis.OperacaoEmAndamento.StatusAnterior = Variaveis.OperacaoEmAndamento.StatusAtual;
double saude_geral = HealthWorkerService.ModulosSaude.Average(x => x.saude);
Variaveis.OperacaoEmAndamento.Status =
!Variaveis.OperacaoEmAndamento.OperacaoLiberada ? StatusModulo.Falha :
saude_geral <= 0.0 ? StatusModulo.Desconectado :
saude_geral < 80.0 ? StatusModulo.Alerta :
StatusModulo.Operante;
}
@ -1534,7 +1542,7 @@ namespace AgroBase.Models
}
break;
}
GeneralJoystick.EnviarComandoAtuador(comp, status, controleBase._comp_id);
GeneralJoystick.EnviarComandoAtuador(comp, status, controleBase._comp_id, Forcar: true);
return;
}
@ -1551,7 +1559,13 @@ namespace AgroBase.Models
}
S_Code comp = get_comp(controleBase._comp_id);
GeneralJoystick.EnviarComandoSensoriamento(comp, controleBase._comp_id, controleBase._comp_value);
GeneralJoystick.EnviarComandoSensoriamento(comp, controleBase._comp_id, controleBase._comp_value, Forcar: true);
return;
}
if (controleBase.Dispositivo == T_Code.Dir && controleBase.Tecla == BotoesJoystick.R3)
{
GeneralJoystick.EnviaComandoMotor(Keys.R, ForcarComando: true);
return;
}
@ -1564,10 +1578,9 @@ namespace AgroBase.Models
if (Variaveis.OperacaoEmAndamento.Parametros.Controle.MovimentoAutomatico) return;
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
_Controle.PercentualVelocidadeSP = controleBase.Controle.PercentualVelocidadeSP;
_Controle.Angulo = controleBase.Controle.AnguloSP;
_Controle.TipoMovimento = controleBase.Controle.TipoMovimentoDirecional;
if (controleBase.Controle.PercentualVelocidadeSP != null) _Controle.PercentualVelocidadeSP = (double)controleBase.Controle.PercentualVelocidadeSP;
if (controleBase.Controle.AnguloSP != null) _Controle.Angulo = (double)controleBase.Controle.AnguloSP;
if (controleBase.Controle.TipoMovimentoDirecional != null) _Controle.TipoMovimento = (TipoMovimentoDirecional)controleBase.Controle.TipoMovimentoDirecional;
Keys tecla = GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.botaoJoy == controleBase.Tecla)?.key ?? Keys.Escape;
GeneralJoystick.EnviaComandoMotor(tecla, controleBase.Dispositivo, ForcarComando: true);
@ -2175,10 +2188,9 @@ namespace AgroBase.Models
public class OperacaoComandoBaseControleModel
{
public double PercentualVelocidadeSP { get; set; }
public double AnguloSP { get; set; }
public double VelocidadeMP { get; set; }
public TipoMovimentoDirecional TipoMovimentoDirecional { get; set; }
public double? PercentualVelocidadeSP { get; set; }
public double? AnguloSP { get; set; }
public TipoMovimentoDirecional? TipoMovimentoDirecional { get; set; }
}
@ -2198,6 +2210,7 @@ namespace AgroBase.Models
{
public DateTime Momento { get; set; }
public ModoOperacao Modo { get; set; }
public StatusModulo Status { get; set; }
public string ErroOperacaoLiberada { get; set; }
public bool OperacaoLiberada { get; set; }
public bool OperacaoIniciada { get; set; }
@ -2231,6 +2244,7 @@ namespace AgroBase.Models
public List<OperacaoParametrosMandatoriosModel> ParametrosMandatorios { get; set; }
public List<ManagerWorkerMessageResponseModulosPendentesModel> ModulosSaude { get; set; }
public List<DispositivoDetalhesModel> DispositivosMapeados { get; set; }
public Dictionary<string, double> Temperaturas { get; set; }
public Dictionary<T_Code, Dictionary<string, bool>> ModsCalibragem { get; set; }
public bool CanSerialAtivado { get; set; }
@ -2287,6 +2301,8 @@ namespace AgroBase.Models
PressaoLinha = _DispAtu.Dados.PressaoLinha,
VazaoInstantanea = _DispAtu.Dados.VazaoFluxoMLpSInstantanea,
VazaoMedia = _DispAtu.Dados.VazaoFluxoMLpSMedia,
ComandoBomba = _DispAtu.Dados.BombasPressurizadoras.FirstOrDefault()?.ComandoAtuar ?? false,
LeituraComandoBomba = (_DispAtu.Dados.BombasPressurizadoras.FirstOrDefault().ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? Estado.Desligado) == Estado.Ligado,
LeituraPotenciaBomba = FuncoesMatematicas.Clamp(_DispAtu.Dados.BombasPressurizadoras.FirstOrDefault().ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0, 0, 100),
VolumeVazaoMl = _DispAtu.Dados.VolumeVazaoML
} : new OperacaoSensoriamentoLogAtuModel();
@ -2302,21 +2318,45 @@ namespace AgroBase.Models
DistanciaPercorridaParcial = _DispMvd.Dados.DistanciaPercorridaParcial,
Dir_Status = _DispMvd.Dados.StatusModulosDIR(_Controle.TipoMovimento),
MovEsq_Status = _DispMvd.Dados.StatusModulosMOV(Direcao.Esquerda),
MovDir_Status = _DispMvd.Dados.StatusModulosMOV(Direcao.Direita)
MovDir_Status = _DispMvd.Dados.StatusModulosMOV(Direcao.Direita),
Dados = _DispMvd.Dados.Modulos.Select(x => new OperacaoSensoriamentoLogMvdMovModel()
{
ID = x.MovMotor.Mod_ID,
Tensao = x.MovMotor.Tensao,
Corrente_Barramento = x.MovMotor.Corrente_Barramento,
Corrente_Motor = x.MovMotor.Corrente_Motor,
Potencia = x.MovMotor.Potencia,
CicloTrabalho = x.MovMotor.CicloTrabalho,
TemperaturaDriver = x.MovMotor.TemperaturaDriver,
RPM_Motor = x.MovMotor.RPM_Motor,
RPM_Roda = x.MovMotor.RPM_Roda,
VelocidadeInstantanea = x.MovMotor.VelocidadeInstantanea
}).ToList()
} : new OperacaoSensoriamentoLogMvdModel();
var S36V = _DispSen?.Dados?.Sensores?.FirstOrDefault(x => x.ID == "AB36V");
var dadosBateria = S36V != null ? new OperacaoSensoriamentoLogBateriaModel()
{
Iniciado = S36V.Inicializado,
_dt = S36V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.dt ?? 0,
Iniciado = S36V.Inicializado,
_dt = S36V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.dt ?? 0,
PorcentagemBateria = FuncoesMatematicas.Clamp(_DispSen.Dados.ContadorCarga.PercentualBateria, 0, 100),
BateriaConsumida = FuncoesMatematicas.Clamp(_DispSen.Dados.ContadorCarga.PercentualConsumido, 0, 100),
TempoEstimadoRestanteMinutos = _DispSen.Dados.ContadorCarga.TempoEstimadoMinutos,
TempoEstimadoRestanteMinutos = _DispSen.Dados.ContadorCarga.TempoEstimadoMinutos,
CorrenteInstantanea = (S36V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.valor ?? 0) / 1000.0,
TensaoInstantanea = S36V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao)?.atual?.valor ?? 0,
PotenciaInstantanea = S36V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0,
PotenciaAcumulada = S36V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Temperatura)?.atual?.valor ?? 0
PotenciaInstantanea = S36V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0,
PotenciaAcumulada = S36V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Temperatura)?.atual?.valor ?? 0,
Barramentos = _DispSen?.Dados?.Sensores?.Where(x => x.Componente == S_Code.sCOR)?.Select(x => new OperacaoSensoriamentoLogBateriaBarramentoModel()
{
ID = x.ID,
Iniciado = x.Inicializado,
Descricao = x.Descricao,
Tensao = x.ValoresLeituras?.FirstOrDefault(y => y.funcao == FuncoesPinout.Tensao)?.atual?.valor ?? -1,
Corrente = x.ValoresLeituras?.FirstOrDefault(y => y.funcao == FuncoesPinout.Corrente)?.atual?.valor ?? -1,
Potencia = x.ValoresLeituras?.FirstOrDefault(y => y.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? -1,
Energia = x.ValoresLeituras?.FirstOrDefault(y => y.funcao == FuncoesPinout.Energia)?.atual?.valor ?? -1,
Temperatura = x.ValoresLeituras?.FirstOrDefault(y => y.funcao == FuncoesPinout.Temperatura)?.atual?.valor ?? -1,
}).ToList()
} : new OperacaoSensoriamentoLogBateriaModel();
var dadosTrajetoria = new OperacaoSensoriamentoLogTrajetoriaModel()
@ -2376,6 +2416,7 @@ namespace AgroBase.Models
{
Momento = DateTime.Now,
Modo = Variaveis.OperacaoEmAndamento.Modo,
Status = Variaveis.OperacaoEmAndamento.Status,
OperacaoLiberada = Variaveis.OperacaoEmAndamento.OperacaoLiberada,
OperacaoIniciada = Variaveis.OperacaoEmAndamento.Iniciado,
Emergencia = Variaveis.OperacaoEmAndamento.Emergencia,
@ -2404,6 +2445,7 @@ namespace AgroBase.Models
ModulosSaude = HealthWorkerService.ModulosSaude.ToList(),
DispositivosMapeados = new List<DispositivoDetalhesModel>(SerialService.DispositivosMapeados),
ModsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>(Variaveis.OperacaoEmAndamento.ModsCalibragem),
Temperaturas = _DispSen?.Dados?.Sensores?.Where(x => x.Componente == S_Code.sNTC)?.ToDictionary(x => x.ID, y => (double?)(y.ValoresLeituras?.FirstOrDefault(v => v.funcao == FuncoesPinout.Temperatura)?.atual?.valor) ?? -1),
};
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = dadosAtualizados;
@ -2419,6 +2461,8 @@ namespace AgroBase.Models
return new OperacaoSensoriamentoLogModel()
{
Modo = Modo,
Status = Status,
Momento = Momento,
ErroOperacaoLiberada = ErroOperacaoLiberada,
OperacaoLiberada = OperacaoLiberada,
@ -2448,6 +2492,7 @@ namespace AgroBase.Models
ModulosSaude = new List<ManagerWorkerMessageResponseModulosPendentesModel>(ModulosSaude),
DispositivosMapeados = new List<DispositivoDetalhesModel>(DispositivosMapeados),
ModsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>(ModsCalibragem),
Temperaturas = new Dictionary<string, double>(Temperaturas ?? new Dictionary<string, double>())
};
}
@ -2494,6 +2539,8 @@ namespace AgroBase.Models
public double PressaoLinha { get; set; }
public double VazaoInstantanea { get; set; }
public double VazaoMedia { get; set; }
public bool ComandoBomba { get; set; }
public bool LeituraComandoBomba { get; set; }
public double LeituraPotenciaBomba { get; set; }
public double VolumeVazaoMl { get; set; }
@ -2513,6 +2560,8 @@ namespace AgroBase.Models
PressaoLinha = PressaoLinha,
VazaoInstantanea = VazaoInstantanea,
VazaoMedia = VazaoMedia,
ComandoBomba = ComandoBomba,
LeituraComandoBomba = LeituraComandoBomba,
LeituraPotenciaBomba = LeituraPotenciaBomba,
VolumeVazaoMl = VolumeVazaoMl
};
@ -2538,6 +2587,8 @@ namespace AgroBase.Models
public (bool, List<string>) Dir_Status { get; set; }
public (bool, List<string>) MovEsq_Status { get; set; }
public (bool, List<string>) MovDir_Status { get; set; }
public List<OperacaoSensoriamentoLogMvdMovModel> Dados { get; set; }
public OperacaoSensoriamentoLogMvdModel Clone()
{
@ -2553,10 +2604,25 @@ namespace AgroBase.Models
MovDir_Status = MovDir_Status,
DistanciaPercorridaParcial = DistanciaPercorridaParcial,
DistanciaPercorridaTotal = DistanciaPercorridaTotal,
Dados = new List<OperacaoSensoriamentoLogMvdMovModel>(Dados ?? new List<OperacaoSensoriamentoLogMvdMovModel>()),
};
}
}
public class OperacaoSensoriamentoLogMvdMovModel
{
public string ID { get; set; }
public double RPM_Roda { get; set; }
public double TemperaturaDriver { get; set; }
public double Tensao { get; set; }
public double Corrente_Barramento { get; set; }
public double Corrente_Motor { get; set; }
public double Potencia { get; set; }
public double CicloTrabalho { get; set; }
public double RPM_Motor { get; set; }
public double VelocidadeInstantanea { get; set; }
}
public class OperacaoSensoriamentoLogBateriaModel
{
public bool Iniciado { get; set; }
@ -2568,6 +2634,7 @@ namespace AgroBase.Models
public double PotenciaInstantanea { get; set; }
public double PotenciaAcumulada { get; set; }
public double TempoEstimadoRestanteMinutos { get; set; }
public List<OperacaoSensoriamentoLogBateriaBarramentoModel> Barramentos { get; set; }
public OperacaoSensoriamentoLogBateriaModel Clone()
{
@ -2580,11 +2647,24 @@ namespace AgroBase.Models
TensaoInstantanea = TensaoInstantanea,
PotenciaInstantanea = PotenciaInstantanea,
PotenciaAcumulada = PotenciaAcumulada,
TempoEstimadoRestanteMinutos = TempoEstimadoRestanteMinutos
TempoEstimadoRestanteMinutos = TempoEstimadoRestanteMinutos,
Barramentos = new List<OperacaoSensoriamentoLogBateriaBarramentoModel>(Barramentos ?? new List<OperacaoSensoriamentoLogBateriaBarramentoModel>())
};
}
}
public class OperacaoSensoriamentoLogBateriaBarramentoModel
{
public string ID { get; set; }
public bool Iniciado { get; set; }
public string Descricao { get; set; }
public double Tensao { get; set; }
public double Corrente { get; set; }
public double Potencia { get; set; }
public double Energia { get; set; }
public double Temperatura { get; set; }
}
public class OperacaoSensoriamentoLogTrajetoriaModel
{
public StatusCarroMapa StatusCarro { get; set; }

View File

@ -140,7 +140,7 @@ namespace AgroBase.Services
foreach (string comando in comandos)
{
byte[] bytesComando = Encoding.ASCII.GetBytes(comando);
PortaGPS.Write(bytesComando, 0, bytesComando.Length);
PortaGPS?.Write(bytesComando, 0, bytesComando.Length);
await Task.Delay(1000); // Pequeno delay para evitar sobrecarga na comunicação
}
}

View File

@ -174,13 +174,13 @@ namespace AgroBase.Services
bytes.AddRange(BitConverter.GetBytes((int)model.Dispositivo));
// Serializar RPM
bytes.AddRange(BitConverter.GetBytes(model.Controle.PercentualVelocidadeSP));
bytes.AddRange(BitConverter.GetBytes(model.Controle.PercentualVelocidadeSP ?? 0));
// Serializar AnguloMP
bytes.AddRange(BitConverter.GetBytes(model.Controle.AnguloSP));
bytes.AddRange(BitConverter.GetBytes(model.Controle.AnguloSP ?? 0));
// Serializar VelocidadeMP
bytes.AddRange(BitConverter.GetBytes(model.Controle.VelocidadeMP));
//bytes.AddRange(BitConverter.GetBytes(model.Controle.VelocidadeMP ?? 0));
// Serializar Emergencia
bytes.AddRange(BitConverter.GetBytes(model.Emergencia));
@ -217,8 +217,8 @@ namespace AgroBase.Services
index += sizeof(double);
// Desserializar VelocidadeMP
model.Controle.VelocidadeMP = BitConverter.ToDouble(bytes, index);
index += sizeof(double);
//model.Controle.VelocidadeMP = BitConverter.ToDouble(bytes, index);
//index += sizeof(double);
// Desserializar Emergencia
model.Emergencia = BitConverter.ToBoolean(bytes, index);

View File

@ -155,18 +155,18 @@
<StackPanel Grid.Column="0">
<DockPanel>
<TextBlock Text="Velocidade " Foreground="#ddd"/>
<TextBlock Text="{Binding SpeedPercent, ElementName=Root, StringFormat={}{0:0}%}" Foreground="#ddd" DockPanel.Dock="Right"/>
<TextBlock Text="{Binding SpeedControl, ElementName=Root, StringFormat={}{0:0}%}" Foreground="#ddd" DockPanel.Dock="Right"/>
</DockPanel>
<Slider Minimum="0" Maximum="100" Value="{Binding SpeedPercent, ElementName=Root, Mode=TwoWay}"/>
<Slider Minimum="0" Maximum="100" Value="{Binding SpeedControl, ElementName=Root, Mode=TwoWay}"/>
<DockPanel Margin="0 10 0 0">
<TextBlock Text="Ângulo Máx " Foreground="#ddd"/>
<TextBlock Text="{Binding MaxSteerDeg, ElementName=Root, StringFormat={}{0:0}°}" Foreground="#ddd" DockPanel.Dock="Right"/>
<TextBlock Text="Ângulo " Foreground="#ddd"/>
<TextBlock Text="{Binding AngleControl, ElementName=Root, StringFormat={}{0:0}°}" Foreground="#ddd" DockPanel.Dock="Right"/>
</DockPanel>
<Slider Minimum="0" Maximum="90" Value="{Binding MaxSteerDeg, ElementName=Root, Mode=TwoWay}"/>
<Slider Minimum="0" Maximum="90" Value="{Binding AngleControl, ElementName=Root, Mode=TwoWay}"/>
<TextBlock Margin="0 10 0 0" Text="Tipo de Movimento" Foreground="#ddd"/>
<ComboBox ItemsSource="{Binding MoveModes, ElementName=Root}" SelectedItem="{Binding SelectedMoveMode, ElementName=Root, Mode=TwoWay}"/>
<ComboBox ItemsSource="{Binding MoveModes, ElementName=Root}" SelectedItem="{Binding MoveTypeControl, ElementName=Root, Mode=TwoWay}"/>
</StackPanel>
</Grid>

View File

@ -10,7 +10,6 @@ using Binding = System.Windows.Data.Binding;
using Application = System.Windows.Application;
using Point = System.Windows.Point;
using Size = System.Windows.Size;
using Mapsui;
namespace OperationControl.Controls
{
@ -20,12 +19,9 @@ namespace OperationControl.Controls
public partial class ManualControlPad : UserControl, INotifyPropertyChanged
{
public ObservableCollection<string> MoveModes { get; } = new();
private string _selectedMoveMode;
public string SelectedMoveMode
{
get => _selectedMoveMode;
set { _selectedMoveMode = value; /* Raise se precisar */ }
}
private HashSet<Key> _pressedKeys = new();
private AgroBase.Models.Enums.Direcao _lastMovKey = AgroBase.Models.Enums.Direcao.Parado;
private AgroBase.Models.Enums.Direcao _lastDirKey = AgroBase.Models.Enums.Direcao.Parado;
public ManualControlPad()
{
@ -36,7 +32,7 @@ namespace OperationControl.Controls
{
MoveModes.Add(t);
}
SelectedMoveMode = MoveModes[0];
MoveTypeControl = MoveType;
Loaded += (_, __) => UpdateThumb();
SizeChanged += (_, __) => { if (ManualContainer.Height > 0) AnimateManual(true, instant: true); };
@ -44,7 +40,6 @@ namespace OperationControl.Controls
EmergencyClicked += ManualControlPad_EmergencyClicked;
PauseClicked += ManualControlPad_PauseClicked;
ReferenceClicked += ManualControlPad_ReferenceClicked;
ModeChanged += ManualControlPad_ModeChanged;
CommandChanged += ManualControlPad_CommandChanged;
}
@ -78,8 +73,14 @@ namespace OperationControl.Controls
public static readonly DependencyProperty MoveTypeProperty = DependencyProperty.Register(nameof(MoveType), typeof(AgroBase.Models.Enums.TipoMovimentoDirecional), typeof(ManualControlPad), new PropertyMetadata(AgroBase.Models.Enums.TipoMovimentoDirecional.RodasDianteiras));
// ======= Ajustes (painel manual) =======
public double SpeedPercent { get => (double)GetValue(SpeedPercentProperty); set => SetValue(SpeedPercentProperty, value); }
public static readonly DependencyProperty SpeedPercentProperty = DependencyProperty.Register(nameof(SpeedPercent), typeof(double), typeof(ManualControlPad), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public double SpeedControl { get => (double)GetValue(SpeedControlProperty); set => SetValue(SpeedControlProperty, value); }
public static readonly DependencyProperty SpeedControlProperty = DependencyProperty.Register(nameof(SpeedControl), typeof(double), typeof(ManualControlPad), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public double AngleControl { get => (double)GetValue(AngleControlProperty); set => SetValue(AngleControlProperty, value); }
public static readonly DependencyProperty AngleControlProperty = DependencyProperty.Register(nameof(AngleControl), typeof(double), typeof(ManualControlPad), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public AgroBase.Models.Enums.TipoMovimentoDirecional MoveTypeControl { get => (AgroBase.Models.Enums.TipoMovimentoDirecional)GetValue(MoveTypeControlProperty); set => SetValue(MoveTypeControlProperty, value); }
public static readonly DependencyProperty MoveTypeControlProperty = DependencyProperty.Register(nameof(MoveTypeControl), typeof(AgroBase.Models.Enums.TipoMovimentoDirecional), typeof(ManualControlPad), new PropertyMetadata(AgroBase.Models.Enums.TipoMovimentoDirecional.RodasDianteiras));
public double MaxSteerDeg { get => (double)GetValue(MaxSteerDegProperty); set => SetValue(MaxSteerDegProperty, value); }
public static readonly DependencyProperty MaxSteerDegProperty = DependencyProperty.Register(nameof(MaxSteerDeg), typeof(double), typeof(ManualControlPad), new FrameworkPropertyMetadata(30d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
@ -94,7 +95,6 @@ namespace OperationControl.Controls
public event EventHandler EmergencyClicked;
public event EventHandler PauseClicked;
public event EventHandler ReferenceClicked;
public event EventHandler ModeChanged;
public event EventHandler CommandChanged;
// Botões
@ -105,10 +105,16 @@ namespace OperationControl.Controls
// Modo Manual → anima painel
void OnManualToggle(object s, RoutedEventArgs e)
{
bool on = TgManual.IsChecked == true;
AnimateManual(on);
if (!on) { SteerCmd = 0; ThrottleCmd = 0; }
bool manual_on = TgManual.IsChecked == true;
AnimateManual(manual_on);
if (!manual_on) { SteerCmd = 0; ThrottleCmd = 0; }
Focus(); // captura teclado se precisar
VariaveisControleOperacao.RoverEmFoco!.Controle.MovimentoAutomatico = !manual_on;
VariaveisControleOperacao.EnviarParametrosOperacao(new AgroBase.Models.Operacoes.OperacaoParametrosModel()
{
Controle = VariaveisControleOperacao.RoverEmFoco?.Controle
});
}
void AnimateManual(bool open, bool instant = false)
@ -162,34 +168,76 @@ namespace OperationControl.Controls
{
base.OnPreviewKeyDown(e);
if (TgManual.IsChecked != true) return;
// Se já está pressionada, IGNORA (é evento repetido)
if (_pressedKeys.Contains(e.Key))
{
e.Handled = true;
return;
}
// Marca como pressionada (primeira vez)
_pressedKeys.Add(e.Key);
switch (e.Key)
{
case Key.W:
case Key.Up: ThrottleCmd = 1; e.Handled = true; break;
case Key.Up:
ThrottleCmd = 1;
break;
case Key.S:
case Key.Down: ThrottleCmd = -1; e.Handled = true; break;
case Key.Down:
ThrottleCmd = -1;
break;
case Key.D:
case Key.Right: SteerCmd = 1; e.Handled = true; break;
case Key.Right:
SteerCmd = 1;
break;
case Key.A:
case Key.Left: SteerCmd = -1; e.Handled = true; break;
case Key.Space: SteerCmd = 0; ThrottleCmd = 0; e.Handled = true; break;
case Key.Escape: TgManual.IsChecked = false; OnManualToggle(null, null); e.Handled = true; break;
case Key.Left:
SteerCmd = -1;
break;
case Key.Space:
SteerCmd = 0;
ThrottleCmd = 0;
break;
case Key.Escape:
TgManual.IsChecked = false;
OnManualToggle(null, null);
break;
}
e.Handled = true;
}
protected override void OnPreviewKeyUp(KeyEventArgs e)
{
base.OnPreviewKeyUp(e);
if (TgManual.IsChecked != true) return;
// Remove do set (agora pode receber keydown de novo)
_pressedKeys.Remove(e.Key);
switch (e.Key)
{
case Key.W:
case Key.Up:
case Key.S:
case Key.Down: if (ThrottleCmd != 0) ThrottleCmd = 0; break;
case Key.Down:
ThrottleCmd = 0;
break;
case Key.D:
case Key.Right:
case Key.A:
case Key.Left: if (SteerCmd != 0) SteerCmd = 0; break;
case Key.Left:
SteerCmd = 0;
break;
}
}
@ -226,13 +274,12 @@ namespace OperationControl.Controls
public void AtualizarDadosControle(double? angMax = null, double? angSp = null, double? angCur = null, AgroBase.Models.Enums.TipoMovimentoDirecional? tipoMov = null, double? velPct = null, double? velSp = null, double? velKmh = null, bool? emg = null, bool? pause = null, bool? refing = null)
public void AtualizarDadosControle(double? angMax = null, double? angSp = null, double? angCur = null, AgroBase.Models.Enums.TipoMovimentoDirecional? tipoMov = null, double? velSp = null, double? velKmh = null, bool? emg = null, bool? pause = null, bool? refing = null)
{
if (angMax != null) MaxSteerDeg = (double)angMax;
if (angSp != null) AngleSpDeg = (double)angSp;
if (angCur != null) AngleCurDeg = (double)angCur;
if (tipoMov != null) MoveType = (AgroBase.Models.Enums.TipoMovimentoDirecional)tipoMov;
if (velPct != null) SpeedPercent = (double)velPct;
if (velSp != null) SpeedSpKmh = (double)velSp;
if (velKmh != null) SpeedCurKmh = (double)velKmh;
if (emg != null) EmergencyActivated = (bool)emg;
@ -250,7 +297,7 @@ namespace OperationControl.Controls
private void ManualControlPad_PauseClicked(object? sender, EventArgs e)
{
if (VariaveisControleOperacao.RoverEmFoco.DadosLeitura?.OperacaoIniciada ?? false)
if (VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.OperacaoIniciada ?? false)
{
//PauseActivated = !PauseActivated;
//VariaveisControleOperacao.EnviarComandoParada(pausa: PauseActivated);
@ -283,12 +330,25 @@ namespace OperationControl.Controls
private void ManualControlPad_CommandChanged(object? sender, EventArgs e)
{
throw new NotImplementedException();
}
AgroBase.Models.Enums.Direcao dir =
_steerCmd < 0 ? AgroBase.Models.Enums.Direcao.Esquerda :
_steerCmd > 0 ? AgroBase.Models.Enums.Direcao.Direita :
AgroBase.Models.Enums.Direcao.Parado;
if (_lastDirKey != dir)
{
VariaveisControleOperacao.EnviarComandoDirecional(dir, Convert.ToInt32(AngleControl), MoveTypeControl);
_lastDirKey = dir;
}
private void ManualControlPad_ModeChanged(object? sender, EventArgs e)
{
throw new NotImplementedException();
AgroBase.Models.Enums.Direcao mov =
_throttleCmd < 0 ? AgroBase.Models.Enums.Direcao.Baixo :
_throttleCmd > 0 ? AgroBase.Models.Enums.Direcao.Cima :
AgroBase.Models.Enums.Direcao.Parado;
if (_lastMovKey != mov)
{
VariaveisControleOperacao.EnviarComandoMovimentacao(mov, Convert.ToInt32(SpeedControl));
_lastMovKey = mov;
}
}
}

View File

@ -61,6 +61,17 @@ namespace OperationControl.Models
private static double TempoRoverVivo = 5.0;
private static bool AdicionandoNovoRover = false;
private static bool AtualizandoListaRovers = false;
public static AgroBase.Models.Enums.StatusModulo StatusBase
{
get
{
if ((Variaveis.GpsService?.IsConnected ?? false) && (Variaveis.GpsService?.BaseFix?.CorrecaoAbsoluta ?? false))
return AgroBase.Models.Enums.StatusModulo.Operante;
if (Variaveis.GpsService?.IsConnected ?? false)
return AgroBase.Models.Enums.StatusModulo.Alerta;
return AgroBase.Models.Enums.StatusModulo.Desconectado;
}
}
public static List<OperacaoParametrosModel> RoversNaRede { get; set; } = new List<OperacaoParametrosModel>();
public static string SelectedRoverId { get; set; } = BaseMarkerID;
public static OperacaoParametrosModel? RoverEmFoco => RoversNaRede.FirstOrDefault(x => x.RoverId == SelectedRoverId);
@ -274,6 +285,7 @@ namespace OperationControl.Models
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
{
Momento = DateTime.Now,
Dispositivo = AgroBase.Models.Enums.T_Code.Dir,
Tecla = AgroBase.Models.Enums.BotoesJoystick.R3
});
}
@ -312,6 +324,52 @@ namespace OperationControl.Models
});
}
private static AgroBase.Models.Enums.BotoesJoystick DeParaDirecaoTecla(AgroBase.Models.Enums.Direcao direcao)
{
switch (direcao)
{
case AgroBase.Models.Enums.Direcao.Esquerda:
return AgroBase.GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == Keys.Left)?.botaoJoy ?? AgroBase.Models.Enums.BotoesJoystick.Vazio;
case AgroBase.Models.Enums.Direcao.Direita:
return AgroBase.GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == Keys.Right)?.botaoJoy ?? AgroBase.Models.Enums.BotoesJoystick.Vazio;
case AgroBase.Models.Enums.Direcao.Cima:
return AgroBase.GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == Keys.Up)?.botaoJoy ?? AgroBase.Models.Enums.BotoesJoystick.Vazio;
case AgroBase.Models.Enums.Direcao.Baixo:
return AgroBase.GeneralJoystick.DeParaComandos.FirstOrDefault(x => x.key == Keys.Down)?.botaoJoy ?? AgroBase.Models.Enums.BotoesJoystick.Vazio;
default:
return AgroBase.Models.Enums.BotoesJoystick.Vazio;
}
}
public static void EnviarComandoDirecional(AgroBase.Models.Enums.Direcao direcao, double angulo, AgroBase.Models.Enums.TipoMovimentoDirecional movimento)
{
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
{
Momento = DateTime.Now,
Dispositivo = AgroBase.Models.Enums.T_Code.Dir,
Tecla = DeParaDirecaoTecla(direcao),
Controle = new OperacaoComandoBaseControleModel()
{
AnguloSP = angulo,
TipoMovimentoDirecional = movimento
}
});
}
public static void EnviarComandoMovimentacao(AgroBase.Models.Enums.Direcao direcao, double velocidade)
{
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()
{
Momento = DateTime.Now,
Dispositivo = AgroBase.Models.Enums.T_Code.Mov,
Tecla = DeParaDirecaoTecla(direcao),
Controle = new OperacaoComandoBaseControleModel()
{
PercentualVelocidadeSP = velocidade
}
});
}
public static void EnviarComandoAtuador(string componente_id, bool status)
{
EnviarDadosControle(SelectedRoverId, new OperacaoComandoBaseModel()

View File

@ -40,11 +40,9 @@
<Canvas Height="64" VerticalAlignment="Bottom">
<Image HorizontalAlignment="Center" Height="66" VerticalAlignment="Top" Width="94" Source="/Resources/logo.png" Canvas.Top="2" Canvas.Left="1"/>
<Label Content="Rover em foco" HorizontalAlignment="Center" VerticalAlignment="Top" Canvas.Left="100" Canvas.Top="9"/>
<Label Content="OK" Style="{StaticResource RoundedLabel}" Background="Green" Height="22" Width="50" Canvas.Left="393" Canvas.Top="11" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<ComboBox x:Name="cmbDispositivo" HorizontalAlignment="Left" VerticalAlignment="Center" Width="164" Canvas.Left="224" Canvas.Top="11" SelectionChanged="cmbDispositivo_SelectionChanged">
<ComboBoxItem Content="R0-NS241436"/>
<ComboBoxItem Content="R1-NS561486"/>
</ComboBox>
<Label x:Name="lblDispositivos_Status" Content="Desconectado" Style="{StaticResource RoundedLabel}" Height="26" Width="76" Canvas.Left="367" Canvas.Top="9" HorizontalAlignment="Center" VerticalAlignment="Top" IsEnabled="False"/>
<ComboBox x:Name="cmbDispositivo" HorizontalAlignment="Left" VerticalAlignment="Center" Width="138" Canvas.Left="224" Canvas.Top="11" SelectionChanged="cmbDispositivo_SelectionChanged"/>
<Label Content="Liberado | Automático | EmAndamento | CaminhandoRua" HorizontalAlignment="Center" VerticalAlignment="Top" Canvas.Left="100" Canvas.Top="32"/>
</Canvas>
</Border>
@ -87,49 +85,49 @@
<Label Content="Diagnóstios" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="10" Canvas.Top="-5" FontWeight="Bold"/>
<TextBlock x:Name="lblDiagnosticos_Impedimento" Text="Impedimento: Nenhum" HorizontalAlignment="Left" VerticalAlignment="Center" TextWrapping="Wrap" FontSize="9" Canvas.Top="15" Width="428" Canvas.Left="10"/>
<Image HorizontalAlignment="Center" Height="359" VerticalAlignment="Top" Width="308" Source="/Resources/robo_superior.jpg" Stretch="UniformToFill" Canvas.Left="70" Canvas.Top="71"/>
<Label x:Name="lblDiagnosticos_BAT" Content="🔒BAT" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="37" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB3v" Content="🔒B3V3" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="84" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB5V" Content="🔒B5V0" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="131" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB7V2" Content="🔒B7V2" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="178" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB12V" Content="🔒B12V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="225" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB19V" Content="🔒B19V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="272" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB24V" Content="🔒B24V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="319" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB36V" Content="🔒B36V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="366" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_BAT" Tag="sCOR" Content="🔒BAT" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="37" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB3V" Tag="sCOR" Content="🔒B3V3" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="84" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB5V" Tag="sCOR" Content="🔒B5V0" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="131" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB7V2" Tag="sCOR" Content="🔒B7V2" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="178" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB12V" Tag="sCOR" Content="🔒B12V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="225" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB19V" Tag="sCOR" Content="🔒B19V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="272" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB24V" Tag="sCOR" Content="🔒B24V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="319" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_AB36V" Tag="sCOR" Content="🔒B36V" Style="{StaticResource RoundedLabel}" Height="21" Width="42" Canvas.Left="366" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_DIR_DF" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="102" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_MOV_DF" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FRODF" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVDF" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FRODF" Tag="sFRO" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVDF" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_DIR_EF" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="102" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_MOV_EF" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FROEF" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVEF" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FROEF" Tag="sFRO" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVEF" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_DIR_ET" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="280" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_MOV_ET" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FROET" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVET" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FROET" Tag="sFRO" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVET" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="99" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_DIR_DT" Content="🔒DIR" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="280" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_MOV_DT" Content="🔒MOV" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FRODT" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVDT" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_FRODT" Tag="sFRO" Content="🔒FRO" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="306" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_TMVDT" Tag="sNTC" Content="🔒TMP" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="300" Canvas.Top="332" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SNR" Content="🔒SNR" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="102" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_LVX" Content="🔒LDR" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="128" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_IMU" Content="🔒IMU" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="154" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_GPS" Content="🔒GPS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="192" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN" Content="🔒SEN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="218" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN" Tag="sMOD" Content="🔒SEN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="218" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_NPC" Content="🔒NCP" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="244" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_BOMBA" Content="🔒BMB" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="309" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU" Content="🔒ATU" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="349" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_PRSLN" Content="🔒PRS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_FLXLN" Content="🔒FLX" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="155" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_MASRS" Content="🔒MAS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="249" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B01" Content="🔒B01" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="75" Canvas.Top="411" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B02" Content="🔒B02" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="143" Canvas.Top="412" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B03" Content="🔒B03" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="254" Canvas.Top="412" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B04" Content="🔒B04" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="322" Canvas.Top="411" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_BOMBA" Tag="sBMB" Content="🔒BMB" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="309" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU" Tag="sMOD" Content="🔒ATU" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="349" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_PRSLN" Tag="sPRS" Content="🔒PRS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="202" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_FLXLN" Tag="sFLX" Content="🔒FLX" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="155" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_MASRS" Tag="sMAS" Content="🔒MAS" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="249" Canvas.Top="386" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B01" Tag="sBIC" Content="🔒B01" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="75" Canvas.Top="411" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B02" Tag="sBIC" Content="🔒B02" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="143" Canvas.Top="412" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B03" Tag="sBIC" Content="🔒B03" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="254" Canvas.Top="412" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_ATU_B04" Tag="sBIC" Content="🔒B04" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="322" Canvas.Top="411" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_CAM" Content="🔒CAM" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="204" Canvas.Top="411" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_LEDOP" Content="🔒OP" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="192" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_LEDMN" Content="🔒MN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="218" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_LEDAT" Content="🔒AT" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="244" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_LEDOP" Tag="sLED" Content="🔒OP" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="192" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_LEDMN" Tag="sLED" Content="🔒MN" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="218" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblDiagnosticos_SEN_LEDAT" Tag="sLED" Content="🔒AT" Style="{StaticResource RoundedLabel}" Height="21" Width="40" Canvas.Left="10" Canvas.Top="244" HorizontalAlignment="Center" VerticalAlignment="Top"/>
</Canvas>
</Border>
@ -149,16 +147,19 @@
<Border HorizontalAlignment="Center" BorderBrush="Black" BorderThickness="1" Height="230" Width="438" VerticalAlignment="Top" Canvas.Left="5" Canvas.Top="94">
<TabControl x:Name="tab_Saude">
<TabItem x:Name="tabSaude_CondicoesOperacionais" Header="Condições Operacionais">
<Canvas>
<ListBox x:Name="lstSaude_CondicoesOperacionais" Height="228" Width="430" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="9"/>
</Canvas>
</TabItem>
<TabItem x:Name="tabSaude_Acompanhamento" Header="Acompanhamento">
<Canvas>
<scott:WpfPlot x:Name="Plot"/>
<scott:WpfPlot x:Name="pltSaude_Acompanhamento" Height="200" Width="430"/>
</Canvas>
</TabItem>
<TabItem x:Name="tabSaude_Opcoes" Header="Opções">
<Grid Margin="5">
<Grid.RowDefinitions>
@ -235,15 +236,83 @@
<!-- Espaço livre pra futuro (temperatura, etc.) -->
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
<StackPanel>
<TextBlock Text="Extra" FontSize="9" FontWeight="Bold"/>
<TextBlock x:Name="txtBico_Extra" FontSize="10" Text="—"/>
<TextBlock Text="Atuações" FontSize="9" FontWeight="Bold"/>
<TextBlock x:Name="txtBico_Atuacoes" FontSize="10" Text="—"/>
</StackPanel>
</Border>
</UniformGrid>
</StackPanel>
<!-- Painel específico de Bomba (ATU + Bomba principal) -->
<StackPanel x:Name="panelOpcoes_Bomba" Grid.Row="0" Visibility="Collapsed">
<!-- Linha de comandos principais -->
<StackPanel Orientation="Horizontal">
<!-- Ligar / Desligar -->
<Button x:Name="btnBomba_Ligar" Content="Ligar" Width="80" Margin="0,0,5,0" Click="btnBomba_Ligar_Click"/>
<Button x:Name="btnBomba_Desligar" Content="Desligar" Width="80" Margin="0,0,10,0" Click="btnBomba_Desligar_Click"/>
<!-- Ajuste de pressão da linha -->
<TextBlock Text="Pressão alvo:" VerticalAlignment="Center" Margin="0,0,5,0" FontSize="10"/>
<!-- Slider de pressão (ex.: 0 a 10 bar) -->
<Slider x:Name="sldBomba_PressaoAlvo" Width="120" Minimum="0" Maximum="150" TickFrequency="0.5" IsSnapToTickEnabled="True" Margin="0,0,5,0" ValueChanged="sldBomba_PressaoAlvo_ValueChanged"/>
<!-- Label mostrando valor da pressão alvo -->
<Label x:Name="lblBomba_PressaoAlvo" Content="0,0 bar" VerticalAlignment="Center" FontSize="10"/>
</StackPanel>
<!-- Título / identificação -->
<TextBlock x:Name="txtBomba_Titulo" FontWeight="Bold" FontSize="11" Text="Bomba - Testes" Margin="0,5,0,5"/>
<!-- “Cartõezinhos” de status -->
<UniformGrid Rows="2" Columns="2" Margin="0,0,0,0">
<!-- Comando enviado -->
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
<StackPanel>
<TextBlock Text="Comando enviado" FontSize="9" FontWeight="Bold"/>
<!-- Texto: Ligado / Desligado -->
<TextBlock x:Name="txtBomba_Comando" FontSize="10" Text="—"/>
</StackPanel>
</Border>
<!-- Status real -->
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
<StackPanel>
<TextBlock Text="Status real" FontSize="9" FontWeight="Bold"/>
<!-- Texto: Ligada / Desligada -->
<TextBlock x:Name="txtBomba_StatusReal" FontSize="10" Text="—"/>
</StackPanel>
</Border>
<!-- Pressão da linha (leitura) -->
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
<StackPanel>
<TextBlock Text="Pressão linha (leitura)" FontSize="9" FontWeight="Bold"/>
<!-- Ex.: 3,5 bar -->
<TextBlock x:Name="txtBomba_PressaoLinha" FontSize="10" Text="0,0 bar"/>
</StackPanel>
</Border>
<!-- Potência aplicada -->
<Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="3">
<StackPanel>
<TextBlock Text="Potência aplicada" FontSize="9" FontWeight="Bold"/>
<!-- Ex.: 75 % ou 1.2 kW -->
<TextBlock x:Name="txtBomba_Potencia" FontSize="10" Text="0 %"/>
</StackPanel>
</Border>
</UniformGrid>
</StackPanel>
</Grid>
</TabItem>
</TabControl>
</Border>
</Canvas>
@ -333,7 +402,6 @@
<Border x:Name="brdBicos" BorderBrush="Black" BorderThickness="1" CornerRadius="8" Margin="1453,523,7,421">
<Canvas>
<Image HorizontalAlignment="Left" Height="59" VerticalAlignment="Center" Width="454" Source="/Resources/barra.jpg" Canvas.Top="2" Canvas.Left="2" Stretch="UniformToFill"/>
<Button x:Name="btnB0" Content="Ligar" Height="20" Canvas.Left="2" Width="58" HorizontalAlignment="Left" VerticalAlignment="Center" Canvas.Top="32" Click="btnB0_Click"/>
</Canvas>
</Border>

View File

@ -1,21 +1,11 @@
using System.Windows;
using ScottPlot; // Plot
using ScottPlot.Plottables; // ISignal / IScatter
using System.Timers;
using Colors = ScottPlot.Colors; // Timer
using ScottPlot;
using System.Windows.Threading;
using OperationControl.Controls;
using System.Diagnostics;
using OperationControl.Models;
using AgroBase.Models.Components;
using OperationControl.Services;
using System.Windows.Controls;
using System.Runtime.CompilerServices;
using System.Windows.Media;
using DotSpatial.Projections.Transforms;
using System;
using LibVLCSharp.Shared;
using System.Windows.Input;
using System.IO;
@ -26,7 +16,6 @@ using MessageBox = System.Windows.MessageBox;
using Brush = System.Windows.Media.Brush;
using Brushes = System.Windows.Media.Brushes;
using Label = System.Windows.Controls.Label;
using AgroBase.Models.Operadores;
namespace OperationControl.Windows
{
@ -36,18 +25,9 @@ namespace OperationControl.Windows
public partial class MainWindow : Window
{
// buffers (X = tempo em segundos)
private readonly List<double> xs = new();
private readonly List<double> ysCorr = new(); // Corrente (A)
private readonly List<double> ysVolt = new(); // Tensão (V)
private readonly List<double> ysTemp = new(); // Temperatura (°C)
private readonly List<double> ysRpm = new(); // RPM
private readonly System.Timers.Timer tmr = new(1000) { AutoReset = true }; // 10 Hz
private double t = 0;
private readonly Random rng = new();
DispatcherTimer _clock = new DispatcherTimer();
Random _rand = new Random();
private DateTime? _tempoInicioAcompanhamento;
private List<double> pltAcompanhamento_x = new();
private List<List<double>> pltAcompanhamento_y = new();
private LibVLC _libVLC;
private MediaPlayer _playerFront;
@ -66,23 +46,10 @@ namespace OperationControl.Windows
AtualizarListaDispositivos(new List<string>() { VariaveisControleOperacao.SelectedRoverId });
// Título / eixos
Plot.Plot.Title("MOV ET Corrente / Tensão / Temp / RPM (últimos 60s)");
Plot.Plot.Axes.Bottom.Label.Text = "Tempo (s)";
Plot.Plot.Axes.Left.Label.Text = "Unidades (A, V, °C, RPM)";
// inicializa com um ponto para cada série
PushSample(initial: true);
// legenda
Plot.Plot.ShowLegend(Alignment.UpperRight);
// loop
tmr.Elapsed += (_, __) => Dispatcher.Invoke(() => PushSample());
tmr.Start();
DataContext = this;
//DataContext = this;
// atualizar as caixas
//BBoxes3D.SetBboxes(new[]
@ -123,80 +90,6 @@ namespace OperationControl.Windows
_libVLC?.Dispose();
}
private void PushSample(bool initial = false)
{
// avança tempo
if (!initial) t += 1; // 10 Hz
xs.Add(t);
// ------- MOCK de dados plausíveis -------
// Corrente (A): 312 A com ruído
double corr = 8 + 2 * Math.Sin(t * 0.7) + (rng.NextDouble() - 0.5);
corr = Math.Clamp(corr, 0, 30);
// Tensão (V): 3642 V, ripple leve e queda lenta
double volt = 40.5 + 0.6 * Math.Sin(t * 0.15) - 0.002 * t;
volt = Math.Clamp(volt, 30, 42);
// Temperatura (°C): sobe devagar
double temp = 38 + 4 * Math.Sin(t * 0.05) + 0.01 * t;
temp = Math.Clamp(temp, 20, 85);
// RPM: 01500 com variação
double rpm = 1100 + 200 * Math.Sin(t * 0.9) + 80 * (rng.NextDouble() - 0.5);
rpm = Math.Clamp(rpm, 0, 2000);
ysCorr.Add(corr);
ysVolt.Add(volt);
ysTemp.Add(temp);
ysRpm.Add(rpm);
// mantém só últimos 60 s
while (xs.Count > 0 && xs[^1] - xs[0] > 60.0)
{
xs.RemoveAt(0);
ysCorr.RemoveAt(0);
ysVolt.RemoveAt(0);
ysTemp.RemoveAt(0);
ysRpm.RemoveAt(0);
}
// redesenha (v5: passe arrays diretamente)
Plot.Plot.Clear();
// Corrente (A)
var scCorr = Plot.Plot.Add.Scatter(xs.ToArray(), ysCorr.ToArray());
scCorr.Label = "Corrente (A)";
scCorr.Color = ScottPlot.Colors.Cyan;
scCorr.LineWidth = 2;
// Tensão (V)
var scVolt = Plot.Plot.Add.Scatter(xs.ToArray(), ysVolt.ToArray());
scVolt.Label = "Tensão (V)";
scVolt.Color = ScottPlot.Colors.Lime;
scVolt.LineWidth = 2;
// Temperatura (°C)
var scTemp = Plot.Plot.Add.Scatter(xs.ToArray(), ysTemp.ToArray());
scTemp.Label = "Temp (°C)";
scTemp.Color = ScottPlot.Colors.Magenta;
scTemp.LineWidth = 2;
// RPM
var scRpm = Plot.Plot.Add.Scatter(xs.ToArray(), ysRpm.ToArray());
scRpm.Label = "RPM";
scRpm.Color = ScottPlot.Colors.Orange;
scRpm.LineWidth = 2;
// janela de 60 s rolando
double xEnd = xs[^1];
double xStart = Math.Max(0, xEnd - 60.0);
Plot.Plot.Axes.SetLimitsX(xStart, xEnd);
Plot.Plot.Axes.AutoScaleY(); // ajusta Y automaticamente para caber tudo
Plot.Refresh();
}
#region DISPOSITIVOS
public void AtualizarListaDispositivos(List<string> dispositivos)
@ -312,7 +205,7 @@ namespace OperationControl.Windows
else if (dados_leitura != null)
{
var simulacao = dados_leitura.Controle?.SimulacaoMPC?.Select(x => new double[] { x.longitude, x.latitude })?.ToList();
MAP.markers.UpdateMarkerPosition(rover_id, lat: dados_leitura?.Gps?.Latitude, lon: dados_leitura?.Gps?.Longitude, heading: dados_leitura?.Gps?.OrientacaoReal, predict: simulacao);
MAP.markers.UpdateMarkerPosition(rover_id, lat: dados_leitura.Gps?.Latitude, lon: dados_leitura.Gps?.Longitude, heading: dados_leitura.Gps?.OrientacaoReal, predict: simulacao);
MAP.markers.UpdateMarkerInfo(rover_id, status: dados_leitura.StatusOperacao);
}
@ -326,6 +219,8 @@ namespace OperationControl.Windows
{
Variaveis.MostrarLog($"Atualizando dados da tela para a base");
lblDispositivos_Status.Content = VariaveisControleOperacao.StatusBase.ToString();
AplicarStatusModuloNaLabel(lblDispositivos_Status, VariaveisControleOperacao.StatusBase, true, false);
AtualizarDadosTela_GNSS(Variaveis.GpsService?.UltimaLeitura ?? new AgroBase.Models.GPSModel(), marker_id: VariaveisControleOperacao.BaseMarkerID);
AtualizarDadosTela_Heading(Variaveis.GpsService?.UltimaLeitura?.AnguloCarroDefinido ?? 0);
}
@ -334,7 +229,8 @@ namespace OperationControl.Windows
if (dados_leitura == null) return;
Variaveis.MostrarLog($"Atualizando dados da tela para o dispositivo {rover_id}");
lblDispositivos_Status.Content = (rover?.DadosLeitura?.Status ?? AgroBase.Models.Enums.StatusModulo.Desconectado).ToString();
AplicarStatusModuloNaLabel(lblDispositivos_Status, rover?.DadosLeitura?.Status ?? AgroBase.Models.Enums.StatusModulo.Desconectado, true, false);
AtualizarDadosTela_Diagnosticos(rover);
if (dados_leitura.Trajetoria != null)
AtualizarDadosTela_Resumo(dados_leitura);
@ -374,13 +270,13 @@ namespace OperationControl.Windows
try
{
pgbResumo_RuaAtual.Value = dados.Trajetoria.PercentualRuaAtual;
lblResumo_RuaAtual.Content = $"{dados.Trajetoria.CorredorAtual.DistanciaPercorridaCorredor.ToString("0.00")} / {dados.Trajetoria.CorredorAtual.DistanciaTotal.ToString("0.00")}";
lblResumo_RuaAtual.Content = $"{dados.Trajetoria.CorredorAtual.DistanciaPercorridaCorredor.ToString("0.00")} m / {dados.Trajetoria.CorredorAtual.DistanciaTotal.ToString("0.00")} m ({dados.Trajetoria.CorredorAtual.Idx + 1})";
pgbResumo_AreaTotal.Value = dados.Trajetoria.PercentualOperacao;
lblResumo_AreaTotal.Content = $"{dados.Trajetoria.DistanciaPercorrida.ToString("0.00")} / {dados.Trajetoria.DistanciaTotal.ToString("0.00")}";
lblResumo_AreaTotal.Content = $"{dados.Trajetoria.DistanciaPercorrida.ToString("0.00")} m / {dados.Trajetoria.DistanciaTotal.ToString("0.00")} m";
pgbResumo_Bateria.Value = dados.Bateria.PorcentagemBateria;
lblResumo_Bateria.Content = $"{dados.Bateria.TensaoInstantanea.ToString("0.00")} V ({dados.Bateria.TempoEstimadoRestanteMinutos})";
lblResumo_Bateria.Content = $"{dados.Bateria.TensaoInstantanea.ToString("0.00")} V ({TimeSpan.FromMinutes(dados.Bateria.TempoEstimadoRestanteMinutos)})";
pgbResumo_Herbicida.Value = dados.Atuador.PercentualReservatorio;
lblResumo_Herbicida.Content = $"{dados.Atuador.VolumeReservatorio.ToString("0.00")} L ({0.ToString("0.00")})";
lblResumo_Herbicida.Content = $"{dados.Atuador.VolumeReservatorio.ToString("0.00")} L ({0.ToString("0.00")} m)";
pgbResumo_Infestacao.Value = dados.Atuador.PercentualErvasTerreno;
lblResumo_Infestacao.Content = $"{dados.Atuador.VazaoMedia.ToString("0.00")}";
pgbResumo_Conexao.Value = 0;
@ -391,7 +287,7 @@ namespace OperationControl.Windows
lblResumo_OperacaoStatus.Content = $"Status {dados.StatusOperacao}" + (dados.StatusOperacao == AgroBase.Models.Enums.StatusOperacao.Aguardando ? $" ({dados.TempoAguardandoSeg.ToString("0")})" : "");
lblResumo_StatusCarro.Content = $"Carro {dados.Trajetoria.StatusCarro}";
lblResumo_TemperaturaGeral.Content = $"Temperatura {(dados.DadosPerformance.CPU_temp ?? 0).ToString("0.00")} °C";
lblResumo_OperacaoDuracao.Content = $"Duração {dados.TempoDecorrido.ToString("HH:mm:ss")} / {dados.Trajetoria.TempoEstimadoOperacao}";
lblResumo_OperacaoDuracao.Content = $"Duração {dados.TempoDecorrido.ToString("HH:mm:ss")} / " + (string.IsNullOrEmpty(dados.Trajetoria.TempoEstimadoOperacao) ? "00:00:00" : dados.Trajetoria.TempoEstimadoOperacao);
}
catch (Exception exUi)
{
@ -416,7 +312,7 @@ namespace OperationControl.Windows
// Percorre apenas labels dentro do Canvas com o prefixo desejado
foreach (var lbl in canvas.Children.OfType<Label>().Where(x => x.Name.StartsWith("lblDiagnosticos_")))
{
(var modulo, var mod_label) = GetModuleData(lbl);
(var modulo, var mod_label, var s_code) = GetModuleData(lbl);
if (modulo == AgroBase.Models.Enums.T_Code.Vzo)
continue;
@ -433,10 +329,11 @@ namespace OperationControl.Windows
AplicarStatusModuloNaLabel(lbl, individual?.status ?? saude?.status ?? AgroBase.Models.Enums.StatusModulo.Desconectado, em_uso);
}
PreencherAbaOpcoes();
PreencherAbaAcompanhamento(false);
PreencherAbaOpcoes(false);
}
private void AplicarStatusModuloNaLabel(Label lbl, AgroBase.Models.Enums.StatusModulo status, bool mandatorio)
private void AplicarStatusModuloNaLabel(Label lbl, AgroBase.Models.Enums.StatusModulo status, bool mandatorio, bool icone = true)
{
// você pode ajustar essas cores depois
Brush back;
@ -471,14 +368,18 @@ namespace OperationControl.Windows
lbl.Background = back;
lbl.Foreground = fore;
string text = lbl.Content?.ToString() ?? "";
text = text.Remove(0, 2);
lbl.Content = (mandatorio ? "🔒" : "🔓") + text;
if (icone)
{
string text = lbl.Content?.ToString() ?? "";
text = text.Remove(0, 2);
lbl.Content = (mandatorio ? "🔒" : "🔓") + text;
}
}
private (AgroBase.Models.Enums.T_Code, string) GetModuleData(Label lbl)
private (AgroBase.Models.Enums.T_Code, string, AgroBase.Models.Enums.S_Code) GetModuleData(Label lbl)
{
if (lbl == null) return (AgroBase.Models.Enums.T_Code.Vzo, "");
if (lbl == null) return (AgroBase.Models.Enums.T_Code.Vzo, "", AgroBase.Models.Enums.S_Code.sVZO);
string lbl_name = lbl.Name.Replace("lblDiagnosticos_", "");
string[] pts = lbl_name.Split('_');
@ -486,9 +387,12 @@ namespace OperationControl.Windows
string mod_label = pts.Length > 1 ? pts[1] : "";
if (!Enum.TryParse<AgroBase.Models.Enums.T_Code>(mod_name, ignoreCase: true, out var modulo))
return (AgroBase.Models.Enums.T_Code.Vzo, "");
return (AgroBase.Models.Enums.T_Code.Vzo, "", AgroBase.Models.Enums.S_Code.sVZO);
return (modulo, mod_label);
string tag = (lbl.Tag ?? "sVZO").ToString();
Enum.TryParse<AgroBase.Models.Enums.S_Code>(tag, ignoreCase: true, out var s_code);
return (modulo, mod_label, s_code);
}
private void DiagnosticoModulo_Click(object sender, MouseButtonEventArgs e)
@ -523,7 +427,7 @@ namespace OperationControl.Windows
private void AtualizarDetalhesModulo()
{
(var modulo, var label) = GetModuleData(_labelModuloSelecionado);
(var modulo, var label, var s_code) = GetModuleData(_labelModuloSelecionado);
if (modulo == AgroBase.Models.Enums.T_Code.Vzo)
return;
@ -568,35 +472,380 @@ namespace OperationControl.Windows
}
}
PreencherAbaOpcoes();
PreencherAbaAcompanhamento(true);
PreencherAbaOpcoes(true);
}
private void PreencherAbaOpcoes()
private void PreencherAbaAcompanhamento(bool inicial)
{
(var modulo, var label) = GetModuleData(_labelModuloSelecionado);
(var modulo, var label, var s_code) = GetModuleData(_labelModuloSelecionado);
if (modulo == AgroBase.Models.Enums.T_Code.Vzo)
return;
bool isModuloAtu = modulo == AgroBase.Models.Enums.T_Code.Atu;
bool isBico = isModuloAtu && !string.IsNullOrEmpty(label) && label.StartsWith("B0");
var momento = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Momento ?? DateTime.Now;
bool mostrarPainelBico = isModuloAtu && isBico;
if (_tempoInicioAcompanhamento is null || inicial)
_tempoInicioAcompanhamento = momento;
panelOpcoes_Bico.Visibility = mostrarPainelBico ? Visibility.Visible : Visibility.Collapsed;
txtOpcoes_SemDados.Visibility = mostrarPainelBico ? Visibility.Collapsed : Visibility.Visible;
bool refresh = true;
double tSegundos = (momento - _tempoInicioAcompanhamento.Value).TotalSeconds;
if (mostrarPainelBico)
if (inicial)
{
var bico = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Controle?.BicosAtuados?.FirstOrDefault(x => x.ID == label);
bool comando = bico?.ComandoAtuar ?? false;
var leitura = bico?.ValoresLeituras?.FirstOrDefault(x => x.funcao == AgroBase.Models.Modules.FuncoesPinout.EstadoLeitura)?.atual?.valor;
txtBico_Titulo.Text = $"Bico {label} - Testes";
txtBico_Comando.Text = comando ? "Ligado" : "Desligado";
txtBico_StatusReal.Text = leitura != null && (AgroBase.Models.Enums.Estado)Enum.Parse(typeof(AgroBase.Models.Enums.Estado), leitura.ToString(), true) == AgroBase.Models.Enums.Estado.Ligado ? "Ligado" : "Desligado";
txtBico_TempoLigado.Text = (bico?.TempoAtuado ?? 0).ToString("0.00") + " ms";
txtBico_Vazao.Text = (bico?.MediaNivelFluxo ?? 0).ToString("0.00") + " L/min";
txtBico_Pressao.Text = (VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.PressaoLinha ?? 0).ToString("0.00") + " psi";
pltSaude_Acompanhamento.Plot.ShowLegend(Alignment.UpperLeft);
pltAcompanhamento_x = new List<double>();
}
pltAcompanhamento_x.Add(tSegundos);
// mantém só últimos 60 s
while (pltAcompanhamento_x.Count > 60)
{
pltAcompanhamento_x.RemoveAt(0);
pltAcompanhamento_y.ForEach(x => x.RemoveAt(0));
}
switch (modulo)
{
case AgroBase.Models.Enums.T_Code.Sen:
{
if (s_code == AgroBase.Models.Enums.S_Code.sCOR)
{
var sensor = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Bateria?.Barramentos?.FirstOrDefault(x => x.ID == label);
if (sensor == null) return;
if (inicial)
{
pltAcompanhamento_y = new List<List<double>>()
{
new List<double>(), // Corrente
new List<double>(), // Tensao
new List<double>(), // Potencia
new List<double>(), // Energia
new List<double>() // Temperatura
};
}
pltAcompanhamento_y[0].Add(sensor.Corrente);
pltAcompanhamento_y[1].Add(sensor.Tensao);
pltAcompanhamento_y[2].Add(sensor.Potencia);
pltAcompanhamento_y[3].Add(sensor.Energia);
pltAcompanhamento_y[4].Add(sensor.Temperatura);
// redesenha (v5: passe arrays diretamente)
pltSaude_Acompanhamento.Plot.Clear();
// Corrente (A)
var scCorr = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[0].ToArray());
scCorr.Label = $"Corrente {sensor.Corrente:0.00} mA";
scCorr.Color = ScottPlot.Colors.Cyan;
scCorr.LineWidth = 2;
// Tensão (V)
var scVolt = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[1].ToArray());
scVolt.Label = $"Tensão {sensor.Tensao:0.00} V";
scVolt.Color = ScottPlot.Colors.Lime;
scVolt.LineWidth = 2;
// Potencia (W)
var scPot = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[2].ToArray());
scPot.Label = $"Potencia {sensor.Potencia:0.00} mW";
scPot.Color = ScottPlot.Colors.Magenta;
scPot.LineWidth = 2;
// Energia (J)
var scEner = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[3].ToArray());
scEner.Label = $"Energia {sensor.Energia:0.00} J";
scEner.Color = ScottPlot.Colors.Violet;
scEner.LineWidth = 2;
// Temperatura (°C)
var scTemp = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[4].ToArray());
scTemp.Label = $"Temp {sensor.Temperatura} °C";
scTemp.Color = ScottPlot.Colors.Yellow;
scTemp.LineWidth = 2;
}
else if (s_code == AgroBase.Models.Enums.S_Code.sNTC)
{
var sensor = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Temperaturas?.FirstOrDefault(x => x.Key == label).Value;
if (sensor == null) return;
if (inicial)
{
pltAcompanhamento_y = new List<List<double>>()
{
new List<double>() // Temperatura
};
}
pltAcompanhamento_y[0].Add(sensor.Value);
// redesenha (v5: passe arrays diretamente)
pltSaude_Acompanhamento.Plot.Clear();
// Temperatura (°C)
var scTemp = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[0].ToArray());
scTemp.Label = $"Temp {sensor.Value} °C";
scTemp.Color = ScottPlot.Colors.Yellow;
scTemp.LineWidth = 2;
}
else
{
refresh = false;
}
}
break;
case AgroBase.Models.Enums.T_Code.Atu:
{
if (s_code == AgroBase.Models.Enums.S_Code.sMAS)
{
var vol = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.VolumeReservatorio ?? -1;
var pct = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.PercentualReservatorio ?? -1;
if (inicial)
{
pltAcompanhamento_y = new List<List<double>>()
{
new List<double>(), // Volume
new List<double>(), // Percentual
};
}
pltAcompanhamento_y[0].Add(vol);
pltAcompanhamento_y[1].Add(pct);
// redesenha (v5: passe arrays diretamente)
pltSaude_Acompanhamento.Plot.Clear();
// Volume (L)
var scVol = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[0].ToArray());
scVol.Label = $"Volume {vol:0.00} L";
scVol.Color = ScottPlot.Colors.Cyan;
scVol.LineWidth = 2;
// Percentual (%)
var scPct = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[1].ToArray());
scPct.Label = $"Reservatorio {pct:0.00} %";
scPct.Color = ScottPlot.Colors.Lime;
scPct.LineWidth = 2;
}
else if (s_code == AgroBase.Models.Enums.S_Code.sFLX)
{
double flx = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.VazaoInstantanea ?? -1;
if (inicial)
{
pltAcompanhamento_y = new List<List<double>>()
{
new List<double>() // Vazao
};
}
pltAcompanhamento_y[0].Add(flx);
// redesenha (v5: passe arrays diretamente)
pltSaude_Acompanhamento.Plot.Clear();
// Vazao (mL/S)
var scFlx = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[0].ToArray());
scFlx.Label = $"Vazao {flx} mL/s";
scFlx.Color = ScottPlot.Colors.Yellow;
scFlx.LineWidth = 2;
}
else if (s_code == AgroBase.Models.Enums.S_Code.sPRS)
{
double prs = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.PressaoLinha ?? -1;
if (inicial)
{
pltAcompanhamento_y = new List<List<double>>()
{
new List<double>() // Pressao
};
}
pltAcompanhamento_y[0].Add(prs);
// redesenha (v5: passe arrays diretamente)
pltSaude_Acompanhamento.Plot.Clear();
// Pressao (psi)
var scPrs = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[0].ToArray());
scPrs.Label = $"Pressao {prs} psi";
scPrs.Color = ScottPlot.Colors.Yellow;
scPrs.LineWidth = 2;
}
else if (s_code == AgroBase.Models.Enums.S_Code.sBMB)
{
var pot = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.LeituraPotenciaBomba ?? -1;
var prs = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Atuador?.PressaoLinha ?? -1;
if (inicial)
{
pltAcompanhamento_y = new List<List<double>>()
{
new List<double>(), // Potencia
new List<double>(), // Pressao
};
}
pltAcompanhamento_y[0].Add(pot);
pltAcompanhamento_y[1].Add(prs);
// redesenha (v5: passe arrays diretamente)
pltSaude_Acompanhamento.Plot.Clear();
// Potencia (%)
var scPot = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[0].ToArray());
scPot.Label = $"Potencia {pot:0.00} %";
scPot.Color = ScottPlot.Colors.Cyan;
scPot.LineWidth = 2;
// Pressao (psi)
var scPrs = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[1].ToArray());
scPrs.Label = $"Pressao {prs:0.00} psi";
scPrs.Color = ScottPlot.Colors.Lime;
scPrs.LineWidth = 2;
}
else
{
refresh = false;
}
break;
}
case AgroBase.Models.Enums.T_Code.Mov:
{
var mod = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Movimentacao?.Dados?.FirstOrDefault(x => x.ID == label);
if (mod == null) return;
if (inicial)
{
pltAcompanhamento_y = new List<List<double>>()
{
new List<double>(), // Tensao
new List<double>(), // Corrente Motor
new List<double>(), // Corrente Barramento
new List<double>(), // Ciclo Trabalho
new List<double>(), // Temperatura
new List<double>(), // RPM roda
};
}
pltAcompanhamento_y[0].Add(mod.Tensao);
pltAcompanhamento_y[1].Add(mod.Corrente_Motor);
pltAcompanhamento_y[2].Add(mod.Corrente_Barramento);
pltAcompanhamento_y[3].Add(mod.CicloTrabalho);
pltAcompanhamento_y[4].Add(mod.RPM_Roda);
// redesenha (v5: passe arrays diretamente)
pltSaude_Acompanhamento.Plot.Clear();
// Tensão (V)
var scVolt = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[0].ToArray());
scVolt.Label = $"Tensão {mod.Tensao:0.00} V";
scVolt.Color = ScottPlot.Colors.Lime;
scVolt.LineWidth = 2;
// Corrente (A)
var scCorm = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[1].ToArray());
scCorm.Label = $"Corrente M {mod.Corrente_Motor:0.00} A";
scCorm.Color = ScottPlot.Colors.Cyan;
scCorm.LineWidth = 2;
// Corrente (A)
var scCorb = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[2].ToArray());
scCorb.Label = $"Corrente B {mod.Corrente_Barramento:0.00} A";
scCorb.Color = ScottPlot.Colors.Red;
scCorb.LineWidth = 2;
// Ciclo de Trabalho (%)
var scEner = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[3].ToArray());
scEner.Label = $"Ciclo % {mod.CicloTrabalho:0.00} ";
scEner.Color = ScottPlot.Colors.Violet;
scEner.LineWidth = 2;
// Temperatura (°C)
var scTemp = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[4].ToArray());
scTemp.Label = $"Temp {mod.TemperaturaDriver} °C";
scTemp.Color = ScottPlot.Colors.Yellow;
scTemp.LineWidth = 2;
// RPM roda
var scRpm = pltSaude_Acompanhamento.Plot.Add.Scatter(pltAcompanhamento_x.ToArray(), pltAcompanhamento_y[5].ToArray());
scRpm.Label = $"RPM {mod.RPM_Roda}";
scRpm.Color = ScottPlot.Colors.Blue;
scRpm.LineWidth = 2;
}
break;
default:
pltSaude_Acompanhamento.Plot.Clear();
refresh = false;
break;
}
if (refresh || inicial)
{
// janela de 60 s rolando
double xEnd = pltAcompanhamento_x[^1];
double xStart = Math.Max(0, xEnd - 60.0);
pltSaude_Acompanhamento.Plot.Axes.SetLimitsX(xStart, xEnd);
pltSaude_Acompanhamento.Plot.Axes.AutoScaleY(); // ajusta Y automaticamente para caber tudo
pltSaude_Acompanhamento.Refresh();
}
}
private void PreencherAbaOpcoes(bool inicial)
{
(var modulo, var label, var s_code) = GetModuleData(_labelModuloSelecionado);
if (modulo == AgroBase.Models.Enums.T_Code.Vzo)
return;
if (inicial)
{
txtOpcoes_SemDados.Visibility = Visibility.Collapsed;
panelOpcoes_Bico.Visibility = Visibility.Collapsed;
panelOpcoes_Bomba.Visibility = Visibility.Collapsed;
}
switch (s_code)
{
case AgroBase.Models.Enums.S_Code.sBIC:
{
panelOpcoes_Bico.Visibility = Visibility.Visible;
var rover = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura;
var bico = rover?.Controle?.BicosAtuados?.FirstOrDefault(x => x.ID == label);
bool comando = bico?.ComandoAtuar ?? false;
var leitura = bico?.ValoresLeituras?.FirstOrDefault(x => x.funcao == AgroBase.Models.Modules.FuncoesPinout.EstadoLeitura)?.atual?.valor;
txtBico_Titulo.Text = $"Bico {label} - Testes";
txtBico_Comando.Text = comando ? "Ligado" : "Desligado";
txtBico_StatusReal.Text = leitura != null && (AgroBase.Models.Enums.Estado)Enum.Parse(typeof(AgroBase.Models.Enums.Estado), leitura.ToString(), true) == AgroBase.Models.Enums.Estado.Ligado ? "Ligado" : "Desligado";
txtBico_TempoLigado.Text = (bico?.TempoAtuado ?? 0).ToString("0.00") + " ms";
txtBico_Vazao.Text = (bico?.MediaNivelFluxo ?? 0).ToString("0.00") + " L/min";
txtBico_Pressao.Text = (rover?.Atuador?.PressaoLinha ?? 0).ToString("0.00") + " psi";
txtBico_Atuacoes.Text = (bico?.Atuacoes ?? 0).ToString();
break;
}
case AgroBase.Models.Enums.S_Code.sBMB:
{
panelOpcoes_Bomba.Visibility = Visibility.Visible;
var rover = VariaveisControleOperacao.RoverEmFoco?.DadosLeitura;
bool comando = rover?.Atuador?.ComandoBomba ?? false;
bool leitura = rover?.Atuador?.LeituraComandoBomba ?? false;
var potencia = rover?.Atuador?.LeituraPotenciaBomba ?? 0;
txtBomba_Comando.Text = comando ? "Ligado" : "Desligado";
txtBomba_StatusReal.Text = leitura ? "Ligado" : "Desligado";
txtBomba_PressaoLinha.Text = (rover?.Atuador?.PressaoLinha ?? 0).ToString("0.00") + " psi";
txtBomba_Potencia.Text = potencia.ToString("0") + " %";
break;
}
default:
txtOpcoes_SemDados.Visibility = Visibility.Visible;
break;
}
}
private void sldBico_Angular_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
@ -606,8 +855,8 @@ namespace OperationControl.Windows
private void btnBico_Ligar_Click(object sender, RoutedEventArgs e)
{
(var modulo, var label) = GetModuleData(_labelModuloSelecionado);
if (modulo == AgroBase.Models.Enums.T_Code.Vzo)
(var modulo, var label, var s_code) = GetModuleData(_labelModuloSelecionado);
if (modulo != AgroBase.Models.Enums.T_Code.Atu && s_code != AgroBase.Models.Enums.S_Code.sBIC)
return;
VariaveisControleOperacao.EnviarComandoAtuador(label, true);
@ -615,16 +864,39 @@ namespace OperationControl.Windows
private void btnBico_Desligar_Click(object sender, RoutedEventArgs e)
{
(var modulo, var label) = GetModuleData(_labelModuloSelecionado);
if (modulo == AgroBase.Models.Enums.T_Code.Vzo)
(var modulo, var label, var s_code) = GetModuleData(_labelModuloSelecionado);
if (modulo != AgroBase.Models.Enums.T_Code.Atu && s_code != AgroBase.Models.Enums.S_Code.sBIC)
return;
VariaveisControleOperacao.EnviarComandoAtuador(label, false);
}
private void btnBomba_Ligar_Click(object sender, RoutedEventArgs e)
{
(var modulo, var label, var s_code) = GetModuleData(_labelModuloSelecionado);
if (modulo != AgroBase.Models.Enums.T_Code.Atu && s_code != AgroBase.Models.Enums.S_Code.sBMB)
return;
VariaveisControleOperacao.EnviarComandoAtuador(label, true);
}
private void btnBomba_Desligar_Click(object sender, RoutedEventArgs e)
{
(var modulo, var label, var s_code) = GetModuleData(_labelModuloSelecionado);
if (modulo != AgroBase.Models.Enums.T_Code.Atu && s_code != AgroBase.Models.Enums.S_Code.sBMB)
return;
VariaveisControleOperacao.EnviarComandoAtuador(label, false);
}
private void sldBomba_PressaoAlvo_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
lblBomba_PressaoAlvo.Content = $"{e.NewValue:0} psi";
}
private void btnSaude_Salvar_Click(object sender, RoutedEventArgs e)
{
(var modulo, var label) = GetModuleData(_labelModuloSelecionado);
(var modulo, var label, var s_code) = GetModuleData(_labelModuloSelecionado);
if (modulo == AgroBase.Models.Enums.T_Code.Vzo)
return;
@ -773,7 +1045,6 @@ namespace OperationControl.Windows
angSp: controle.Angulo,
angCur: angulo,
tipoMov: controle.TipoMovimento,
velPct: controle.PercentualVelocidadeSP,
velSp: controle.PercentualVelocidadeSPKmh,
velKmh: velocidade,
emg: emergencia,
@ -1045,11 +1316,6 @@ namespace OperationControl.Windows
#region PULVERIZADOR
private void btnB0_Click(object sender, RoutedEventArgs e)
{
btnB0.Content = (btnB0.Content.ToString() == "Ligar") ? "Desligar" : "Ligar";
}
#endregion
#region LIDAR

View File

@ -1,4 +1,4 @@
#pragma checksum "..\..\..\..\Controls\ManualControlPad.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "C87147546CC289C0D86F119670DC7FE54E548132"
#pragma checksum "..\..\..\..\Controls\ManualControlPad.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "45D166CF9D8548740F135E2643613360D10EFB00"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.

View File

@ -1,4 +1,4 @@
#pragma checksum "..\..\..\..\Controls\ManualControlPad.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "C87147546CC289C0D86F119670DC7FE54E548132"
#pragma checksum "..\..\..\..\Controls\ManualControlPad.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "45D166CF9D8548740F135E2643613360D10EFB00"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.

View File

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+5e23a79fa34a30845d02b3489666483eaacac5a5")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
9c7328ea6d82bbbbee549d472b8b2b45bf14f9e41fb27a4ff0c4a36bcc02e3ae
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_01ycobcn_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_0yukjz5t_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_1guv3ufe_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_2ihufa35_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_2iwpwacf_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_2km0pjwi_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_302fngza_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_30aig0hm_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_4dpdrleq_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_4hpdg3wy_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+02ae378b92eea3b3032c5fa14bdfe2648b2e5469")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
a8f68c5020e18c2ecff74bca9133dfad58cf283b11650461d830369c36073a81

View File

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows7.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OperationControl_4kiui0dk_wpftmp
build_property.ProjectDir = C:\ZendionInc\agrobot_base\AgroBase\OperationControl\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

Some files were not shown because too many files have changed in this diff Show More