ajustes na inicializacao do atuador e calibragem inicial
This commit is contained in:
parent
8eee8e5012
commit
f5e8ba1fef
|
|
@ -1,5 +1,6 @@
|
|||
using AgroBase.Services;
|
||||
using AgroBase.Services.Operadores;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
|
|
@ -66,6 +67,7 @@ namespace AgroBase.Models.Modules
|
|||
public AtuadorMensagemJsonModel DadosLeitura { get; set; } = new AtuadorMensagemJsonModel();
|
||||
public AtuHandler _AtuHandler = new AtuHandler();
|
||||
|
||||
[JsonIgnore]
|
||||
public AtuadorBombaModel BombaPressurizadora
|
||||
{
|
||||
get
|
||||
|
|
@ -74,6 +76,7 @@ namespace AgroBase.Models.Modules
|
|||
return Bomba;
|
||||
}
|
||||
}
|
||||
[JsonIgnore]
|
||||
public AtuadorBombaModel AgitadorDeCalda
|
||||
{
|
||||
get
|
||||
|
|
@ -83,6 +86,7 @@ namespace AgroBase.Models.Modules
|
|||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public SensorModel SensorMassaReservatorio
|
||||
{
|
||||
get
|
||||
|
|
@ -91,6 +95,7 @@ namespace AgroBase.Models.Modules
|
|||
return sMAS;
|
||||
}
|
||||
}
|
||||
[JsonIgnore]
|
||||
private SensorModel SensorAnguloBarraEsquerda
|
||||
{
|
||||
get
|
||||
|
|
@ -99,6 +104,7 @@ namespace AgroBase.Models.Modules
|
|||
return sMAG;
|
||||
}
|
||||
}
|
||||
[JsonIgnore]
|
||||
private SensorModel SensorAnguloBarraDireita
|
||||
{
|
||||
get
|
||||
|
|
@ -112,6 +118,7 @@ namespace AgroBase.Models.Modules
|
|||
|
||||
#region VAZAO
|
||||
|
||||
[JsonIgnore]
|
||||
private SensorModel SensorFluxoLinha => Sensores.FirstOrDefault(x => x.Componente == S_Code.sFLX && x.ID == "FLXLN");
|
||||
|
||||
public double VazaoMaximaSensor_LMin { get; set; } = 20.0;
|
||||
|
|
@ -164,6 +171,8 @@ namespace AgroBase.Models.Modules
|
|||
#endregion
|
||||
|
||||
#region PRESSAO
|
||||
|
||||
[JsonIgnore]
|
||||
private SensorModel SensorPressaoLinha
|
||||
{
|
||||
get
|
||||
|
|
@ -1004,8 +1013,8 @@ namespace AgroBase.Models.Modules
|
|||
Descricao = "Angulo Barra Esquerda",
|
||||
ID_Num = 41,
|
||||
Componente = S_Code.sMAG,
|
||||
Aferir = true,
|
||||
Mandatorio = true,
|
||||
Aferir = false,
|
||||
Mandatorio = false,
|
||||
Funcoes = new List<FuncoesPinout>()
|
||||
{
|
||||
FuncoesPinout.I2C,
|
||||
|
|
@ -1059,8 +1068,8 @@ namespace AgroBase.Models.Modules
|
|||
Descricao = "Angulo Barra Direita",
|
||||
ID_Num = 42,
|
||||
Componente = S_Code.sMAG,
|
||||
Aferir = true,
|
||||
Mandatorio = true,
|
||||
Aferir = false,
|
||||
Mandatorio = false,
|
||||
Funcoes = new List<FuncoesPinout>()
|
||||
{
|
||||
FuncoesPinout.I2C,
|
||||
|
|
@ -1311,6 +1320,7 @@ namespace AgroBase.Models.Modules
|
|||
Dados.BombasPressurizadoras.ForEach(x => x.Funcoes = x.Funcoes.Distinct().ToList());
|
||||
|
||||
ReiniciarLeituras(Dados);
|
||||
PrepararAtuadorParaOperacao(Dados);
|
||||
}
|
||||
|
||||
public void ReiniciarLeituras(AtuadorModel Dados)
|
||||
|
|
@ -1376,6 +1386,34 @@ namespace AgroBase.Models.Modules
|
|||
}
|
||||
}
|
||||
|
||||
private void PrepararAtuadorParaOperacao(AtuadorModel Dados)
|
||||
{
|
||||
var dadosAtuador = Dados;
|
||||
var controle = Variaveis.OperacaoEmAndamento.Parametros?.Controle;
|
||||
|
||||
if (dadosAtuador == null || controle == null)
|
||||
return;
|
||||
|
||||
var bomba = dadosAtuador.BombaPressurizadora;
|
||||
|
||||
if (bomba != null)
|
||||
{
|
||||
bomba.ComandoAtuar = false;
|
||||
bomba.PotenciaSP = 100;
|
||||
bomba.PressaoSP = controle.AtuPressaoLinha;
|
||||
bomba.Controle.Modo = controle.AtuModoControle;
|
||||
}
|
||||
|
||||
var agitador = dadosAtuador.AgitadorDeCalda;
|
||||
|
||||
if (agitador != null)
|
||||
{
|
||||
agitador.ComandoAtuar = false;
|
||||
agitador.PotenciaSP = 0;
|
||||
agitador.PressaoSP = -1;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> VerificaDispositivoConectado()
|
||||
{
|
||||
if (!CanManager.CanService.IsConnected) return false;
|
||||
|
|
@ -1850,109 +1888,47 @@ namespace AgroBase.Models.Modules
|
|||
}
|
||||
}
|
||||
|
||||
private void EnviarComandoFisicoBico(
|
||||
AtuadorBicoModel bico,
|
||||
bool status,
|
||||
double angulo)
|
||||
private void EnviarComandoFisicoBico(AtuadorBicoModel bico, bool status, double angulo)
|
||||
{
|
||||
var dispAtu =
|
||||
Variaveis.OperacaoEmAndamento?.DispAtu;
|
||||
var dispAtu = Variaveis.OperacaoEmAndamento?.DispAtu;
|
||||
|
||||
if (
|
||||
dispAtu?.Dados?.Conectado != true ||
|
||||
bico == null
|
||||
)
|
||||
{
|
||||
if (dispAtu?.Dados?.Conectado != true || bico == null)
|
||||
return;
|
||||
}
|
||||
|
||||
byte anguloByte =
|
||||
(byte)Math.Round(
|
||||
FuncoesMatematicas.Clamp(
|
||||
angulo,
|
||||
0,
|
||||
255
|
||||
)
|
||||
);
|
||||
byte anguloByte = (byte)Math.Round(FuncoesMatematicas.Clamp(angulo, 0, 255));
|
||||
|
||||
byte[] data =
|
||||
{
|
||||
(byte)(
|
||||
status
|
||||
? Estado.Ligado
|
||||
: Estado.Desligado
|
||||
),
|
||||
anguloByte
|
||||
};
|
||||
(byte)(status ? Estado.Ligado : Estado.Desligado),
|
||||
anguloByte
|
||||
};
|
||||
|
||||
dispAtu.AdicionarMensagemFila(
|
||||
bico.ID_Num,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
data,
|
||||
false
|
||||
);
|
||||
dispAtu.AdicionarMensagemFila(bico.ID_Num, CanMessagePosicaoDados.Command1, CanMessagePosicaoDados.Command1, data, false);
|
||||
}
|
||||
|
||||
private void EnviarComandoFisicoBomba(
|
||||
AtuadorBombaModel bomba,
|
||||
bool status,
|
||||
double potencia,
|
||||
double pressao)
|
||||
private void EnviarComandoFisicoBomba(AtuadorBombaModel bomba, bool status, double potencia, double pressao)
|
||||
{
|
||||
var dispAtu =
|
||||
Variaveis.OperacaoEmAndamento?.DispAtu;
|
||||
var dispAtu = Variaveis.OperacaoEmAndamento?.DispAtu;
|
||||
|
||||
if (
|
||||
dispAtu?.Dados?.Conectado != true ||
|
||||
bomba == null
|
||||
)
|
||||
{
|
||||
if (dispAtu?.Dados?.Conectado != true || bomba == null)
|
||||
return;
|
||||
}
|
||||
|
||||
byte potenciaByte =
|
||||
(byte)Math.Round(
|
||||
FuncoesMatematicas.Clamp(
|
||||
potencia,
|
||||
0,
|
||||
100
|
||||
)
|
||||
);
|
||||
byte potenciaByte = (byte)Math.Round(FuncoesMatematicas.Clamp(potencia, 0, 100));
|
||||
|
||||
/*
|
||||
* -1 é usado para indicar ausência de sensor
|
||||
* de pressão. No protocolo atual, representa 255.
|
||||
*/
|
||||
byte pressaoByte =
|
||||
pressao < 0
|
||||
? byte.MaxValue
|
||||
: (byte)Math.Round(
|
||||
FuncoesMatematicas.Clamp(
|
||||
pressao,
|
||||
0,
|
||||
255
|
||||
)
|
||||
);
|
||||
byte pressaoByte = pressao < 0 ? byte.MaxValue : (byte)Math.Round(FuncoesMatematicas.Clamp(pressao, 0, 255));
|
||||
|
||||
byte[] data =
|
||||
{
|
||||
(byte)(
|
||||
status
|
||||
? Estado.Ligado
|
||||
: Estado.Desligado
|
||||
),
|
||||
potenciaByte,
|
||||
pressaoByte
|
||||
};
|
||||
(byte)(status ? Estado.Ligado : Estado.Desligado),
|
||||
potenciaByte,
|
||||
pressaoByte
|
||||
};
|
||||
|
||||
dispAtu.AdicionarMensagemFila(
|
||||
bomba.ID_Num,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
data,
|
||||
false
|
||||
);
|
||||
dispAtu.AdicionarMensagemFila(bomba.ID_Num, CanMessagePosicaoDados.Command1, CanMessagePosicaoDados.Command1, data, false);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2095,7 +2071,7 @@ namespace AgroBase.Models.Modules
|
|||
}
|
||||
if (t.IsCompleted)
|
||||
{
|
||||
var calAtu = Variaveis.OperacaoEmAndamento.ModsCalibragem[T_Code.Atu];
|
||||
var calAtu = Variaveis.OperacaoEmAndamento.ModsCalibragem[Dispositivo];
|
||||
var v = calAtu.Select(x => $"{x.Key} " + (x.Value ? "Sim" : "Não"));
|
||||
Variaveis.MostrarLog($"[AtuadorModel] [RealizarCalibragemAsync] Task de referenciamento do módulo {Modulo_ID} finalizada: " + string.Join(", ", v));
|
||||
Variaveis.OperacaoEmAndamento.Sensoriamento.InserirLog(Dispositivo, StatusModulo.Operante, 100, $"Task de referenciamento do módulo {Modulo_ID} finalizada: " + string.Join(", ", v));
|
||||
|
|
@ -2172,7 +2148,7 @@ namespace AgroBase.Models.Modules
|
|||
}
|
||||
public List<SensorValoresLeituraModel> ValoresLeituras { get; set; }
|
||||
public Estado _EstadoLeitura => (Estado)(ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? 0);
|
||||
public int _AnguloBicoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.ServoAnguloLeitura)?.atual? .valor ?? 0;
|
||||
public double _AnguloBicoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.ServoAnguloLeitura)?.atual? .valor ?? 0;
|
||||
|
||||
|
||||
public (CanMessagePosicaoDados, byte[]) ProtocoloConfiguracao(PinoutDataModel pinout, bool conectar)
|
||||
|
|
|
|||
|
|
@ -1184,27 +1184,27 @@ namespace AgroBase.Models
|
|||
Variaveis.OperacaoEmAndamento.Sensoriamento.UltimoRegistroLog = DateTime.Now;
|
||||
tmrLogs?.Start();
|
||||
|
||||
Iniciado = true;
|
||||
Simulando = false;
|
||||
Treinando = false;
|
||||
Emergencia = false;
|
||||
Pausa = false;
|
||||
DataInicio = DateTime.Now;
|
||||
DataFim = DateTime.MinValue;
|
||||
idxLog = 0;
|
||||
Variaveis.OperacaoEmAndamento.Iniciado = true;
|
||||
Variaveis.OperacaoEmAndamento.Simulando = false;
|
||||
Variaveis.OperacaoEmAndamento.Treinando = false;
|
||||
Variaveis.OperacaoEmAndamento.Emergencia = false;
|
||||
Variaveis.OperacaoEmAndamento.Pausa = false;
|
||||
Variaveis.OperacaoEmAndamento.DataInicio = DateTime.Now;
|
||||
Variaveis.OperacaoEmAndamento.DataFim = DateTime.MinValue;
|
||||
Variaveis.OperacaoEmAndamento.idxLog = 0;
|
||||
|
||||
ID = DataInicio.ToString("dd_MM_yyyy_HH_mm_ss") + "_" + (Parametros?.Modo ?? ModoOperacao.NaoDefinido).ToString();
|
||||
Variaveis.OperacaoEmAndamento.ID = DataInicio.ToString("dd_MM_yyyy_HH_mm_ss") + "_" + (Parametros?.Modo ?? ModoOperacao.NaoDefinido).ToString();
|
||||
Directory.CreateDirectory(Variaveis.CaminhoOperacoes + ID + "/");
|
||||
|
||||
SalvarOperacao();
|
||||
|
||||
Sensoriamento.AtualizarDados();
|
||||
Variaveis.OperacaoEmAndamento.Sensoriamento.AtualizarDados();
|
||||
|
||||
DispMvd?.Dados?.ReiniciarLeituras(DispMvd?.Dados);
|
||||
DispAtu?.Dados?.ReiniciarLeituras(DispAtu?.Dados);
|
||||
DispSen?.Dados?.ReiniciarLeituras(DispSen?.Dados);
|
||||
Variaveis.OperacaoEmAndamento.DispMvd?.Dados?.ReiniciarLeituras(DispMvd?.Dados);
|
||||
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ReiniciarLeituras(DispAtu?.Dados);
|
||||
Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ReiniciarLeituras(DispSen?.Dados);
|
||||
|
||||
ModsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>()
|
||||
Variaveis.OperacaoEmAndamento.ModsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>()
|
||||
{
|
||||
{ T_Code.Mov, new Dictionary<string, bool>() { } },
|
||||
{ T_Code.Dir, new Dictionary<string, bool>() { } },
|
||||
|
|
@ -1215,19 +1215,19 @@ namespace AgroBase.Models
|
|||
WeedWorkerService.ReiniciarLeituraAnalise();
|
||||
VisualWorkerService.ReiniciarLeituraAnalise();
|
||||
|
||||
Controle.Reiniciar();
|
||||
ControleAnterior.Reiniciar();
|
||||
Variaveis.OperacaoEmAndamento.Controle.Reiniciar();
|
||||
Variaveis.OperacaoEmAndamento.ControleAnterior.Reiniciar();
|
||||
|
||||
double distanciaPercorrida = DispMvd?.Dados?.DistanciaPercorridaTotal ?? 0;
|
||||
double tempoAtuado = DispAtu?.Dados?.TempoAtuado ?? 0;
|
||||
DispSen?.Dados?.ContadorCarga?.AtualizarConsumo(distanciaPercorrida);
|
||||
DispSen?.Dados?.ContadorCarga?.IniciarOperacao(distanciaPercorrida);
|
||||
DispAtu?.Dados?.ContadorCarga?.IniciarOperacao(distanciaPercorrida, tempoAtuado);
|
||||
Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ContadorCarga?.AtualizarConsumo(distanciaPercorrida);
|
||||
Variaveis.OperacaoEmAndamento.DispSen?.Dados?.ContadorCarga?.IniciarOperacao(distanciaPercorrida);
|
||||
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ContadorCarga?.IniciarOperacao(distanciaPercorrida, tempoAtuado);
|
||||
|
||||
GPSTrajetoria = new List<GPSModel>();
|
||||
Variaveis.OperacaoEmAndamento.GPSTrajetoria = new List<GPSModel>();
|
||||
|
||||
Trajetoria?.ProjetarTrajetoriaFixa();
|
||||
Trajetoria.VerificacaoInicialMeioRuaConcluida = false;
|
||||
Variaveis.OperacaoEmAndamento.Trajetoria?.ProjetarTrajetoriaFixa();
|
||||
Variaveis.OperacaoEmAndamento.Trajetoria.VerificacaoInicialMeioRuaConcluida = false;
|
||||
RedisService.Publish(CmdKey.ManagerWorkerRx, JsonConvert.SerializeObject(new { cmd = ManagerWorkerCommandType.IniciarMPC }));
|
||||
|
||||
await RealizarCalibragemInicialAsync(true);
|
||||
|
|
|
|||
|
|
@ -699,7 +699,7 @@ namespace AgroBase.Models.Operacoes
|
|||
Posicao = x.Posicao,
|
||||
AnguloAbertura = x.AnguloAbertura,
|
||||
ComandoAngulo = (int)x.AnguloControle,
|
||||
LeituraAngulo = x._AnguloBicoLeitura,
|
||||
LeituraAngulo = (int)x._AnguloBicoLeitura,
|
||||
ComandoEstado = x.ComandoAtuar,
|
||||
LeituraEstado = x._EstadoLeitura == Estado.Ligado,
|
||||
VazaoMediaMLs = x.VazaoMediaMLs,
|
||||
|
|
|
|||
|
|
@ -474,7 +474,7 @@ namespace AgroBase.Models
|
|||
public static double DistanciaEntreBicosCm { get; set; } = 50;
|
||||
public static double DensidadeHerbicida { get; set; } = 1.0;
|
||||
public static double CapacidadeReservatorio { get; set; } = 60;
|
||||
public static double PressaoMinimaCavitacao { get; set; } = 30.0;
|
||||
public static double PressaoMinimaCavitacao { get; set; } = 10.0;
|
||||
public static double ReducaoDirecional { get; set; } = 20.0;
|
||||
public static double PercentualVelMin
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue