2025-11-14 17:11:58 +00:00
|
|
|
|
using AgroBase.Models;
|
|
|
|
|
|
using AgroBase.Services;
|
|
|
|
|
|
using OperationControl.Windows;
|
2026-03-10 19:56:55 +00:00
|
|
|
|
using static AgroBase.Models.Enums;
|
2025-11-14 17:11:58 +00:00
|
|
|
|
|
|
|
|
|
|
namespace OperationControl.Models
|
|
|
|
|
|
{
|
|
|
|
|
|
public class AppShell
|
|
|
|
|
|
{
|
2026-04-01 11:26:37 +00:00
|
|
|
|
public static readonly bool Mock = false;
|
|
|
|
|
|
public static readonly bool AddRover = false;
|
2026-03-12 01:00:21 +00:00
|
|
|
|
|
2025-11-14 17:11:58 +00:00
|
|
|
|
private readonly System.Timers.Timer tmrComunicacao = new(1000) { AutoReset = true };
|
|
|
|
|
|
private int tmrComunicacaoTicks = 0;
|
|
|
|
|
|
private bool tmrComunicacaoTicking = false;
|
|
|
|
|
|
|
|
|
|
|
|
public MainWindow Main { get; private set; }
|
2026-03-04 18:55:52 +00:00
|
|
|
|
public DockWindow Dock { get; private set; }
|
2025-11-14 17:11:58 +00:00
|
|
|
|
|
|
|
|
|
|
public void Inicializar()
|
|
|
|
|
|
{
|
2025-11-24 16:05:50 +00:00
|
|
|
|
Show();
|
|
|
|
|
|
|
2025-11-14 17:11:58 +00:00
|
|
|
|
APIService.IniciarRotinas();
|
|
|
|
|
|
Variaveis.IniciarMQTT();
|
2026-03-05 02:03:31 +00:00
|
|
|
|
Variaveis.IniciarUDP();
|
2025-11-14 17:11:58 +00:00
|
|
|
|
|
|
|
|
|
|
tmrComunicacao.Elapsed += (_, __) => tmrComunicacao_Elapsed();
|
|
|
|
|
|
tmrComunicacao.Start();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void Show()
|
|
|
|
|
|
{
|
|
|
|
|
|
// Aqui você decide qual janela é a inicial de fato
|
|
|
|
|
|
Main = new MainWindow();
|
2026-03-04 18:55:52 +00:00
|
|
|
|
Dock = new DockWindow();
|
2026-03-12 01:00:21 +00:00
|
|
|
|
|
2026-03-17 00:43:15 +00:00
|
|
|
|
if (Mock && AddRover)
|
2026-03-12 01:00:21 +00:00
|
|
|
|
{
|
|
|
|
|
|
Task.Run(async () =>
|
|
|
|
|
|
{
|
|
|
|
|
|
await Task.Delay(1000);
|
|
|
|
|
|
VariaveisControleOperacao.AdicionarNovoRoverNaRede("01", "192.168.1.100");
|
2026-03-17 00:43:15 +00:00
|
|
|
|
var r = VariaveisControleOperacao.RoversNaRede.FirstOrDefault();
|
|
|
|
|
|
r.Modo = AgroBase.Models.Enums.ModoOperacao.MapaGPS;
|
|
|
|
|
|
r.Descricao = "Operacao Mockada";
|
|
|
|
|
|
r.DadosLeitura = new AgroBase.Models.Operacoes.OperacaoParametrosDadosModel()
|
2026-03-12 01:00:21 +00:00
|
|
|
|
{
|
|
|
|
|
|
StatusRover = StatusModulo.Operante,
|
|
|
|
|
|
Operacao = new AgroBase.Models.Operacoes.OperacaoParametrosDadosOperacaoModel()
|
|
|
|
|
|
{
|
2026-03-18 10:40:59 +00:00
|
|
|
|
Modo = AgroBase.Models.Enums.ModoOperacao.MapaGPS,
|
2026-03-17 00:43:15 +00:00
|
|
|
|
Status = StatusOperacao.Parametrizando,
|
2026-03-12 01:00:21 +00:00
|
|
|
|
},
|
|
|
|
|
|
Atuador = new AgroBase.Models.Operacoes.OperacaoParametrosDadosAtuadorModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
Bombas = new List<AgroBase.Models.Operacoes.OperacaoParametrosDadosBombaModel>()
|
|
|
|
|
|
{
|
|
|
|
|
|
new AgroBase.Models.Operacoes.OperacaoParametrosDadosBombaModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
ComandoEstado = true,
|
|
|
|
|
|
LeituraEstado = true,
|
2026-04-07 10:51:05 +00:00
|
|
|
|
ID = "BMBLN",
|
2026-03-12 01:00:21 +00:00
|
|
|
|
ID_Num = 10,
|
|
|
|
|
|
Inicializado = true,
|
2026-04-07 10:51:05 +00:00
|
|
|
|
ComandoPotencia = 50,
|
|
|
|
|
|
LeituraPotencia = 50,
|
|
|
|
|
|
TempoAtuado = 3000,
|
|
|
|
|
|
ComandoPressao = 85,
|
|
|
|
|
|
LeituraPressao = 80,
|
|
|
|
|
|
},
|
|
|
|
|
|
new AgroBase.Models.Operacoes.OperacaoParametrosDadosBombaModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
ID = "BMBAGT",
|
|
|
|
|
|
ID_Num = 11,
|
|
|
|
|
|
ComandoEstado = true,
|
|
|
|
|
|
LeituraEstado = false,
|
|
|
|
|
|
Inicializado = true,
|
|
|
|
|
|
ComandoPotencia = 80,
|
|
|
|
|
|
LeituraPotencia = 0,
|
|
|
|
|
|
TempoAtuado = 100,
|
2026-03-12 01:00:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
Bicos = new List<AgroBase.Models.Operacoes.OperacaoParametrosDadosBicoModel>()
|
|
|
|
|
|
{
|
|
|
|
|
|
new AgroBase.Models.Operacoes.OperacaoParametrosDadosBicoModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
AnguloAbertura = 30,
|
|
|
|
|
|
ComandoAngulo = 0,
|
|
|
|
|
|
ComandoEstado = true,
|
|
|
|
|
|
ID = "B01",
|
|
|
|
|
|
ID_Num = 1,
|
|
|
|
|
|
Inicializado = true,
|
|
|
|
|
|
LeituraAngulo = 0,
|
|
|
|
|
|
LeituraEstado = true,
|
|
|
|
|
|
Posicao = 1,
|
|
|
|
|
|
QtdAtuacoes = 5,
|
|
|
|
|
|
TempoAtuado = 300,
|
|
|
|
|
|
VazaoInstantaneaMLs = 15,
|
2026-03-17 00:43:15 +00:00
|
|
|
|
VazaoMediaMLs = 30,
|
2026-03-12 01:00:21 +00:00
|
|
|
|
VolumeVazadoML = 325
|
|
|
|
|
|
},
|
|
|
|
|
|
new AgroBase.Models.Operacoes.OperacaoParametrosDadosBicoModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
AnguloAbertura = 30,
|
|
|
|
|
|
ComandoAngulo = 0,
|
|
|
|
|
|
ComandoEstado = true,
|
|
|
|
|
|
ID = "B02",
|
|
|
|
|
|
ID_Num = 2,
|
|
|
|
|
|
Inicializado = true,
|
|
|
|
|
|
LeituraAngulo = 0,
|
|
|
|
|
|
LeituraEstado = false,
|
2026-04-07 10:51:05 +00:00
|
|
|
|
Posicao = 2,
|
2026-03-12 01:00:21 +00:00
|
|
|
|
QtdAtuacoes = 5,
|
|
|
|
|
|
TempoAtuado = 300,
|
|
|
|
|
|
VazaoInstantaneaMLs = 15,
|
|
|
|
|
|
VazaoMediaMLs = 30,
|
|
|
|
|
|
VolumeVazadoML = 325
|
|
|
|
|
|
},
|
|
|
|
|
|
new AgroBase.Models.Operacoes.OperacaoParametrosDadosBicoModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
AnguloAbertura = 30,
|
|
|
|
|
|
ComandoAngulo = 0,
|
|
|
|
|
|
ComandoEstado = false,
|
|
|
|
|
|
ID = "B03",
|
|
|
|
|
|
ID_Num = 3,
|
|
|
|
|
|
Inicializado = true,
|
|
|
|
|
|
LeituraAngulo = 0,
|
|
|
|
|
|
LeituraEstado = true,
|
2026-04-07 10:51:05 +00:00
|
|
|
|
Posicao = 3,
|
2026-03-12 01:00:21 +00:00
|
|
|
|
QtdAtuacoes = 5,
|
|
|
|
|
|
TempoAtuado = 300,
|
|
|
|
|
|
VazaoInstantaneaMLs = 15,
|
|
|
|
|
|
VazaoMediaMLs = 30,
|
|
|
|
|
|
VolumeVazadoML = 325
|
|
|
|
|
|
},
|
2026-04-07 10:51:05 +00:00
|
|
|
|
},
|
|
|
|
|
|
CapacidadeReservatorio = 60,
|
|
|
|
|
|
DistanciaEstimadaRestanteMetros = 254.5,
|
|
|
|
|
|
ErvasNoRadar = true,
|
|
|
|
|
|
HerbicidaConsumidoMl = 1541.32,
|
|
|
|
|
|
HerbicidaPorAtuacaoMl = 235.1,
|
|
|
|
|
|
Iniciado = true,
|
|
|
|
|
|
LPorMetro = 0.36,
|
|
|
|
|
|
LPorMinuto = 1.2,
|
|
|
|
|
|
MassaReservatorioKg = 25,
|
|
|
|
|
|
PercentualErvasNoRadar = 3.4,
|
|
|
|
|
|
PercentualErvasTerreno = 36.7,
|
|
|
|
|
|
PercentualReservatorio = 47,
|
|
|
|
|
|
PressaoLinhaPsi = 84.3,
|
|
|
|
|
|
QtdCamerasSolo = 1,
|
|
|
|
|
|
TempoEstimadoRestanteMinutos = 60,
|
|
|
|
|
|
VazaoInstantaneaMLs = 19.3,
|
|
|
|
|
|
VazaoMediaMLs = 15.8,
|
|
|
|
|
|
VolumeReservatorioL = 26,
|
|
|
|
|
|
VolumeVazaoMl = 1.39,
|
2026-03-17 00:43:15 +00:00
|
|
|
|
},
|
|
|
|
|
|
Controle = new AgroBase.Models.Operacoes.OperacaoParametrosDadosControleModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
AlturaBarra = 50,
|
|
|
|
|
|
Angulo = 0,
|
|
|
|
|
|
PercentualVelocidadeSPKmh = 0,
|
2026-04-07 10:51:05 +00:00
|
|
|
|
TipoMovimento = TipoMovimentoDirecional.RodasDianteiras,
|
2026-03-19 10:55:56 +00:00
|
|
|
|
},
|
|
|
|
|
|
Gnss = new AgroBase.Models.Operacoes.OperacaoParametrosDadosGNSSModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
Latitude = -22.17254631649402,
|
|
|
|
|
|
Longitude = -47.395203906184044,
|
|
|
|
|
|
OrientacaoReal = 187
|
|
|
|
|
|
},
|
|
|
|
|
|
ModulosSaude = new List<AgroBase.Models.Operadores.ManagerWorkerMessageResponseModulosPendentesModel>()
|
|
|
|
|
|
{
|
|
|
|
|
|
new AgroBase.Models.Operadores.ManagerWorkerMessageResponseModulosPendentesModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
modulo = T_Code.Gps,
|
|
|
|
|
|
saude = 0,
|
|
|
|
|
|
status = StatusModulo.Desconectado,
|
|
|
|
|
|
},
|
|
|
|
|
|
new AgroBase.Models.Operadores.ManagerWorkerMessageResponseModulosPendentesModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
modulo = T_Code.Can,
|
|
|
|
|
|
saude = 70,
|
|
|
|
|
|
status = StatusModulo.Alerta,
|
|
|
|
|
|
},
|
2026-03-12 01:00:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
};
|
2026-03-17 00:43:15 +00:00
|
|
|
|
r.Controle = new AgroBase.Models.Operacoes.OperacaoParametrosControleModel()
|
|
|
|
|
|
{
|
2026-04-07 10:51:05 +00:00
|
|
|
|
AtuAgitadorModo = ModoAgitadorCalda.Continuo,
|
2026-03-17 00:43:15 +00:00
|
|
|
|
AtuAlturaAreaPulverizacao = 10,
|
|
|
|
|
|
AtuDuracaoAtuacao = 200,
|
|
|
|
|
|
AtuPercentualErvasBicoOff = 1,
|
|
|
|
|
|
AtuPercentualErvasBicoOn = 2,
|
|
|
|
|
|
AtuPercentualInicioPulverizacao = 70,
|
|
|
|
|
|
AtuPressaoLinha = 80,
|
|
|
|
|
|
DirAnguloMaximo = 30,
|
|
|
|
|
|
DirecionalAutomatico = true,
|
|
|
|
|
|
MovimentoAutomatico = true,
|
|
|
|
|
|
PulverizadorAutomatico = true,
|
|
|
|
|
|
DirTipoMovimento = TiposControladorDirecional.MPC,
|
|
|
|
|
|
DirVelocidadeMovimento = 40,
|
|
|
|
|
|
FrenagemAutomaticaAoParar = false,
|
|
|
|
|
|
ImuParadaPorInclinacao = false,
|
|
|
|
|
|
MovVelocidadeCErvasPercent = 20,
|
|
|
|
|
|
MovVelocidadeSErvasPercent = 50,
|
|
|
|
|
|
MpcHorizonte = 4,
|
2026-04-01 11:26:37 +00:00
|
|
|
|
DirAuxilioSonar = false,
|
|
|
|
|
|
MovAuxilioSonar = false,
|
2026-03-17 00:43:15 +00:00
|
|
|
|
OakParadaPorObstaculo = false,
|
|
|
|
|
|
RegistrarDadosPosProcessamento = false,
|
2026-04-01 11:26:37 +00:00
|
|
|
|
AnteciparManobraCorredorM = 10
|
2026-03-17 00:43:15 +00:00
|
|
|
|
};
|
2026-03-12 01:00:21 +00:00
|
|
|
|
});
|
|
|
|
|
|
}
|
2025-11-14 17:11:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void tmrComunicacao_Elapsed()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (tmrComunicacaoTicking) return;
|
|
|
|
|
|
tmrComunicacaoTicking = true;
|
2025-11-24 16:05:50 +00:00
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (tmrComunicacaoTicks % (VariaveisEquipamento.TempoEntrePingsConexao / 1000) == 0 && Variaveis.GpsService != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
VariaveisControleOperacao.EnviarDadosPosicao(Variaveis.GpsService.UltimaLeitura);
|
|
|
|
|
|
}
|
|
|
|
|
|
VariaveisControleOperacao.EnviarDadosHeartbeat();
|
|
|
|
|
|
VariaveisControleOperacao.AtualizarListaRoversNaRede();
|
2026-04-07 10:51:05 +00:00
|
|
|
|
|
|
|
|
|
|
if (Mock && AddRover)
|
|
|
|
|
|
{
|
|
|
|
|
|
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>
|
|
|
|
|
|
{
|
|
|
|
|
|
Variaveis.Dock?._vm?.AtualizarDadosTela(VariaveisControleOperacao.RoverEmFoco);
|
|
|
|
|
|
}));
|
|
|
|
|
|
}
|
2025-11-24 16:05:50 +00:00
|
|
|
|
}
|
|
|
|
|
|
finally
|
2025-11-14 17:11:58 +00:00
|
|
|
|
{
|
2025-11-24 16:05:50 +00:00
|
|
|
|
tmrComunicacaoTicks++;
|
|
|
|
|
|
tmrComunicacaoTicking = false;
|
2025-11-14 17:11:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-10 19:56:55 +00:00
|
|
|
|
public void AdicionarAlertaDock(string roverId, T_Code modulo, SeveridadeAlerta severidade, string mensagem, string modId = null)
|
|
|
|
|
|
{
|
|
|
|
|
|
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>
|
|
|
|
|
|
{
|
2026-03-20 02:03:07 +00:00
|
|
|
|
Dock?._vm?.AdicionarAlerta(roverId, modulo, severidade, mensagem, modId);
|
2026-03-10 19:56:55 +00:00
|
|
|
|
}));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void RemoverAlertaDock(string roverId, T_Code modulo, SeveridadeAlerta? severidade = null, string modId = null)
|
|
|
|
|
|
{
|
|
|
|
|
|
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>
|
|
|
|
|
|
{
|
2026-03-20 02:03:07 +00:00
|
|
|
|
Dock?._vm?.RemoverAlerta(roverId, modulo, severidade, modId);
|
2026-03-10 19:56:55 +00:00
|
|
|
|
}));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-14 17:11:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|