755 lines
38 KiB
C#
755 lines
38 KiB
C#
using OperationControl.ViewModels.Base;
|
|
using System.Collections.ObjectModel;
|
|
using System.Windows.Input;
|
|
using OperationControl.Helpers;
|
|
using static AgroBase.Models.Enums;
|
|
using AgroBase.Models.Operacoes;
|
|
using OperationControl.Models;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace OperationControl.ViewModels.Views.Operacao.Diagnostico
|
|
{
|
|
public class DiagnosticoViewModel : NotifyBase
|
|
{
|
|
public ObservableCollection<DiagnosticoModuloItemViewModel> DiagnosticoModulos { get; set; } = new ObservableCollection<DiagnosticoModuloItemViewModel>();
|
|
public DiagnosticoOpcoesViewModel OpcoesVM { get; } = new DiagnosticoOpcoesViewModel();
|
|
public ObservableCollection<DiagnosticoGraficoSerieViewModel> SeriesGrafico { get; } = new ObservableCollection<DiagnosticoGraficoSerieViewModel>();
|
|
public ObservableCollection<string> LabelsGrafico { get; } = new ObservableCollection<string>();
|
|
private string _ultimoIdGrafico = "";
|
|
|
|
|
|
private DiagnosticoModuloItemViewModel _moduloSelecionado;
|
|
public DiagnosticoModuloItemViewModel ModuloSelecionado
|
|
{
|
|
get => _moduloSelecionado;
|
|
set
|
|
{
|
|
if (_moduloSelecionado == value)
|
|
return;
|
|
|
|
if (_moduloSelecionado != null)
|
|
_moduloSelecionado.Selecionado = false;
|
|
|
|
_moduloSelecionado = value;
|
|
|
|
if (_moduloSelecionado != null)
|
|
_moduloSelecionado.Selecionado = true;
|
|
|
|
OnPropertyChanged();
|
|
AtualizarResumoModuloSelecionado();
|
|
}
|
|
}
|
|
|
|
public ICommand SelecionarModuloCommand { get; }
|
|
public ICommand SalvarSaudeCommand { get; }
|
|
|
|
|
|
public DiagnosticoViewModel()
|
|
{
|
|
SelecionarModuloCommand = new RelayCommand(SelecionarModulo);
|
|
SalvarSaudeCommand = new RelayCommand(SalvarSaudeModulo);
|
|
InicializarModulos();
|
|
}
|
|
|
|
private void InicializarModulos()
|
|
{
|
|
DiagnosticoModulos.Clear();
|
|
|
|
// =============================
|
|
// BARRAMENTO DE TENSÕES
|
|
// =============================
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "BAT", Modulo = T_Code.Bat, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "BAT", Left = 70, Top = 70 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_AB3V", Modulo = T_Code.Sen, LabelModulo = "AB3V", SCode = S_Code.sCOR, TextoBase = "B3V3", Left = 145, Top = 70 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_AB5V", Modulo = T_Code.Sen, LabelModulo = "AB5V", SCode = S_Code.sCOR, TextoBase = "B5V0", Left = 220, Top = 70 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_AB7V2", Modulo = T_Code.Sen, LabelModulo = "AB7V2", SCode = S_Code.sCOR, TextoBase = "B7V2", Left = 295, Top = 70 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_AB12V", Modulo = T_Code.Sen, LabelModulo = "AB12V", SCode = S_Code.sCOR, TextoBase = "B12V", Left = 370, Top = 70 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_AB19V", Modulo = T_Code.Sen, LabelModulo = "AB19V", SCode = S_Code.sCOR, TextoBase = "B19V", Left = 445, Top = 70 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_AB24V", Modulo = T_Code.Sen, LabelModulo = "AB24V", SCode = S_Code.sCOR, TextoBase = "B24V", Left = 520, Top = 70 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_AB36V", Modulo = T_Code.Sen, LabelModulo = "AB36V", SCode = S_Code.sCOR, TextoBase = "B36V", Left = 595, Top = 70 });
|
|
|
|
|
|
// =============================
|
|
// FRENTE ESQUERDA
|
|
// =============================
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "DIR_EF", Modulo = T_Code.Dir, LabelModulo = "EF", SCode = S_Code.sVZO, TextoBase = "DIR", Left = 95, Top = 130 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "MOV_EF", Modulo = T_Code.Mov, LabelModulo = "EF", SCode = S_Code.sVZO, TextoBase = "MOV", Left = 95, Top = 170 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_FROEF", Modulo = T_Code.Sen, LabelModulo = "FROEF", SCode = S_Code.sSRV, TextoBase = "FRO", Left = 30, Top = 170 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_MAGEF", Modulo = T_Code.Sen, LabelModulo = "MAGEF", SCode = S_Code.sMAG, TextoBase = "MAG", Left = 30, Top = 210 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_TMVEF", Modulo = T_Code.Sen, LabelModulo = "TMVEF", SCode = S_Code.sNTC, TextoBase = "TMP", Left = 95, Top = 210 });
|
|
|
|
|
|
// =============================
|
|
// FRENTE DIREITA
|
|
// =============================
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "DIR_DF", Modulo = T_Code.Dir, LabelModulo = "DF", SCode = S_Code.sVZO, TextoBase = "DIR", Left = 540, Top = 130 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "MOV_DF", Modulo = T_Code.Mov, LabelModulo = "DF", SCode = S_Code.sVZO, TextoBase = "MOV", Left = 540, Top = 170 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_FRODF", Modulo = T_Code.Sen, LabelModulo = "FRODF", SCode = S_Code.sSRV, TextoBase = "FRO", Left = 605, Top = 170 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_MAGDF", Modulo = T_Code.Sen, LabelModulo = "MAGDF", SCode = S_Code.sMAG, TextoBase = "MAG", Left = 605, Top = 210 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_TMVDF", Modulo = T_Code.Sen, LabelModulo = "TMVDF", SCode = S_Code.sNTC, TextoBase = "TMP", Left = 540, Top = 210 });
|
|
|
|
|
|
// =============================
|
|
// CENTRO ROBÔ
|
|
// =============================
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SNR", Modulo = T_Code.Snr, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "SNR", Left = 315, Top = 130 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "LVX", Modulo = T_Code.Lvx, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "LDR", Left = 315, Top = 170 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "IMU", Modulo = T_Code.Imu, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "IMU", Left = 315, Top = 210 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "GPS", Modulo = T_Code.Gps, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "GPS", Left = 315, Top = 270 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN", Modulo = T_Code.Sen, LabelModulo = "", SCode = S_Code.sMOD, TextoBase = "SEN", Left = 315, Top = 310 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "NPC", Modulo = T_Code.Npc, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "NCP", Left = 315, Top = 350 });
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_RLCIN", Modulo = T_Code.Sen, LabelModulo = "RLCIN", SCode = S_Code.sRLE, TextoBase = "CLE", Left = 160, Top = 310 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_RLCOUT", Modulo = T_Code.Sen, LabelModulo = "RLCOUT", SCode = S_Code.sRLE, TextoBase = "CLS", Left = 470, Top = 310 });
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "CAN", Modulo = T_Code.Can, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "CAN", Left = 610, Top = 270 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "IPB", Modulo = T_Code.Ipb, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "LAN", Left = 610, Top = 310 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "TRJ", Modulo = T_Code.Trj, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "TRAJ", Left = 610, Top = 350 });
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_LEDOP", Modulo = T_Code.Sen, LabelModulo = "LEDOP", SCode = S_Code.sLED, TextoBase = "OP", Left = 20, Top = 270 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_LEDMN", Modulo = T_Code.Sen, LabelModulo = "LEDMN", SCode = S_Code.sLED, TextoBase = "MN", Left = 20, Top = 310 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_LEDAT", Modulo = T_Code.Sen, LabelModulo = "LEDAT", SCode = S_Code.sLED, TextoBase = "AT", Left = 20, Top = 350 });
|
|
|
|
|
|
// =============================
|
|
// TRASEIRA ESQUERDA
|
|
// =============================
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "DIR_ET", Modulo = T_Code.Dir, LabelModulo = "ET", SCode = S_Code.sVZO, TextoBase = "DIR", Left = 95, Top = 470 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "MOV_ET", Modulo = T_Code.Mov, LabelModulo = "ET", SCode = S_Code.sVZO, TextoBase = "MOV", Left = 95, Top = 510 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_FROET", Modulo = T_Code.Sen, LabelModulo = "FROET", SCode = S_Code.sSRV, TextoBase = "FRO", Left = 30, Top = 510 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_MAGET", Modulo = T_Code.Sen, LabelModulo = "MAGET", SCode = S_Code.sMAG, TextoBase = "MAG", Left = 30, Top = 550 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_TMVET", Modulo = T_Code.Sen, LabelModulo = "TMVET", SCode = S_Code.sNTC, TextoBase = "TMP", Left = 95, Top = 550 });
|
|
|
|
|
|
// =============================
|
|
// TRASEIRA DIREITA
|
|
// =============================
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "DIR_DT", Modulo = T_Code.Dir, LabelModulo = "DT", SCode = S_Code.sVZO, TextoBase = "DIR", Left = 540, Top = 470 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "MOV_DT", Modulo = T_Code.Mov, LabelModulo = "DT", SCode = S_Code.sVZO, TextoBase = "MOV", Left = 540, Top = 510 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_FRODT", Modulo = T_Code.Sen, LabelModulo = "FRODT", SCode = S_Code.sSRV, TextoBase = "FRO", Left = 605, Top = 510 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_MAGDT", Modulo = T_Code.Sen, LabelModulo = "MAGDT", SCode = S_Code.sMAG, TextoBase = "MAG", Left = 605, Top = 550 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "SEN_TMVDT", Modulo = T_Code.Sen, LabelModulo = "TMVDT", SCode = S_Code.sNTC, TextoBase = "TMP", Left = 540, Top = 550 });
|
|
|
|
|
|
// =============================
|
|
// ATUADOR / SISTEMA DE PULVERIZAÇÃO
|
|
// =============================
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_PRSLN", Modulo = T_Code.Atu, LabelModulo = "PRSLN", SCode = S_Code.sPRS, TextoBase = "PRS", Left = 230, Top = 610 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU", Modulo = T_Code.Atu, LabelModulo = "", SCode = S_Code.sMOD, TextoBase = "ATU", Left = 315, Top = 610 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_FLXLN", Modulo = T_Code.Atu, LabelModulo = "FLXLN", SCode = S_Code.sFLX, TextoBase = "FLX", Left = 400, Top = 610 });
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_BOMBA", Modulo = T_Code.Atu, LabelModulo = "BOMBA", SCode = S_Code.sBMB, TextoBase = "BMB", Left = 230, Top = 650 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_MASRS", Modulo = T_Code.Atu, LabelModulo = "MASRS", SCode = S_Code.sMAS, TextoBase = "MAS", Left = 400, Top = 650 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "CAM", Modulo = T_Code.Cam, LabelModulo = "", SCode = S_Code.sVZO, TextoBase = "CAM", Left = 315, Top = 650 });
|
|
|
|
|
|
// =============================
|
|
// BICOS
|
|
// =============================
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_SRVB1", Modulo = T_Code.Atu, LabelModulo = "SRVB1", SCode = S_Code.sSRV, TextoBase = "SVB1", Left = 110, Top = 705 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_B01", Modulo = T_Code.Atu, LabelModulo = "B01", SCode = S_Code.sBIC, TextoBase = "B01", Left = 110, Top = 745 });
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_MAGESQ", Modulo = T_Code.Atu, LabelModulo = "MAGESQ", SCode = S_Code.sMAG, TextoBase = "MAG", Left = 215, Top = 730 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_MAGALT", Modulo = T_Code.Atu, LabelModulo = "MAGALT", SCode = S_Code.sMAG, TextoBase = "MAG", Left = 315, Top = 705 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_MAGDIR", Modulo = T_Code.Atu, LabelModulo = "MAGDIR", SCode = S_Code.sMAG, TextoBase = "MAG", Left = 415, Top = 730 });
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_B02", Modulo = T_Code.Atu, LabelModulo = "B02", SCode = S_Code.sBIC, TextoBase = "B02", Left = 315, Top = 745 });
|
|
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_SRVB3", Modulo = T_Code.Atu, LabelModulo = "SRVB3", SCode = S_Code.sSRV, TextoBase = "SVB3", Left = 520, Top = 705 });
|
|
DiagnosticoModulos.Add(new DiagnosticoModuloItemViewModel { IdVisual = "ATU_B03", Modulo = T_Code.Atu, LabelModulo = "B03", SCode = S_Code.sBIC, TextoBase = "B03", Left = 520, Top = 745 });
|
|
}
|
|
|
|
|
|
private void SelecionarModulo(object parameter)
|
|
{
|
|
if (parameter is DiagnosticoModuloItemViewModel item)
|
|
ModuloSelecionado = item;
|
|
}
|
|
|
|
#region RESUMO
|
|
|
|
private string _tituloModuloSelecionado = "Nenhum módulo selecionado";
|
|
public string TituloModuloSelecionado
|
|
{
|
|
get => _tituloModuloSelecionado;
|
|
set => SetProperty(ref _tituloModuloSelecionado, value);
|
|
}
|
|
|
|
private string _descricaoModuloSelecionado = "Selecione um módulo no mapa para visualizar os detalhes.";
|
|
public string DescricaoModuloSelecionado
|
|
{
|
|
get => _descricaoModuloSelecionado;
|
|
set => SetProperty(ref _descricaoModuloSelecionado, value);
|
|
}
|
|
|
|
private OperacaoParametrosModel _dadosOperacaoAtual;
|
|
|
|
private string _impedimentoModuloSelecionado = "Impedimento: Nenhum";
|
|
public string ImpedimentoModuloSelecionado
|
|
{
|
|
get => _impedimentoModuloSelecionado;
|
|
set => SetProperty(ref _impedimentoModuloSelecionado, value);
|
|
}
|
|
|
|
private string _infoSaude = "Saúde: -";
|
|
public string InfoSaude
|
|
{
|
|
get => _infoSaude;
|
|
set => SetProperty(ref _infoSaude, value);
|
|
}
|
|
|
|
private string _infoCan = "CAN: -";
|
|
public string InfoCan
|
|
{
|
|
get => _infoCan;
|
|
set => SetProperty(ref _infoCan, value);
|
|
}
|
|
|
|
private string _infoLatencia = "Latência: -";
|
|
public string InfoLatencia
|
|
{
|
|
get => _infoLatencia;
|
|
set => SetProperty(ref _infoLatencia, value);
|
|
}
|
|
|
|
private bool _mandatorioSelecionado;
|
|
public bool MandatorioSelecionado
|
|
{
|
|
get => _mandatorioSelecionado;
|
|
set => SetProperty(ref _mandatorioSelecionado, value);
|
|
}
|
|
|
|
private bool _emUsoSelecionado;
|
|
public bool EmUsoSelecionado
|
|
{
|
|
get => _emUsoSelecionado;
|
|
set => SetProperty(ref _emUsoSelecionado, value);
|
|
}
|
|
|
|
public ObservableCollection<string> CondicoesOperacionais { get; } = new();
|
|
public ObservableCollection<string> LogsModuloSelecionado { get; } = new();
|
|
|
|
private string _infoModulo = "Módulo: -";
|
|
public string InfoModulo
|
|
{
|
|
get => _infoModulo;
|
|
set => SetProperty(ref _infoModulo, value);
|
|
}
|
|
|
|
private string _infoLabel = "Label: -";
|
|
public string InfoLabel
|
|
{
|
|
get => _infoLabel;
|
|
set => SetProperty(ref _infoLabel, value);
|
|
}
|
|
|
|
private string _infoSCode = "SCode: -";
|
|
public string InfoSCode
|
|
{
|
|
get => _infoSCode;
|
|
set => SetProperty(ref _infoSCode, value);
|
|
}
|
|
|
|
private string _infoStatus = "Status: -";
|
|
public string InfoStatus
|
|
{
|
|
get => _infoStatus;
|
|
set => SetProperty(ref _infoStatus, value);
|
|
}
|
|
|
|
private string _infoIniciado = "Iniciado: -";
|
|
public string InfoIniciado
|
|
{
|
|
get => _infoIniciado;
|
|
set => SetProperty(ref _infoIniciado, value);
|
|
}
|
|
|
|
private string _infoMandatorio = "Mandatório: -";
|
|
public string InfoMandatorio
|
|
{
|
|
get => _infoMandatorio;
|
|
set => SetProperty(ref _infoMandatorio, value);
|
|
}
|
|
|
|
private string _infoEmUso = "Em uso: -";
|
|
public string InfoEmUso
|
|
{
|
|
get => _infoEmUso;
|
|
set => SetProperty(ref _infoEmUso, value);
|
|
}
|
|
|
|
private string _infoIdVisual = "ID visual: -";
|
|
public string InfoIdVisual
|
|
{
|
|
get => _infoIdVisual;
|
|
set => SetProperty(ref _infoIdVisual, value);
|
|
}
|
|
|
|
private void AtualizarResumoModuloSelecionado()
|
|
{
|
|
CondicoesOperacionais.Clear();
|
|
LogsModuloSelecionado.Clear();
|
|
|
|
if (ModuloSelecionado == null || _dadosOperacaoAtual == null)
|
|
{
|
|
TituloModuloSelecionado = "Nenhum módulo selecionado";
|
|
DescricaoModuloSelecionado = "Selecione um módulo no mapa para visualizar os detalhes.";
|
|
InfoModulo = "Módulo: -";
|
|
InfoLabel = "Label: -";
|
|
InfoSCode = "SCode: -";
|
|
InfoStatus = "Status: -";
|
|
InfoIniciado = "Iniciado: -";
|
|
InfoMandatorio = "Mandatório: -";
|
|
InfoEmUso = "Em uso: -";
|
|
InfoIdVisual = "ID visual: -";
|
|
InfoSaude = "Saúde: -";
|
|
InfoCan = "CAN: -";
|
|
InfoLatencia = "Latência: -";
|
|
ImpedimentoModuloSelecionado = "Impedimento: Nenhum";
|
|
MandatorioSelecionado = false;
|
|
EmUsoSelecionado = false;
|
|
return;
|
|
}
|
|
|
|
var rover = _dadosOperacaoAtual.DadosLeitura;
|
|
var item = ModuloSelecionado;
|
|
|
|
var saudeModulo = rover?.ModulosSaude?.FirstOrDefault(x => x.modulo == item.Modulo);
|
|
var individual = saudeModulo?.saude_individual?.FirstOrDefault(x => x.label == item.LabelModulo);
|
|
var dispositivo = rover?.DispositivosMapeados?.FirstOrDefault(x => x.Dispositivo == item.Modulo && x.Mod_ID == item.LabelModulo);
|
|
|
|
var status = individual?.status ?? saudeModulo?.status ?? StatusModulo.Desconectado;
|
|
var saude = individual?.saude ?? saudeModulo?.saude ?? 0;
|
|
var motivos = string.Join(", ", (individual?.motivos ?? saudeModulo?.motivos) ?? new List<string>());
|
|
|
|
DateTime ucr = DateTime.MinValue;
|
|
if (item.Modulo == T_Code.Sen)
|
|
ucr = rover?.Sensoriamento?.UltimoComandoRespondido ?? DateTime.MinValue;
|
|
else if (item.Modulo == T_Code.Atu)
|
|
ucr = rover?.Atuador?.UltimoComandoRespondido ?? DateTime.MinValue;
|
|
else if (item.Modulo == T_Code.Mov)
|
|
ucr = rover?.Movimentacao?.Modulos?.FirstOrDefault(x => x.Mod_ID == item.LabelModulo)?.UltimoComandoRespondido ?? DateTime.MinValue;
|
|
else if (item.Modulo == T_Code.Dir)
|
|
ucr = rover?.Direcional?.Modulos?.FirstOrDefault(x => x.Mod_ID == item.LabelModulo)?.UltimoComandoRespondido ?? DateTime.MinValue;
|
|
else
|
|
ucr = rover?.Momento ?? DateTime.MinValue;
|
|
|
|
DateTime momento = rover?.Momento ?? DateTime.MinValue;
|
|
double canLatencia = (ucr - momento).TotalMilliseconds;
|
|
|
|
TituloModuloSelecionado = $"Saúde do módulo {item.TextoBase}";
|
|
DescricaoModuloSelecionado = $"Detalhes reais do item selecionado no mapa de diagnóstico.";
|
|
|
|
InfoModulo = $"Módulo: {item.Modulo}";
|
|
InfoLabel = $"Label: {(string.IsNullOrWhiteSpace(item.LabelModulo) ? "-" : item.LabelModulo)}";
|
|
InfoSCode = $"SCode: {item.SCode}";
|
|
InfoStatus = $"Status: {status}";
|
|
InfoIniciado = $"Iniciado: {(item.Iniciado ? "Sim" : "Não")}";
|
|
InfoMandatorio = $"Mandatório: {(item.Mandatorio ? "Sim" : "Não")}";
|
|
InfoEmUso = $"Em uso: {(item.EmUso ? "Sim" : "Não")}";
|
|
InfoIdVisual = $"ID visual: {item.IdVisual}";
|
|
InfoSaude = $"Saúde: {saude:0}%";
|
|
InfoCan = $"CAN: {canLatencia:0} ms";
|
|
InfoLatencia = $"Latência: {dispositivo?.Latencia ?? 0} ms";
|
|
ImpedimentoModuloSelecionado = $"Impedimento: {(string.IsNullOrWhiteSpace(motivos) ? "Nenhum" : motivos)}";
|
|
|
|
MandatorioSelecionado = item.Mandatorio;
|
|
EmUsoSelecionado = item.EmUso;
|
|
|
|
if (saudeModulo?.condicoes_operacionais != null)
|
|
{
|
|
foreach (var cond in saudeModulo.condicoes_operacionais)
|
|
CondicoesOperacionais.Add($"{cond.descricao} (Valor: {cond.valor}, Severidade: {cond.severidade:0}%)");
|
|
}
|
|
|
|
var logs = rover?.Logs?.Where(x => x.Dispositivo == item.Modulo);
|
|
if (!string.IsNullOrWhiteSpace(item.LabelModulo))
|
|
logs = logs?.Where(x => x.ID == item.LabelModulo);
|
|
else
|
|
logs = logs?.Where(x => x.ID == null);
|
|
|
|
if (logs != null)
|
|
{
|
|
foreach (var log in logs)
|
|
LogsModuloSelecionado.Add($"{log.Momento:HH:mm:ss.fff} - {log.Mensagem}");
|
|
}
|
|
|
|
OpcoesVM?.Atualizar(ModuloSelecionado, _dadosOperacaoAtual);
|
|
AtualizarGraficoModuloSelecionado();
|
|
}
|
|
|
|
public void AtualizarDados(OperacaoParametrosModel dados)
|
|
{
|
|
_dadosOperacaoAtual = dados;
|
|
|
|
if (dados == null)
|
|
return;
|
|
|
|
foreach (var item in DiagnosticoModulos)
|
|
{
|
|
item.Status = ObterStatusModulo(item, dados);
|
|
item.Mandatorio = ObterMandatorio(item, dados);
|
|
item.EmUso = ObterEmUso(item, dados);
|
|
item.Iniciado = ObterIniciado(item, dados);
|
|
}
|
|
|
|
AtualizarResumoModuloSelecionado();
|
|
}
|
|
|
|
private StatusModulo ObterStatusModulo(DiagnosticoModuloItemViewModel item, OperacaoParametrosModel dados)
|
|
{
|
|
var saudeModulo = dados?.DadosLeitura?.ModulosSaude?.FirstOrDefault(x => x.modulo == item.Modulo);
|
|
if (saudeModulo == null)
|
|
return StatusModulo.Desconectado;
|
|
|
|
var individual = saudeModulo.saude_individual?.FirstOrDefault(x => x.label == item.LabelModulo);
|
|
|
|
return individual?.status ?? saudeModulo.status;
|
|
}
|
|
|
|
private bool ObterMandatorio(DiagnosticoModuloItemViewModel item, OperacaoParametrosModel dados)
|
|
{
|
|
if (dados == null)
|
|
return false;
|
|
|
|
if (!string.IsNullOrWhiteSpace(item.LabelModulo))
|
|
{
|
|
return dados.DadosLeitura?.Operacao?.ModulosMandatorios?
|
|
.FirstOrDefault(x => x.Dispositivo == item.Modulo)?
|
|
.ComponentesEmUso?
|
|
.Any(x => x.Key == item.LabelModulo && x.Value.Item1) ?? false;
|
|
}
|
|
|
|
return dados.ModulosMandatorios?.Any(x => x.Dispositivo == item.Modulo && x.Mandatorio) ?? false;
|
|
}
|
|
|
|
private bool ObterEmUso(DiagnosticoModuloItemViewModel item, OperacaoParametrosModel dados)
|
|
{
|
|
if (dados == null)
|
|
return false;
|
|
|
|
if (!string.IsNullOrWhiteSpace(item.LabelModulo))
|
|
{
|
|
return dados.DadosLeitura?.Operacao?.ModulosMandatorios?
|
|
.FirstOrDefault(x => x.Dispositivo == item.Modulo)?
|
|
.ComponentesEmUso?
|
|
.Any(x => x.Key == item.LabelModulo && x.Value.Item2) ?? false;
|
|
}
|
|
|
|
return dados.ModulosMandatorios?.Any(x => x.Dispositivo == item.Modulo && x.Utilizar) ?? false;
|
|
}
|
|
|
|
private bool ObterIniciado(DiagnosticoModuloItemViewModel item, OperacaoParametrosModel dados)
|
|
{
|
|
var rover = dados?.DadosLeitura;
|
|
if (rover == null)
|
|
return false;
|
|
|
|
switch (item.Modulo)
|
|
{
|
|
case T_Code.Mov:
|
|
return rover.Movimentacao?.Modulos?.FirstOrDefault(x => x.Mod_ID == item.LabelModulo)?.Iniciado ?? false;
|
|
|
|
case T_Code.Dir:
|
|
return rover.Direcional?.Modulos?.FirstOrDefault(x => x.Mod_ID == item.LabelModulo)?.Iniciado ?? false;
|
|
|
|
case T_Code.Atu:
|
|
if (string.IsNullOrWhiteSpace(item.LabelModulo))
|
|
return rover.Atuador?.Iniciado ?? false;
|
|
|
|
switch (item.SCode)
|
|
{
|
|
case S_Code.sBIC:
|
|
return rover.Atuador?.Bicos?.FirstOrDefault(x => x.ID == item.LabelModulo)?.Inicializado ?? false;
|
|
|
|
case S_Code.sBMB:
|
|
return rover.Atuador?.Bombas?.FirstOrDefault(x => x.ID == item.LabelModulo)?.Inicializado ?? false;
|
|
|
|
case S_Code.sSRV:
|
|
return rover.Atuador?.Servos?.FirstOrDefault(x => x.ID == item.LabelModulo)?.Inicializado ?? false;
|
|
|
|
default:
|
|
return rover.Atuador?.Sensores?.FirstOrDefault(x => x.ID == item.LabelModulo && x.Componente == item.SCode)?.Inicializado ?? false;
|
|
}
|
|
|
|
case T_Code.Sen:
|
|
if (string.IsNullOrWhiteSpace(item.LabelModulo))
|
|
return rover.Sensoriamento?.Iniciado ?? false;
|
|
|
|
switch (item.SCode)
|
|
{
|
|
case S_Code.sLED:
|
|
return rover.Sensoriamento?.Sinaleiros?.FirstOrDefault(x => x.ID == item.LabelModulo)?.Inicializado ?? false;
|
|
|
|
case S_Code.sRLE:
|
|
return rover.Sensoriamento?.Reles?.FirstOrDefault(x => x.ID == item.LabelModulo)?.Inicializado ?? false;
|
|
|
|
case S_Code.sSRV:
|
|
return rover.Sensoriamento?.Servos?.FirstOrDefault(x => x.ID == item.LabelModulo)?.Inicializado ?? false;
|
|
|
|
default:
|
|
return rover.Sensoriamento?.Sensores?.FirstOrDefault(x => x.ID == item.LabelModulo && x.Componente == item.SCode)?.Inicializado ?? false;
|
|
}
|
|
|
|
case T_Code.Imu:
|
|
return rover.Imu?.Iniciado ?? false;
|
|
|
|
case T_Code.Npc:
|
|
case T_Code.Ipb:
|
|
return dados.Alive;
|
|
|
|
case T_Code.Can:
|
|
return rover.DispositivosMapeados?.Any(x => x.Dispositivo == T_Code.Can) ?? false;
|
|
|
|
case T_Code.Cam:
|
|
case T_Code.Snr:
|
|
case T_Code.Lvx:
|
|
case T_Code.Gps:
|
|
return rover.DispositivosMapeados?.FirstOrDefault(x => x.Dispositivo == item.Modulo)?.Saude > 0;
|
|
|
|
case T_Code.Bat:
|
|
return rover.Bateria?.Iniciado ?? false;
|
|
|
|
case T_Code.Trj:
|
|
return rover.Trajetoria?.QtdPontos > 0;
|
|
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private void SalvarSaudeModulo(object parameter)
|
|
{
|
|
if (ModuloSelecionado == null)
|
|
return;
|
|
|
|
var modulo = ModuloSelecionado.Modulo;
|
|
var label = ModuloSelecionado.LabelModulo;
|
|
|
|
if (modulo == T_Code.Vzo)
|
|
return;
|
|
|
|
var rover = VariaveisControleOperacao.RoverEmFoco;
|
|
|
|
if (rover == null)
|
|
{
|
|
MessageBox.Show($"Sem dados para o módulo {modulo} ({label})");
|
|
return;
|
|
}
|
|
|
|
var mod = rover.ModulosMandatorios?.FirstOrDefault(x => x.Dispositivo == modulo);
|
|
if (mod == null)
|
|
{
|
|
mod = new AgroBase.Models.OperacaoModulosMandatoriosModel()
|
|
{
|
|
Dispositivo = modulo,
|
|
ComponentesEmUso = new Dictionary<string, (bool, bool)>()
|
|
};
|
|
|
|
if (rover.ModulosMandatorios == null)
|
|
rover.ModulosMandatorios = new List<AgroBase.Models.OperacaoModulosMandatoriosModel>();
|
|
|
|
rover.ModulosMandatorios.Add(mod);
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(label))
|
|
{
|
|
mod.Mandatorio = MandatorioSelecionado;
|
|
mod.Utilizar = EmUsoSelecionado;
|
|
}
|
|
else
|
|
{
|
|
if (mod.ComponentesEmUso == null)
|
|
mod.ComponentesEmUso = new Dictionary<string, (bool, bool)>();
|
|
|
|
mod.ComponentesEmUso[label] = (MandatorioSelecionado, EmUsoSelecionado);
|
|
}
|
|
|
|
VariaveisControleOperacao.EnviarParametrosOperacao(new AgroBase.Models.Operacoes.OperacaoParametrosModel()
|
|
{
|
|
ModulosMandatorios = rover.ModulosMandatorios,
|
|
});
|
|
|
|
// opcional: refletir imediatamente no item selecionado
|
|
ModuloSelecionado.Mandatorio = MandatorioSelecionado;
|
|
ModuloSelecionado.EmUso = EmUsoSelecionado;
|
|
|
|
AtualizarResumoModuloSelecionado();
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void AtualizarGraficoModuloSelecionado()
|
|
{
|
|
var idAtual = ModuloSelecionado?.IdVisual ?? "";
|
|
if (_ultimoIdGrafico != idAtual)
|
|
{
|
|
SeriesGrafico.Clear();
|
|
LabelsGrafico.Clear();
|
|
_ultimoIdGrafico = idAtual;
|
|
}
|
|
|
|
if (ModuloSelecionado == null || _dadosOperacaoAtual?.DadosLeitura == null)
|
|
return;
|
|
|
|
var rover = _dadosOperacaoAtual.DadosLeitura;
|
|
var item = ModuloSelecionado;
|
|
|
|
DateTime? momento = rover.Momento;
|
|
if (momento.HasValue)
|
|
{
|
|
LabelsGrafico.Add(momento.Value.ToString("HH:mm:ss"));
|
|
while (LabelsGrafico.Count > 60)
|
|
LabelsGrafico.RemoveAt(0);
|
|
}
|
|
|
|
void AddOrAppendSerie(string label, string unidade, double? valor)
|
|
{
|
|
if (!valor.HasValue)
|
|
return;
|
|
|
|
var serie = SeriesGrafico.FirstOrDefault(x => x.Label == label && x.Unidade == unidade);
|
|
if (serie == null)
|
|
{
|
|
serie = new DiagnosticoGraficoSerieViewModel
|
|
{
|
|
Label = label,
|
|
Unidade = unidade
|
|
};
|
|
SeriesGrafico.Add(serie);
|
|
}
|
|
|
|
serie.Valores.Add(valor.Value);
|
|
|
|
while (serie.Valores.Count > 60)
|
|
serie.Valores.RemoveAt(0);
|
|
}
|
|
|
|
switch (item.Modulo)
|
|
{
|
|
case T_Code.Sen:
|
|
switch (item.SCode)
|
|
{
|
|
case S_Code.sCOR:
|
|
var barramento = rover.Bateria?.Barramentos?.FirstOrDefault(x => x.ID == item.LabelModulo);
|
|
AddOrAppendSerie("Corrente", "mA", barramento?.Corrente);
|
|
AddOrAppendSerie("Tensão", "V", barramento?.Tensao);
|
|
AddOrAppendSerie("Potência", "mW", barramento?.Potencia);
|
|
AddOrAppendSerie("Energia", "J", barramento?.Energia);
|
|
AddOrAppendSerie("Temperatura", "°C", barramento?.Temperatura);
|
|
break;
|
|
|
|
case S_Code.sNTC:
|
|
var ntc = rover.Sensoriamento?.Sensores?
|
|
.FirstOrDefault(x => x.ID == item.LabelModulo && x.Componente == item.SCode)?
|
|
.Valores?[0];
|
|
AddOrAppendSerie("Temperatura", "°C", ntc);
|
|
break;
|
|
|
|
case S_Code.sRLE:
|
|
var rele = rover.Sensoriamento?.Reles?.FirstOrDefault(x => x.ID == item.LabelModulo);
|
|
AddOrAppendSerie("Comando", "", rele?.ComandoEstado == true ? 1 : 0);
|
|
AddOrAppendSerie("Leitura", "", rele?.LeituraEstado == true ? 1 : 0);
|
|
break;
|
|
|
|
case S_Code.sSRV:
|
|
var servoSen = rover.Sensoriamento?.Servos?.FirstOrDefault(x => x.ID == item.LabelModulo);
|
|
AddOrAppendSerie("Comando", "°", servoSen?.ComandoAngulo);
|
|
AddOrAppendSerie("Leitura", "°", servoSen?.LeituraAngulo);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case T_Code.Atu:
|
|
switch (item.SCode)
|
|
{
|
|
case S_Code.sBIC:
|
|
var bico = rover.Atuador?.Bicos?.FirstOrDefault(x => x.ID == item.LabelModulo);
|
|
AddOrAppendSerie("Cmd", "", (bico?.ComandoEstado ?? false) ? 100 : 0);
|
|
AddOrAppendSerie("Vazão", "mL/s", bico?.VazaoInstantaneaMLs);
|
|
break;
|
|
|
|
case S_Code.sBMB:
|
|
var bomba = rover.Atuador?.Bombas?.FirstOrDefault(x => x.ID == item.LabelModulo);
|
|
AddOrAppendSerie("Cmd", "", (bomba?.ComandoEstado ?? false) ? 100 : 0);
|
|
AddOrAppendSerie("Potência", "%", bomba?.Potencia);
|
|
AddOrAppendSerie("Pressão", "psi", rover.Atuador?.PressaoLinhaPsi);
|
|
break;
|
|
|
|
case S_Code.sPRS:
|
|
AddOrAppendSerie("Pressão", "psi", rover.Atuador?.PressaoLinhaPsi);
|
|
break;
|
|
|
|
case S_Code.sFLX:
|
|
AddOrAppendSerie("Fluxo", "mL/s", rover.Atuador?.VazaoInstantaneaMLs);
|
|
AddOrAppendSerie("Média", "mL/s", rover.Atuador?.VazaoMediaMLs);
|
|
break;
|
|
|
|
case S_Code.sMAS:
|
|
AddOrAppendSerie("Volume", "L", rover.Atuador?.VolumeReservatorioL);
|
|
AddOrAppendSerie("Massa", "Kg", rover.Atuador?.MassaReservatorioKg);
|
|
AddOrAppendSerie("Percentual", "%", rover.Atuador?.PercentualReservatorio);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case T_Code.Mov:
|
|
var mov = rover.Movimentacao?.Modulos?.FirstOrDefault(x => x.Mod_ID == item.LabelModulo);
|
|
AddOrAppendSerie("Tensão", "V", mov?.Tensao);
|
|
AddOrAppendSerie("Corrente M", "A", mov?.Corrente_Motor);
|
|
AddOrAppendSerie("Corrente B", "A", mov?.Corrente_Barramento);
|
|
AddOrAppendSerie("Ciclo", "%", mov?.CicloTrabalho);
|
|
AddOrAppendSerie("Temperatura", "°C", mov?.TemperaturaDriver);
|
|
AddOrAppendSerie("RPM", "", mov?.RPM_Roda);
|
|
break;
|
|
|
|
case T_Code.Npc:
|
|
var npc = rover.PerformanceNcp;
|
|
AddOrAppendSerie("GPU %", "%", npc?.GPU_load);
|
|
AddOrAppendSerie("GPU °C", "°C", npc?.GPU_temp);
|
|
AddOrAppendSerie("CPU %", "%", npc?.CPU_load);
|
|
AddOrAppendSerie("CPU °C", "°C", npc?.CPU_temp);
|
|
AddOrAppendSerie("RAM", "MB", npc?.RAM_usage);
|
|
break;
|
|
|
|
case T_Code.Ipb:
|
|
var conexao = rover.ModulosSaude?.FirstOrDefault(x => x.modulo == T_Code.Ipb);
|
|
AddOrAppendSerie("Latência", "ms", conexao?.detalhes?["avg_rtt"]?.Value<double>());
|
|
AddOrAppendSerie("Jitter", "ms", conexao?.detalhes?["jitter"]?.Value<double>());
|
|
AddOrAppendSerie("Timeout", "%", conexao?.detalhes?["tmout_pct"]?.Value<double>());
|
|
AddOrAppendSerie("Perda", "%", conexao?.detalhes?["loss_pct"]?.Value<double>());
|
|
AddOrAppendSerie("Banda", "Mbps", conexao?.detalhes?["bw_total_mbps"]?.Value<double>());
|
|
AddOrAppendSerie("Banda %", "%", conexao?.detalhes?["bw_util_pct"]?.Value<double>());
|
|
break;
|
|
|
|
case T_Code.Gps:
|
|
var gps = rover.Gnss;
|
|
AddOrAppendSerie("Precisão", "cm", gps?.PrecisaoCm);
|
|
AddOrAppendSerie("Altitude", "m", gps?.Altitude);
|
|
AddOrAppendSerie("Idade", "s", gps?.IdadeCorrecao);
|
|
AddOrAppendSerie("Satélites", "", gps?.NumeroSatelites);
|
|
break;
|
|
|
|
case T_Code.Bat:
|
|
var bat = rover.Bateria;
|
|
AddOrAppendSerie("Tensão", "V", bat?.TensaoInstantanea);
|
|
AddOrAppendSerie("Corrente", "A", bat?.CorrenteInstantanea);
|
|
AddOrAppendSerie("Temperatura", "°C", bat?.Temperatura);
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|