Ajustes para atualizacoes de firmware

This commit is contained in:
Diego Freitas 2025-12-16 16:33:06 -03:00
parent c15d78d382
commit b3b64a9aed
17 changed files with 173 additions and 92 deletions

View File

@ -834,7 +834,7 @@ namespace AgroBase.Forms.IHM
Dispositivo.Dados.Servos.ForEach(x => x.Controlar = false);
ServoFreio.Controlar = true;
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sFRO, ServoFreio.ID, Angulo);
GeneralJoystick.EnviarComandoSensoriamento(ServoFreio.Componente, ServoFreio.ID, Angulo);
//Dispositivo.AdicionarMensagemFila(Dispositivo.Dados.Modulo_ID, ServoFreio.ProtocoloComando(), true, false);
DateTime Inicio = DateTime.Now;

View File

@ -69,8 +69,8 @@
this.lblD_Sen_sNTC_ET = new System.Windows.Forms.Label();
this.lblD_Sen_sNTC_EF = new System.Windows.Forms.Label();
this.lblD_Sen_sNTC_DF = new System.Windows.Forms.Label();
this.lblD_Sen_sFRO_DT = new System.Windows.Forms.Label();
this.lblD_Sen_sFRO_ET = new System.Windows.Forms.Label();
this.lblD_Sen_sSRV_DT = new System.Windows.Forms.Label();
this.lblD_Sen_sSRV_ET = new System.Windows.Forms.Label();
this.lblD_Sen_sCOR_3V = new System.Windows.Forms.Label();
this.lblD_Sen_sCOR_5V = new System.Windows.Forms.Label();
this.lblD_Sen_sCOR_7V2 = new System.Windows.Forms.Label();
@ -549,29 +549,29 @@
this.lblD_Sen_sNTC_DF.Text = "TMP";
this.lblD_Sen_sNTC_DF.Click += new System.EventHandler(this.lblModulo_Click);
//
// lblD_Sen_sFRO_DT
// lblD_Sen_sSRV_DT
//
this.lblD_Sen_sFRO_DT.AutoSize = true;
this.lblD_Sen_sFRO_DT.BackColor = System.Drawing.Color.Lavender;
this.lblD_Sen_sFRO_DT.Cursor = System.Windows.Forms.Cursors.Hand;
this.lblD_Sen_sFRO_DT.Location = new System.Drawing.Point(346, 318);
this.lblD_Sen_sFRO_DT.Name = "lblD_Sen_sFRO_DT";
this.lblD_Sen_sFRO_DT.Size = new System.Drawing.Size(50, 24);
this.lblD_Sen_sFRO_DT.TabIndex = 52;
this.lblD_Sen_sFRO_DT.Text = "FRO";
this.lblD_Sen_sFRO_DT.Click += new System.EventHandler(this.lblModulo_Click);
this.lblD_Sen_sSRV_DT.AutoSize = true;
this.lblD_Sen_sSRV_DT.BackColor = System.Drawing.Color.Lavender;
this.lblD_Sen_sSRV_DT.Cursor = System.Windows.Forms.Cursors.Hand;
this.lblD_Sen_sSRV_DT.Location = new System.Drawing.Point(346, 318);
this.lblD_Sen_sSRV_DT.Name = "lblD_Sen_sSRV_DT";
this.lblD_Sen_sSRV_DT.Size = new System.Drawing.Size(50, 24);
this.lblD_Sen_sSRV_DT.TabIndex = 52;
this.lblD_Sen_sSRV_DT.Text = "FRO";
this.lblD_Sen_sSRV_DT.Click += new System.EventHandler(this.lblModulo_Click);
//
// lblD_Sen_sFRO_ET
// lblD_Sen_sSRV_ET
//
this.lblD_Sen_sFRO_ET.AutoSize = true;
this.lblD_Sen_sFRO_ET.BackColor = System.Drawing.Color.Lavender;
this.lblD_Sen_sFRO_ET.Cursor = System.Windows.Forms.Cursors.Hand;
this.lblD_Sen_sFRO_ET.Location = new System.Drawing.Point(72, 318);
this.lblD_Sen_sFRO_ET.Name = "lblD_Sen_sFRO_ET";
this.lblD_Sen_sFRO_ET.Size = new System.Drawing.Size(50, 24);
this.lblD_Sen_sFRO_ET.TabIndex = 53;
this.lblD_Sen_sFRO_ET.Text = "FRO";
this.lblD_Sen_sFRO_ET.Click += new System.EventHandler(this.lblModulo_Click);
this.lblD_Sen_sSRV_ET.AutoSize = true;
this.lblD_Sen_sSRV_ET.BackColor = System.Drawing.Color.Lavender;
this.lblD_Sen_sSRV_ET.Cursor = System.Windows.Forms.Cursors.Hand;
this.lblD_Sen_sSRV_ET.Location = new System.Drawing.Point(72, 318);
this.lblD_Sen_sSRV_ET.Name = "lblD_Sen_sSRV_ET";
this.lblD_Sen_sSRV_ET.Size = new System.Drawing.Size(50, 24);
this.lblD_Sen_sSRV_ET.TabIndex = 53;
this.lblD_Sen_sSRV_ET.Text = "FRO";
this.lblD_Sen_sSRV_ET.Click += new System.EventHandler(this.lblModulo_Click);
//
// lblD_Sen_sCOR_3V
//
@ -773,8 +773,8 @@
this.Controls.Add(this.lblD_Sen_sCOR_7V2);
this.Controls.Add(this.lblD_Sen_sCOR_5V);
this.Controls.Add(this.lblD_Sen_sCOR_3V);
this.Controls.Add(this.lblD_Sen_sFRO_ET);
this.Controls.Add(this.lblD_Sen_sFRO_DT);
this.Controls.Add(this.lblD_Sen_sSRV_ET);
this.Controls.Add(this.lblD_Sen_sSRV_DT);
this.Controls.Add(this.lblD_Sen_sNTC_DF);
this.Controls.Add(this.lblD_Sen_sNTC_EF);
this.Controls.Add(this.lblD_Sen_sNTC_ET);
@ -877,8 +877,8 @@
private System.Windows.Forms.Label lblD_Sen_sNTC_ET;
private System.Windows.Forms.Label lblD_Sen_sNTC_EF;
private System.Windows.Forms.Label lblD_Sen_sNTC_DF;
private System.Windows.Forms.Label lblD_Sen_sFRO_DT;
private System.Windows.Forms.Label lblD_Sen_sFRO_ET;
private System.Windows.Forms.Label lblD_Sen_sSRV_DT;
private System.Windows.Forms.Label lblD_Sen_sSRV_ET;
private System.Windows.Forms.Label lblD_Sen_sCOR_3V;
private System.Windows.Forms.Label lblD_Sen_sCOR_5V;
private System.Windows.Forms.Label lblD_Sen_sCOR_7V2;

View File

@ -235,7 +235,7 @@ namespace AgroBase.Forms.IHM
{
S_Code Sensor = string.IsNullOrEmpty(Mod_ID) ? S_Code.sVZO : (S_Code)Enum.Parse(typeof(S_Code), Mod_ID);
string modId = lbl.Name.Split('_').Length == 4 ? lbl.Name.Split('_')[3] : "";
if (Sensor == S_Code.sFRO)
if (Sensor == S_Code.sSRV)
{
var freio = Variaveis.OperacaoEmAndamento.DispSen.Dados.Servos.FirstOrDefault(x => x.Componente == Sensor && x.ID.Contains(modId));
lbl.ForeColor = modDesconectado || freio == null
@ -368,7 +368,7 @@ namespace AgroBase.Forms.IHM
{
S_Code Sensor = string.IsNullOrEmpty(Mod_ID) ? S_Code.sVZO : (S_Code)Enum.Parse(typeof(S_Code), Mod_ID);
string modId = lbl.Name.Split('_').Length == 4 ? lbl.Name.Split('_')[3] : "";
if (Sensor == S_Code.sFRO)
if (Sensor == S_Code.sSRV)
{
var freio = Variaveis.OperacaoEmAndamento.DispSen.Dados.Servos.FirstOrDefault(x => x.Componente == Sensor && x.ID.Contains(modId));
saudeIndividual = saudeGeral.saude_individual.FirstOrDefault(x => x.id == freio.ID_Num.ToString());

View File

@ -481,6 +481,7 @@ namespace AgroBase.Forms.Operacoes
gridDados.Rows.Add("Barramento 24V", "", "V");
gridDados.Rows.Add("Barramento 24V", "", "mA");
gridDados.Rows.Add("Nível do Reservatório", "", "%");
gridDados.Rows.Add("Massa do Reservatório", "", "Kg");
gridDados.Rows.Add("Volume do Reservatório", "", "L");
gridDados.Rows.Add("Litro por Metro", "", "L");
gridDados.Rows.Add("Litro por Minuto", "", "L");
@ -539,26 +540,27 @@ namespace AgroBase.Forms.Operacoes
gridDados.Rows[19].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB24V").Tensao).ToString("0.00");
gridDados.Rows[20].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB24V").Corrente).ToString("0.00");
gridDados.Rows[21].Cells[1].Value = _Sensoriamento.Atuador.PercentualReservatorio.ToString("0.00");
gridDados.Rows[22].Cells[1].Value = $"{_Sensoriamento.Atuador.VolumeReservatorio:0.000} ({Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ContadorCarga?.MassaAtual_Kg_Calc ?? 0:0.000} Kg)";
gridDados.Rows[23].Cells[1].Value = _Sensoriamento.Atuador.LPorMetro.ToString("0.000");
gridDados.Rows[24].Cells[1].Value = _Sensoriamento.Atuador.LPorMinuto.ToString("0.000");
gridDados.Rows[25].Cells[1].Value = TimeSpan.FromMinutes(_Sensoriamento.Atuador.TempoEstimadoRestanteMinutos).ToString(@"hh\:mm\:ss");
gridDados.Rows[26].Cells[1].Value = _Sensoriamento.Atuador.DistanciaEstimadaRestanteMetros.ToString("0.00");
gridDados.Rows[27].Cells[1].Value = _Sensoriamento.Atuador.PressaoLinha.ToString("0.00");
gridDados.Rows[28].Cells[1].Value = _Sensoriamento.Atuador.LeituraPotenciaBomba.ToString("0.00");
gridDados.Rows[29].Cells[1].Value = _Sensoriamento.Atuador.VazaoInstantanea.ToString("0.00");
gridDados.Rows[30].Cells[1].Value = $"{_Sensoriamento.Atuador.VazaoMedia:0.000} ({Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.VazaoFluxoMLpSInstantaneaCalc:0.000})";
gridDados.Rows[31].Cells[1].Value = _Sensoriamento.Atuador.VolumeVazaoMl.ToString("0.00");
gridDados.Rows[32].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraEsquerda.ToString("0.00");
gridDados.Rows[33].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraDireita.ToString("0.00");
gridDados.Rows[34].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraAltura.ToString("0.00");
gridDados.Rows[35].Cells[1].Value = "";
gridDados.Rows[36].Cells[1].Value = (_Sensoriamento.IMU.InclinacaoLateral).ToString("0.00");
gridDados.Rows[37].Cells[1].Value = (_Sensoriamento.IMU.InclinacaoFrontal).ToString("0.00");
gridDados.Rows[38].Cells[1].Value = (_Sensoriamento.IMU.Rotacao).ToString("0.00");
gridDados.Rows[39].Cells[1].Value = (_Sensoriamento.IMU.Temperatura).ToString("0.00");
gridDados.Rows[40].Cells[1].Value = (_Sensoriamento.IMU.Pressao).ToString("0.00");
gridDados.Rows[41].Cells[1].Value = (_Sensoriamento.IMU.Altitude).ToString("0.00");
gridDados.Rows[22].Cells[1].Value = $"{_Sensoriamento.Atuador.MassaReservatorio:0.000} ({Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ContadorCarga?.MassaAtual_Kg_Calc ?? 0:0.000})";
gridDados.Rows[23].Cells[1].Value = $"{_Sensoriamento.Atuador.VolumeReservatorio:0.000}";
gridDados.Rows[24].Cells[1].Value = _Sensoriamento.Atuador.LPorMetro.ToString("0.000");
gridDados.Rows[25].Cells[1].Value = _Sensoriamento.Atuador.LPorMinuto.ToString("0.000");
gridDados.Rows[26].Cells[1].Value = TimeSpan.FromMinutes(_Sensoriamento.Atuador.TempoEstimadoRestanteMinutos).ToString(@"hh\:mm\:ss");
gridDados.Rows[27].Cells[1].Value = _Sensoriamento.Atuador.DistanciaEstimadaRestanteMetros.ToString("0.00");
gridDados.Rows[28].Cells[1].Value = _Sensoriamento.Atuador.PressaoLinha.ToString("0.00");
gridDados.Rows[29].Cells[1].Value = _Sensoriamento.Atuador.LeituraPotenciaBomba.ToString("0.00");
gridDados.Rows[30].Cells[1].Value = _Sensoriamento.Atuador.VazaoInstantanea.ToString("0.00");
gridDados.Rows[31].Cells[1].Value = $"{_Sensoriamento.Atuador.VazaoMedia:0.000} ({Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.VazaoFluxoMLpSInstantaneaCalc:0.000})";
gridDados.Rows[32].Cells[1].Value = _Sensoriamento.Atuador.VolumeVazaoMl.ToString("0.00");
gridDados.Rows[33].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraEsquerda.ToString("0.00");
gridDados.Rows[34].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraDireita.ToString("0.00");
gridDados.Rows[35].Cells[1].Value = _Sensoriamento.Atuador.AnguloBarraAltura.ToString("0.00");
gridDados.Rows[36].Cells[1].Value = "";
gridDados.Rows[37].Cells[1].Value = (_Sensoriamento.IMU.InclinacaoLateral).ToString("0.00");
gridDados.Rows[38].Cells[1].Value = (_Sensoriamento.IMU.InclinacaoFrontal).ToString("0.00");
gridDados.Rows[39].Cells[1].Value = (_Sensoriamento.IMU.Rotacao).ToString("0.00");
gridDados.Rows[40].Cells[1].Value = (_Sensoriamento.IMU.Temperatura).ToString("0.00");
gridDados.Rows[41].Cells[1].Value = (_Sensoriamento.IMU.Pressao).ToString("0.00");
gridDados.Rows[42].Cells[1].Value = (_Sensoriamento.IMU.Altitude).ToString("0.00");
}
#endregion

View File

@ -129,6 +129,11 @@ namespace AgroBase.Forms
ID = x.ID,
Funcoes = x.Funcoes
}).ToList());
Dispositivos.AddRange(Disp.Dados.Servos.Select(x => new DispositivoDataModel()
{
ID = x.ID,
Funcoes = x.Funcoes
}));
break;
}
case T_Code.Mvd:

View File

@ -772,10 +772,19 @@ namespace AgroBase
{
Bico.ComandoAtuar = (bool)Status;
if (Bico.ComandoAtuar) Bico.Atuacoes++;
Bico.AnguloControle = (int)Valor;
}
(id_num, posicao, data) = Bico.ProtocoloComando();
}
break;
case S_Code.sSRV:
var Servo = DispAtu?.Dados?.Servos?.FirstOrDefault(x => x.ID == ID && x.Inicializado);
if (Servo != null)
{
Servo._AnguloControle = (int)Valor;
(id_num, posicao, data) = Servo.ProtocoloComando();
}
break;
}
DispAtu.AdicionarMensagemFila(id_num, posicao, posicao, data, false);
@ -791,7 +800,7 @@ namespace AgroBase
{
// Impede execucao de comandos que liguem componentes quando estiver marcado para nao utilizar
if (Componente == S_Code.sRLE && ((Estado)Status) == Estado.Ligado) return;
if (Componente == S_Code.sFRO && ((int)Status) > 0) return;
if (Componente == S_Code.sSRV && ((int)Status) > 0) return;
}
}
@ -819,7 +828,7 @@ namespace AgroBase
(id_num, posicao, data) = Rele.ProtocoloComando();
}
break;
case S_Code.sFRO:
case S_Code.sSRV:
var ServoFreio = DispSen?.Dados?.Servos?.FirstOrDefault(x => x.ID == ID && x.Inicializado);
if (ServoFreio != null)
{

View File

@ -105,8 +105,8 @@ namespace AgroBase.Models.Modules
{
get
{
int pulsos = SensorFluxoLinha?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.QtdPulsos)?.atual?.valor ?? 0;
int periodo = SensorFluxoLinha?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Periodo)?.atual?.valor ?? 0;
int pulsos = (int)(SensorFluxoLinha?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.QtdPulsos)?.atual?.valor ?? 0.0);
int periodo = (int)(SensorFluxoLinha?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Periodo)?.atual?.valor ?? 0.0);
if (pulsos <= 0 || periodo <= 0) return 0.0;
double frequencia = (double)pulsos / (double)periodo * 1000.0; // Hz
@ -248,6 +248,8 @@ namespace AgroBase.Models.Modules
{
ID = "BOMBA",
ID_Num = 51,
Sensor_ID_Num = 63,
ComandoAtuar = false,
Componente = S_Code.sBMB,
Comandar = true,
Mandatorio = true,
@ -364,7 +366,7 @@ namespace AgroBase.Models.Modules
Enviar = true,
Escalar = true,
QtdBytes = 2,
Valor = "32.5"
Valor = "0.0"
}
},
ValoresLeituras = new List<SensorValoresLeituraModel>()
@ -1059,11 +1061,10 @@ namespace AgroBase.Models.Modules
{
foreach (var bico in BicosPulverizadores.Where(x => x.Comandar && x.Inicializado))
{
Estado leituraEstado = bico._EstadoLeitura;
Estado comandoEstado = bico.ComandoAtuar ? Estado.Ligado : Estado.Desligado;
if (leituraEstado != comandoEstado)
if (bico._EstadoLeitura != comandoEstado || bico.AnguloControle != bico._AnguloBicoLeitura)
{
GeneralJoystick.EnviarComandoAtuador(bico.Componente, bico.ID, Status: bico.ComandoAtuar);
GeneralJoystick.EnviarComandoAtuador(bico.Componente, bico.ID, Status: bico.ComandoAtuar, Valor: bico.AnguloControle);
}
}
@ -1093,7 +1094,7 @@ namespace AgroBase.Models.Modules
{
if (servo._AnguloLeiutra != servo._AnguloControle)
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sFRO, servo.ID, servo._AnguloControle);
GeneralJoystick.EnviarComandoAtuador(servo.Componente, servo.ID, Valor: servo._AnguloControle);
}
}
}
@ -1304,6 +1305,7 @@ namespace AgroBase.Models.Modules
}
public List<SensorValoresLeituraModel> ValoresLeituras { get; set; }
public Estado _EstadoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor ?? Estado.Desligado;
public int _AnguloBicoLeitura => ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraAngulo)?.atual?.valor ?? 0;
public (CanMessagePosicaoDados, byte[]) ProtocoloConfiguracao(PinoutDataModel pinout, bool conectar)

View File

@ -485,7 +485,7 @@ namespace AgroBase.Models.Modules
Freio.AtualizarDados();
if (Freio.EnviarComando && Freio.UltimoEnvio.AddMilliseconds(Freio.DelayEnvio) < DateTime.Now)
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sFRO, Freio.Servo.ID, Freio.AnguloControle);
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sSRV, Freio.Servo.ID, Freio.AnguloControle);
Freio.UltimoEnvio = DateTime.Now;
}
}

View File

@ -2299,7 +2299,7 @@ namespace AgroBase.Models.Modules
var valOp = (int?)(ledOP?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.StatusLEDComando)?.atual?.valor) ?? 0;
if (ledOP != null && (!ledOP.Comportamento.Equals(comportamento) || valOp != (int)comportamento.statusLED))
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, ledOP.ID, comportamento);
GeneralJoystick.EnviarComandoSensoriamento(ledOP.Componente, ledOP.ID, comportamento);
}
var statusLedAt = Variaveis.OperacaoEmAndamento.Parametros.Controle.MovimentoAutomatico ? StatusLED.Aceso : StatusLED.Apagado;
@ -2307,7 +2307,7 @@ namespace AgroBase.Models.Modules
if (ledAT != null && (!ledAT.Comportamento.statusLED.Equals(statusLedAt) || (valAt != (int)statusLedAt)))
{
ledAT.Comportamento.statusLED = statusLedAt;
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, ledAT.ID, ledAT.Comportamento);
GeneralJoystick.EnviarComandoSensoriamento(ledAT.Componente, ledAT.ID, ledAT.Comportamento);
}
var statusLedMn = Variaveis.OperacaoEmAndamento.Modo == ModoOperacao.Manual ? StatusLED.Aceso : StatusLED.Apagado;
@ -2315,15 +2315,14 @@ namespace AgroBase.Models.Modules
if (ledMN != null && (!ledMN.Comportamento.statusLED.Equals(statusLedMn) || (valMn != (int)statusLedMn)))
{
ledMN.Comportamento.statusLED = statusLedMn;
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sLED, ledMN.ID, ledMN.Comportamento);
GeneralJoystick.EnviarComandoSensoriamento(ledMN.Componente, ledMN.ID, ledMN.Comportamento);
}
foreach (var rele in Reles.Where(x => x.Controlar && x.Inicializado))
{
int leituraEstado = (int?)(rele.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.EstadoLeitura)?.atual?.valor) ?? 0;
if (leituraEstado != (int)rele.StatusControle)
if (rele._EstadoLeitura != rele.StatusControle)
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sRLE, rele.ID, rele.StatusControle);
GeneralJoystick.EnviarComandoSensoriamento(rele.Componente, rele.ID, rele.StatusControle);
}
}
@ -2331,7 +2330,7 @@ namespace AgroBase.Models.Modules
{
if (servo._AnguloLeiutra != servo._AnguloControle)
{
GeneralJoystick.EnviarComandoSensoriamento(S_Code.sFRO, servo.ID, servo._AnguloControle);
GeneralJoystick.EnviarComandoSensoriamento(servo.Componente, servo.ID, servo._AnguloControle);
}
}
}

View File

@ -1613,6 +1613,7 @@ namespace AgroBase.Models
if (d_atu.BicosPulverizadores.Any(x => x.ID == id)) return S_Code.sBIC;
if (d_atu.BombasPressurizadoras.Any(x => x.ID == id)) return S_Code.sBMB;
if (d_atu.Sensores.Any(x => x.ID == id)) return d_atu.Sensores.First(x => x.ID == id).Componente;
if (d_atu.Servos.Any(x => x.ID == id)) return S_Code.sSRV;
return S_Code.sVZO;
}
@ -1640,6 +1641,10 @@ namespace AgroBase.Models
Variaveis.OperacaoEmAndamento.Controle.BombaAtuada = (bool)controleBase.Controle.Estado;
GeneralJoystick.EnviarComandoAtuador(comp, controleBase._comp_id, Status: controleBase.Controle.Estado, Forcar: true);
break;
case S_Code.sSRV:
if (controleBase.Controle == null) return;
GeneralJoystick.EnviarComandoAtuador(comp, controleBase._comp_id, Valor: controleBase.Controle.AnguloSP, Forcar: true);
break;
}
return;
}
@ -1650,7 +1655,7 @@ namespace AgroBase.Models
{
var d_sen = Variaveis.OperacaoEmAndamento.DispSen.Dados;
if (d_sen.Reles.Any(x => x.ID == id)) return S_Code.sRLE;
if (d_sen.Servos.Any(x => x.ID == id)) return S_Code.sFRO;
if (d_sen.Servos.Any(x => x.ID == id)) return S_Code.sSRV;
if (d_sen.Sinaleiros.Any(x => x.ID == id)) return S_Code.sLED;
if (d_sen.Sensores.Any(x => x.ID == id)) return d_sen.Sensores.First(x => x.ID == id).Componente;
return S_Code.sVZO;
@ -2380,7 +2385,9 @@ namespace AgroBase.Models
VolumeReservatorio = _Reservatorio.VolumeAtual_L,
MassaReservatorio = _Reservatorio.MassaAtual_Kg,
PressaoLinha = _DispAtu.Dados.PressaoLinha,
PressaoLinhaCalc = _DispAtu.Dados.PressaoLinhaCalc,
VazaoInstantanea = _DispAtu.Dados.VazaoFluxoMLpSInstantanea,
VazaoInstantaneaCalc = _DispAtu.Dados.VazaoFluxoMLpSInstantaneaCalc,
VazaoMedia = _DispAtu.Dados.VazaoFluxoMLpSMedia,
TempoBombaAtuada = _DispAtu.Dados.TempoAtuado,
ComandoBomba = _DispAtu.Dados.BombasPressurizadoras.FirstOrDefault().ComandoAtuar,
@ -2388,6 +2395,7 @@ namespace AgroBase.Models
LeituraPotenciaBomba = FuncoesMatematicas.Clamp(_DispAtu.Dados.BombasPressurizadoras.FirstOrDefault()._Potencia, 0, 100),
VolumeVazaoMl = _DispAtu.Dados.VolumeVazaoML,
Iniciados = _DispAtu.Dados.Sensores.Select(s => new { s.ID, s.Inicializado }).Union(_DispAtu.Dados.BicosPulverizadores.Select(b => new { b.ID, b.Inicializado })).Union(_DispAtu.Dados.BombasPressurizadoras.Select(b => new { b.ID, b.Inicializado })).ToDictionary(x => x.ID, x => x.Inicializado),
Servos = _DispAtu.Dados.Servos?.ToDictionary(x => x.ID, y => (y._AnguloControle, y._AnguloLeiutra, y.Incremental)),
AnguloBarraEsquerda = _DispAtu.Dados.AnguloBarraEsquerda,
AnguloBarraDireita = _DispAtu.Dados.AnguloBarraDireita,
AnguloBarraAltura = _DispAtu.Dados.AnguloBarraAltura,
@ -2686,7 +2694,9 @@ namespace AgroBase.Models
public double MassaReservatorio { get; set; }
public double VolumeReservatorio { get; set; }
public double PressaoLinha { get; set; }
public double PressaoLinhaCalc { get; set; }
public double VazaoInstantanea { get; set; }
public double VazaoInstantaneaCalc { get; set; }
public double VazaoMedia { get; set; }
public double TempoBombaAtuada { get; set; }
public bool ComandoBomba { get; set; }
@ -2701,6 +2711,7 @@ namespace AgroBase.Models
public double TempoEstimadoRestanteMinutos { get; set; }
public double DistanciaEstimadaRestanteMetros { get; set; }
public Dictionary<string, bool> Iniciados { get; set; }
public Dictionary<string, (int, int, bool)> Servos { get; set; }
public List<AtuBicoSensoriamentoLogModel> Bicos { get; set; }
public DateTime UltimoComandoRespondido { get; set; }
@ -2719,7 +2730,9 @@ namespace AgroBase.Models
VolumeReservatorio = VolumeReservatorio,
MassaReservatorio = MassaReservatorio,
PressaoLinha = PressaoLinha,
PressaoLinhaCalc = PressaoLinhaCalc,
VazaoInstantanea = VazaoInstantanea,
VazaoInstantaneaCalc = VazaoInstantaneaCalc,
VazaoMedia = VazaoMedia,
TempoBombaAtuada = TempoBombaAtuada,
ComandoBomba = ComandoBomba,
@ -2730,6 +2743,7 @@ namespace AgroBase.Models
AnguloBarraDireita = AnguloBarraDireita,
AnguloBarraAltura = AnguloBarraAltura,
Iniciados = new Dictionary<string, bool>(Iniciados ?? new Dictionary<string, bool>()),
Servos = new Dictionary<string, (int, int, bool)>(Servos ?? new Dictionary<string, (int, int, bool)>()),
UltimoComandoRespondido = UltimoComandoRespondido,
LPorMetro = LPorMetro,
LPorMinuto = LPorMinuto,

View File

@ -189,6 +189,12 @@ namespace AgroBase.Comum
clbDispositivos.Items.Add(Sensor.ID.ToString());
clbDispositivos.SetItemChecked(clbDispositivos.Items.Count - 1, Sensor.Aferir);
}
var Servos = atuModel.Servos;
foreach (var Servo in Servos)
{
clbDispositivos.Items.Add(Servo.ID);
clbDispositivos.SetItemChecked(clbDispositivos.Items.Count - 1, Servo.Controlar);
}
}
else if (Dados is MovimentacaoUnificadaModel mvdModel && Dispositivo == T_Code.Mvd)
{
@ -344,6 +350,10 @@ namespace AgroBase.Comum
{
atuModel.BombasPressurizadoras.FirstOrDefault(x => x.ID == Item.ToString()).Comandar = true;
}
else if (atuModel.Servos.Any(x => x.ID == Item.ToString()))
{
atuModel.Servos.First(x => x.ID == Item.ToString()).Controlar = true;
}
}
}
break;

View File

@ -167,7 +167,11 @@ namespace AgroBase.Services
bool pulverizando = Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.BicosPulverizadores?.Any(x => x.Inicializado && x._EstadoLeitura == Estado.Ligado) ?? false;
double massaLida_Kg = Sensor?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.Massa)?.atual?.valor ?? 0;
double massaLida_Kg_bruto = Sensor?.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraBruta)?.atual?.valor ?? 0;
double volumeMedido_L = massaLida_Kg / DensidadeProduto;
double.TryParse(Sensor.Parametros.FirstOrDefault(x => x.Descricao == "Offset")?.Valor ?? "0", out double offset);
double massa_calc = (massaLida_Kg_bruto * -1) + offset;
double volumeMedido_L = massa_calc / DensidadeProduto;
int qtd_atuacoes = Variaveis.OperacaoEmAndamento.Controle?.BicosAtuados?.Sum(x => x.Atuacoes) ?? 0;
// Sanitiza volume
@ -183,13 +187,13 @@ namespace AgroBase.Services
_tempoTotalAnterior_s = tempoTotalSegundosAtual;
MassaAtual_Kg = massaLida_Kg;
MassaAtual_Kg_Calc = massaLida_Kg_bruto;
MassaAtual_Kg_Calc = massa_calc;
VolumeAtual_L = volumeMedido_L;
return;
}
MassaAtual_Kg = massaLida_Kg;
MassaAtual_Kg_Calc = massaLida_Kg_bruto;
MassaAtual_Kg_Calc = massa_calc;
VolumeAtual_L = volumeMedido_L;
// --- Cálculo de deltas básicos ---

View File

@ -364,7 +364,7 @@ namespace AgroBase.Services.Operadores
("conectado", DadosSen.Conectado),
("freq_base", DadosSen.FrequenciaBase)
);
var sensoresAtualizados = new List<(string caminho, object valor)>();
var senSensoresAtualizados = new List<(string caminho, object valor)>();
foreach (var sensor in DadosSen.Sensores)
{
int tipo = (int)sensor.Componente;
@ -399,11 +399,11 @@ namespace AgroBase.Services.Operadores
saude = saude ?? new { }
};
sensoresAtualizados.Add(($"{basePath}", sensorObj));
senSensoresAtualizados.Add(($"{basePath}", sensorObj));
}
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Sen), sensoresAtualizados.ToArray());
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Sen), senSensoresAtualizados.ToArray());
var servosAtualizados = new List<(string caminho, object valor)>();
var senServosAtualizados = new List<(string caminho, object valor)>();
foreach (var servo in DadosSen.Servos)
{
int id = servo.ID_Num;
@ -434,11 +434,11 @@ namespace AgroBase.Services.Operadores
saude = saude ?? new { }
};
servosAtualizados.Add(($"{basePath}", servoObj));
senServosAtualizados.Add(($"{basePath}", servoObj));
}
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Sen), servosAtualizados.ToArray());
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Sen), senServosAtualizados.ToArray());
var relesAtualizados = new List<(string caminho, object valor)>();
var senRelesAtualizados = new List<(string caminho, object valor)>();
foreach (var rele in DadosSen.Reles)
{
int id = rele.ID_Num;
@ -468,11 +468,11 @@ namespace AgroBase.Services.Operadores
saude = saude ?? new { }
};
relesAtualizados.Add(($"{basePath}", releObj));
senRelesAtualizados.Add(($"{basePath}", releObj));
}
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Sen), relesAtualizados.ToArray());
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Sen), senRelesAtualizados.ToArray());
var ledsAtualizados = new List<(string caminho, object valor)>();
var senLedsAtualizados = new List<(string caminho, object valor)>();
foreach (var led in DadosSen.Sinaleiros)
{
int id = led.ID_Num;
@ -502,9 +502,9 @@ namespace AgroBase.Services.Operadores
saude = saude ?? new { }
};
ledsAtualizados.Add(($"{basePath}", ledObj));
senLedsAtualizados.Add(($"{basePath}", ledObj));
}
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Sen), ledsAtualizados.ToArray());
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Sen), senLedsAtualizados.ToArray());
var DadosAtu = Variaveis.OperacaoEmAndamento.DispAtu.Dados;
@ -552,7 +552,7 @@ namespace AgroBase.Services.Operadores
}
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Atu), atuSensoresAtualizados.ToArray());
var bicosAtualizados = new List<(string caminho, object valor)>();
var atuBicosAtualizados = new List<(string caminho, object valor)>();
foreach (var bico in DadosAtu.BicosPulverizadores)
{
int tipo = (int)bico.Componente;
@ -587,11 +587,11 @@ namespace AgroBase.Services.Operadores
saude = saude ?? new { }
};
bicosAtualizados.Add(($"{basePath}", sensorObj));
atuBicosAtualizados.Add(($"{basePath}", sensorObj));
}
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Atu), bicosAtualizados.ToArray());
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Atu), atuBicosAtualizados.ToArray());
var bombasAtualizados = new List<(string caminho, object valor)>();
var atuBombasAtualizados = new List<(string caminho, object valor)>();
foreach (var bomba in DadosAtu.BombasPressurizadoras)
{
int tipo = (int)bomba.Componente;
@ -626,9 +626,45 @@ namespace AgroBase.Services.Operadores
saude = saude ?? new { }
};
bombasAtualizados.Add(($"{basePath}", sensorObj));
atuBombasAtualizados.Add(($"{basePath}", sensorObj));
}
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Atu), bombasAtualizados.ToArray());
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Atu), atuBombasAtualizados.ToArray());
var atuServosAtualizados = new List<(string caminho, object valor)>();
foreach (var servo in DadosAtu.Servos)
{
int id = servo.ID_Num;
string basePath = $"servos.{id}";
var saude = RedisService.GetField<object>(RedisService.ModKey(Enums.T_Code.Atu), $"{basePath}.saude");
var dados = servo.ValoresLeituras
.Where(y => y.analise_health)
.Select(y => new
{
label = y.funcao.ToString(),
atual = y.atual.valor,
freq = y.atual.frequencia
})
.ToList();
var servoObj = new
{
conectado = servo.Inicializado,
id,
label = servo.ID,
controlar = servo.Controlar,
mandatorio = servo.Mandatorio,
angulo_sp = servo._AnguloControle,
dados,
timestamp = agora,
saude = saude ?? new { }
};
atuServosAtualizados.Add(($"{basePath}", servoObj));
}
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Atu), atuServosAtualizados.ToArray());
var DadosLra = Variaveis.LoraService;
RedisService.AtualizarCampos(RedisService.ModKey(Enums.T_Code.Lra),

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"ExpansorGPIO":false,"EnderecoGPIO":"","ExpansorADS":false,"EnderecoADS":"","Pinos":[{"Controlador":0,"Barramento":0,"Pino":99,"Descricao":"1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":98,"Descricao":"2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":97,"Descricao":"3","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":4,"Descricao":"4","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":5,"Descricao":"5","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":6,"Descricao":"6","Funcao":24,"Habilitado":true,"ComponenteID":"PRSLN"},{"Controlador":0,"Barramento":0,"Pino":7,"Descricao":"7","Funcao":25,"Habilitado":true,"ComponenteID":"FLXLN"},{"Controlador":0,"Barramento":0,"Pino":15,"Descricao":"8","Funcao":22,"Habilitado":true,"ComponenteID":"MASRS"},{"Controlador":0,"Barramento":0,"Pino":16,"Descricao":"9","Funcao":23,"Habilitado":true,"ComponenteID":"MASRS"},{"Controlador":0,"Barramento":0,"Pino":17,"Descricao":"10","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":18,"Descricao":"11","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":8,"Descricao":"12","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":3,"Descricao":"13","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":46,"Descricao":"14","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":9,"Descricao":"15","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":10,"Descricao":"16","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":11,"Descricao":"17","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":12,"Descricao":"18","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":13,"Descricao":"19","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":14,"Descricao":"20","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":96,"Descricao":"21","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":95,"Descricao":"22","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":94,"Descricao":"23","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":93,"Descricao":"24","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":19,"Descricao":"25","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":20,"Descricao":"26","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":21,"Descricao":"27","Funcao":21,"Habilitado":true,"ComponenteID":"B01"},{"Controlador":0,"Barramento":0,"Pino":47,"Descricao":"28","Funcao":21,"Habilitado":true,"ComponenteID":"B02"},{"Controlador":0,"Barramento":0,"Pino":48,"Descricao":"29","Funcao":21,"Habilitado":true,"ComponenteID":"B03"},{"Controlador":0,"Barramento":0,"Pino":45,"Descricao":"30","Funcao":21,"Habilitado":true,"ComponenteID":"B04"},{"Controlador":0,"Barramento":0,"Pino":0,"Descricao":"31","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":35,"Descricao":"32","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":36,"Descricao":"33","Funcao":37,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":37,"Descricao":"34","Funcao":36,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":38,"Descricao":"35","Funcao":35,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":39,"Descricao":"36","Funcao":5,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":40,"Descricao":"37","Funcao":14,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":41,"Descricao":"38","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":42,"Descricao":"39","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":2,"Descricao":"40","Funcao":34,"Habilitado":true,"ComponenteID":"Atu"},{"Controlador":0,"Barramento":0,"Pino":1,"Descricao":"41","Funcao":33,"Habilitado":true,"ComponenteID":"Atu"},{"Controlador":0,"Barramento":0,"Pino":44,"Descricao":"42","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":43,"Descricao":"43","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":92,"Descricao":"44","Funcao":0,"Habilitado":false,"ComponenteID":""}]}
{"ExpansorGPIO":false,"EnderecoGPIO":"","ExpansorADS":false,"EnderecoADS":"","Pinos":[{"Controlador":0,"Barramento":0,"Pino":99,"Descricao":"1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":98,"Descricao":"2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":97,"Descricao":"3","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":4,"Descricao":"4","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":5,"Descricao":"5","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":6,"Descricao":"6","Funcao":24,"Habilitado":true,"ComponenteID":"PRSLN"},{"Controlador":0,"Barramento":0,"Pino":7,"Descricao":"7","Funcao":25,"Habilitado":true,"ComponenteID":"FLXLN"},{"Controlador":0,"Barramento":0,"Pino":15,"Descricao":"8","Funcao":22,"Habilitado":true,"ComponenteID":"MASRS"},{"Controlador":0,"Barramento":0,"Pino":16,"Descricao":"9","Funcao":23,"Habilitado":true,"ComponenteID":"MASRS"},{"Controlador":0,"Barramento":0,"Pino":17,"Descricao":"10","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":18,"Descricao":"11","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":8,"Descricao":"12","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":3,"Descricao":"13","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":46,"Descricao":"14","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":9,"Descricao":"15","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":10,"Descricao":"16","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":11,"Descricao":"17","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":12,"Descricao":"18","Funcao":45,"Habilitado":true,"ComponenteID":"SRVB3"},{"Controlador":0,"Barramento":0,"Pino":13,"Descricao":"19","Funcao":45,"Habilitado":true,"ComponenteID":"SRVB2"},{"Controlador":0,"Barramento":0,"Pino":14,"Descricao":"20","Funcao":45,"Habilitado":true,"ComponenteID":"SRVB1"},{"Controlador":0,"Barramento":0,"Pino":96,"Descricao":"21","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":95,"Descricao":"22","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":94,"Descricao":"23","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":93,"Descricao":"24","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":19,"Descricao":"25","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":20,"Descricao":"26","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":21,"Descricao":"27","Funcao":21,"Habilitado":true,"ComponenteID":"B01"},{"Controlador":0,"Barramento":0,"Pino":47,"Descricao":"28","Funcao":21,"Habilitado":true,"ComponenteID":"B02"},{"Controlador":0,"Barramento":0,"Pino":48,"Descricao":"29","Funcao":21,"Habilitado":true,"ComponenteID":"B03"},{"Controlador":0,"Barramento":0,"Pino":45,"Descricao":"30","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":0,"Descricao":"31","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":35,"Descricao":"32","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":36,"Descricao":"33","Funcao":37,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":37,"Descricao":"34","Funcao":36,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":38,"Descricao":"35","Funcao":35,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":39,"Descricao":"36","Funcao":5,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":40,"Descricao":"37","Funcao":14,"Habilitado":true,"ComponenteID":"BOMBA"},{"Controlador":0,"Barramento":0,"Pino":41,"Descricao":"38","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":42,"Descricao":"39","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":2,"Descricao":"40","Funcao":34,"Habilitado":true,"ComponenteID":"Atu"},{"Controlador":0,"Barramento":0,"Pino":1,"Descricao":"41","Funcao":33,"Habilitado":true,"ComponenteID":"Atu"},{"Controlador":0,"Barramento":0,"Pino":44,"Descricao":"42","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":43,"Descricao":"43","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":0,"Barramento":0,"Pino":92,"Descricao":"44","Funcao":0,"Habilitado":false,"ComponenteID":""}]}