Compare commits

...

2 Commits

Author SHA1 Message Date
Diego Freitas f00ca573b8 criado sistema de autonomia de bateria e herbicida 2025-12-09 13:47:53 -03:00
Diego Freitas bd8069c545 Ultimos ajustes no fluxo CAN 2025-12-09 09:19:36 -03:00
126 changed files with 3525 additions and 2419 deletions

Binary file not shown.

View File

@ -588,6 +588,7 @@
<Compile Include="Services\EthernetService.cs" />
<Compile Include="Services\FilaService.cs" />
<Compile Include="Services\GPSService.cs" />
<Compile Include="Services\HerbicideCounterService.cs" />
<Compile Include="Services\IDispositivosService.cs" />
<Compile Include="Services\IFirmwareSensorBase.cs" />
<Compile Include="Services\KinectService.cs" />

View File

@ -28,8 +28,6 @@ namespace AgroBase.Forms.Atuador
PopularBicos();
nudPressaoSP.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha);
txtMMassaRef.Text = DispAtu.Dados._MassaRef.ToString();
txtMLeituraRef.Text = DispAtu.Dados._MassaLeituraRef.ToString();
txtPressaoVmin.Text = DispAtu.Dados._PressaoVmin.ToString();
txtPressaoVmax.Text = DispAtu.Dados._PressaoVmax.ToString();
txtMLRef.Text = DispAtu.Dados._FluxoMlRef.ToString();
@ -145,9 +143,9 @@ namespace AgroBase.Forms.Atuador
grdSensoriamento.Rows[4].Cells[1].Value = DispAtu.Dados.PressaoLinha.ToString("0.00000");
grdSensoriamento.Rows[5].Cells[1].Value = DispAtu.Dados.PressaoLinhaCalc.ToString("0.00000");
grdSensoriamento.Rows[6].Cells[1].Value = DispAtu.Dados.VazaoFluxoMLpSMedia.ToString("0.00000");
grdSensoriamento.Rows[7].Cells[1].Value = DispAtu.Dados.MassaReservatorio.ToString("0.00000");
grdSensoriamento.Rows[8].Cells[1].Value = DispAtu.Dados.VolumeReservatorio.ToString("0.00000");
grdSensoriamento.Rows[9].Cells[1].Value = DispAtu.Dados.PercentualReservatorio.ToString("0.00");
grdSensoriamento.Rows[7].Cells[1].Value = DispAtu.Dados.ContadorCarga.MassaAtual_Kg.ToString("0.00000");
grdSensoriamento.Rows[8].Cells[1].Value = DispAtu.Dados.ContadorCarga.VolumeAtual_L.ToString("0.00000");
grdSensoriamento.Rows[9].Cells[1].Value = DispAtu.Dados.ContadorCarga.PercentualAtual.ToString("0.00");
}
private void nudPressaoSP_ValueChanged(object sender, EventArgs e)
@ -207,8 +205,6 @@ namespace AgroBase.Forms.Atuador
private void btnSalvar_Click(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha = Convert.ToDouble(nudPressaoSP.Value);
DispAtu.Dados._MassaRef = Convert.ToDouble(txtMMassaRef.Text);
DispAtu.Dados._MassaLeituraRef = Convert.ToDouble(txtMLeituraRef.Text);
DispAtu.Dados._PressaoVmin = Convert.ToDouble(txtPressaoVmin.Text);
DispAtu.Dados._PressaoVmax = Convert.ToDouble(txtPressaoVmax.Text);
DispAtu.Dados._FluxoMlRef = Convert.ToDouble(txtMLRef.Text);
@ -278,7 +274,7 @@ namespace AgroBase.Forms.Atuador
_CalibragemVazao = new CalibragemVazao()
{
Calibrando = true,
MassaInicial = DispAtu.Dados.MassaReservatorio,
MassaInicial = DispAtu.Dados.ContadorCarga.MassaAtual_Kg,
PressoesAferidas = new List<double>()
{
DispAtu.Dados.PressaoLinha,

View File

@ -468,7 +468,7 @@ namespace AgroBase.Forms.IHM
double Pressao = PressaoInicializado ? Dispositivo.Dados.PressaoLinha : -1;
idx = PreencheDadosLinha(grid, Testes, idx, Pressao);
double Massa = MassaInicializado ? Dispositivo.Dados.MassaReservatorio : -1;
double Massa = MassaInicializado ? Dispositivo.Dados.ContadorCarga.MassaAtual_Kg : -1;
idx = PreencheDadosLinha(grid, Testes, idx, Massa);
idx = PreencheDadosLinha(grid, Testes, idx, Pressao);

View File

@ -180,13 +180,13 @@ namespace AgroBase.Forms.IHM
txtTempoOperacao.Text = _Sensoriamento.TempoDecorrido.ToString("HH:mm:ss");
txtLatenciaControle.Text = _Sensoriamento.Controle.Latencia.ToString();
txtHerbicidaAplicado.Text = _Sensoriamento.Atuador.HerbicidaConsumido.ToString("0.000") + " L";
txtBateriaConsumida.Text = _Sensoriamento.Bateria.BateriaConsumida.ToString("0.00") + " %";
txtBateriaConsumida.Text = _Sensoriamento.Bateria.PercentualBateriaConsumida.ToString("0.00") + " %";
FuncoesGlobais.PreencheValorProgressBar(pgbReservatorio, _Sensoriamento.Atuador.PercentualReservatorio);
lblReservatorio.Text = "Reservatório: " + _Sensoriamento.Atuador.VolumeReservatorio.ToString("0.00") + " l " + _Sensoriamento.Atuador.PercentualReservatorio.ToString("0.00") + "%";
FuncoesGlobais.PreencheValorProgressBar(pgbBateria, _Sensoriamento.Bateria.PorcentagemBateria);
lblBateria.Text = "Bateria: " + _Sensoriamento.Bateria.TensaoInstantanea.ToString("0.00") + "v " + _Sensoriamento.Bateria.PorcentagemBateria.ToString("0.00") + "%";
FuncoesGlobais.PreencheValorProgressBar(pgbBateria, _Sensoriamento.Bateria.PercentualBateria);
lblBateria.Text = "Bateria: " + _Sensoriamento.Bateria.TensaoInstantanea.ToString("0.00") + "v " + _Sensoriamento.Bateria.PercentualBateria.ToString("0.00") + "%";
FuncoesGlobais.PreencheValorProgressBar(pgbOperacao, _Sensoriamento.Trajetoria.ProgressoTrajeto);
lblOperacao.Text = "Operação: " + _Sensoriamento.Trajetoria.ProgressoTrajeto.ToString("0.00") + "%";

View File

@ -466,7 +466,8 @@ namespace AgroBase.Forms.Operacoes
gridDados.Rows.Add("Nível de Bateria", "", "%");
gridDados.Rows.Add("Tensão da Bateria", "", "v");
gridDados.Rows.Add("Corrente da Bateria", "", "A");
gridDados.Rows.Add("Tempo Estimado Restante", "", "Min");
gridDados.Rows.Add("Tempo Estimado Restante", "", "Hrs");
gridDados.Rows.Add("Distancia Estimada Restante", "", "m");
gridDados.Rows.Add("Barramento 3V", "", "V");
gridDados.Rows.Add("Barramento 3V", "", "mA");
gridDados.Rows.Add("Barramento 5V", "", "V");
@ -481,6 +482,10 @@ namespace AgroBase.Forms.Operacoes
gridDados.Rows.Add("Barramento 24V", "", "mA");
gridDados.Rows.Add("Nível do Reservatório", "", "%");
gridDados.Rows.Add("Volume do Reservatório", "", "L");
gridDados.Rows.Add("Litro por Metro", "", "L");
gridDados.Rows.Add("Litro por Minuto", "", "L");
gridDados.Rows.Add("Tempo Estimado Restante", "", "Hrs");
gridDados.Rows.Add("Distancia Estimada Restante", "", "m");
gridDados.Rows.Add("Pressão da Linha", "", "psi");
gridDados.Rows.Add("Potência na Bomba", "", "%");
gridDados.Rows.Add("Vazão Instantanea", "", "mL/s");
@ -509,52 +514,51 @@ namespace AgroBase.Forms.Operacoes
private void AtualizarInformacoesGerais()
{
var _SensoresCorrente = Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.Where(x => x.Componente == S_Code.sCOR);
var AB3V = _SensoresCorrente.FirstOrDefault(x => x.ID == "AB3V");
var AB5V = _SensoresCorrente.FirstOrDefault(x => x.ID == "AB5V");
var AB7V2 = _SensoresCorrente.FirstOrDefault(x => x.ID == "AB7V2");
var AB12V = _SensoresCorrente.FirstOrDefault(x => x.ID == "AB12V");
var AB19V = _SensoresCorrente.FirstOrDefault(x => x.ID == "AB19V");
var AB24V = _SensoresCorrente.FirstOrDefault(x => x.ID == "AB24V");
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura;
var _Barramentos = _Sensoriamento.Bateria.Barramentos;
gridDados.Rows[0].Cells[1].Value = _Sensoriamento.TempoDecorrido.ToString("HH:mm:ss");
gridDados.Rows[1].Cells[1].Value = _Sensoriamento.Movimentacao.TempoMovimento.ToString("HH:mm:ss");
gridDados.Rows[2].Cells[1].Value = (_Sensoriamento.Movimentacao.VelocidadeMedia * 3.6).ToString("0.00");
gridDados.Rows[3].Cells[1].Value = _Sensoriamento.Trajetoria.DistanciaPercorrida.ToString("0.00");
gridDados.Rows[4].Cells[1].Value = (_Sensoriamento.Bateria.PorcentagemBateria.ToString("00.00"));
gridDados.Rows[4].Cells[1].Value = (_Sensoriamento.Bateria.PercentualBateria.ToString("0.00"));
gridDados.Rows[5].Cells[1].Value = (_Sensoriamento.Bateria.TensaoInstantanea.ToString("0.00"));
gridDados.Rows[6].Cells[1].Value = (_Sensoriamento.Bateria.CorrenteInstantanea.ToString("0.00"));
gridDados.Rows[7].Cells[1].Value = (_Sensoriamento.Bateria.TempoEstimadoRestanteMinutos.ToString("0.00"));
gridDados.Rows[8].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[9].Cells[1].Value = (AB3V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[10].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[11].Cells[1].Value = (AB5V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[12].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[13].Cells[1].Value = (AB7V2.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[14].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[15].Cells[1].Value = (AB12V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[16].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[17].Cells[1].Value = (AB19V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[18].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[19].Cells[1].Value = (AB24V.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente).atual.valor ?? 0).ToString("0.00");
gridDados.Rows[20].Cells[1].Value = _Sensoriamento.Atuador.PercentualReservatorio.ToString("00.00");
gridDados.Rows[21].Cells[1].Value = _Sensoriamento.Atuador.VolumeReservatorio.ToString("0.000");
gridDados.Rows[22].Cells[1].Value = _Sensoriamento.Atuador.PressaoLinha.ToString("0.00");
gridDados.Rows[23].Cells[1].Value = _Sensoriamento.Atuador.LeituraPotenciaBomba.ToString("0.00");
gridDados.Rows[24].Cells[1].Value = _Sensoriamento.Atuador.VazaoInstantanea.ToString("0.00");
gridDados.Rows[25].Cells[1].Value = _Sensoriamento.Atuador.VazaoMedia.ToString("0.00");
gridDados.Rows[26].Cells[1].Value = _Sensoriamento.Atuador.VolumeVazaoMl.ToString("0.00");
gridDados.Rows[27].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraEsquerda.ToString("0.00");
gridDados.Rows[28].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraDireita.ToString("0.00");
gridDados.Rows[29].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraAltura.ToString("0.00");
gridDados.Rows[30].Cells[1].Value = "";
gridDados.Rows[31].Cells[1].Value = (_Sensoriamento.IMU.InclinacaoLateral).ToString("0.00");
gridDados.Rows[32].Cells[1].Value = (_Sensoriamento.IMU.InclinacaoFrontal).ToString("0.00");
gridDados.Rows[33].Cells[1].Value = (_Sensoriamento.IMU.Rotacao).ToString("0.00");
gridDados.Rows[34].Cells[1].Value = (_Sensoriamento.IMU.Temperatura).ToString("0.00");
gridDados.Rows[35].Cells[1].Value = (_Sensoriamento.IMU.Pressao).ToString("0.00");
gridDados.Rows[36].Cells[1].Value = (_Sensoriamento.IMU.Altitude).ToString("0.00");
gridDados.Rows[7].Cells[1].Value = TimeSpan.FromMinutes(_Sensoriamento.Bateria.TempoEstimadoRestanteMinutos).ToString(@"hh\:mm\:ss");
gridDados.Rows[8].Cells[1].Value = (_Sensoriamento.Bateria.DistanciaEstimadaRestanteMetros.ToString("0.00"));
gridDados.Rows[9].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB3V").Tensao).ToString("0.00");
gridDados.Rows[10].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB3V").Corrente).ToString("0.00");
gridDados.Rows[11].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB5V").Tensao).ToString("0.00");
gridDados.Rows[12].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB5V").Corrente).ToString("0.00");
gridDados.Rows[13].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB7V2").Tensao).ToString("0.00");
gridDados.Rows[14].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB7V2").Corrente).ToString("0.00");
gridDados.Rows[15].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB12V").Tensao).ToString("0.00");
gridDados.Rows[16].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB12V").Corrente).ToString("0.00");
gridDados.Rows[17].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB19V").Tensao).ToString("0.00");
gridDados.Rows[18].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB19V").Corrente).ToString("0.00");
gridDados.Rows[19].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB24V").Tensao).ToString("0.00");
gridDados.Rows[20].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB24V").Corrente).ToString("0.00");
gridDados.Rows[21].Cells[1].Value = _Sensoriamento.Atuador.PercentualReservatorio.ToString("0.00");
gridDados.Rows[22].Cells[1].Value = _Sensoriamento.Atuador.VolumeReservatorio.ToString("0.000");
gridDados.Rows[23].Cells[1].Value = _Sensoriamento.Atuador.LPorMetro.ToString("0.000");
gridDados.Rows[24].Cells[1].Value = _Sensoriamento.Atuador.LPorMinuto.ToString("0.000");
gridDados.Rows[25].Cells[1].Value = TimeSpan.FromMinutes(_Sensoriamento.Atuador.TempoEstimadoRestanteMinutos).ToString(@"hh\:mm\:ss");
gridDados.Rows[26].Cells[1].Value = _Sensoriamento.Atuador.DistanciaEstimadaRestanteMetros.ToString("0.00");
gridDados.Rows[27].Cells[1].Value = _Sensoriamento.Atuador.PressaoLinha.ToString("0.00");
gridDados.Rows[28].Cells[1].Value = _Sensoriamento.Atuador.LeituraPotenciaBomba.ToString("0.00");
gridDados.Rows[29].Cells[1].Value = _Sensoriamento.Atuador.VazaoInstantanea.ToString("0.00");
gridDados.Rows[30].Cells[1].Value = _Sensoriamento.Atuador.VazaoMedia.ToString("0.00");
gridDados.Rows[31].Cells[1].Value = _Sensoriamento.Atuador.VolumeVazaoMl.ToString("0.00");
gridDados.Rows[32].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraEsquerda.ToString("0.00");
gridDados.Rows[33].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraDireita.ToString("0.00");
gridDados.Rows[34].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraAltura.ToString("0.00");
gridDados.Rows[35].Cells[1].Value = "";
gridDados.Rows[36].Cells[1].Value = (_Sensoriamento.IMU.InclinacaoLateral).ToString("0.00");
gridDados.Rows[37].Cells[1].Value = (_Sensoriamento.IMU.InclinacaoFrontal).ToString("0.00");
gridDados.Rows[38].Cells[1].Value = (_Sensoriamento.IMU.Rotacao).ToString("0.00");
gridDados.Rows[39].Cells[1].Value = (_Sensoriamento.IMU.Temperatura).ToString("0.00");
gridDados.Rows[40].Cells[1].Value = (_Sensoriamento.IMU.Pressao).ToString("0.00");
gridDados.Rows[41].Cells[1].Value = (_Sensoriamento.IMU.Altitude).ToString("0.00");
}
#endregion

View File

@ -91,13 +91,13 @@ namespace AgroBase.Forms.Operacoes
//lblErvasIdentificadas.Text = "Ervas Identificadas: " + _Sensoriamento.Atuador.QtdErvasIdentificadas.ToString("000");
lblHerbicidaAplicado.Text = "Herbicida Aplicado: " + _Sensoriamento.Atuador.HerbicidaConsumido.ToString("0.000") + " L";
lblHerbicidaPorErva.Text = "Herbicida por Erva: " + _Sensoriamento.Atuador.HerbicidaPorErva.ToString("0.000") + " mL";
lblBateriaConsumida.Text = "Bateria Consumida: " + _Sensoriamento.Bateria.BateriaConsumida.ToString("0.00") + "%";
lblBateriaConsumida.Text = "Bateria Consumida: " + _Sensoriamento.Bateria.PercentualBateriaConsumida.ToString("0.00") + "%";
FuncoesGlobais.PreencheValorProgressBar(pgbReservatorio, _Sensoriamento.Atuador.PercentualReservatorio);
lblPorcentagemReservatorio.Text = _Sensoriamento.Atuador.VolumeReservatorio.ToString("0.000") + " L " + _Sensoriamento.Atuador.PercentualReservatorio.ToString("00.00") + "%";
FuncoesGlobais.PreencheValorProgressBar(pgbBateria, _Sensoriamento.Bateria.PorcentagemBateria);
lblPorcentagemBateria.Text = _Sensoriamento.Bateria.TensaoInstantanea.ToString("0.00") + "v " + _Sensoriamento.Bateria.CorrenteInstantanea.ToString("0.00") + "A " + _Sensoriamento.Bateria.PorcentagemBateria.ToString("00.00") + "%";
FuncoesGlobais.PreencheValorProgressBar(pgbBateria, _Sensoriamento.Bateria.PercentualBateria);
lblPorcentagemBateria.Text = _Sensoriamento.Bateria.TensaoInstantanea.ToString("0.00") + "v " + _Sensoriamento.Bateria.CorrenteInstantanea.ToString("0.00") + "A " + _Sensoriamento.Bateria.PercentualBateria.ToString("00.00") + "%";
FuncoesGlobais.PreencheValorProgressBar(pgbProgresso, _Sensoriamento.Trajetoria.ProgressoTrajeto);
lblPorcentagemProgresso.Text = _Sensoriamento.Trajetoria.ProgressoTrajeto.ToString("00.00") + "%";

View File

@ -1125,14 +1125,14 @@ namespace AgroBase.Forms.Operacoes
int totalAtuacoes = 0; // Log.Atuador.ErvasIdentificadas.Sum(dict => dict.Values.Sum());
double herbicidaPorErva = Log.Atuador.HerbicidaPorErva != 0 ? Log.Atuador.HerbicidaPorErva : (herbicidaConsumido / (totalAtuacoes > 0 ? totalAtuacoes : 1));
lblPercentualBateria.Text = $"Bateria {Log.Bateria.PorcentagemBateria.ToString("0.00")}%";
FuncoesGlobais.PreencheValorProgressBar(pgbPercentualBateria, Log.Bateria.PorcentagemBateria);
lblBateriaConsumida.Text = $"Consumido {Log.Bateria.BateriaConsumida.ToString("0.00")}%";
lblPercentualBateria.Text = $"Bateria {Log.Bateria.PercentualBateria.ToString("0.00")}%";
FuncoesGlobais.PreencheValorProgressBar(pgbPercentualBateria, Log.Bateria.PercentualBateria);
lblBateriaConsumida.Text = $"Consumido {Log.Bateria.PercentualBateriaConsumida.ToString("0.00")}%";
FuncoesGlobais.PreencheValorProgressBar(pgbPercentualReservatorio, LogAtu.PercentualReservatorio);
lblPercentualReservatorio.Text = $"Reservatório {LogAtu.PercentualReservatorio.ToString("0.00")}%";
FuncoesGlobais.PreencheValorProgressBar(pgbHerbicidaConsumido, percentualHerbicidaConsumido);
lblHerbicidaConsumido.Text = $"Consumido {herbicidaConsumido.ToString("0.00")} ml";
FuncoesGlobais.PreencheValorProgressBar(pgbBateriaConsumida, Log.Bateria.BateriaConsumida);
FuncoesGlobais.PreencheValorProgressBar(pgbBateriaConsumida, Log.Bateria.PercentualBateriaConsumida);
txtTempoMovimento.Text = FuncoesGlobais.ConverterSegundosParaHHmmss((int)Log.Movimentacao.TempoMovimentoSegs);
txtStatusOperacao.Text = Log.StatusOperacao.ToString();
txtStatusCarro.Text = Log.Trajetoria.StatusCarro.ToString();

View File

@ -25,19 +25,12 @@ namespace AgroBase.Models.Modules
}
}
public bool RequisitarDados { get; set; } = true;
public static int PingsConsiderarConexao { get; set; } = 5;
public static int TempoLimiteConexao
{
get
{
return PingsConsiderarConexao * (Variaveis.OperacaoEmAndamento?.DispSen?._TaxaAmostragem ?? 1000);
}
}
public static int TempoLimiteConexao { get; set; } = 8000;
public bool Conectado
{
get
{
return DadosLeitura.UltimoComandoRespondido.AddMilliseconds(PingsConsiderarConexao * _TaxaAmostragem) > DateTime.Now;
return DadosLeitura.Conectado;
}
}
public bool ConexaoAtiva
@ -97,32 +90,7 @@ namespace AgroBase.Models.Modules
}
}
#region MASSA
public double _MassaRef { get; set; } = 0.8;
public double _MassaLeituraRef { get; set; } = 40876.37;
public double _MassaLeituraExtra { get; set; } = 1895800; // 2015000.0;
public double MassaReservatorio
{
get
{
return Sensores.FirstOrDefault(x => x.Componente == S_Code.sMAS)?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Massa)?.atual?.valor ?? 0;
}
}
public double VolumeReservatorio
{
get
{
return MassaReservatorio / DensidadeHerbicida;
}
}
public double PercentualReservatorio
{
get
{
return VolumeReservatorio / (Variaveis.OperacaoEmAndamento.Parametros.CapacidadeReservatorio ?? VariaveisEquipamento.CapacidadeReservatorio) * 100.0;
}
}
#endregion
public HerbicideCounterService ContadorCarga = new HerbicideCounterService(VariaveisEquipamento.CapacidadeReservatorio, VariaveisEquipamento.DensidadeHerbicida);
#region VAZAO
public double VolumeVazaoAferido { get; set; } = 0;
@ -976,12 +944,12 @@ namespace AgroBase.Models.Modules
bool leituraEstado = (bomba.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0) > 0;
// Desliga a bomba caso esteja ligada e o nivel de herbicida caiu
if (PercentualReservatorio < VariaveisEquipamento.PercentualReservatorioMin && leituraEstado == true)
if (ContadorCarga.PercentualAtual < VariaveisEquipamento.PercentualReservatorioMin && leituraEstado == true)
{
bomba.ComandoAtuar = false;
}
// Religa a bomba caso esteja desligada, o nivel de herbicida esta estavel e o pulverizador automatico esta ligado
else if (PercentualReservatorio >= VariaveisEquipamento.PercentualReservatorioMin && leituraEstado == false && Variaveis.OperacaoEmAndamento.Parametros.Controle.PulverizadorAutomatico)
else if (ContadorCarga.PercentualAtual >= VariaveisEquipamento.PercentualReservatorioMin && leituraEstado == false && Variaveis.OperacaoEmAndamento.Parametros.Controle.PulverizadorAutomatico)
{
bomba.ComandoAtuar = true;
}
@ -1030,7 +998,7 @@ namespace AgroBase.Models.Modules
calAtu[Bomba.ID] = false;
// Sem herbicida no reservatorio, bomba nao precisa ligar
if (!Bomba.Inicializado || PercentualReservatorio < VariaveisEquipamento.PercentualReservatorioMin)
if (!Bomba.Inicializado || ContadorCarga.PercentualAtual < VariaveisEquipamento.PercentualReservatorioMin)
{
break;
}

View File

@ -28,20 +28,12 @@ namespace AgroBase.Models.Modules
}
}
public bool RequisitarDados { get; set; } = true;
public static int PingsConsiderarConexao { get; set; } = 5;
public static int TempoLimiteConexao
{
get
{
return PingsConsiderarConexao * (Variaveis.OperacaoEmAndamento?.DispSen?._TaxaAmostragem ?? 1000);
}
}
public static int TempoLimiteConexao { get; set; } = 8000;
public bool Conectado
{
get
{
//return DadosLeitura.UltimoComandoRespondido.AddMilliseconds(PingsConsiderarConexao * _TaxaAmostragem) > DateTime.Now;
return DadosLeitura.UltimoComandoRespondido.AddMilliseconds(5000) > DateTime.Now;
return DadosLeitura.Conectado;
}
}
public bool ConexaoAtiva
@ -2284,9 +2276,6 @@ namespace AgroBase.Models.Modules
private void AtualizaComponentesIniciados()
{
//AtualizarStatusComponentes();
//return;
DateTime Agora = DateTime.Now;
bool modConectado = DadosLeitura.UltimoComandoRespondido.AddMilliseconds(TempoLimiteConexao) > Agora;
if (!modConectado && DadosLeitura.Conectado)

View File

@ -111,7 +111,9 @@ namespace AgroBase.Models
var mod_ant = saudeAnterior.FirstOrDefault(x => x.modulo == mod.modulo);
if (mod.status != mod_ant?.status)
{
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.InserirLog(mod.modulo, mod.status, mod.saude, string.Join("; ", mod.motivos), condicoes: string.Join("; ", mod.condicoes_operacionais.Select(x => x.descricao)));
string msg = mod.motivos.Any() ? string.Join("; ", mod.motivos) : $"{mod.status} ({mod.saude:0}%)";
string msg2 = mod.condicoes_operacionais.Any() ? string.Join("; ", mod.condicoes_operacionais.Select(x => x.descricao)) : null;
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.InserirLog(mod.modulo, mod.status, mod.saude, msg, condicoes: msg2);
}
if (mod.saude_individual.Any())
{
@ -120,7 +122,9 @@ namespace AgroBase.Models
var ind_ant = saudeAnterior.FirstOrDefault(x => x.saude_individual.Any(y => y.id == ind.id))?.saude_individual?.FirstOrDefault(x => x.id == ind.id);
if (ind.status != ind_ant?.status)
{
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.InserirLog(mod.modulo, ind.status, ind.saude, string.Join("; ", ind.motivos), condicoes: string.Join("; ", ind.condicoes_operacionais.Select(x => x.descricao)), id: ind.id);
string msg = ind.motivos.Any() ? string.Join("; ", ind.motivos) : $"{ind.status} ({ind.saude:0}%)";
string msg2 = ind.condicoes_operacionais.Any() ? string.Join("; ", ind.condicoes_operacionais.Select(x => x.descricao)) : null;
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.InserirLog(mod.modulo, ind.status, ind.saude, msg, condicoes: msg2, id: ind.label);
}
}
}
@ -1785,9 +1789,9 @@ namespace AgroBase.Models
Inicializado = Variaveis.OperacaoEmAndamento.DispAtu.Dados.ConexaoAtiva,
QualidadeWifi = Variaveis.OperacaoEmAndamento.DispAtu.Dados.DadosLeitura.QualidadeWifi,
LatenciaLoop = Variaveis.OperacaoEmAndamento.DispAtu.Dados.DadosLeitura.LatenciaLoop,
MassaReservatorio = Variaveis.OperacaoEmAndamento.DispAtu.Dados.MassaReservatorio,
PercentualReservatorio = Variaveis.OperacaoEmAndamento.DispAtu.Dados.PercentualReservatorio,
VolumeReservatorio = Variaveis.OperacaoEmAndamento.DispAtu.Dados.VolumeReservatorio,
MassaReservatorio = Variaveis.OperacaoEmAndamento.DispAtu.Dados.ContadorCarga.MassaAtual_Kg,
PercentualReservatorio = Variaveis.OperacaoEmAndamento.DispAtu.Dados.ContadorCarga.PercentualAtual,
VolumeReservatorio = Variaveis.OperacaoEmAndamento.DispAtu.Dados.ContadorCarga.VolumeAtual_L,
PressaoLinha_SP = Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha,
PressaoLinha = Variaveis.OperacaoEmAndamento.DispAtu.Dados.PressaoLinha,
PotenciaBomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombasPressurizadoras.FirstOrDefault()?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0,
@ -2310,19 +2314,15 @@ namespace AgroBase.Models
var _DispAtu = Variaveis.OperacaoEmAndamento.DispAtu;
var _DispSen = Variaveis.OperacaoEmAndamento.DispSen;
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
var _Bateria = _DispSen?.Dados?.ContadorCarga;
var _Reservatorio = _DispAtu?.Dados?.ContadorCarga;
Variaveis.OperacaoEmAndamento.DadosPerformance.AtualizarDadosPerformance();
MovimentacaoMovimentoCompensadoModel.AtualizarDados();
Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.AtualizarDadosFreio();
// Soma total de atuações para todas as ervas de todos os bicos
int totalAtuacoes = 0;
// Evitar divisão por zero
double HerbicidaPorErva = totalAtuacoes > 0
? _DispAtu.Dados.VolumeVazaoML / totalAtuacoes
: 0.0;
_DispMvd?.Dados?.AtualizarDadosFreio();
_Bateria?.AtualizarConsumo(_DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0);
_Reservatorio?.AtualizarConsumo(_DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0, Variaveis.OperacaoEmAndamento.TempoDecorridoSegs);
var sIMU = LivoxManagerProcess.DadosLeitura.imu;
var dadosIMU = sIMU != null ? new OperacaoSensoriamentoLogImuModel()
@ -2340,11 +2340,11 @@ namespace AgroBase.Models
CapacidadeReservatorio = VariaveisEquipamento.CapacidadeReservatorio,
HerbicidaConsumido = _DispAtu.Dados.VolumeVazaoML,
PercentualErvasTerreno = _DispAtu.Dados.PercentualErvasTerreno,
HerbicidaPorErva = HerbicidaPorErva,
HerbicidaPorErva = _Reservatorio.HerbicidaPorAtuacao,
ErvasNoRadar = WeedWorkerService.DadosLeitura?.Analise?.ervas_no_radar ?? false,
PercentualErvasNoRadar = WeedWorkerService.DadosLeitura?.Analise?.estatisticas?.erva?.ema_global ?? 0,
PercentualReservatorio = FuncoesMatematicas.Clamp(_DispAtu.Dados.PercentualReservatorio, 0, 100),
VolumeReservatorio = _DispAtu.Dados.VolumeReservatorio,
PercentualReservatorio = _Reservatorio.PercentualAtual,
VolumeReservatorio = _Reservatorio.VolumeAtual_L,
PressaoLinha = _DispAtu.Dados.PressaoLinha,
VazaoInstantanea = _DispAtu.Dados.VazaoFluxoMLpSInstantanea,
VazaoMedia = _DispAtu.Dados.VazaoFluxoMLpSMedia,
@ -2357,7 +2357,11 @@ namespace AgroBase.Models
AnguloBarraEsquerda = _DispAtu.Dados.AnguloBarraEsquerda,
AnguloBarraDireita = _DispAtu.Dados.AnguloBarraDireita,
AnguloBarraAltura = _DispAtu.Dados.AnguloBarraAltura,
UltimoComandoRespondido = _DispAtu.Dados.DadosLeitura?.UltimoComandoRespondido ?? DateTime.MinValue
UltimoComandoRespondido = _DispAtu.Dados.DadosLeitura?.UltimoComandoRespondido ?? DateTime.MinValue,
LPorMetro = _Reservatorio.LPorMetro,
LPorMinuto = _Reservatorio.LPorMinuto,
TempoEstimadoRestanteMinutos = _Reservatorio.TempoEstimadoMinutosPulverizando,
DistanciaEstimadaRestanteMetros = _Reservatorio.DistanciaEstimadaRestantePulverizando_m,
} : new OperacaoSensoriamentoLogAtuModel();
var dadosMovimentacao = _DispMvd != null ? new OperacaoSensoriamentoLogMovModel()
@ -2410,18 +2414,19 @@ namespace AgroBase.Models
}).ToList()
} : new OperacaoSensoriamentoLogDirModel();
var S36V = _DispSen?.Dados?.Sensores?.FirstOrDefault(x => x.ID == "AB36V");
var dadosBateria = S36V != null ? new OperacaoSensoriamentoLogBateriaModel()
var dadosBateria = _Bateria != null ? new OperacaoSensoriamentoLogBateriaModel()
{
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,
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,
Iniciado = _Bateria.Iniciado,
_dt = _Bateria._dt,
PercentualBateria = _Bateria.PercentualBateria,
PercentualBateriaConsumida = _Bateria.PercentualConsumido,
TempoEstimadoRestanteMinutos = _Bateria.TempoEstimadoMinutos,
CorrenteInstantanea = _Bateria.CorrenteInstantanea,
TensaoInstantanea = _Bateria.TensaoInstantanea,
PotenciaInstantanea = _Bateria.PotenciaInstantanea,
EnergiaConsumida_Wh = _Bateria.EnergiaConsumida_Wh,
WhPorMetro = _Bateria.WhPorMetro,
DistanciaEstimadaRestanteMetros = _Bateria.DistanciaEstimadaRestante_m,
Barramentos = _DispSen?.Dados?.Sensores?.Where(x => x.Componente == S_Code.sCOR)?.Select(x => new OperacaoSensoriamentoLogBateriaBarramentoModel()
{
ID = x.ID,
@ -2529,7 +2534,6 @@ namespace AgroBase.Models
};
Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura = dadosAtualizados;
Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ContadorCarga?.AtualizarConsumo();
}
public OperacaoSensoriamentoLogModel Clone(bool comSonar = false)
@ -2631,6 +2635,10 @@ namespace AgroBase.Models
public double AnguloBarraEsquerda { get; set; }
public double AnguloBarraDireita { get; set; }
public double AnguloBarraAltura { get; set; }
public double LPorMetro { get; set; }
public double LPorMinuto { get; set; }
public double TempoEstimadoRestanteMinutos { get; set; }
public double DistanciaEstimadaRestanteMetros { get; set; }
public Dictionary<string, bool> Iniciados { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
@ -2659,7 +2667,11 @@ namespace AgroBase.Models
AnguloBarraDireita = AnguloBarraDireita,
AnguloBarraAltura = AnguloBarraAltura,
Iniciados = new Dictionary<string, bool>(Iniciados ?? new Dictionary<string, bool>()),
UltimoComandoRespondido = UltimoComandoRespondido
UltimoComandoRespondido = UltimoComandoRespondido,
LPorMetro = LPorMetro,
LPorMinuto = LPorMinuto,
TempoEstimadoRestanteMinutos = TempoEstimadoRestanteMinutos,
DistanciaEstimadaRestanteMetros = DistanciaEstimadaRestanteMetros
};
}
}
@ -2737,27 +2749,32 @@ namespace AgroBase.Models
{
public bool Iniciado { get; set; }
public double _dt { get; set; }
public double PorcentagemBateria { get; set; }
public double BateriaConsumida { get; set; }
public double PercentualBateria { get; set; }
public double PercentualBateriaConsumida { get; set; }
public double CorrenteInstantanea { get; set; }
public double TensaoInstantanea { get; set; }
public double PotenciaInstantanea { get; set; }
public double PotenciaAcumulada { get; set; }
public double EnergiaConsumida_Wh { get; set; }
public double WhPorMetro { get; set; }
public double TempoEstimadoRestanteMinutos { get; set; }
public double DistanciaEstimadaRestanteMetros { get; set; }
public List<OperacaoSensoriamentoLogBateriaBarramentoModel> Barramentos { get; set; }
public OperacaoSensoriamentoLogBateriaModel Clone()
{
return new OperacaoSensoriamentoLogBateriaModel()
{
Iniciado = Iniciado,
_dt = _dt,
BateriaConsumida = BateriaConsumida,
PorcentagemBateria = PorcentagemBateria,
PercentualBateriaConsumida = PercentualBateriaConsumida,
PercentualBateria = PercentualBateria,
CorrenteInstantanea = CorrenteInstantanea,
TensaoInstantanea = TensaoInstantanea,
PotenciaInstantanea = PotenciaInstantanea,
PotenciaAcumulada = PotenciaAcumulada,
EnergiaConsumida_Wh = EnergiaConsumida_Wh,
WhPorMetro = WhPorMetro,
TempoEstimadoRestanteMinutos = TempoEstimadoRestanteMinutos,
DistanciaEstimadaRestanteMetros = DistanciaEstimadaRestanteMetros,
Barramentos = new List<OperacaoSensoriamentoLogBateriaBarramentoModel>(Barramentos ?? new List<OperacaoSensoriamentoLogBateriaBarramentoModel>())
};
}

View File

@ -232,6 +232,7 @@ namespace AgroBase.Models
public static double AlturaBarraPulverizadoraCm { get; set; } = 80;
public static double ComprimentoBarraPulverizadoraCm { get; set; } = 103.7;
public static double DistanciaEntreBicosCm { get; set; } = 50;
public static double DensidadeHerbicida { get; set; } = 1.0;
public static double CapacidadeReservatorio { get; set; } = 30;
public static double ReducaoDirecional { get; set; } = 20.0;
public static int RPM_Min_Roda { get; set; } = 15;

View File

@ -1,5 +1,4 @@
using AgroBase.Models;
using Emgu.CV.Structure;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@ -591,7 +590,7 @@ namespace AgroBase.Services
return;
}
if (IsConnected && (((Agora - _ultimoTx).TotalSeconds > 2 && (Agora - _ultimoRx).TotalSeconds > 2) || _precisaReabrir))
if (IsConnected && ((((Agora - _ultimoTx).TotalSeconds > 1 && (Agora - _ultimoRx).TotalSeconds > 1) || (Agora - _ultimoRx).TotalSeconds > 5) || _precisaReabrir))
{
ErrosCriticos++;
_ultimoErroCritico = Agora;

View File

@ -1,4 +1,5 @@
using AgroBase.Models;
using AgroBase.Models.Modules;
using System;
using System.Collections.Generic;
using System.Linq;
@ -17,12 +18,19 @@ namespace AgroBase.Services
CargaAtual = CargaMaxima - Consumido;
//double consumoW = (Variaveis.OperacaoEmAndamento.DispSen?.Dados?.BateriaCargaConsumidaWatts ?? 0);
//ConsumidoWatts = consumoW;
// Autonomia
MargemSegurancaAutonomia = 0.30; // 30% de margem padrão
EnergiaConsumida_Wh = 0;
_energiaConsumidaAnterior_Wh = 0;
_distanciaTotalMetrosAnterior = 0;
}
public double TempoEstimadoMinutos { get; private set; }
private const int BufferSize = 30; // últimos 3 segundos se chamada a cada 100ms
private readonly Queue<double> _historicoCorrente = new Queue<double>();
public bool Iniciado { get; private set; }
private double CargaMaxima { get; set; }
private double CargaAtual { get; set; }
public double CargaAtualAmp
@ -58,49 +66,88 @@ namespace AgroBase.Services
{
get
{
return (Consumido / CargaMaxima) * 100;
double calc = (Consumido / CargaMaxima) * 100;
calc = FuncoesMatematicas.Clamp(calc, 0, 100);
return calc;
}
}
public double PercentualBateria { get; private set; }
public double ConsumidoWatts { get; set; }
public void AtualizarConsumo()
public double EnergiaConsumida_Wh { get; set; }
public double _dt { get; private set; }
public double CorrenteInstantanea { get; private set; }
public double TensaoInstantanea { get; private set; }
public double PotenciaInstantanea { get; private set; }
public double WhRestante
{
var Bateria = Variaveis.OperacaoEmAndamento.Parametros.DadosLeitura.Bateria;
if (!Bateria.Iniciado)
get
{
return;
// Exemplo: usar uma tensão nominal do pack
double tensaoNominal = VariaveisEquipamento.TensaoMaximaBateria;
return CargaAtualAmp * tensaoNominal; // Ah * V = Wh
}
}
PercentualBateria = Math.Round(FuncoesMatematicas.Map(Bateria.TensaoInstantanea, VariaveisEquipamento.TensaoMinimaBateria, VariaveisEquipamento.TensaoMaximaBateria, 0.0, 100.0), 2);
public double WhPorMetro { get; private set; }
public double DistanciaMaximaTeorica_m { get; private set; }
public double DistanciaMaximaSegura_m { get; private set; }
public double DistanciaEstimadaRestante_m { get; private set; }
public double MargemSegurancaAutonomia { get; set; }
private const double JanelaAutonomia_m = 50.0; // metros analisados na média
private readonly Queue<double> _historicoDeltaDist_m = new Queue<double>();
private readonly Queue<double> _historicoDeltaWh = new Queue<double>();
private double _somaDistanciaJanela_m;
private double _somaEnergiaJanela_Wh;
private double _distanciaTotalMetrosAnterior;
private double _energiaConsumidaAnterior_Wh;
public void AtualizarConsumo(double distanciaTotalMetrosAtual)
{
var Sensor = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.Sensores?.FirstOrDefault(x => x.ID == "AB36V");
Iniciado = Sensor?.Inicializado ?? false;
if (!Iniciado)
return;
_dt = Sensor.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.dt ?? 0;
TensaoInstantanea = Sensor.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Tensao)?.atual?.valor ?? 0;
CorrenteInstantanea = (Sensor.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Corrente)?.atual?.valor ?? 0) / 1000.0;
PotenciaInstantanea = Sensor.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Potencia)?.atual?.valor ?? 0;
PercentualBateria = Math.Round(FuncoesMatematicas.Map(TensaoInstantanea, VariaveisEquipamento.TensaoMinimaBateria, VariaveisEquipamento.TensaoMaximaBateria, 0.0, 100.0), 2);
PercentualBateria = FuncoesMatematicas.Clamp(PercentualBateria, 0, 100);
// Verifique se as datas são válidas (não MinValue, MaxValue ou valores anômalos)
if (Bateria._dt == 0 || Bateria._dt > 10)
if (_dt == 0 || _dt > 10)
{
Console.WriteLine("Erro: Leitura inválida detectada.");
Console.WriteLine("[COULOMB COUNTER] Leitura inválida detectada.");
return;
}
// Calcule os coulombs e atualize os valores
double coulombsLeitura = Bateria.CorrenteInstantanea * Bateria._dt;
// --- COULOMB COUNTING (igual ao que já tinha, só com pequenos cuidados) ---
double deltaCoulombs = CorrenteInstantanea * _dt; // A * s
Consumido += coulombsLeitura;
CargaAtual -= coulombsLeitura;
Consumido += deltaCoulombs;
if (Consumido < 0) Consumido = 0;
if (Consumido > CargaMaxima) Consumido = CargaMaxima;
ConsumidoWatts += Bateria.PotenciaAcumulada - ConsumidoWatts;
CargaAtual = CargaMaxima - Consumido;
// Armazena a corrente instantânea
_historicoCorrente.Enqueue(Bateria.CorrenteInstantanea);
// --- ENERGIA ACUMULADA (Wh) ---
double potenciaInst_W = TensaoInstantanea * CorrenteInstantanea; // W
double deltaEnergia_Wh = potenciaInst_W * _dt / 3600.0; // Wh
EnergiaConsumida_Wh += deltaEnergia_Wh;
// --- HISTÓRICO P/ TEMPO ESTIMADO ---
_historicoCorrente.Enqueue(CorrenteInstantanea);
if (_historicoCorrente.Count > BufferSize)
_historicoCorrente.Dequeue();
// Calcular corrente média (em A)
double correnteMedia = _historicoCorrente.Average();
// Verifica se a tensão está acima da mínima
if (Bateria.TensaoInstantanea > VariaveisEquipamento.TensaoMinimaBateria && correnteMedia > 0)
if (TensaoInstantanea > VariaveisEquipamento.TensaoMinimaBateria && correnteMedia > 0)
{
TempoEstimadoMinutos = (CargaAtualAmp / correnteMedia) * 60;
}
@ -108,12 +155,104 @@ namespace AgroBase.Services
{
TempoEstimadoMinutos = 0;
}
AtualizarAutonomia(distanciaTotalMetrosAtual);
}
public void AtualizarValorConsumido(double _consumo_Amp)
/// <summary>
/// Atualiza os cálculos de autonomia em função da distância total percorrida.
///
/// IMPORTANTE:
/// - distanciaTotalMetrosAtual deve ser o "total rodado" acumulado em metros (odometria / MPC / motores).
/// - Aqui dentro calculamos o delta de distância e o delta de energia desde a última chamada.
/// </summary>
/// <param name="distanciaTotalMetrosAtual">Distância total percorrida até o momento (em metros).</param>
private void AtualizarAutonomia(double distanciaTotalMetrosAtual)
{
double coulombsConsumidos = _consumo_Amp * 3600;
Consumido = coulombsConsumidos;
if (!Iniciado)
return;
// Cálculo dos deltas
double deltaDist_m = distanciaTotalMetrosAtual - _distanciaTotalMetrosAnterior;
double deltaWh = EnergiaConsumida_Wh - _energiaConsumidaAnterior_Wh;
// Atualiza referências para próxima chamada
_distanciaTotalMetrosAnterior = distanciaTotalMetrosAtual;
_energiaConsumidaAnterior_Wh = EnergiaConsumida_Wh;
// Ignora leituras inválidas ou regressões
if (deltaDist_m <= 0 || deltaWh < 0)
return;
// Alimenta a janela móvel
_historicoDeltaDist_m.Enqueue(deltaDist_m);
_historicoDeltaWh.Enqueue(deltaWh);
_somaDistanciaJanela_m += deltaDist_m;
_somaEnergiaJanela_Wh += deltaWh;
// Mantém a janela com no máximo JanelaAutonomia_m metros
while (_somaDistanciaJanela_m > JanelaAutonomia_m && _historicoDeltaDist_m.Count > 0)
{
double dOld = _historicoDeltaDist_m.Dequeue();
double whOld = _historicoDeltaWh.Dequeue();
_somaDistanciaJanela_m -= dOld;
_somaEnergiaJanela_Wh -= whOld;
}
// Calcula Wh/m médio da janela
if (_somaDistanciaJanela_m > 0 && _somaEnergiaJanela_Wh > 0)
{
WhPorMetro = _somaEnergiaJanela_Wh / _somaDistanciaJanela_m;
}
else
{
WhPorMetro = 0;
}
// Calcula distâncias máxima teórica e segura
if (WhPorMetro > 0 && WhRestante > 0)
{
DistanciaMaximaTeorica_m = WhRestante / WhPorMetro;
double margem = FuncoesMatematicas.Clamp(MargemSegurancaAutonomia, 0.0, 0.9);
DistanciaMaximaSegura_m = DistanciaMaximaTeorica_m * (1.0 - margem);
if (DistanciaMaximaSegura_m < 0)
DistanciaMaximaSegura_m = 0;
}
else
{
DistanciaMaximaTeorica_m = 0;
DistanciaMaximaSegura_m = 0;
}
// Distância estimada restante = distância segura
DistanciaEstimadaRestante_m = DistanciaMaximaSegura_m;
}
/// <summary>
/// Permite restaurar o valor consumido (em Ah) de um log salvo, por exemplo.
/// Atualiza também CargaAtual.
/// </summary>
public void AtualizarValorConsumido(double _consumo_Ah)
{
double coulombsConsumidos = _consumo_Ah * 3600;
Consumido = FuncoesMatematicas.Clamp(coulombsConsumidos, 0, CargaMaxima);
CargaAtual = CargaMaxima - Consumido;
}
/// <summary>
/// Helper para o Manager/Health: indica se, com a situação atual,
/// o robô consegue percorrer uma certa distância em metros.
/// </summary>
public bool ConseguePercorrer(double distanciaRequerida_m)
{
if (distanciaRequerida_m <= 0)
return true;
return DistanciaMaximaSegura_m >= distanciaRequerida_m;
}
}
}

View File

@ -0,0 +1,325 @@
using AgroBase.Models;
using AgroBase.Models.Modules;
using System.Collections.Generic;
using System.Linq;
using static AgroBase.Models.Enums;
namespace AgroBase.Services
{
public class HerbicideCounterService
{
public HerbicideCounterService(double capacidadeLitros, double densidadeProduto)
{
CapacidadeLitros = capacidadeLitros;
VolumeAtual_L = 0;
VolumeConsumido_L = 0;
DensidadeProduto = densidadeProduto;
MargemSegurancaAutonomia = 0.30; // 30% por padrão
}
public bool Iniciado { get; private set; }
// ---------- CONFIGURAÇÕES / ESTADO BÁSICO ----------
/// <summary>
/// Capacidade máxima do reservatório em litros.
/// </summary>
public double CapacidadeLitros { get; }
/// <summary>
/// Densidade do produto.
/// </summary>
public double DensidadeProduto { get; }
/// <summary>
/// Massa atual lida no reservatório (Kg).
/// </summary>
public double MassaAtual_Kg { get; private set; }
/// <summary>
/// Volume atual estimado no reservatório (L).
/// </summary>
public double VolumeAtual_L { get; private set; }
/// <summary>
/// Volume total consumido desde o início (L).
/// </summary>
public double VolumeConsumido_L { get; private set; }
public double PercentualAtual
{
get
{
if (CapacidadeLitros <= 0) return 0;
var p = (VolumeAtual_L / CapacidadeLitros) * 100.0;
return FuncoesMatematicas.Clamp(p, 0, 100);
}
}
public double PercentualConsumido
{
get
{
return 100.0 - PercentualAtual;
}
}
public double HerbicidaPorAtuacao { get; private set; }
/// <summary>
/// Margem de segurança para estimativa (0.30 = 30%).
/// </summary>
public double MargemSegurancaAutonomia { get; set; }
// ---------- AUTONOMIA EM METROS (L/m) ----------
/// <summary>
/// Consumo médio de herbicida por metro pulverizado (L/m),
/// calculado numa janela móvel de distância.
/// </summary>
public double LPorMetro { get; private set; }
/// <summary>
/// Distância máxima teórica que ainda pode ser pulverizada (sem margem), em metros.
/// </summary>
public double DistanciaMaximaTeorica_m { get; private set; }
/// <summary>
/// Distância máxima segura que ainda pode ser pulverizada (com margem), em metros.
/// </summary>
public double DistanciaMaximaSegura_m { get; private set; }
/// <summary>
/// Alias mais descritivo para uso direto pelo Manager.
/// </summary>
public double DistanciaEstimadaRestantePulverizando_m => DistanciaMaximaSegura_m;
// ---------- AUTONOMIA EM TEMPO (L/min) ----------
/// <summary>
/// Consumo médio de herbicida por minuto (L/min) durante pulverização.
/// </summary>
public double LPorMinuto { get; private set; }
/// <summary>
/// Tempo estimado restante pulverizando, em minutos.
/// </summary>
public double TempoEstimadoMinutosPulverizando { get; private set; }
// ---------- JANELAS DE MÉDIA MÓVEL ----------
// Distância: vamos usar uma janela de ~50 m (mesma ideia da bateria)
private const double JanelaAutonomia_m = 50.0;
// Tempo: janela de ~60 s pulverizando
private const double JanelaTempo_s = 60.0;
private readonly Queue<(double deltaDist_m, double deltaVol_L)> _janelaDist = new Queue<(double deltaDist_m, double deltaVol_L)>();
private readonly Queue<(double deltaTempo_s, double deltaVol_L)> _janelaTempo = new Queue<(double deltaTempo_s, double deltaVol_L)>();
private double _somaDistanciaJanela_m;
private double _somaVolumeDistJanela_L;
private double _somaTempoJanela_s;
private double _somaVolumeTempoJanela_L;
// Valores anteriores para cálculo de deltas
private double _volumeAnterior_L;
private double _distanciaTotalAnterior_m;
private double _tempoTotalAnterior_s;
private bool _inicializado;
/// <summary>
/// Atualiza o estado do sistema de herbicida.
///
/// Chamar periodicamente com:
/// - volumeMedido_L: leitura de nível atual do reservatório (L)
/// - pulverizando: true se algum bico está ativo
/// - distanciaTotalMetrosAtual: distância total acumulada (m)
/// - tempoTotalSegundosAtual: tempo total de operação (s)
/// </summary>
public void AtualizarConsumo(double distanciaTotalMetrosAtual, double tempoTotalSegundosAtual)
{
var Sensor = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.Sensores?.FirstOrDefault(x => x.Componente == S_Code.sMAS && x.ID == "MASRS");
Iniciado = Sensor?.Inicializado ?? false;
if (!Iniciado)
return;
bool pulverizando = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores?.Any(x => x.Inicializado && (x.ValoresLeituras?.Any(y => y.funcao == FuncoesPinout.EstadoLeitura && y.atual?.valor == Estado.Ligado) ?? false)) ?? false;
double massaLida_Kg = Sensor?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Massa)?.atual?.valor ?? 0;
double volumeMedido_L = massaLida_Kg / DensidadeProduto;
int qtd_atuacoes = Variaveis.OperacaoEmAndamento.Controle?.BicosAtuados?.Sum(x => x.Atuacoes) ?? 0;
// Sanitiza volume
if (volumeMedido_L < 0) volumeMedido_L = 0;
if (volumeMedido_L > CapacidadeLitros) volumeMedido_L = CapacidadeLitros;
// Inicialização
if (!_inicializado)
{
_inicializado = true;
_volumeAnterior_L = volumeMedido_L;
_distanciaTotalAnterior_m = distanciaTotalMetrosAtual;
_tempoTotalAnterior_s = tempoTotalSegundosAtual;
MassaAtual_Kg = massaLida_Kg;
VolumeAtual_L = volumeMedido_L;
return;
}
MassaAtual_Kg = massaLida_Kg;
VolumeAtual_L = volumeMedido_L;
// --- Cálculo de deltas básicos ---
double deltaVolume_L = 0.0;
double diffVol = _volumeAnterior_L - volumeMedido_L;
// Só considera volume consumido (queda de nível) e apenas quando pulverizando
if (pulverizando && diffVol > 0)
{
deltaVolume_L = diffVol;
VolumeConsumido_L += deltaVolume_L;
}
if (qtd_atuacoes > 0)
{
HerbicidaPorAtuacao = VolumeConsumido_L / qtd_atuacoes;
}
_volumeAnterior_L = volumeMedido_L;
double deltaDist_m = distanciaTotalMetrosAtual - _distanciaTotalAnterior_m;
if (deltaDist_m < 0) deltaDist_m = 0;
_distanciaTotalAnterior_m = distanciaTotalMetrosAtual;
double deltaTempo_s = tempoTotalSegundosAtual - _tempoTotalAnterior_s;
if (deltaTempo_s < 0) deltaTempo_s = 0;
_tempoTotalAnterior_s = tempoTotalSegundosAtual;
// --- Atualiza janela de distância (L/m) ---
AtualizarJanelaDistancia(deltaDist_m, deltaVolume_L, pulverizando);
// --- Atualiza janela de tempo (L/min) ---
AtualizarJanelaTempo(deltaTempo_s, deltaVolume_L, pulverizando);
// --- Atualiza métricas de autonomia ---
AtualizarAutonomia();
}
private void AtualizarJanelaDistancia(double deltaDist_m, double deltaVolume_L, bool pulverizando)
{
// Só faz sentido atualizar se o robô andou e estava pulverizando
if (!pulverizando || deltaDist_m <= 0 || deltaVolume_L <= 0)
return;
_janelaDist.Enqueue((deltaDist_m, deltaVolume_L));
_somaDistanciaJanela_m += deltaDist_m;
_somaVolumeDistJanela_L += deltaVolume_L;
// Mantém a janela limitada a JanelaAutonomia_m
while (_somaDistanciaJanela_m > JanelaAutonomia_m && _janelaDist.Count > 0)
{
var (dOld, vOld) = _janelaDist.Dequeue();
_somaDistanciaJanela_m -= dOld;
_somaVolumeDistJanela_L -= vOld;
}
if (_somaDistanciaJanela_m > 0 && _somaVolumeDistJanela_L > 0)
{
LPorMetro = _somaVolumeDistJanela_L / _somaDistanciaJanela_m;
}
}
private void AtualizarJanelaTempo(double deltaTempo_s, double deltaVolume_L, bool pulverizando)
{
// Só faz sentido atualizar se o tempo avançou, estava pulverizando e houve consumo
if (!pulverizando || deltaTempo_s <= 0 || deltaVolume_L <= 0)
return;
_janelaTempo.Enqueue((deltaTempo_s, deltaVolume_L));
_somaTempoJanela_s += deltaTempo_s;
_somaVolumeTempoJanela_L += deltaVolume_L;
// Mantém a janela de tempo limitada a JanelaTempo_s
while (_somaTempoJanela_s > JanelaTempo_s && _janelaTempo.Count > 0)
{
var (tOld, vOld) = _janelaTempo.Dequeue();
_somaTempoJanela_s -= tOld;
_somaVolumeTempoJanela_L -= vOld;
}
if (_somaTempoJanela_s > 0 && _somaVolumeTempoJanela_L > 0)
{
// L/s * 60 = L/min
LPorMinuto = (_somaVolumeTempoJanela_L / _somaTempoJanela_s) * 60.0;
}
}
private void AtualizarAutonomia()
{
// ----- Distância máxima pulverizando (m) -----
if (VolumeAtual_L > 0 && LPorMetro > 0)
{
DistanciaMaximaTeorica_m = VolumeAtual_L / LPorMetro;
double margem = FuncoesMatematicas.Clamp(MargemSegurancaAutonomia, 0.0, 0.9);
DistanciaMaximaSegura_m = DistanciaMaximaTeorica_m * (1.0 - margem);
if (DistanciaMaximaSegura_m < 0)
DistanciaMaximaSegura_m = 0;
}
else
{
DistanciaMaximaTeorica_m = 0;
DistanciaMaximaSegura_m = 0;
}
// ----- Tempo máximo pulverizando (min) -----
if (VolumeAtual_L > 0 && LPorMinuto > 0)
{
TempoEstimadoMinutosPulverizando = VolumeAtual_L / LPorMinuto;
}
else
{
TempoEstimadoMinutosPulverizando = 0;
}
}
/// <summary>
/// Helper direto para o Manager/Health:
/// indica se o volume atual é suficiente para pulverizar uma rua de certo comprimento (m).
/// </summary>
public bool ConseguePulverizarRua(double comprimentoRua_m)
{
if (comprimentoRua_m <= 0)
return true;
return DistanciaMaximaSegura_m >= comprimentoRua_m;
}
/// <summary>
/// Permite "forçar" um volume inicial (por exemplo, depois de reabastecer).
/// </summary>
public void DefinirVolumeAtual(double volume_L)
{
volume_L = FuncoesMatematicas.Clamp(volume_L, 0, CapacidadeLitros);
VolumeAtual_L = volume_L;
_volumeAnterior_L = volume_L;
VolumeConsumido_L = CapacidadeLitros - VolumeAtual_L;
// Zera as janelas (melhor não carregar histórico de antes de reabastecer)
_janelaDist.Clear();
_janelaTempo.Clear();
_somaDistanciaJanela_m = 0;
_somaVolumeDistJanela_L = 0;
_somaTempoJanela_s = 0;
_somaVolumeTempoJanela_L = 0;
}
}
}

View File

@ -321,7 +321,7 @@ namespace AgroBase.Services
{
List<byte> _sensores = new List<byte>();
_sensores.AddRange(CanPrefix(DadosLoRaParse.DadosSensores));
_sensores.Add((byte)Convert.ToInt32(sensoriamento.Bateria.PorcentagemBateria)); // 1 byte
_sensores.Add((byte)Convert.ToInt32(sensoriamento.Bateria.PercentualBateria)); // 1 byte
_sensores.Add((byte)Convert.ToInt32(sensoriamento.Movimentacao.TemperaturaMedia)); // 1 byte
_sensores.Add((byte)Convert.ToInt32(sensoriamento.Movimentacao.TemperaturaMedia)); // 1 byte
_sensores.Add((byte)Convert.ToInt32(sensoriamento.Trajetoria.AnguloCaminho)); // 1 byte

View File

@ -153,7 +153,7 @@ namespace AgroBase.Services.Operadores
ervas_no_radar = _Sensoriamento.Atuador?.ErvasNoRadar ?? false,
percentual_ervas_no_radar = _Sensoriamento.Atuador?.PercentualErvasNoRadar ?? 0,
percentual_reservatorio = _Sensoriamento.Atuador?.PercentualReservatorio ?? 0,
percentual_bateria = _Sensoriamento.Bateria?.PorcentagemBateria ?? 0,
percentual_bateria = _Sensoriamento.Bateria?.PercentualBateria ?? 0,
}
)
);

View File

@ -197,7 +197,7 @@ namespace AgroBase.Services
bool Sucesso = DecifrarRespostaAquisicao(Resposta);
ContadorCarga.AtualizarConsumo();
ContadorCarga.AtualizarConsumo(Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0);
return Sucesso;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -17,7 +17,7 @@
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_e96ec2bc0d29f93b5eb9a092cd8db254 {
#map_8cc37873267a22a9d923af21cb86f52f {
position: relative;
width: 100.0%;
height: 100.0%;
@ -54,14 +54,14 @@
<body>
<div class="folium-map" id="map_e96ec2bc0d29f93b5eb9a092cd8db254" ></div>
<div class="folium-map" id="map_8cc37873267a22a9d923af21cb86f52f" ></div>
</body>
<script>
var map_e96ec2bc0d29f93b5eb9a092cd8db254 = L.map(
"map_e96ec2bc0d29f93b5eb9a092cd8db254",
var map_8cc37873267a22a9d923af21cb86f52f = L.map(
"map_8cc37873267a22a9d923af21cb86f52f",
{
center: [0.0, 0.0],
crs: L.CRS.EPSG3857,
@ -78,7 +78,7 @@
var tile_layer_2073fabf3e3fe0f56ca3d565a07db8af = L.tileLayer(
var tile_layer_eb3898ea6d8dcda1eaa11b968cc95b03 = L.tileLayer(
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
{
"minZoom": 0,
@ -95,7 +95,7 @@
);
tile_layer_2073fabf3e3fe0f56ca3d565a07db8af.addTo(map_e96ec2bc0d29f93b5eb9a092cd8db254);
tile_layer_eb3898ea6d8dcda1eaa11b968cc95b03.addTo(map_8cc37873267a22a9d923af21cb86f52f);
</script>
@ -116,7 +116,7 @@
}
trajeto_json_add({"features": []});
trajeto_json.addTo(map_e96ec2bc0d29f93b5eb9a092cd8db254);
trajeto_json.addTo(map_8cc37873267a22a9d923af21cb86f52f);
function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria);
@ -179,9 +179,9 @@
var marcadorEquipamento = L.marker([0, 0], {
icon: customIcon
}).addTo(map_e96ec2bc0d29f93b5eb9a092cd8db254);
}).addTo(map_8cc37873267a22a9d923af21cb86f52f);
var marcadorBase = L.marker([0, 0], {}).addTo(map_e96ec2bc0d29f93b5eb9a092cd8db254);
var marcadorBase = L.marker([0, 0], {}).addTo(map_8cc37873267a22a9d923af21cb86f52f);
var icon = L.AwesomeMarkers.icon(
{"extraClasses": "fa-rotate-0", "icon": "info-sign", "iconColor": "white", "markerColor": "red", "prefix": "glyphicon"}
);
@ -246,7 +246,7 @@
}
if (foco) {
map_e96ec2bc0d29f93b5eb9a092cd8db254.setView(novaPosicao, map_e96ec2bc0d29f93b5eb9a092cd8db254.getZoom());
map_8cc37873267a22a9d923af21cb86f52f.setView(novaPosicao, map_8cc37873267a22a9d923af21cb86f52f.getZoom());
}
}
@ -268,7 +268,7 @@
marcadorDinamico.setRotationAngle(angulo);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
map_e96ec2bc0d29f93b5eb9a092cd8db254.setView(novaPosicao, map_e96ec2bc0d29f93b5eb9a092cd8db254.getZoom());*/
map_8cc37873267a22a9d923af21cb86f52f.setView(novaPosicao, map_8cc37873267a22a9d923af21cb86f52f.getZoom());*/
});
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {

View File

@ -75,7 +75,7 @@
<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"/>
<Label x:Name="lblDisposiivos_Autonomia" Content="Liberado | Automático | EmAndamento | CaminhandoRua" HorizontalAlignment="Center" VerticalAlignment="Top" Canvas.Left="100" Canvas.Top="35"/>
</Canvas>
</Border>
@ -90,10 +90,10 @@
<Label x:Name="lblResumo_AreaTotal" Content="0,00 m / 0,00 m" FontSize="10" Canvas.Top="28" HorizontalAlignment="Center" VerticalAlignment="Top" Canvas.Left="154"/>
<Label Content="Bateria" FontSize="10" HorizontalAlignment="Center" Canvas.Top="44" VerticalAlignment="Top"/>
<controls:ProgressBarText x:Name="pgbResumo_Bateria" Height="10" Canvas.Left="57" Canvas.Top="51" Width="92" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Label x:Name="lblResumo_Bateria" Content="0,00 V (00:00:00)" FontSize="9" HorizontalAlignment="Center" Canvas.Top="44" VerticalAlignment="Center" Canvas.Left="154"/>
<Label x:Name="lblResumo_Bateria" Content="0,00 V (00:00:00 0,00 m)" FontSize="9" HorizontalAlignment="Center" Canvas.Top="44" VerticalAlignment="Center" Canvas.Left="154"/>
<Label Content="Herbicida" FontSize="10" HorizontalAlignment="Center" Canvas.Top="60" VerticalAlignment="Top"/>
<controls:ProgressBarText x:Name="pgbResumo_Herbicida" Height="10" Canvas.Left="57" Canvas.Top="67" Width="92" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Label x:Name="lblResumo_Herbicida" Content="0,00 L (0,00 m)" FontSize="9" HorizontalAlignment="Left" Canvas.Top="60" VerticalAlignment="Center" Canvas.Left="154"/>
<Label x:Name="lblResumo_Herbicida" Content="0,00 L (00:00:00 0,00 m)" FontSize="9" HorizontalAlignment="Left" Canvas.Top="60" VerticalAlignment="Center" Canvas.Left="154"/>
<Label Content="Infestação" FontSize="10" Canvas.Top="76" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<controls:ProgressBarText x:Name="pgbResumo_Infestacao" Height="10" Canvas.Left="57" Canvas.Top="83" Width="92" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Label x:Name="lblResumo_Infestacao" Content="0,00 mL/erva" FontSize="9" HorizontalAlignment="Center" Canvas.Top="76" VerticalAlignment="Top" Canvas.Left="154"/>
@ -128,18 +128,22 @@
<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" 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_MAGDF" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="154" 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" 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_MAGEF" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="154" 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" 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_MAGET" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="53" Canvas.Top="332" 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" 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_MAGDT" Tag="sMAG" Content="🔒MAG" Style="{StaticResource RoundedLabel}" Height="21" Width="41" Canvas.Left="346" Canvas.Top="332" 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"/>

View File

@ -176,6 +176,7 @@ namespace OperationControl.Windows
brdResumo.IsEnabled = !dados_base;
brdDiagnostico.IsEnabled = !dados_base;
brdStatusModulo.IsEnabled = !dados_base;
brdControle.IsEnabled = !dados_base;
brdAjustesOperacao.IsEnabled = !dados_base;
if (!dados_base)
@ -340,21 +341,21 @@ namespace OperationControl.Windows
try
{
pgbResumo_RuaAtual.Value = dados.Trajetoria.PercentualRuaAtual;
lblResumo_RuaAtual.Content = $"{dados.Trajetoria.CorredorAtual.DistanciaPercorridaCorredor.ToString("0.00")} m / {dados.Trajetoria.CorredorAtual.DistanciaTotal.ToString("0.00")} m ({dados.Trajetoria.CorredorAtual.Idx + 1})";
lblResumo_RuaAtual.Content = $"{dados.Trajetoria.CorredorAtual.DistanciaPercorridaCorredor:0.00} m / {dados.Trajetoria.CorredorAtual.DistanciaTotal:0.00} m ({dados.Trajetoria.CorredorAtual.Idx + 1})";
pgbResumo_AreaTotal.Value = dados.Trajetoria.PercentualOperacao;
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 ({TimeSpan.FromMinutes(dados.Bateria.TempoEstimadoRestanteMinutos)})";
lblResumo_AreaTotal.Content = $"{dados.Trajetoria.DistanciaPercorrida:0.00} m / {dados.Trajetoria.DistanciaTotal:0.00} m";
pgbResumo_Bateria.Value = dados.Bateria.PercentualBateria;
lblResumo_Bateria.Content = $"{dados.Bateria.TensaoInstantanea:0.00} V ({TimeSpan.FromMinutes(dados.Bateria.TempoEstimadoRestanteMinutos).ToString(@"dd\.hh\:mm\:ss")} {dados.Bateria.DistanciaEstimadaRestanteMetros:0.00} m)";
pgbResumo_Herbicida.Value = dados.Atuador.PercentualReservatorio;
lblResumo_Herbicida.Content = $"{dados.Atuador.VolumeReservatorio.ToString("0.00")} L ({0.ToString("0.00")} m)";
lblResumo_Herbicida.Content = $"{dados.Atuador.VolumeReservatorio:0.00} L ({TimeSpan.FromMinutes(dados.Atuador.TempoEstimadoRestanteMinutos).ToString(@"hh\:mm\:ss")} {dados.Atuador.DistanciaEstimadaRestanteMetros:0.00} m)";
pgbResumo_Infestacao.Value = dados.Atuador.PercentualErvasTerreno;
lblResumo_Infestacao.Content = $"{dados.Atuador.VazaoMedia.ToString("0.00")}";
lblResumo_Infestacao.Content = $"{dados.Atuador.HerbicidaPorErva:0.00} mL/erva";
lblResumo_OperacaoLiberada.Content = $"Operação " + (dados.OperacaoLiberada ? "🔓 Liberada" : "🔒 Bloqueada");
lblResumo_OperacaoModo.Content = $"Modo {dados.Modo}";
lblResumo_OperacaoStatus.Content = $"Status {dados.StatusOperacao}" + (dados.StatusOperacao == AgroBase.Models.Enums.StatusOperacao.Aguardando ? $" ({dados.TempoAguardandoSeg.ToString("0")})" : "");
lblResumo_OperacaoStatus.Content = $"Status {dados.StatusOperacao}" + (dados.StatusOperacao == AgroBase.Models.Enums.StatusOperacao.Aguardando ? $" ({dados.TempoAguardandoSeg:0})" : "");
lblResumo_StatusCarro.Content = $"Carro {dados.Trajetoria.StatusCarro}";
lblResumo_TemperaturaGeral.Content = $"Temperatura {(dados.DadosPerformance.CPU_temp ?? 0).ToString("0.00")} °C";
lblResumo_TemperaturaGeral.Content = $"Temperatura {(dados.DadosPerformance.CPU_temp ?? 0):0.00} °C";
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)
@ -515,6 +516,9 @@ namespace OperationControl.Windows
case AgroBase.Models.Enums.T_Code.Ipb:
iniciado = rover.Alive;
break;
case AgroBase.Models.Enums.T_Code.Can:
iniciado = rover.DadosLeitura.DispositivosMapeados?.Any(x => x.Dispositivo == AgroBase.Models.Enums.T_Code.Can) ?? false;
break;
case AgroBase.Models.Enums.T_Code.Lra:
iniciado = rover.DadosLeitura?.DadosLoRa?.Conectado ?? false;
break;
@ -590,15 +594,17 @@ namespace OperationControl.Windows
ucr = rover?.DadosLeitura?.Movimentacao?.Dados?.FirstOrDefault(x => x.ID == label)?.UltimoComandoRespondido ?? DateTime.MinValue;
else if (modulo == AgroBase.Models.Enums.T_Code.Dir)
ucr = rover?.DadosLeitura?.Direcional?.Dados?.FirstOrDefault(x => x.Modulo_ID == label)?.UltimoComandoRespondido ?? DateTime.MinValue;
else
ucr = rover.DadosLeitura?.Momento ?? DateTime.MinValue;
DateTime mom = rover.DadosLeitura?.Momento ?? DateTime.MinValue;
double can_latencia = (mom - ucr).TotalMilliseconds;
double can_latencia = (ucr - mom).TotalMilliseconds;
lblSaude_Descricao.Content = $"Módulo {modulo} {label}";
lblSaude_Iniciado.Content = (iniciado ? "Iniciado" : "Não Iniciado");
lblSaude_Iniciado.Foreground = new SolidColorBrush(iniciado ? System.Windows.Media.Colors.Green : System.Windows.Media.Colors.Red);
lblSaude_Status.Content = $"{individual?.status ?? saude?.status ?? AgroBase.Models.Enums.StatusModulo.Desconectado} (Saúde {individual?.saude ?? saude?.saude ?? 0}%)";
lblSaude_CAN.Content = $"CAN {can_latencia} ms";
lblSaude_CAN.Content = $"CAN {can_latencia:0} ms";
lblSaude_Latencia.Content = $"Latência {dispositivo?.Latencia ?? 0} ms";
lblSaude_Impedimento.Text = $"Impedimento: {motivos ?? "Nenhum"}";
@ -614,7 +620,12 @@ namespace OperationControl.Windows
PreencherAbaCondicoesOperacionais(saude?.condicoes_operacionais);
PreencherAbaAcompanhamento(true);
PreencherAbaOpcoes(true);
PreencherAbaLogs(rover.DadosLeitura?.Logs?.Where(x => x.Dispositivo == modulo));
var logs = rover.DadosLeitura?.Logs?.Where(x => x.Dispositivo == modulo);
if (!string.IsNullOrEmpty(label))
logs = logs.Where(x => x.ID == label);
else
logs = logs.Where(x => x.ID == null);
PreencherAbaLogs(logs);
}
private void PreencherAbaCondicoesOperacionais(List<ManagerWorkerMessageResponseModulosPendentesSaudeCondicoesModel> condicoes)

View File

@ -94,7 +94,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/attitudeindicator.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/attitudeindicator.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\AttitudeIndicator.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -62,7 +62,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/bbox3dviewer.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/bbox3dviewer.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\Bbox3DViewer.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -64,7 +64,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/gstvideoview.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/gstvideoview.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\GstVideoView.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -118,7 +118,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/headingindicator.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/headingindicator.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\HeadingIndicator.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -54,7 +54,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/labeledbar.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/labeledbar.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\LabeledBar.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -142,7 +142,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/manualcontrolpad.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/manualcontrolpad.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\ManualControlPad.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -94,7 +94,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/mapviewcontrol.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/mapviewcontrol.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\MapViewControl.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -61,7 +61,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/progressbartext.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/progressbartext.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\ProgressBarText.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -86,8 +86,7 @@ namespace OperationControl.Controls.Pulverizador {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/pulverizador/bicolequeindicator.xam" +
"l", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/pulverizador/bicolequeindicator.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\..\Controls\Pulverizador\BicoLequeIndicator.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -70,8 +70,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/pulverizador/pulverizadorindicator." +
"xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/pulverizador/pulverizadorindicator.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\..\Controls\Pulverizador\PulverizadorIndicator.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -53,7 +53,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/riskmeter.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/riskmeter.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\RiskMeter.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

View File

@ -86,7 +86,7 @@ namespace OperationControl.Controls {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/OperationControl;V1.0.0.0;component/controls/temperatureindicator.xaml", System.UriKind.Relative);
System.Uri resourceLocater = new System.Uri("/OperationControl;component/controls/temperatureindicator.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Controls\TemperatureIndicator.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);

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")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bd8069c54554e0251ed143bf93aabe93c52f19a2")]
[assembly: System.Reflection.AssemblyProductAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("OperationControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
7f7e3e3330835a9e331ff8ae9e65bce6b076d907a4ff29ab3f8d822addcfdc36
bcf738967f77ebf630bc6d19737a8d4412f54220daac0759437ffecc63b6b0d9

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+20378a9fd109692c3261d3b86f890d4ad392c336")]
[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 @@
fd6cdbaea7f6f777c5394b581761f3118b7207d8dd5423e48a98a85f933f9cd6

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_12lwqfv2_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+cdbcb8f1d72a243d2ae205abe4adb9bcce349f0a")]
[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 @@
e97aa85db49e23473483f7f5559669e0e230fe330f46dcf20f82f6845bfc475e

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_2gnql3df_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+bd8069c54554e0251ed143bf93aabe93c52f19a2")]
[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 @@
bcf738967f77ebf630bc6d19737a8d4412f54220daac0759437ffecc63b6b0d9

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_315b3u3t_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+cdbcb8f1d72a243d2ae205abe4adb9bcce349f0a")]
[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 @@
e97aa85db49e23473483f7f5559669e0e230fe330f46dcf20f82f6845bfc475e

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_4kfvjdhz_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

@ -16,5 +16,5 @@ C:\ZendionInc\agrobot_base\AgroBase\OperationControl\App.xaml
269595801548
Controls\AttitudeIndicator.xaml;Controls\Bbox3DViewer.xaml;Controls\GstVideoView.xaml;Controls\HeadingIndicator.xaml;Controls\LabeledBar.xaml;Controls\ManualControlPad.xaml;Controls\MapViewControl.xaml;Controls\ProgressBarText.xaml;Controls\Pulverizador\BicoLequeIndicator.xaml;Controls\Pulverizador\PulverizadorIndicator.xaml;Controls\RiskMeter.xaml;Controls\TemperatureIndicator.xaml;Windows\MainWindow.xaml;
False
True

View File

@ -0,0 +1,12 @@
C:\ZendionInc\agrobot_base\AgroBase\OperationControl\obj\Debug\net8.0-windows7.0\GeneratedInternalTypeHelper.g.i.cs
FC:\ZendionInc\agrobot_base\AgroBase\OperationControl\Controls\AttitudeIndicator.xaml;;
FC:\ZendionInc\agrobot_base\AgroBase\OperationControl\Controls\GstVideoView.xaml;;
FC:\ZendionInc\agrobot_base\AgroBase\OperationControl\Controls\HeadingIndicator.xaml;;
FC:\ZendionInc\agrobot_base\AgroBase\OperationControl\Controls\LabeledBar.xaml;;
FC:\ZendionInc\agrobot_base\AgroBase\OperationControl\Controls\ManualControlPad.xaml;;
FC:\ZendionInc\agrobot_base\AgroBase\OperationControl\Controls\Pulverizador\BicoLequeIndicator.xaml;;
FC:\ZendionInc\agrobot_base\AgroBase\OperationControl\Controls\Pulverizador\PulverizadorIndicator.xaml;;
FC:\ZendionInc\agrobot_base\AgroBase\OperationControl\Controls\TemperatureIndicator.xaml;;
FC:\ZendionInc\agrobot_base\AgroBase\OperationControl\Windows\MainWindow.xaml;;

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+20378a9fd109692c3261d3b86f890d4ad392c336")]
[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 @@
fd6cdbaea7f6f777c5394b581761f3118b7207d8dd5423e48a98a85f933f9cd6

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_ha4so3iu_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+cdbcb8f1d72a243d2ae205abe4adb9bcce349f0a")]
[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 @@
e97aa85db49e23473483f7f5559669e0e230fe330f46dcf20f82f6845bfc475e

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_hrchs1pg_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