novo metodo de calibragem da bomba
This commit is contained in:
parent
b7501aa2a2
commit
58181043dd
|
|
@ -339,6 +339,9 @@ namespace AgroBase.Models.Modules
|
|||
{
|
||||
var op = Variaveis.OperacaoEmAndamento;
|
||||
|
||||
if (op.CalibrandoRuntime)
|
||||
return;
|
||||
|
||||
lock (_metricasLock)
|
||||
{
|
||||
long agoraTicks = Stopwatch.GetTimestamp();
|
||||
|
|
@ -2013,7 +2016,9 @@ namespace AgroBase.Models.Modules
|
|||
if (!forcar && op.ModuloEstaCalibrado(Dispositivo, Bomba.ID))
|
||||
continue;
|
||||
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, false);
|
||||
bool BombaOk = false;
|
||||
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, BombaOk);
|
||||
|
||||
// Sem herbicida no reservatorio, bomba nao precisa ligar
|
||||
if (!Bomba.Inicializado || ContadorCarga.PercentualAtual < VariaveisEquipamento.PercentualReservatorioMin)
|
||||
|
|
@ -2021,106 +2026,111 @@ namespace AgroBase.Models.Modules
|
|||
Variaveis.MostrarLog($"[AtuadorModel] [RealizarTestesIniciais] Bomba não iniciada ou nível do reservatório baixo, não irá ligar a bomba {Bomba.ID}");
|
||||
op.Sensoriamento.InserirLog(Dispositivo, StatusModulo.Alerta, 50, $"Bomba não iniciada ou nível do reservatório baixo, não irá ligar a bomba {Bomba.ID}", id: Bomba.ID);
|
||||
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, false);
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, BombaOk);
|
||||
continue;
|
||||
}
|
||||
|
||||
bool EhBombaPressurizadora = Bomba.ID == BombaPressurizadora.ID;
|
||||
double pressaoTeste = 80.0;
|
||||
|
||||
if (EhBombaPressurizadora)
|
||||
{
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command2,
|
||||
setarControle: true,
|
||||
status: true,
|
||||
modo: ModoControleBomba.OnOff,
|
||||
desligarSemBicoAberto: false
|
||||
);
|
||||
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: true,
|
||||
potencia: 100,
|
||||
pressao: pressaoTeste
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
bool ligar = op.Parametros.Controle.AtuAgitadorModo != ModoAgitadorCalda.SemAgitacao;
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: ligar,
|
||||
potencia: 100,
|
||||
pressao: -1
|
||||
);
|
||||
}
|
||||
|
||||
if (Bomba.Sensor_ID_Num == -1)
|
||||
{
|
||||
Variaveis.MostrarLog($"[AtuadorModel] [RealizarTestesIniciais] Bomba {Bomba.ID} não possui um sensor de pressão, será controlada mecanicamente pelo pressostato");
|
||||
op.Sensoriamento.InserirLog(Dispositivo, StatusModulo.Alerta, 50, $"Bomba {Bomba.ID} não possui um sensor de pressão, será controlada mecanicamente pelo pressostato", id: Bomba.ID);
|
||||
|
||||
bool bombaOk = true;
|
||||
|
||||
if (!EhBombaPressurizadora)
|
||||
if (Bomba.Sensor_ID_Num > -1)
|
||||
{
|
||||
bool BombaLigou() => Bomba.ComandoAtuar == (Bomba._EstadoLeitura == Estado.Ligado);
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(BombaLigou, 3000, 200);
|
||||
bombaOk = BombaLigou();
|
||||
// Alivia pressao da linha
|
||||
BicosPulverizadores.Where(x => x.Inicializado && x.Comandar).ToList().ForEach(Bico => EnviarComandoFisicoBico(Bico, CanMessagePosicaoDados.Command1, setarControle: true, status: true));
|
||||
await Task.Delay(3000);
|
||||
BicosPulverizadores.Where(x => x.Inicializado && x.Comandar).ToList().ForEach(Bico => EnviarComandoFisicoBico(Bico, CanMessagePosicaoDados.Command1, setarControle: true, status: false));
|
||||
await Task.Delay(1000);
|
||||
|
||||
double pressaoTeste = 80.0;
|
||||
double difPressaoTeste = 40.0;
|
||||
double pressaoInicialTeste = Bomba._PressaoAtual;
|
||||
|
||||
try
|
||||
{
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command2,
|
||||
setarControle: true,
|
||||
status: true,
|
||||
modo: ModoControleBomba.OnOff,
|
||||
desligarSemBicoAberto: false
|
||||
);
|
||||
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: true,
|
||||
potencia: 100,
|
||||
pressao: pressaoTeste
|
||||
);
|
||||
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(() => Bomba.AtingiuPressao(pressaoTeste), 3000, 200);
|
||||
|
||||
bool pressaoSubiu = Bomba._PressaoAtual - pressaoInicialTeste >= difPressaoTeste;
|
||||
BombaOk = (Bomba.AtingiuPressao(pressaoTeste) && pressaoSubiu) || !Bomba.Mandatorio;
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, BombaOk);
|
||||
}
|
||||
finally
|
||||
{
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command2,
|
||||
setarControle: true,
|
||||
status: false,
|
||||
modo: op.Parametros.Controle.AtuModoControle,
|
||||
desligarSemBicoAberto: true,
|
||||
potenciaMinPid: Bomba.Controle.PotenciaMinPID,
|
||||
Kp: Bomba.Controle.Kp,
|
||||
Ki: Bomba.Controle.Ki,
|
||||
Kd: Bomba.Controle.Kd
|
||||
);
|
||||
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: false,
|
||||
potencia: 100,
|
||||
pressao: op.Parametros.Controle.AtuPressaoLinha
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Variaveis.MostrarLog($"[AtuadorModel] [RealizarTestesIniciais] Bomba {Bomba.ID} não possui um sensor de pressão, será controlada mecanicamente pelo pressostato");
|
||||
op.Sensoriamento.InserirLog(Dispositivo, StatusModulo.Alerta, 50, $"Bomba {Bomba.ID} não possui um sensor de pressão, será controlada mecanicamente pelo pressostato", id: Bomba.ID);
|
||||
BombaOk = true;
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, BombaOk);
|
||||
}
|
||||
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, bombaOk);
|
||||
continue;
|
||||
}
|
||||
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(() => Bomba.AtingiuPressao(pressaoTeste), 3000, 200);
|
||||
|
||||
bool BombaOk = Bomba.AtingiuPressao(pressaoTeste);
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, BombaOk);
|
||||
|
||||
if (EhBombaPressurizadora)
|
||||
{
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command2,
|
||||
setarControle: true,
|
||||
status: true,
|
||||
modo: op.Parametros.Controle.AtuModoControle,
|
||||
desligarSemBicoAberto: true,
|
||||
potenciaMinPid: Bomba.Controle.PotenciaMinPID,
|
||||
Kp: Bomba.Controle.Kp,
|
||||
Ki: Bomba.Controle.Ki,
|
||||
Kd: Bomba.Controle.Kd
|
||||
);
|
||||
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: op.Parametros.Controle.PulverizadorAutomatico,
|
||||
potencia: 100,
|
||||
pressao: op.Parametros.Controle.AtuPressaoLinha
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
bool ligar = op.Parametros.Controle.AtuAgitadorModo != ModoAgitadorCalda.SemAgitacao;
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: ligar,
|
||||
status: true,
|
||||
potencia: 100,
|
||||
pressao: -1
|
||||
);
|
||||
|
||||
bool BombaLigou() => Bomba.ComandoAtuar == (Bomba._EstadoLeitura == Estado.Ligado);
|
||||
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(BombaLigou, 3000, 200);
|
||||
BombaOk = BombaLigou() || !Bomba.Mandatorio;
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, BombaOk);
|
||||
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: false,
|
||||
potencia: 100,
|
||||
pressao: -1
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Testar os bicos
|
||||
|
|
|
|||
Loading…
Reference in New Issue