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