ajustes para centralizar a operacao em andamento sem chamar instancias globais

This commit is contained in:
Diego Freitas 2026-06-30 10:13:23 -03:00
parent 1e82065e91
commit 36ee632988
17 changed files with 560 additions and 653 deletions

View File

@ -44,8 +44,9 @@ namespace AgroBase.Forms.IHM
});
FuncoesGlobais.DefinirEventosPicBtn(picManual, "Erro ao carregar modo de controle manual!", async () =>
{
OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.Manual, true);
if (Variaveis.OperacaoEmAndamento.Sensoriamento.Operacao.OperacaoLiberada)
Variaveis.OperacaoEmAndamento = OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.Manual, CarregarModulos: true);
var op = Variaveis.OperacaoEmAndamento;
if (op.Sensoriamento.Operacao.OperacaoLiberada)
{
frmDialogoMapa frm = new frmDialogoMapa();
frm.Show();
@ -55,7 +56,7 @@ namespace AgroBase.Forms.IHM
{
CustomDialog.ShowDialog(
"Iniciar Operação Manual",
$"{Variaveis.OperacaoEmAndamento.Sensoriamento.Operacao.ErroOperacaoLiberada ?? ""}",
$"{op.Sensoriamento.Operacao.ErroOperacaoLiberada ?? ""}",
MessageBoxIcon.Error,
new Dictionary<(string, dynamic), Action>()
{

View File

@ -65,6 +65,8 @@
this.lblPotenciaSP = new System.Windows.Forms.Label();
this.btnDeslsigarAgitador = new System.Windows.Forms.Button();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.lblVazaoInstantanea = new System.Windows.Forms.Label();
this.lblPressaoBomba = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.nudPotenciaBombaMax = new System.Windows.Forms.NumericUpDown();
this.label6 = new System.Windows.Forms.Label();
@ -104,8 +106,7 @@
this.chbSonarAtivado = new System.Windows.Forms.CheckBox();
this.lblPressao = new System.Windows.Forms.Label();
this.chbImuAtivado = new System.Windows.Forms.CheckBox();
this.lblPressaoBomba = new System.Windows.Forms.Label();
this.lblVazaoInstantanea = new System.Windows.Forms.Label();
this.lblReservatorio = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.chartGraficos)).BeginInit();
this.tabControl1.SuspendLayout();
this.tabMapa.SuspendLayout();
@ -527,6 +528,30 @@
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Bomba Pressurizadora";
//
// lblVazaoInstantanea
//
this.lblVazaoInstantanea.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblVazaoInstantanea.AutoSize = true;
this.lblVazaoInstantanea.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblVazaoInstantanea.Location = new System.Drawing.Point(305, 42);
this.lblVazaoInstantanea.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblVazaoInstantanea.Name = "lblVazaoInstantanea";
this.lblVazaoInstantanea.Size = new System.Drawing.Size(108, 25);
this.lblVazaoInstantanea.TabIndex = 49;
this.lblVazaoInstantanea.Text = "0,00 ml/s";
//
// lblPressaoBomba
//
this.lblPressaoBomba.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblPressaoBomba.AutoSize = true;
this.lblPressaoBomba.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblPressaoBomba.Location = new System.Drawing.Point(305, 17);
this.lblPressaoBomba.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPressaoBomba.Name = "lblPressaoBomba";
this.lblPressaoBomba.Size = new System.Drawing.Size(76, 25);
this.lblPressaoBomba.TabIndex = 48;
this.lblPressaoBomba.Text = "80 psi";
//
// label7
//
this.label7.AutoSize = true;
@ -822,11 +847,11 @@
//
this.lblTensao.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblTensao.AutoSize = true;
this.lblTensao.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTensao.Location = new System.Drawing.Point(1111, 351);
this.lblTensao.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTensao.Location = new System.Drawing.Point(1111, 320);
this.lblTensao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblTensao.Name = "lblTensao";
this.lblTensao.Size = new System.Drawing.Size(136, 37);
this.lblTensao.Size = new System.Drawing.Size(121, 33);
this.lblTensao.TabIndex = 29;
this.lblTensao.Text = "42,00 V";
//
@ -834,11 +859,11 @@
//
this.lblCorrente.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblCorrente.AutoSize = true;
this.lblCorrente.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblCorrente.Location = new System.Drawing.Point(1111, 388);
this.lblCorrente.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblCorrente.Location = new System.Drawing.Point(1111, 357);
this.lblCorrente.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblCorrente.Name = "lblCorrente";
this.lblCorrente.Size = new System.Drawing.Size(134, 37);
this.lblCorrente.Size = new System.Drawing.Size(121, 33);
this.lblCorrente.TabIndex = 30;
this.lblCorrente.Text = "10,00 A";
//
@ -846,11 +871,11 @@
//
this.lblRPM.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblRPM.AutoSize = true;
this.lblRPM.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblRPM.Location = new System.Drawing.Point(1111, 426);
this.lblRPM.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblRPM.Location = new System.Drawing.Point(1111, 395);
this.lblRPM.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblRPM.Name = "lblRPM";
this.lblRPM.Size = new System.Drawing.Size(137, 37);
this.lblRPM.Size = new System.Drawing.Size(125, 33);
this.lblRPM.TabIndex = 31;
this.lblRPM.Text = "45 RPM";
//
@ -858,11 +883,11 @@
//
this.lblVelocidade.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblVelocidade.AutoSize = true;
this.lblVelocidade.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblVelocidade.Location = new System.Drawing.Point(1111, 463);
this.lblVelocidade.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblVelocidade.Location = new System.Drawing.Point(1111, 432);
this.lblVelocidade.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblVelocidade.Name = "lblVelocidade";
this.lblVelocidade.Size = new System.Drawing.Size(101, 37);
this.lblVelocidade.Size = new System.Drawing.Size(92, 33);
this.lblVelocidade.TabIndex = 32;
this.lblVelocidade.Text = "10,00";
//
@ -870,7 +895,7 @@
//
this.lblKmh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblKmh.AutoSize = true;
this.lblKmh.Location = new System.Drawing.Point(1208, 480);
this.lblKmh.Location = new System.Drawing.Point(1207, 448);
this.lblKmh.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblKmh.Name = "lblKmh";
this.lblKmh.Size = new System.Drawing.Size(32, 13);
@ -933,11 +958,11 @@
//
this.lblPressao.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblPressao.AutoSize = true;
this.lblPressao.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblPressao.Location = new System.Drawing.Point(1111, 500);
this.lblPressao.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblPressao.Location = new System.Drawing.Point(1111, 469);
this.lblPressao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPressao.Name = "lblPressao";
this.lblPressao.Size = new System.Drawing.Size(109, 37);
this.lblPressao.Size = new System.Drawing.Size(99, 33);
this.lblPressao.TabIndex = 38;
this.lblPressao.Text = "80 psi";
//
@ -953,29 +978,17 @@
this.chbImuAtivado.UseVisualStyleBackColor = true;
this.chbImuAtivado.CheckedChanged += new System.EventHandler(this.chbImuAtivado_CheckedChanged);
//
// lblPressaoBomba
// lblReservatorio
//
this.lblPressaoBomba.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblPressaoBomba.AutoSize = true;
this.lblPressaoBomba.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblPressaoBomba.Location = new System.Drawing.Point(305, 17);
this.lblPressaoBomba.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPressaoBomba.Name = "lblPressaoBomba";
this.lblPressaoBomba.Size = new System.Drawing.Size(76, 25);
this.lblPressaoBomba.TabIndex = 48;
this.lblPressaoBomba.Text = "80 psi";
//
// lblVazaoInstantanea
//
this.lblVazaoInstantanea.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblVazaoInstantanea.AutoSize = true;
this.lblVazaoInstantanea.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblVazaoInstantanea.Location = new System.Drawing.Point(305, 42);
this.lblVazaoInstantanea.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblVazaoInstantanea.Name = "lblVazaoInstantanea";
this.lblVazaoInstantanea.Size = new System.Drawing.Size(108, 25);
this.lblVazaoInstantanea.TabIndex = 49;
this.lblVazaoInstantanea.Text = "0,00 ml/s";
this.lblReservatorio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblReservatorio.AutoSize = true;
this.lblReservatorio.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblReservatorio.Location = new System.Drawing.Point(1111, 502);
this.lblReservatorio.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblReservatorio.Name = "lblReservatorio";
this.lblReservatorio.Size = new System.Drawing.Size(75, 33);
this.lblReservatorio.TabIndex = 40;
this.lblReservatorio.Text = "60 L";
//
// frmOperacaoManual
//
@ -983,6 +996,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(1243, 649);
this.Controls.Add(this.lblReservatorio);
this.Controls.Add(this.chbImuAtivado);
this.Controls.Add(this.lblPressao);
this.Controls.Add(this.chbSonarAtivado);
@ -1118,5 +1132,6 @@
private System.Windows.Forms.CheckBox chbImuAtivado;
private System.Windows.Forms.Label lblPressaoBomba;
private System.Windows.Forms.Label lblVazaoInstantanea;
private System.Windows.Forms.Label lblReservatorio;
}
}

View File

@ -16,6 +16,7 @@ namespace AgroBase.Forms.Operacoes
AsyncTaskTimerModel tmrLeitura;
bool ReqFrameCam = false;
bool ReqFrameSnr = false;
OperacaoModel op => Variaveis.OperacaoEmAndamento;
public frmOperacaoManual()
{
@ -40,11 +41,11 @@ namespace AgroBase.Forms.Operacoes
private void frmOperacaoManual_Load(object sender, EventArgs e)
{
var pC = Variaveis.OperacaoEmAndamento.Parametros.Controle;
var pC = op.Parametros.Controle;
cmbTipoMovimento.Items.Clear();
cmbTipoMovimento.Items.AddRange(Enum.GetNames(typeof(TipoMovimentoDirecional)));
cmbTipoMovimento.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Controle.TipoMovimento;
cmbTipoMovimento.SelectedIndex = (int)op.Controle.TipoMovimento;
cmbModoBomba.Items.Clear();
cmbModoBomba.Items.AddRange(Enum.GetNames(typeof(ModoControleBomba)));
@ -54,7 +55,7 @@ namespace AgroBase.Forms.Operacoes
cmbModoAgitador.Items.AddRange(Enum.GetNames(typeof(ModoAgitadorCalda)));
cmbModoAgitador.SelectedIndex = (int)pC.AtuAgitadorModo;
var b = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora;
var b = op.DispAtu.Dados.BombaPressurizadora;
if (b != null)
{
txtKp.Text = b.Controle.Kp.ToString();
@ -98,7 +99,7 @@ namespace AgroBase.Forms.Operacoes
private void frmOperacaoManual_FormClosing(object sender, FormClosingEventArgs e)
{
tmrLeitura.Dispose();
Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao());
Task.Run(async () => await op.FinalizarOperacao());
}
private void btnIniciarOperacao_Click(object sender, EventArgs e)
@ -113,7 +114,7 @@ namespace AgroBase.Forms.Operacoes
});
// Executa a finalização da operação
Task.Run(async () => await Variaveis.OperacaoEmAndamento.FinalizarOperacao());
Task.Run(async () => await op.FinalizarOperacao());
// Atualiza a UI novamente na thread principal
btnIniciarOperacao.Invoke((MethodInvoker)delegate
@ -132,10 +133,10 @@ namespace AgroBase.Forms.Operacoes
});
// Verifica se a operação está liberada
if (Variaveis.OperacaoEmAndamento.Sensoriamento.Operacao.OperacaoLiberada)
if (op.Sensoriamento.Operacao.OperacaoLiberada)
{
// Inicia a operação de forma assíncrona
Task.Run(async () => await Variaveis.OperacaoEmAndamento.IniciarOperacao());
Task.Run(async () => await op.IniciarOperacao());
// Atualiza a UI após o início da operação
btnIniciarOperacao.Invoke((MethodInvoker)delegate
@ -149,7 +150,7 @@ namespace AgroBase.Forms.Operacoes
// Mostra a mensagem de erro na thread principal
btnIniciarOperacao.Invoke((MethodInvoker)delegate
{
MessageBox.Show(Variaveis.OperacaoEmAndamento.Sensoriamento.Operacao.ErroOperacaoLiberada, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(op.Sensoriamento.Operacao.ErroOperacaoLiberada, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
btnIniciarOperacao.Text = "Iniciar Operação";
btnIniciarOperacao.Enabled = true;
});
@ -162,7 +163,7 @@ namespace AgroBase.Forms.Operacoes
{
try
{
this.Text = Variaveis.OperacaoEmAndamento.TextoFormOperacao("Manual");
this.Text = op.TextoFormOperacao("Manual");
pnlDir_DF.Invalidate();
pnlDir_DT.Invalidate();
@ -174,7 +175,7 @@ namespace AgroBase.Forms.Operacoes
AtualizarInformacoesGerais();
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var _Sensoriamento = op.Sensoriamento;
lblDistanciaEsquerda.Text = "Distancia Esq: " + _Sensoriamento.Trajetoria.DistanciaEsquerda.ToString("0.00") + " cm";
lblDistanciaDireita.Text = "Distancia Dir: " + _Sensoriamento.Trajetoria.DistanciaDireita.ToString("0.00") + " cm";
@ -189,24 +190,25 @@ namespace AgroBase.Forms.Operacoes
lblRPM.Text = _Sensoriamento.Movimentacao.RPMRodaMedio.ToString("0") + " rpm";
lblVelocidade.Text = (_Sensoriamento.Movimentacao.VelocidadeMediaMs * 3.6).ToString("0.00");
lblPressao.Text = $"{(_Sensoriamento.Atuador.PressaoLinha):F0} psi";
lblPressaoBomba.Text = $"{(_Sensoriamento.Atuador.PressaoAtualBomba):F0} psi";
lblReservatorio.Text = $"{(_Sensoriamento.Atuador.VolumeReservatorio):F1} L";
lblPressaoBomba.Text = $"{(_Sensoriamento.Atuador.PressaoAtualBomba):F1} psi";
lblVazaoInstantanea.Text = $"{(_Sensoriamento.Atuador.VazaoFluxoMLpSInstantaneaCorrigida):F0} ml/s";
bool atuadorAtivado = Variaveis.OperacaoEmAndamento.DispAtu.Dados.Conectado;
bool atuadorAtivado = op.DispAtu.Dados.Conectado;
chbPulverizador.Enabled = atuadorAtivado;
if (!atuadorAtivado)
{
chbPulverizador.Checked = false;
}
bool sonarAtivado = Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorVisual.Status == StatusModulo.Operante;
bool sonarAtivado = op.Sensoriamento.OperadorVisual.Status == StatusModulo.Operante;
chbSonarAtivado.Enabled = sonarAtivado;
if (!sonarAtivado)
{
chbSonarAtivado.Checked = false;
}
bool imuAtivado = Variaveis.OperacaoEmAndamento.Sensoriamento.IMU.saude.status == StatusModulo.Operante;
bool imuAtivado = op.Sensoriamento.IMU.saude.status == StatusModulo.Operante;
chbImuAtivado.Enabled = imuAtivado;
if (!imuAtivado)
{
@ -252,7 +254,7 @@ namespace AgroBase.Forms.Operacoes
//var frameSeg = await VisualWorkerService.GetCameraFrame(CameraFrameType.Segmentacao);
//AtualizarImagemPainel(pnlDeteccoesRua, frameSeg?.image());
var dadosSeg = Variaveis.OperacaoEmAndamento.Sensoriamento?.OperadorVisual?.Analises?.segmentacao;
var dadosSeg = op.Sensoriamento?.OperadorVisual?.Analises?.segmentacao;
lblStatusCarroMapa.Text = $"Status: {dadosSeg?.status_corredor ?? StatusCarroMapa.Indefinido} | Conf: {dadosSeg?.status_corredor_debug?.status_modelo_conf ?? 0}";
}
finally
@ -299,7 +301,7 @@ namespace AgroBase.Forms.Operacoes
Panel pnl = (Panel)sender;
string ID = pnl.Name.Replace("pnlDir_", "");
var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(m => m.Modulo_ID == ID);
var Modulo = op.DispMvd.Dados.Modulos.FirstOrDefault(m => m.Modulo_ID == ID);
double Angulo = Modulo.DirMotor.AnguloDriver;
double AnguloReal = Modulo.DirMotor.AnguloReal;
@ -461,8 +463,8 @@ namespace AgroBase.Forms.Operacoes
{
try
{
double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps?.OrientacaoReal ?? 0;
double angulo2 = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps?.AnguloCarroDefinido ?? 0;
double angulo = op.Sensoriamento.Gps?.OrientacaoReal ?? 0;
double angulo2 = op.Sensoriamento.Gps?.AnguloCarroDefinido ?? 0;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -90, (float)angulo2);
}
catch { }
@ -470,7 +472,7 @@ namespace AgroBase.Forms.Operacoes
private void pnlAnguloMagnetometro_Paint(object sender, PaintEventArgs e)
{
var imu = Variaveis.OperacaoEmAndamento.Sensoriamento.IMU;
var imu = op.Sensoriamento.IMU;
try
{
double angulo = imu?.yaw ?? 0;
@ -550,7 +552,7 @@ namespace AgroBase.Forms.Operacoes
private void AtualizarInformacoesGerais()
{
var _Sensoriamento = Variaveis.OperacaoEmAndamento.Sensoriamento;
var _Sensoriamento = op.Sensoriamento;
var _Bateria = _Sensoriamento?.Bateria;
var _Barramentos = _Bateria?.Barramentos;
var _Movimentacao = _Sensoriamento?.Movimentacao;
@ -580,7 +582,7 @@ namespace AgroBase.Forms.Operacoes
gridDados.Rows[20].Cells[1].Value = (_Barramentos.FirstOrDefault(x => x.ID == "AB24V")?.Corrente ?? 0).ToString("0.00");
gridDados.Rows[21].Cells[1].Value = "";
gridDados.Rows[22].Cells[1].Value = (_Atuador?.PercentualReservatorio ?? 0).ToString("0.00");
gridDados.Rows[23].Cells[1].Value = $"{_Atuador?.MassaReservatorio ?? 0:0.000} ({Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.ContadorCarga?.MassaAtual_Kg_Calc ?? 0:0.000})";
gridDados.Rows[23].Cells[1].Value = $"{_Atuador?.MassaReservatorio ?? 0:0.000} ({op.DispAtu?.Dados?.ContadorCarga?.MassaAtual_Kg_Calc ?? 0:0.000})";
gridDados.Rows[24].Cells[1].Value = $"{_Atuador?.VolumeReservatorio ?? 0:0.000}";
gridDados.Rows[25].Cells[1].Value = (_Atuador?.LPorMetro ?? 0).ToString("0.000");
gridDados.Rows[26].Cells[1].Value = (_Atuador?.LPorMinuto ?? 0).ToString("0.000");
@ -594,7 +596,7 @@ namespace AgroBase.Forms.Operacoes
gridDados.Rows[34].Cells[1].Value = (_Atuador?.VolumeVazaoML ?? 0).ToString("0.00");
gridDados.Rows[35].Cells[1].Value = (_Atuador?.AnguloBarraEsquerda ?? 0).ToString("0.00");
gridDados.Rows[36].Cells[1].Value = (_Atuador?.AnguloBarraDireita ?? 0).ToString("0.00");
gridDados.Rows[37].Cells[1].Value = (Variaveis.OperacaoEmAndamento.DispAtu?.Dados?.AgitadorDeCalda?._Potencia ?? 0).ToString("0.00");
gridDados.Rows[37].Cells[1].Value = (op.DispAtu?.Dados?.AgitadorDeCalda?._Potencia ?? 0).ToString("0.00");
gridDados.Rows[38].Cells[1].Value = "";
gridDados.Rows[39].Cells[1].Value = (_IMU?.RollSeguro ?? 0).ToString("0.00");
gridDados.Rows[40].Cells[1].Value = (_IMU?.PitchSeguro ?? 0).ToString("0.00");
@ -607,11 +609,11 @@ namespace AgroBase.Forms.Operacoes
private void InicializarMapa()
{
Variaveis.OperacaoEmAndamento.Mapa = new MapasModel()
op.Mapa = new MapasModel()
{
pnlMapa = pnlMapa,
};
Variaveis.OperacaoEmAndamento.Mapa.CarregarMapaGPS();
op.Mapa.CarregarMapaGPS();
}
#endregion
@ -620,15 +622,15 @@ namespace AgroBase.Forms.Operacoes
private void PopularBicos()
{
var Atuador = Variaveis.OperacaoEmAndamento.DispAtu;
var Atuador = op.DispAtu;
int panelWidth = pnlAtuadores.Width;
int circleDiameter = 40; // Diâmetro dos círculos grandes
int spaceBetweenCircles = (panelWidth - (circleDiameter * (Variaveis.OperacaoEmAndamento.Parametros.QtdBicos ?? VariaveisEquipamento.QuantidadeBicosPulverizadores))) / ((Variaveis.OperacaoEmAndamento.Parametros.QtdBicos ?? VariaveisEquipamento.QuantidadeBicosPulverizadores) + 1);
int spaceBetweenCircles = (panelWidth - (circleDiameter * (op.Parametros.QtdBicos ?? VariaveisEquipamento.QuantidadeBicosPulverizadores))) / ((op.Parametros.QtdBicos ?? VariaveisEquipamento.QuantidadeBicosPulverizadores) + 1);
int yPosition = (pnlAtuadores.Height - circleDiameter) / 3; // Centralizado verticalmente
for (int i = 0; i < Variaveis.OperacaoEmAndamento.Parametros.QtdBicos; i++)
for (int i = 0; i < op.Parametros.QtdBicos; i++)
{
// Calcula a posição x do círculo
int xPosition = spaceBetweenCircles + (i * (circleDiameter + spaceBetweenCircles));
@ -662,7 +664,7 @@ namespace AgroBase.Forms.Operacoes
{
Button btn = (Button)sender;
string ID = btn.Name.Replace("btn_", "");
var Bico = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == ID);
var Bico = op.DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == ID);
if (Bico != null)
{
bool comando = !Bico.ComandoAtuar;
@ -675,10 +677,10 @@ namespace AgroBase.Forms.Operacoes
private void btnLigarBomba_Click(object sender, EventArgs e)
{
var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora;
var Bomba = op.DispAtu.Dados.BombaPressurizadora;
if (Bomba != null)
{
Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuModoControle = (ModoControleBomba)cmbModoBomba.SelectedIndex;
op.Parametros.Controle.AtuModoControle = (ModoControleBomba)cmbModoBomba.SelectedIndex;
double pressao = Convert.ToInt32(nudPressaoSP.Value);
double potMin = Convert.ToInt32(nudPotenciaBombaMin.Value);
@ -693,17 +695,17 @@ namespace AgroBase.Forms.Operacoes
private void btnDesligarBomba_Click(object sender, EventArgs e)
{
var Bomba = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora;
var Bomba = op.DispAtu.Dados.BombaPressurizadora;
if (Bomba != null)
GeneralJoystick.EnviarComandoAtuador(Bomba.Componente, Bomba.ID, Status: false, Comando: CanMessagePosicaoDados.Command1, Forcar: true);
}
private void btnLigarAgitador_Click(object sender, EventArgs e)
{
var Agitador = Variaveis.OperacaoEmAndamento.DispAtu.Dados.AgitadorDeCalda;
var Agitador = op.DispAtu.Dados.AgitadorDeCalda;
if (Agitador != null)
{
Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuAgitadorModo = (ModoAgitadorCalda)cmbModoAgitador.SelectedIndex;
op.Parametros.Controle.AtuAgitadorModo = (ModoAgitadorCalda)cmbModoAgitador.SelectedIndex;
double potencia = Convert.ToInt32(nudPotenciaAgitador.Value);
GeneralJoystick.EnviarComandoAtuador(Agitador.Componente, Agitador.ID, Status: true, Valores: new System.Collections.Generic.List<double?>() { potencia }, Comando: CanMessagePosicaoDados.Command1, Forcar: true);
@ -712,7 +714,7 @@ namespace AgroBase.Forms.Operacoes
private void btnDeslsigarAgitador_Click(object sender, EventArgs e)
{
var Agitador = Variaveis.OperacaoEmAndamento.DispAtu.Dados.AgitadorDeCalda;
var Agitador = op.DispAtu.Dados.AgitadorDeCalda;
if (Agitador != null)
GeneralJoystick.EnviarComandoAtuador(Agitador.Componente, Agitador.ID, Status: false, Comando: CanMessagePosicaoDados.Command1, Forcar: true);
}
@ -729,7 +731,7 @@ namespace AgroBase.Forms.Operacoes
private void pnlAtuadores_Paint(object sender, PaintEventArgs e)
{
var Atuador = Variaveis.OperacaoEmAndamento.DispAtu.Dados;
var Atuador = op.DispAtu.Dados;
bool ligado = Atuador.BombaPressurizadora?._BombaLigada ?? false;
AtuadorFuncoesGerais.DesenharAtuadores(
@ -759,29 +761,29 @@ namespace AgroBase.Forms.Operacoes
private void cmbTipoMovimento_SelectedIndexChanged(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento.Controle.TipoMovimento = (TipoMovimentoDirecional)cmbTipoMovimento.SelectedIndex;
op.Controle.TipoMovimento = (TipoMovimentoDirecional)cmbTipoMovimento.SelectedIndex;
}
private void chbPulverizador_CheckedChanged(object sender, EventArgs e)
{
Variaveis.OperacaoEmAndamento.Parametros.Controle.PulverizadorAutomatico = ((CheckBox)sender).Checked;
op.Parametros.Controle.PulverizadorAutomatico = ((CheckBox)sender).Checked;
if (!Variaveis.OperacaoEmAndamento.Parametros.Controle.PulverizadorAutomatico && Variaveis.OperacaoEmAndamento.Controle.Bicos.Any(x => x.ComandoAtuar))
if (!op.Parametros.Controle.PulverizadorAutomatico && op.Controle.Bicos.Any(x => x.ComandoAtuar))
{
Variaveis.OperacaoEmAndamento.Controle.Bicos.ForEach(b => b.ComandoAtuar = false);
op.Controle.Bicos.ForEach(b => b.ComandoAtuar = false);
}
}
private void chbSonarAtivado_CheckedChanged(object sender, EventArgs e)
{
var pC = Variaveis.OperacaoEmAndamento.Parametros.Controle;
var pC = op.Parametros.Controle;
pC.MovAuxilioSonar = ((CheckBox)sender).Checked;
pC.DirAuxilioSonar = ((CheckBox)sender).Checked;
}
private void chbImuAtivado_CheckedChanged(object sender, EventArgs e)
{
var pC = Variaveis.OperacaoEmAndamento.Parametros.Controle;
var pC = op.Parametros.Controle;
pC.ImuAuxilioMovimento = ((CheckBox)sender).Checked;
pC.ImuAuxilioDirecional = ((CheckBox)sender).Checked;
pC.ImuDirecionalPreferirArco = ((CheckBox)sender).Checked;

View File

@ -1763,7 +1763,7 @@ namespace AgroBase.Forms.Operacoes
}
// agrupar por tipo
var porTipo = dict.GroupBy(kv => CandMpcKey.ParseKey(kv.Key).Tipo);
var porTipo = dict.Where(x => x.Key.Contains("_")).GroupBy(kv => CandMpcKey.ParseKey(kv.Key).Tipo);
foreach (var g in porTipo.OrderBy(gr => gr.Key.ToString()))
{
var tipoNode = tv.Nodes.Add(g.Key.ToString());

View File

@ -240,11 +240,9 @@ namespace AgroBase.Forms
return EncerrarProcessos(sairProcesso: false);
}
public static async Task EncerrarProcessos(
bool sairProcesso)
public static async Task EncerrarProcessos(bool sairProcesso)
{
await _shutdownGate.WaitAsync()
.ConfigureAwait(false);
await _shutdownGate.WaitAsync().ConfigureAwait(false);
try
{
@ -253,9 +251,7 @@ namespace AgroBase.Forms
_shutdownIniciado = true;
await EncerrarProcessosInternoAsync(
sairProcesso
).ConfigureAwait(false);
await EncerrarProcessosInternoAsync(sairProcesso).ConfigureAwait(false);
}
finally
{
@ -263,8 +259,7 @@ namespace AgroBase.Forms
}
}
private static async Task EncerrarProcessosInternoAsync(
bool sairProcesso)
private static async Task EncerrarProcessosInternoAsync(bool sairProcesso)
{
Variaveis.Fechando = true;
@ -276,32 +271,22 @@ namespace AgroBase.Forms
*/
try
{
await AsyncTaskTimerModel
.PararTimersAsync()
.ConfigureAwait(false);
await AsyncTaskTimerModel.PararTimersAsync().ConfigureAwait(false);
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro ao parar timers: " +
ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro ao parar timers: " + ex.Message);
}
tmrVarreduraDispositivos = null;
try
{
await SerialService
.EncerrarAsync()
.ConfigureAwait(false);
await SerialService.EncerrarAsync().ConfigureAwait(false);
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro ao encerrar SerialService: " +
ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro ao encerrar SerialService: " + ex.Message);
}
/*
@ -318,19 +303,13 @@ namespace AgroBase.Forms
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro ao salvar " +
disp.Dispositivo + ": " + ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro ao salvar " + disp.Dispositivo + ": " + ex.Message);
}
}
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro ao percorrer dispositivos: " +
ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro ao percorrer dispositivos: " + ex.Message);
}
/*
@ -342,19 +321,14 @@ namespace AgroBase.Forms
{
var timeout = DateTime.Now.AddSeconds(10);
while (!CanManager.CanService.FilaLiberada &&
DateTime.Now < timeout)
while (!CanManager.CanService.FilaLiberada && DateTime.Now < timeout)
{
await Task.Delay(200)
.ConfigureAwait(false);
await Task.Delay(200).ConfigureAwait(false);
}
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro aguardando fila CAN: " +
ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro aguardando fila CAN: " + ex.Message);
}
try
@ -363,10 +337,7 @@ namespace AgroBase.Forms
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro ao encerrar Livox: " +
ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro ao encerrar Livox: " + ex.Message);
}
try
@ -375,10 +346,7 @@ namespace AgroBase.Forms
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro ao encerrar Python: " +
ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro ao encerrar Python: " + ex.Message);
}
try
@ -387,38 +355,25 @@ namespace AgroBase.Forms
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro ao encerrar UDP: " +
ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro ao encerrar UDP: " + ex.Message);
}
try
{
await GPSService
.EncerrarAsync()
.ConfigureAwait(false);
await GPSService.EncerrarAsync().ConfigureAwait(false);
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro ao encerrar GPS: " +
ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro ao encerrar GPS: " + ex.Message);
}
try
{
await Variaveis
.EncerrarMqttAsync()
.ConfigureAwait(false);
await Variaveis.EncerrarMqttAsync().ConfigureAwait(false);
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.Encerrar] Erro ao encerrar MQTT: " +
ex.Message
);
Variaveis.MostrarLog("[frmInstancial.Encerrar] Erro ao encerrar MQTT: " + ex.Message);
}
try
@ -440,9 +395,7 @@ namespace AgroBase.Forms
}
}
private async void frmPrincipal_FormClosing(
object sender,
FormClosingEventArgs e)
private async void frmPrincipal_FormClosing(object sender, FormClosingEventArgs e)
{
if (_allowClose)
return;
@ -451,9 +404,7 @@ namespace AgroBase.Forms
try
{
await EncerrarProcessos(
sairProcesso: false
);
await EncerrarProcessos(sairProcesso: false);
_allowClose = true;
@ -470,9 +421,7 @@ namespace AgroBase.Forms
}
catch (Exception ex)
{
Variaveis.MostrarLog(
"[frmInstancial.FormClosing] " + ex
);
Variaveis.MostrarLog("[frmInstancial.FormClosing] " + ex);
try
{
@ -482,9 +431,7 @@ namespace AgroBase.Forms
}
}
private void FrmIHM_FormClosing(
object sender,
FormClosingEventArgs e)
private void FrmIHM_FormClosing(object sender, FormClosingEventArgs e)
{
/*
* Em modo desenvolvimento, fechar a IHM apenas oculta a janela.

View File

@ -208,7 +208,7 @@ namespace AgroBase
private void cmbModoOperacao_SelectedIndexChanged(object sender, EventArgs e)
{
OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModoOperacao.SelectedIndex, true);
Variaveis.OperacaoEmAndamento = OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModoOperacao.SelectedIndex, CarregarModulos: true);
}
private void btnIniciarOperacao_Click(object sender, EventArgs e)

View File

@ -38,11 +38,11 @@ namespace AgroBase.Models
public void AtualizarDados()
{
var saude = Variaveis.OperacaoEmAndamento.Sensoriamento?.OperadorSaude?.ModulosSaude;
Status = saude.FirstOrDefault(x => x.modulo == Dispositivo)?.status ?? StatusModulo.Desconectado;
Saude = saude.FirstOrDefault(x => x.modulo == Dispositivo)?.saude ?? 0;
Status = saude?.FirstOrDefault(x => x.modulo == Dispositivo)?.status ?? StatusModulo.Desconectado;
Saude = saude?.FirstOrDefault(x => x.modulo == Dispositivo)?.saude ?? 0;
var motivos = saude.FirstOrDefault(x => x.modulo == Dispositivo)?.motivos ?? new System.Collections.Generic.List<string>();
var cond_op = saude.FirstOrDefault(x => x.modulo == Dispositivo)?.condicoes_operacionais?.Select(x => x.descricao) ?? new System.Collections.Generic.List<string>();
var motivos = saude?.FirstOrDefault(x => x.modulo == Dispositivo)?.motivos ?? new System.Collections.Generic.List<string>();
var cond_op = saude?.FirstOrDefault(x => x.modulo == Dispositivo)?.condicoes_operacionais?.Select(x => x.descricao) ?? new System.Collections.Generic.List<string>();
string motivos_str = string.Join(", ", motivos);
string cond_op_str = string.Join(", ", cond_op);
Erros = motivos_str + (motivos.Any() && cond_op.Any() ? ", " : "") + cond_op_str;

View File

@ -60,10 +60,13 @@ namespace AgroBase.Models.Modules
public List<AtuadorBombaModel> BombasPressurizadoras { get; set; }
public List<SensorModel> Sensores { get; set; }
[JsonIgnore]
public AsyncTaskTimerModel tmrRegistrador;
private int _TempoReconexaoComponentes = 5;
private int _VezesLeituraReconexao = 0;
public AtuadorMensagemJsonModel DadosLeitura { get; set; } = new AtuadorMensagemJsonModel();
[JsonIgnore]
public AtuHandler _AtuHandler = new AtuHandler();
[JsonIgnore]

View File

@ -1,4 +1,5 @@
using AgroBase.Services;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
@ -40,8 +41,11 @@ namespace AgroBase.Models.Modules
public DateTime UltimoTickRegistrador = DateTime.MinValue;
public static int LogsManter { get; set; } = 60;
[JsonIgnore]
public AsyncTaskTimerModel tmrRegistrador;
[JsonIgnore]
public AsyncTaskTimerModel tmrRegistradorMOV;
[JsonIgnore]
public AsyncTaskTimerModel tmrRegistradorDIR;
@ -525,7 +529,10 @@ namespace AgroBase.Models.Modules
var DispMvd = op.DispMvd;
if (DispMvd != null)
{
var calMov = op.Sensoriamento.Operacao.ModsCalibragem[T_Code.Mov];
var mc = op.Sensoriamento.Operacao.ModsCalibragem;
if (!mc.ContainsKey(T_Code.Mov))
mc.Add(T_Code.Mov, new Dictionary<string, bool>());
var calMov = mc[T_Code.Mov];
foreach (var mod in DispMvd.Dados.Modulos)
{
calMov.TryGetValue(mod.Modulo_ID, out var cal);
@ -546,7 +553,10 @@ namespace AgroBase.Models.Modules
var DispMvd = op.DispMvd;
if (DispMvd != null)
{
var calDir = op.Sensoriamento.Operacao.ModsCalibragem[T_Code.Dir];
var mc = op.Sensoriamento.Operacao.ModsCalibragem;
if (!mc.ContainsKey(T_Code.Dir))
mc.Add(T_Code.Dir, new Dictionary<string, bool>());
var calDir = mc[T_Code.Dir];
foreach (var mod in DispMvd.Dados.Modulos)
{
calDir.TryGetValue(mod.Modulo_ID, out var cal);

View File

@ -6,6 +6,7 @@ using System.Threading.Tasks;
using static AgroBase.Models.Enums;
using System.Globalization;
using System.Data;
using Newtonsoft.Json;
namespace AgroBase.Models.Modules
{
@ -53,9 +54,14 @@ namespace AgroBase.Models.Modules
public List<SensorReleModel> Reles { get; set; }
public List<SensorServoModel> Servos { get; set; }
public UltrasonicA05Configuracoes ConfiguracaoSensorUltrassom { get; set; }
[JsonIgnore]
private SenHandler _SenHandler = new SenHandler();
public CoulombCounterService ContadorCarga = new CoulombCounterService(VariaveisEquipamento.CorrenteMaximaBateria);
public CoolerControlService CoolerControl = new CoolerControlService();
[JsonIgnore]
public AsyncTaskTimerModel tmrRegistrador;
private int _TempoReconexaoComponentes = 5;
private int _VezesLeituraReconexao = 0;
@ -496,7 +502,7 @@ namespace AgroBase.Models.Modules
indice = 1,
analise_health = true,
maximo = 500,
minimo = 50,
minimo = 30,
nominal = 100,
unidade_medida = "mA"
},
@ -596,9 +602,9 @@ namespace AgroBase.Models.Modules
posicao = CanMessagePosicaoDados.Dados1,
indice = 1,
analise_health = true,
maximo = 1000,
minimo = 50,
nominal = 300,
maximo = 2200,
minimo = 1000,
nominal = 1700,
unidade_medida = "mA"
},
new SensorValoresLeituraModel()
@ -900,9 +906,9 @@ namespace AgroBase.Models.Modules
posicao = CanMessagePosicaoDados.Dados1,
indice = 1,
analise_health = true,
maximo = 4000,
minimo = 500,
nominal = 1500,
maximo = 6000,
minimo = 1000,
nominal = 5000,
unidade_medida = "mA"
},
new SensorValoresLeituraModel()
@ -992,7 +998,7 @@ namespace AgroBase.Models.Modules
indice = 0,
analise_health = true,
maximo = 24.3,
minimo = 23.8,
minimo = 23.5,
nominal = 24.0,
unidade_medida = "V"
},
@ -1106,7 +1112,7 @@ namespace AgroBase.Models.Modules
analise_health = true,
maximo = 75000,
minimo = 200,
nominal = 2500,
nominal = 3500,
unidade_medida = "mA"
},
new SensorValoresLeituraModel()

File diff suppressed because it is too large Load Diff

View File

@ -1585,7 +1585,7 @@ namespace AgroBase.Models
RetornandoBase = false;
CorredorAtual = _Corredores[0];
CorredorAtual = _Corredores.Count > 0 ? _Corredores[0] : null;
AutonomiaCorredor.Iniciar();
@ -1847,8 +1847,8 @@ namespace AgroBase.Models
LoopAtualizaDados();
var _p = OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.RetornoBase, false);
op.Parametros = _p;
var new_op = OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.RetornoBase, CarregarModulos: false);
op.Parametros = new_op.Parametros;
if (!op.Sensoriamento.Operacao.OperacaoIniciada)
{

View File

@ -95,6 +95,8 @@ namespace AgroBase.Services.Operadores
private static void AtualizarDadosContextoLocal()
{
var op = Variaveis.OperacaoEmAndamento;
if (op.Sensoriamento == null) return;
try
{
RedisService.AtualizarCampos(

View File

@ -148,7 +148,7 @@ namespace AgroBase.Services.Operadores
{
AtualizarImu();
DadosLeitura.Status = Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorSaude?.ModulosSaude?.FirstOrDefault(x => x.modulo == Enums.T_Code.Snr)?.status ?? Enums.StatusModulo.Desconectado;
DadosLeitura.Status = Variaveis.OperacaoEmAndamento.Sensoriamento?.OperadorSaude?.ModulosSaude?.FirstOrDefault(x => x.modulo == Enums.T_Code.Snr)?.status ?? Enums.StatusModulo.Desconectado;
string json = RedisService.Get(CtxKey.DadosVisualWorker);

View File

@ -38,12 +38,12 @@ namespace AgroBase.Services
public static string Get(string chave)
{
return _db.StringGet(chave);
return _db?.StringGet(chave);
}
private static void Set(string chave, string valor)
{
_db.StringSet(chave, valor);
_db?.StringSet(chave, valor);
}
public static void SetObject(string chave, object valor)
@ -157,7 +157,9 @@ namespace AgroBase.Services
public static void DefinirEquipamentoDesconectado()
{
var saude = Variaveis.OperacaoEmAndamento.Sensoriamento.OperadorSaude?.ModulosSaude;
if (!(Variaveis.OperacaoEmAndamento?.Sensoriamento?.OperadorSaude?.ModulosSaude?.Any() ?? false)) return;
var saude = Variaveis.OperacaoEmAndamento.Sensoriamento?.OperadorSaude?.ModulosSaude;
AtualizarCampos(
CtxKey.DadosOperacao,
("motivo_nao_liberado", "Sem comunicação com o núcleo de processamento central"),

View File

@ -375,9 +375,11 @@ namespace AgroBase.Services
if (!_AtualizacaoGate.Wait(0))
return;
var op = Variaveis.OperacaoEmAndamento;
try
{
if (Variaveis.OperacaoEmAndamento != null && Variaveis.OperacaoEmAndamento.Sensoriamento.Operacao.OperacaoIniciada)
if (op?.Sensoriamento?.Operacao?.OperacaoIniciada ?? false)
{
ResultadoAtualizacao =
"Atualização ignorada: operação em andamento.";

View File

@ -57,10 +57,10 @@ namespace OperationControl.ViewModels.Views.Operacao.Monitoramento
private void CarregarParametrosPadrao(AgroBase.Models.Enums.ModoOperacao modo)
{
var p = OperacaoModel.CarregarParametrosOperacaoPadrao(modo, false);
modoOperacaoAtual = p.Modo;
p.Descricao = $"{p.Modo} - Padrão";
Parametros = p;
var new_op = OperacaoModel.CarregarParametrosOperacaoPadrao(modo, false);
modoOperacaoAtual = new_op.Parametros.Modo;
new_op.Parametros.Descricao = $"{new_op.Parametros.Modo} - Padrão";
Parametros = new_op.Parametros;
if (VariaveisControleOperacao.RoverEmFoco != null)
VariaveisControleOperacao.RoverEmFoco.Modo = modo;
}