Atualizado forma de calibragem do atuador
This commit is contained in:
parent
504277b6bd
commit
2f37aa1c9c
|
|
@ -1915,7 +1915,8 @@ namespace AgroBase.Models.Modules
|
|||
double? potenciaMinPid = null,
|
||||
double? Kp = null,
|
||||
double? Ki = null,
|
||||
double? Kd = null
|
||||
double? Kd = null,
|
||||
bool? desligarSemBicoAberto = null
|
||||
)
|
||||
{
|
||||
var dispAtu = Variaveis.OperacaoEmAndamento?.DispAtu;
|
||||
|
|
@ -1926,7 +1927,8 @@ namespace AgroBase.Models.Modules
|
|||
bool comandoControle = bomba.ComandoAtuar;
|
||||
double potenciaControle = bomba.PotenciaSP;
|
||||
double pressaoControle = bomba.PressaoSP;
|
||||
var modoControle = bomba.Controle.Modo;
|
||||
ModoControleBomba modoControle = bomba.Controle.Modo;
|
||||
bool desligarSemBicoAbertoControle = bomba.Controle.DesligarSemBicosAbertos;
|
||||
double potenciaMinPidControle = bomba.Controle.PotenciaMinPID;
|
||||
double kpControle = bomba.Controle.Kp;
|
||||
double kiControle = bomba.Controle.Ki;
|
||||
|
|
@ -1942,6 +1944,7 @@ namespace AgroBase.Models.Modules
|
|||
}
|
||||
|
||||
if (modo.HasValue) bomba.Controle.Modo = modo.Value;
|
||||
if (desligarSemBicoAberto.HasValue) bomba.Controle.DesligarSemBicosAbertos = desligarSemBicoAberto.Value;
|
||||
if (potenciaMinPid.HasValue) bomba.Controle.PotenciaMinPID = potenciaMinPid.Value;
|
||||
if (Kp.HasValue) bomba.Controle.Kp = Kp.Value;
|
||||
if (Ki.HasValue) bomba.Controle.Ki = Ki.Value;
|
||||
|
|
@ -1962,6 +1965,7 @@ namespace AgroBase.Models.Modules
|
|||
bomba.PotenciaSP = potenciaControle;
|
||||
bomba.PressaoSP = pressaoControle;
|
||||
bomba.Controle.Modo = modoControle;
|
||||
bomba.Controle.DesligarSemBicosAbertos = desligarSemBicoAbertoControle;
|
||||
bomba.Controle.PotenciaMinPID = potenciaMinPidControle;
|
||||
bomba.Controle.Kp = kpControle;
|
||||
bomba.Controle.Ki = kiControle;
|
||||
|
|
@ -2021,18 +2025,18 @@ namespace AgroBase.Models.Modules
|
|||
continue;
|
||||
}
|
||||
|
||||
if (Bomba.ID == BombaPressurizadora.ID)
|
||||
bool EhBombaPressurizadora = Bomba.ID == BombaPressurizadora.ID;
|
||||
double pressaoTeste = 80.0;
|
||||
|
||||
if (EhBombaPressurizadora)
|
||||
{
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command2,
|
||||
setarControle: true,
|
||||
status: true,
|
||||
modo: op.Parametros.Controle.AtuModoControle,
|
||||
potenciaMinPid: Bomba.Controle.PotenciaMinPID,
|
||||
Kp: Bomba.Controle.Kp,
|
||||
Ki: Bomba.Controle.Ki,
|
||||
Kd: Bomba.Controle.Kd
|
||||
modo: ModoControleBomba.OnOff,
|
||||
desligarSemBicoAberto: false
|
||||
);
|
||||
|
||||
EnviarComandoFisicoBomba(
|
||||
|
|
@ -2041,7 +2045,7 @@ namespace AgroBase.Models.Modules
|
|||
setarControle: true,
|
||||
status: true,
|
||||
potencia: 100,
|
||||
pressao: op.Parametros.Controle.AtuPressaoLinha
|
||||
pressao: pressaoTeste
|
||||
);
|
||||
}
|
||||
else
|
||||
|
|
@ -2061,46 +2065,62 @@ namespace AgroBase.Models.Modules
|
|||
{
|
||||
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);
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, true);
|
||||
|
||||
bool bombaOk = true;
|
||||
|
||||
if (!EhBombaPressurizadora)
|
||||
{
|
||||
bool BombaLigou() => Bomba.ComandoAtuar == (Bomba._EstadoLeitura == Estado.Ligado);
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(BombaLigou, 3000, 200);
|
||||
bombaOk = BombaLigou();
|
||||
}
|
||||
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, bombaOk);
|
||||
continue;
|
||||
}
|
||||
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(Bomba.AtingiuPressao, 3000, 200);
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(() => Bomba.AtingiuPressao(pressaoTeste), 3000, 200);
|
||||
|
||||
bool BombaOk = Bomba.AtingiuPressao();
|
||||
if (BombaOk)
|
||||
bool BombaOk = Bomba.AtingiuPressao(pressaoTeste);
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, BombaOk);
|
||||
|
||||
if (EhBombaPressurizadora)
|
||||
{
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, true);
|
||||
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
|
||||
{
|
||||
foreach (var Bico in BicosPulverizadores.Where(x => x.Comandar && x.Inicializado))
|
||||
{
|
||||
EnviarComandoFisicoBico(
|
||||
Bico,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: true
|
||||
);
|
||||
}
|
||||
|
||||
await Task.Delay(3000);
|
||||
|
||||
foreach (var Bico in BicosPulverizadores.Where(x => x.Comandar && x.Inicializado))
|
||||
{
|
||||
EnviarComandoFisicoBico(
|
||||
Bico,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: false
|
||||
);
|
||||
}
|
||||
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(Bomba.AtingiuPressao, 4000, 200);
|
||||
|
||||
BombaOk = Bomba.AtingiuPressao();
|
||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, BombaOk);
|
||||
bool ligar = op.Parametros.Controle.AtuAgitadorModo != ModoAgitadorCalda.SemAgitacao;
|
||||
EnviarComandoFisicoBomba(
|
||||
Bomba,
|
||||
CanMessagePosicaoDados.Command1,
|
||||
setarControle: true,
|
||||
status: ligar,
|
||||
potencia: 100,
|
||||
pressao: -1
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Testar os bicos
|
||||
|
|
@ -2606,6 +2626,7 @@ namespace AgroBase.Models.Modules
|
|||
new byte[]
|
||||
{
|
||||
(byte)Controle.Modo,
|
||||
(byte)(Controle.DesligarSemBicosAbertos ? 1 : 0),
|
||||
(byte)Controle.PotenciaMinPID,
|
||||
ConverterPIDParaByte(Controle.Kp),
|
||||
ConverterPIDParaByte(Controle.Ki),
|
||||
|
|
@ -2621,13 +2642,22 @@ namespace AgroBase.Models.Modules
|
|||
}
|
||||
}
|
||||
|
||||
public bool AtingiuPressao() => _PressaoAtual >= Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha;
|
||||
public bool AtingiuPressao(double? pressaoMinima = null)
|
||||
{
|
||||
double alvo = pressaoMinima
|
||||
?? Variaveis.OperacaoEmAndamento?.Parametros?.Controle?.AtuPressaoLinha
|
||||
?? -1;
|
||||
|
||||
return _PressaoAtual >= alvo;
|
||||
}
|
||||
|
||||
|
||||
public class BombaModoControleModel
|
||||
{
|
||||
public ModoControleBomba Modo { get; set; } = ModoControleBomba.OnOff;
|
||||
|
||||
public bool DesligarSemBicosAbertos { get; set; } = true;
|
||||
|
||||
public double PotenciaMinPID { get; set; } = 40.0;
|
||||
|
||||
public double Kp { get; set; } = 0.08;
|
||||
|
|
|
|||
|
|
@ -668,22 +668,24 @@ class BombaPressurizadora_v2 : public ComponenteCAN {
|
|||
Estado novoEstado = (Estado)data[2];
|
||||
double potencia = (data.size() > 3) ? (double)data[3] : _PotenciaSP;
|
||||
double pressao = (data.size() > 4) ? (double)data[4] : _PressaoSP;
|
||||
|
||||
AtualizarControle(novoEstado, potencia, pressao);
|
||||
return true;
|
||||
}
|
||||
|
||||
case CanMessagePosicaoDados::Command2: {
|
||||
if (data.size() < 7) {
|
||||
if (data.size() < 8) {
|
||||
MostrarLog("Command2 invalido para bomba");
|
||||
return false;
|
||||
}
|
||||
|
||||
ModoControleBomba modo = static_cast<ModoControleBomba>(data[2]);
|
||||
double potenciaMin = (double)data[3];
|
||||
double kp = ((double)data[4]) / 10.0;
|
||||
double ki = ((double)data[5]) / 10.0;
|
||||
double kd = ((double)data[6]) / 10.0;
|
||||
bool desligarSemBicoAberto = (data.size() > 3) ? (int)data[3] == 1 : DesligarSemBicosAbertos;
|
||||
double potenciaMin = (double)data[4];
|
||||
double kp = ((double)data[5]) / 10.0;
|
||||
double ki = ((double)data[6]) / 10.0;
|
||||
double kd = ((double)data[7]) / 10.0;
|
||||
|
||||
DesligarSemBicosAbertos = desligarSemBicoAberto;
|
||||
|
||||
ConfigurarModoControle(modo);
|
||||
ConfigurarPID(kp, ki, kd, potenciaMin, PotenciaMaxPID);
|
||||
|
|
|
|||
Loading…
Reference in New Issue