Merge branch 'robustez' of http://zendioninc.com.br:3000/Zendion/agrobot_base into robustez
This commit is contained in:
commit
071ea61586
|
|
@ -156,7 +156,8 @@ namespace AgroBase.Forms.Atuador
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Bomba,
|
Bomba,
|
||||||
Services.CanMessagePosicaoDados.Command1,
|
Services.CanMessagePosicaoDados.Command1,
|
||||||
Bomba.ComandoAtuar
|
setarControle: true,
|
||||||
|
status: Bomba.ComandoAtuar
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -167,7 +168,8 @@ namespace AgroBase.Forms.Atuador
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Bomba,
|
Bomba,
|
||||||
Services.CanMessagePosicaoDados.Command1,
|
Services.CanMessagePosicaoDados.Command1,
|
||||||
true
|
setarControle: true,
|
||||||
|
status: true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -178,7 +180,8 @@ namespace AgroBase.Forms.Atuador
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Bomba,
|
Bomba,
|
||||||
Services.CanMessagePosicaoDados.Command1,
|
Services.CanMessagePosicaoDados.Command1,
|
||||||
false
|
setarControle: true,
|
||||||
|
status: false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -208,7 +211,8 @@ namespace AgroBase.Forms.Atuador
|
||||||
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
||||||
Bico,
|
Bico,
|
||||||
Services.CanMessagePosicaoDados.Command1,
|
Services.CanMessagePosicaoDados.Command1,
|
||||||
false
|
setarControle: true,
|
||||||
|
status: false
|
||||||
);
|
);
|
||||||
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Invalidate();
|
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Invalidate();
|
||||||
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: Desligado";
|
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: Desligado";
|
||||||
|
|
@ -223,7 +227,8 @@ namespace AgroBase.Forms.Atuador
|
||||||
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
||||||
Bico,
|
Bico,
|
||||||
Services.CanMessagePosicaoDados.Command1,
|
Services.CanMessagePosicaoDados.Command1,
|
||||||
true
|
setarControle: true,
|
||||||
|
status: true
|
||||||
);
|
);
|
||||||
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Invalidate();
|
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Invalidate();
|
||||||
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: Ligado";
|
pnlBicos.Controls.OfType<Panel>().First(x => x.Name == "pnlB_" + ID).Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: Ligado";
|
||||||
|
|
|
||||||
|
|
@ -530,7 +530,8 @@ namespace AgroBase.Forms.IHM
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Bomba,
|
Bomba,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
Ligar,
|
setarControle: true,
|
||||||
|
status: Ligar,
|
||||||
potencia: 100,
|
potencia: 100,
|
||||||
pressao: Pressao + 10
|
pressao: Pressao + 10
|
||||||
);
|
);
|
||||||
|
|
@ -553,7 +554,8 @@ namespace AgroBase.Forms.IHM
|
||||||
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
||||||
Bico,
|
Bico,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
Ligar
|
setarControle: true,
|
||||||
|
status: Ligar
|
||||||
);
|
);
|
||||||
DateTime inicio = DateTime.Now;
|
DateTime inicio = DateTime.Now;
|
||||||
while (DateTime.Now < inicio.AddMilliseconds(Timeout))
|
while (DateTime.Now < inicio.AddMilliseconds(Timeout))
|
||||||
|
|
|
||||||
|
|
@ -675,7 +675,8 @@ namespace AgroBase.Forms.Operacoes
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
||||||
Bico,
|
Bico,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
comando
|
setarControle: true,
|
||||||
|
status: comando
|
||||||
);
|
);
|
||||||
|
|
||||||
pnlAtuadores.Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: " + (comando ? "Ligado" : "Desligado");
|
pnlAtuadores.Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: " + (comando ? "Ligado" : "Desligado");
|
||||||
|
|
@ -700,7 +701,8 @@ namespace AgroBase.Forms.Operacoes
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Bomba,
|
Bomba,
|
||||||
CanMessagePosicaoDados.Command2,
|
CanMessagePosicaoDados.Command2,
|
||||||
true,
|
setarControle: true,
|
||||||
|
status: true,
|
||||||
modo: (ModoControleBomba)cmbModoBomba.SelectedIndex,
|
modo: (ModoControleBomba)cmbModoBomba.SelectedIndex,
|
||||||
potenciaMinPid: potMin,
|
potenciaMinPid: potMin,
|
||||||
Kp: Kp,
|
Kp: Kp,
|
||||||
|
|
@ -711,7 +713,8 @@ namespace AgroBase.Forms.Operacoes
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Bomba,
|
Bomba,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
true,
|
setarControle: true,
|
||||||
|
status: true,
|
||||||
potencia: potMax,
|
potencia: potMax,
|
||||||
pressao: pressao
|
pressao: pressao
|
||||||
);
|
);
|
||||||
|
|
@ -725,7 +728,8 @@ namespace AgroBase.Forms.Operacoes
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Bomba,
|
Bomba,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
false
|
setarControle: true,
|
||||||
|
status: false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -740,7 +744,8 @@ namespace AgroBase.Forms.Operacoes
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Agitador,
|
Agitador,
|
||||||
CanMessagePosicaoDados.Command2,
|
CanMessagePosicaoDados.Command2,
|
||||||
true,
|
setarControle: true,
|
||||||
|
status: true,
|
||||||
modo: Agitador.Controle.Modo,
|
modo: Agitador.Controle.Modo,
|
||||||
potenciaMinPid: Agitador.Controle.PotenciaMinPID,
|
potenciaMinPid: Agitador.Controle.PotenciaMinPID,
|
||||||
Kp: Agitador.Controle.Kp,
|
Kp: Agitador.Controle.Kp,
|
||||||
|
|
@ -751,7 +756,8 @@ namespace AgroBase.Forms.Operacoes
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Agitador,
|
Agitador,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
true,
|
setarControle: true,
|
||||||
|
status: true,
|
||||||
potencia: potencia
|
potencia: potencia
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -764,7 +770,8 @@ namespace AgroBase.Forms.Operacoes
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
Agitador,
|
Agitador,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
false
|
setarControle: true,
|
||||||
|
status: false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -631,7 +631,8 @@ namespace AgroBase
|
||||||
op?.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
op?.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
||||||
bico,
|
bico,
|
||||||
Comando.Comando,
|
Comando.Comando,
|
||||||
Comando.EstadoAplicar
|
setarControle: true,
|
||||||
|
status: Comando.EstadoAplicar
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -639,7 +640,8 @@ namespace AgroBase
|
||||||
op?.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
op?.DispAtu?.Dados?.EnviarComandoFisicoBomba(
|
||||||
bomba,
|
bomba,
|
||||||
Comando.Comando,
|
Comando.Comando,
|
||||||
Comando.EstadoAplicar
|
setarControle: true,
|
||||||
|
status: Comando.EstadoAplicar
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1335,7 +1335,8 @@ namespace AgroBase.Models.Modules
|
||||||
EnviarComandoFisicoBomba(
|
EnviarComandoFisicoBomba(
|
||||||
bomba,
|
bomba,
|
||||||
CanMessagePosicaoDados.Command2,
|
CanMessagePosicaoDados.Command2,
|
||||||
true,
|
setarControle: true,
|
||||||
|
status: true,
|
||||||
modo: bomba.Controle.Modo,
|
modo: bomba.Controle.Modo,
|
||||||
potenciaMinPid: bomba.Controle.PotenciaMinPID,
|
potenciaMinPid: bomba.Controle.PotenciaMinPID,
|
||||||
Kp: bomba.Controle.Kp,
|
Kp: bomba.Controle.Kp,
|
||||||
|
|
@ -1361,7 +1362,8 @@ namespace AgroBase.Models.Modules
|
||||||
EnviarComandoFisicoBomba(
|
EnviarComandoFisicoBomba(
|
||||||
agitador,
|
agitador,
|
||||||
CanMessagePosicaoDados.Command2,
|
CanMessagePosicaoDados.Command2,
|
||||||
true,
|
setarControle: true,
|
||||||
|
status: true,
|
||||||
modo: agitador.Controle.Modo,
|
modo: agitador.Controle.Modo,
|
||||||
potenciaMinPid: agitador.Controle.PotenciaMinPID,
|
potenciaMinPid: agitador.Controle.PotenciaMinPID,
|
||||||
Kp: agitador.Controle.Kp,
|
Kp: agitador.Controle.Kp,
|
||||||
|
|
@ -1431,7 +1433,8 @@ namespace AgroBase.Models.Modules
|
||||||
EnviarComandoFisicoBomba(
|
EnviarComandoFisicoBomba(
|
||||||
bomba,
|
bomba,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
statusDesejado,
|
setarControle: false,
|
||||||
|
status: statusDesejado,
|
||||||
potencia: potenciaEfetiva,
|
potencia: potenciaEfetiva,
|
||||||
pressao: pressaoEfetiva
|
pressao: pressaoEfetiva
|
||||||
);
|
);
|
||||||
|
|
@ -1738,7 +1741,8 @@ namespace AgroBase.Models.Modules
|
||||||
EnviarComandoFisicoBico(
|
EnviarComandoFisicoBico(
|
||||||
bico,
|
bico,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
statusDesejado,
|
setarControle: false,
|
||||||
|
status: statusDesejado,
|
||||||
angulo: anguloDesejado
|
angulo: anguloDesejado
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1826,12 +1830,13 @@ namespace AgroBase.Models.Modules
|
||||||
|
|
||||||
bool pressaoDivergente = bomba.Sensor_ID_Num > -1 && Math.Abs(bomba._PressaoSP - pressaoEfetiva) > 0.05;
|
bool pressaoDivergente = bomba.Sensor_ID_Num > -1 && Math.Abs(bomba._PressaoSP - pressaoEfetiva) > 0.05;
|
||||||
|
|
||||||
if (potenciaDivergente || pressaoDivergente) // estadoDivergente ||
|
if (estadoDivergente || potenciaDivergente || pressaoDivergente)
|
||||||
{
|
{
|
||||||
EnviarComandoFisicoBomba(
|
EnviarComandoFisicoBomba(
|
||||||
bomba,
|
bomba,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
statusDesejado,
|
setarControle: false,
|
||||||
|
status: statusDesejado,
|
||||||
potencia: potenciaEfetiva,
|
potencia: potenciaEfetiva,
|
||||||
pressao: pressaoEfetiva
|
pressao: pressaoEfetiva
|
||||||
);
|
);
|
||||||
|
|
@ -1851,9 +1856,10 @@ namespace AgroBase.Models.Modules
|
||||||
}
|
}
|
||||||
|
|
||||||
public void EnviarComandoFisicoBico(
|
public void EnviarComandoFisicoBico(
|
||||||
AtuadorBicoModel bico,
|
AtuadorBicoModel bico,
|
||||||
CanMessagePosicaoDados dado,
|
CanMessagePosicaoDados dado,
|
||||||
bool status,
|
bool setarControle,
|
||||||
|
bool status,
|
||||||
double? angulo = null
|
double? angulo = null
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
@ -1862,20 +1868,46 @@ namespace AgroBase.Models.Modules
|
||||||
if (dispAtu?.Dados?.Conectado != true || bico == null)
|
if (dispAtu?.Dados?.Conectado != true || bico == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bico.ComandoAtuar = status;
|
bool comandoControle = bico.ComandoAtuar;
|
||||||
if (angulo.HasValue) bico.AnguloControle = angulo.Value;
|
double anguloControle = bico.AnguloControle;
|
||||||
|
|
||||||
(_, _, byte[] data) = bico.ProtocoloComando();
|
try
|
||||||
|
{
|
||||||
|
bico.ComandoAtuar = status;
|
||||||
|
|
||||||
dispAtu.AdicionarMensagemFila(bico.ID_Num, dado, dado, data, false);
|
if (angulo.HasValue)
|
||||||
bico.UltimoComandoEnviado = DateTime.Now;
|
bico.AnguloControle = angulo.Value;
|
||||||
bico.UltimoStatusDesejado = status;
|
|
||||||
if (angulo.HasValue) bico.UltimoAnguloDesejado = angulo.Value;
|
(_, _, byte[] data) = bico.ProtocoloComando();
|
||||||
|
|
||||||
|
dispAtu.AdicionarMensagemFila(
|
||||||
|
bico.ID_Num,
|
||||||
|
dado,
|
||||||
|
dado,
|
||||||
|
data,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
bico.UltimoComandoEnviado = DateTime.Now;
|
||||||
|
bico.UltimoStatusDesejado = status;
|
||||||
|
|
||||||
|
if (angulo.HasValue)
|
||||||
|
bico.UltimoAnguloDesejado = angulo.Value;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (!setarControle)
|
||||||
|
{
|
||||||
|
bico.ComandoAtuar = comandoControle;
|
||||||
|
bico.AnguloControle = anguloControle;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void EnviarComandoFisicoBomba(
|
public void EnviarComandoFisicoBomba(
|
||||||
AtuadorBombaModel bomba,
|
AtuadorBombaModel bomba,
|
||||||
CanMessagePosicaoDados dado,
|
CanMessagePosicaoDados dado,
|
||||||
|
bool setarControle,
|
||||||
bool status,
|
bool status,
|
||||||
double? potencia = null,
|
double? potencia = null,
|
||||||
double? pressao = null,
|
double? pressao = null,
|
||||||
|
|
@ -1883,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;
|
||||||
|
|
@ -1891,10 +1924,27 @@ namespace AgroBase.Models.Modules
|
||||||
if (dispAtu?.Dados?.Conectado != true || bomba == null)
|
if (dispAtu?.Dados?.Conectado != true || bomba == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bomba.ComandoAtuar = status;
|
bool comandoControle = bomba.ComandoAtuar;
|
||||||
if (potencia.HasValue) bomba.PotenciaSP = potencia.Value;
|
double potenciaControle = bomba.PotenciaSP;
|
||||||
if (pressao.HasValue) bomba.PressaoSP = pressao.Value;
|
double pressaoControle = bomba.PressaoSP;
|
||||||
|
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;
|
||||||
|
double kdControle = bomba.Controle.Kd;
|
||||||
|
|
||||||
|
bool ehComandoEstado = dado == CanMessagePosicaoDados.Command1;
|
||||||
|
|
||||||
|
if (ehComandoEstado)
|
||||||
|
{
|
||||||
|
bomba.ComandoAtuar = status;
|
||||||
|
if (potencia.HasValue) bomba.PotenciaSP = potencia.Value;
|
||||||
|
if (pressao.HasValue) bomba.PressaoSP = pressao.Value;
|
||||||
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
|
@ -1908,6 +1958,19 @@ namespace AgroBase.Models.Modules
|
||||||
bomba.UltimoStatusDesejado = status;
|
bomba.UltimoStatusDesejado = status;
|
||||||
if (potencia.HasValue) bomba.UltimaPotenciaDesejada = potencia.Value;
|
if (potencia.HasValue) bomba.UltimaPotenciaDesejada = potencia.Value;
|
||||||
if (pressao.HasValue) bomba.UltimaPressaoDesejada = pressao.Value;
|
if (pressao.HasValue) bomba.UltimaPressaoDesejada = pressao.Value;
|
||||||
|
|
||||||
|
if (!setarControle)
|
||||||
|
{
|
||||||
|
bomba.ComandoAtuar = comandoControle;
|
||||||
|
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;
|
||||||
|
bomba.Controle.Kd = kdControle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1962,25 +2025,27 @@ 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,
|
||||||
true,
|
setarControle: true,
|
||||||
modo: op.Parametros.Controle.AtuModoControle,
|
status: true,
|
||||||
potenciaMinPid: Bomba.Controle.PotenciaMinPID,
|
modo: ModoControleBomba.OnOff,
|
||||||
Kp: Bomba.Controle.Kp,
|
desligarSemBicoAberto: false
|
||||||
Ki: Bomba.Controle.Ki,
|
|
||||||
Kd: Bomba.Controle.Kd
|
|
||||||
);
|
);
|
||||||
|
|
||||||
EnviarComandoFisicoBomba(
|
EnviarComandoFisicoBomba(
|
||||||
Bomba,
|
Bomba,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
true,
|
setarControle: true,
|
||||||
|
status: true,
|
||||||
potencia: 100,
|
potencia: 100,
|
||||||
pressao: op.Parametros.Controle.AtuPressaoLinha
|
pressao: pressaoTeste
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -1989,7 +2054,8 @@ namespace AgroBase.Models.Modules
|
||||||
EnviarComandoFisicoBomba(
|
EnviarComandoFisicoBomba(
|
||||||
Bomba,
|
Bomba,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
ligar,
|
setarControle: true,
|
||||||
|
status: ligar,
|
||||||
potencia: 100,
|
potencia: 100,
|
||||||
pressao: -1
|
pressao: -1
|
||||||
);
|
);
|
||||||
|
|
@ -1999,44 +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,
|
||||||
true
|
status: ligar,
|
||||||
);
|
potencia: 100,
|
||||||
}
|
pressao: -1
|
||||||
|
);
|
||||||
await Task.Delay(3000);
|
|
||||||
|
|
||||||
foreach (var Bico in BicosPulverizadores.Where(x => x.Comandar && x.Inicializado))
|
|
||||||
{
|
|
||||||
EnviarComandoFisicoBico(
|
|
||||||
Bico,
|
|
||||||
CanMessagePosicaoDados.Command1,
|
|
||||||
false
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
await FuncoesGlobais.AguardarCondicaoAsync(Bomba.AtingiuPressao, 4000, 200);
|
|
||||||
|
|
||||||
BombaOk = Bomba.AtingiuPressao();
|
|
||||||
op.MarcarModuloCalibrado(Dispositivo, Bomba.ID, BombaOk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Testar os bicos
|
// Testar os bicos
|
||||||
|
|
@ -2052,7 +2136,8 @@ namespace AgroBase.Models.Modules
|
||||||
EnviarComandoFisicoBico(
|
EnviarComandoFisicoBico(
|
||||||
Bico,
|
Bico,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
true
|
setarControle: true,
|
||||||
|
status: true
|
||||||
);
|
);
|
||||||
|
|
||||||
await Task.Delay(200);
|
await Task.Delay(200);
|
||||||
|
|
@ -2060,7 +2145,8 @@ namespace AgroBase.Models.Modules
|
||||||
EnviarComandoFisicoBico(
|
EnviarComandoFisicoBico(
|
||||||
Bico,
|
Bico,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
false
|
setarControle: true,
|
||||||
|
status: false
|
||||||
);
|
);
|
||||||
|
|
||||||
await Task.Delay(200);
|
await Task.Delay(200);
|
||||||
|
|
@ -2540,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),
|
||||||
|
|
@ -2555,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;
|
||||||
|
|
|
||||||
|
|
@ -95,11 +95,11 @@ namespace AgroBase.Models
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _tmrLogsOperacao.Interval;
|
return _tmrLogsOperacao?.Interval ?? 1000;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_tmrLogsOperacao.SetInterval((int)value);
|
_tmrLogsOperacao?.SetInterval((int)value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private AsyncTaskTimerModel _tmrLogsOperacao;
|
private AsyncTaskTimerModel _tmrLogsOperacao;
|
||||||
|
|
@ -1249,6 +1249,8 @@ namespace AgroBase.Models
|
||||||
|
|
||||||
novaOp.DefinirComponentesEmUso();
|
novaOp.DefinirComponentesEmUso();
|
||||||
|
|
||||||
|
Variaveis.OperacaoEmAndamento = novaOp;
|
||||||
|
|
||||||
var ruasSelecionadas = parametros.RuasPercorrer ?? new List<string>();
|
var ruasSelecionadas = parametros.RuasPercorrer ?? new List<string>();
|
||||||
|
|
||||||
if (parametros.Mapa != null)
|
if (parametros.Mapa != null)
|
||||||
|
|
@ -1258,8 +1260,6 @@ namespace AgroBase.Models
|
||||||
novaOp.Mapa.PopularTrajetoriaMapa(parametros.Mapa);
|
novaOp.Mapa.PopularTrajetoriaMapa(parametros.Mapa);
|
||||||
}
|
}
|
||||||
|
|
||||||
Variaveis.OperacaoEmAndamento = novaOp;
|
|
||||||
|
|
||||||
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
|
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
|
||||||
|
|
||||||
return novaOp;
|
return novaOp;
|
||||||
|
|
@ -1986,7 +1986,8 @@ namespace AgroBase.Models
|
||||||
op.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
op.DispAtu?.Dados?.EnviarComandoFisicoBico(
|
||||||
bicos[i],
|
bicos[i],
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
bicos[i].ComandoAtuar
|
setarControle: true,
|
||||||
|
status: bicos[i].ComandoAtuar
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2590,7 +2591,8 @@ namespace AgroBase.Models
|
||||||
dadosAtu?.EnviarComandoFisicoBico(
|
dadosAtu?.EnviarComandoFisicoBico(
|
||||||
bico,
|
bico,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
controleBase.Controle.Estado == true,
|
setarControle: true,
|
||||||
|
status: controleBase.Controle.Estado == true,
|
||||||
angulo: controleBase.Controle.AnguloSP
|
angulo: controleBase.Controle.AnguloSP
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
|
|
@ -2616,7 +2618,8 @@ namespace AgroBase.Models
|
||||||
dadosAtu?.EnviarComandoFisicoBomba(
|
dadosAtu?.EnviarComandoFisicoBomba(
|
||||||
bomba,
|
bomba,
|
||||||
CanMessagePosicaoDados.Command1,
|
CanMessagePosicaoDados.Command1,
|
||||||
controleBase.Controle.Estado == true,
|
setarControle: true,
|
||||||
|
status: controleBase.Controle.Estado == true,
|
||||||
potencia: controleBase.Controle.Potencia,
|
potencia: controleBase.Controle.Potencia,
|
||||||
pressao: controleBase.Controle.Pressao,
|
pressao: controleBase.Controle.Pressao,
|
||||||
modo: op.Parametros.Controle.AtuModoControle
|
modo: op.Parametros.Controle.AtuModoControle
|
||||||
|
|
@ -3474,7 +3477,9 @@ namespace AgroBase.Models
|
||||||
else if (statusAtual == StatusOperacao.Aguardando)
|
else if (statusAtual == StatusOperacao.Aguardando)
|
||||||
{
|
{
|
||||||
double segundosAguardados = op.Sensoriamento?.Operacao?.TempoAguardandoSeg ?? 0;
|
double segundosAguardados = op.Sensoriamento?.Operacao?.TempoAguardandoSeg ?? 0;
|
||||||
double segundosRestantes = Math.Max(0, op.TempoIniciarOperacao - segundosAguardados);
|
double tempoTotalEspera = Math.Max(0, op.TempoIniciarOperacao);
|
||||||
|
|
||||||
|
double segundosRestantes = Math.Max(0, tempoTotalEspera - segundosAguardados);
|
||||||
|
|
||||||
int segundosTela = (int)Math.Ceiling(segundosRestantes);
|
int segundosTela = (int)Math.Ceiling(segundosRestantes);
|
||||||
string plural = segundosTela == 1 ? "" : "s";
|
string plural = segundosTela == 1 ? "" : "s";
|
||||||
|
|
@ -3762,17 +3767,29 @@ namespace AgroBase.Models
|
||||||
op.Controle.Motivos = RedisService.GetField<List<string>>(CtxKey.DadosControle, "motivos", new List<string>());
|
op.Controle.Motivos = RedisService.GetField<List<string>>(CtxKey.DadosControle, "motivos", new List<string>());
|
||||||
|
|
||||||
double tempoDecorridoSeg = 0;
|
double tempoDecorridoSeg = 0;
|
||||||
|
|
||||||
if (Operacao.DataInicio != DateTime.MinValue)
|
if (Operacao.DataInicio != DateTime.MinValue)
|
||||||
{
|
{
|
||||||
DateTime fim =
|
DateTime fim = Operacao.DataFim != DateTime.MinValue ? Operacao.DataFim : agora;
|
||||||
Operacao.DataFim != DateTime.MinValue
|
|
||||||
? Operacao.DataFim
|
|
||||||
: agora;
|
|
||||||
|
|
||||||
tempoDecorridoSeg = Math.Max(0, (fim - Operacao.DataInicio).TotalSeconds);
|
tempoDecorridoSeg = Math.Max(0, (fim - Operacao.DataInicio).TotalSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double tempoAguardandoRaw = RedisService.GetField<double>(CtxKey.DadosOperacao, "tempo_aguardando", 0.0);
|
||||||
|
double tempoAguardarInicio = RedisService.GetField<double>(CtxKey.DadosOperacao, "tempo_aguardar_inicio_operacao", op.TempoIniciarOperacao);
|
||||||
|
double agoraUnix = DateTimeOffset.Now.ToUnixTimeMilliseconds() / 1000.0;
|
||||||
|
double tempoAguardandoSeg;
|
||||||
|
if (tempoAguardandoRaw > 1_000_000_000)
|
||||||
|
{
|
||||||
|
// Redis está mandando timestamp Unix de início da espera.
|
||||||
|
tempoAguardandoSeg = Math.Max(0.0, agoraUnix - tempoAguardandoRaw);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Compatibilidade: caso algum fluxo antigo mande duração em segundos.
|
||||||
|
tempoAguardandoSeg = Math.Max(0.0, tempoAguardandoRaw);
|
||||||
|
}
|
||||||
|
|
||||||
|
op.TempoIniciarOperacao = Math.Max(0, Convert.ToInt32(Math.Round(tempoAguardarInicio)));
|
||||||
|
|
||||||
var operacaoAtualizada = new OperacaoSensoriamentoLogModel()
|
var operacaoAtualizada = new OperacaoSensoriamentoLogModel()
|
||||||
{
|
{
|
||||||
Momento = agora,
|
Momento = agora,
|
||||||
|
|
@ -3788,6 +3805,7 @@ namespace AgroBase.Models
|
||||||
DataInicio = Operacao.DataInicio,
|
DataInicio = Operacao.DataInicio,
|
||||||
DataFim = Operacao.DataFim,
|
DataFim = Operacao.DataFim,
|
||||||
TempoDecorridoSeg = tempoDecorridoSeg,
|
TempoDecorridoSeg = tempoDecorridoSeg,
|
||||||
|
TempoAguardandoSeg = tempoAguardandoSeg,
|
||||||
TipoCanAtivo = CanManager.TipoServico,
|
TipoCanAtivo = CanManager.TipoServico,
|
||||||
|
|
||||||
OperacaoLiberada = RedisService.GetField(CtxKey.DadosOperacao, "liberado", false),
|
OperacaoLiberada = RedisService.GetField(CtxKey.DadosOperacao, "liberado", false),
|
||||||
|
|
@ -3795,7 +3813,6 @@ namespace AgroBase.Models
|
||||||
ErroOperacaoLiberada = RedisService.GetField<string>(CtxKey.DadosOperacao, "motivo_nao_liberado"),
|
ErroOperacaoLiberada = RedisService.GetField<string>(CtxKey.DadosOperacao, "motivo_nao_liberado"),
|
||||||
OperacaoLiberacaoDebug = RedisService.GetField<JObject>(CtxKey.DadosOperacao, "operacao_liberacao_debug"),
|
OperacaoLiberacaoDebug = RedisService.GetField<JObject>(CtxKey.DadosOperacao, "operacao_liberacao_debug"),
|
||||||
StatusOperacaoAtual = (StatusOperacao)RedisService.GetField<int>(CtxKey.DadosOperacao, "status", 0),
|
StatusOperacaoAtual = (StatusOperacao)RedisService.GetField<int>(CtxKey.DadosOperacao, "status", 0),
|
||||||
TempoAguardandoSeg = RedisService.GetField<long>(CtxKey.DadosOperacao, "tempo_aguardando", 0),
|
|
||||||
|
|
||||||
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>(op.Parametros.ModulosMandatorios ?? new List<OperacaoModulosMandatoriosModel>()),
|
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>(op.Parametros.ModulosMandatorios ?? new List<OperacaoModulosMandatoriosModel>()),
|
||||||
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>(op.Parametros.ParametrosMandatorios ?? new List<OperacaoParametrosMandatoriosModel>()),
|
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>(op.Parametros.ParametrosMandatorios ?? new List<OperacaoParametrosMandatoriosModel>()),
|
||||||
|
|
@ -4899,6 +4916,9 @@ namespace AgroBase.Models
|
||||||
{
|
{
|
||||||
if (op == null) return;
|
if (op == null) return;
|
||||||
|
|
||||||
|
if (!ReferenceEquals(Variaveis.OperacaoEmAndamento, op))
|
||||||
|
op = Variaveis.OperacaoEmAndamento;
|
||||||
|
|
||||||
DateTime agora = DateTime.Now;
|
DateTime agora = DateTime.Now;
|
||||||
|
|
||||||
// Contexto
|
// Contexto
|
||||||
|
|
|
||||||
|
|
@ -671,7 +671,7 @@ namespace AgroBase.Models
|
||||||
if (!_TrajetoriaFixaDefinida) return;
|
if (!_TrajetoriaFixaDefinida) return;
|
||||||
|
|
||||||
// Atualiza apenas os pontos dentro do intervalo definido
|
// Atualiza apenas os pontos dentro do intervalo definido
|
||||||
foreach (var ponto in _TrajetoriaJanela)
|
foreach (var ponto in _TrajetoriaJanela ?? new List<PontoTrajetoriaModel>())
|
||||||
{
|
{
|
||||||
ponto.AtualizarPropriedades();
|
ponto.AtualizarPropriedades();
|
||||||
}
|
}
|
||||||
|
|
@ -2847,8 +2847,16 @@ namespace AgroBase.Models
|
||||||
var op = Variaveis.OperacaoEmAndamento;
|
var op = Variaveis.OperacaoEmAndamento;
|
||||||
|
|
||||||
// Valida índice do corredor
|
// Valida índice do corredor
|
||||||
if (op.Trajetoria?._Corredores?.Count <= idxCorredor)
|
if ((op.Trajetoria?._Corredores?.Count ?? 0) <= idxCorredor)
|
||||||
|
{
|
||||||
|
Liberado = false;
|
||||||
|
Motivos = new List<string>()
|
||||||
|
{
|
||||||
|
$"Trajetória não possui corredores definidos. {idxCorredor}/{op.Trajetoria?._Corredores?.Count}"
|
||||||
|
};
|
||||||
|
Status = AutonomiaCorredorStatus.Critico;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Se já registrou esse corredor como liberado e travado/feito, não recalcula
|
// Se já registrou esse corredor como liberado e travado/feito, não recalcula
|
||||||
if (CorredoresLiberados.ContainsKey(idxCorredor) && CorredoresLiberados[idxCorredor].Liberado)
|
if (CorredoresLiberados.ContainsKey(idxCorredor) && CorredoresLiberados[idxCorredor].Liberado)
|
||||||
|
|
|
||||||
|
|
@ -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