ajustes na operacao manual para controle do modulo unificado

This commit is contained in:
Diego Freitas 2024-06-07 22:20:23 -03:00
parent 81104525cb
commit d5a871c020
80 changed files with 2037 additions and 903 deletions

Binary file not shown.

View File

@ -3,8 +3,36 @@
"WorkspaceRootPath": "C:\\ZendionINC\\agrobot_base\\AgroBase\\", "WorkspaceRootPath": "C:\\ZendionINC\\agrobot_base\\AgroBase\\",
"Documents": [ "Documents": [
{ {
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\enuns.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\forms\\operacoes\\frmoperacaomanual.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\enuns.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" "RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\operacoes\\frmoperacaomanual.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frmacompanhamento.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmacompanhamento.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\operacoes\\frmresultadosoperacao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\operacoes\\frmresultadosoperacao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\models\\modules\\movimentacaounificadomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\modules\\movimentacaounificadomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\services\\serialservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\serialservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frmprincipal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmprincipal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\services\\dispositivosservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\dispositivosservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\models\\operacoes\\operacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\operacoes\\operacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
} }
], ],
"DocumentGroupContainers": [ "DocumentGroupContainers": [
@ -14,19 +42,110 @@
"DocumentGroups": [ "DocumentGroups": [
{ {
"DockedWidth": 200, "DockedWidth": 200,
"SelectedChildIndex": 0, "SelectedChildIndex": 4,
"Children": [ "Children": [
{ {
"$type": "Document", "$type": "Document",
"DocumentIndex": 0, "DocumentIndex": 2,
"Title": "Enuns.cs", "Title": "frmResultadosOperacao.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Enuns.cs", "DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\Enuns.cs", "RelativeDocumentMoniker": "AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Enuns.cs", "ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"RelativeToolTip": "AgroBase\\Models\\Enuns.cs", "RelativeToolTip": "AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"ViewState": "AQIAAAgAAAAAAAAAAAAxwDUAAAAMAAAA", "ViewState": "AQIAACkCAAAAAAAAAAAAAEgCAAAXAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-06-06T10:38:10.351Z", "WhenOpened": "2024-06-08T00:52:51.592Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "frmAcompanhamento.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmAcompanhamento.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmAcompanhamento.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmAcompanhamento.cs",
"RelativeToolTip": "AgroBase\\Forms\\frmAcompanhamento.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAHEBAABMAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-06-08T00:34:52.765Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "frmPrincipal.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmPrincipal.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmPrincipal.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmPrincipal.cs",
"RelativeToolTip": "AgroBase\\Forms\\frmPrincipal.cs",
"ViewState": "AQIAABoAAAAAAAAAAAAkwFkAAAApAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-06-07T19:57:07.232Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "SerialService.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\SerialService.cs",
"RelativeDocumentMoniker": "AgroBase\\Services\\SerialService.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\SerialService.cs",
"RelativeToolTip": "AgroBase\\Services\\SerialService.cs",
"ViewState": "AQIAAAEAAAAAAAAAAAAiwDkAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-06-07T18:00:32.305Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "frmOperacaoManual.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmOperacaoManual.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\Operacoes\\frmOperacaoManual.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmOperacaoManual.cs",
"RelativeToolTip": "AgroBase\\Forms\\Operacoes\\frmOperacaoManual.cs",
"ViewState": "AQIAAA0AAAAAAAAAAAAkwMcBAAAIAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-06-07T16:53:23.408Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "OperacaoModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"RelativeToolTip": "AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"ViewState": "AQIAAOUAAAAAAAAAAAAqwCEAAAAfAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-06-07T11:12:40.207Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "MovimentacaoUnificadoModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\MovimentacaoUnificadoModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\Modules\\MovimentacaoUnificadoModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\MovimentacaoUnificadoModel.cs",
"RelativeToolTip": "AgroBase\\Models\\Modules\\MovimentacaoUnificadoModel.cs",
"ViewState": "AQIAAAkAAAAAAAAAAAAqwB8AAABLAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-06-06T18:02:19.931Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "DispositivosService.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\DispositivosService.cs",
"RelativeDocumentMoniker": "AgroBase\\Services\\DispositivosService.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\DispositivosService.cs",
"RelativeToolTip": "AgroBase\\Services\\DispositivosService.cs",
"ViewState": "AQIAADQAAAAAAAAAAAA7wNwAAAAhAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-06-06T17:38:48.095Z",
"EditorCaption": "" "EditorCaption": ""
} }
] ]

View File

@ -359,6 +359,7 @@
<Compile Include="Models\Enuns.cs" /> <Compile Include="Models\Enuns.cs" />
<Compile Include="Models\GeneralJoystick.cs" /> <Compile Include="Models\GeneralJoystick.cs" />
<Compile Include="Models\Modules\MovimentacaoModel.cs" /> <Compile Include="Models\Modules\MovimentacaoModel.cs" />
<Compile Include="Models\Modules\MovimentacaoUnificadoModel.cs" />
<Compile Include="Models\Modules\PinoutModel.cs" /> <Compile Include="Models\Modules\PinoutModel.cs" />
<Compile Include="Models\Modules\SensoriamentoModel.cs" /> <Compile Include="Models\Modules\SensoriamentoModel.cs" />
<Compile Include="Models\Modules\WT901C485\WitSdk\Device\Connector\Entity\SerialPortConfig.cs" /> <Compile Include="Models\Modules\WT901C485\WitSdk\Device\Connector\Entity\SerialPortConfig.cs" />

View File

@ -155,7 +155,7 @@ namespace AgroBase.Forms.Atuador
private void EnviarProtocoloComandoBomba() private void EnviarProtocoloComandoBomba()
{ {
string Protocolo = DispAtu.Dados.BombaPressurizadora.ProtocoloComando(); string Protocolo = DispAtu.Dados.BombaPressurizadora.ProtocoloComando();
DispAtu.AdicionarMensagemFila(Protocolo); DispAtu.AdicionarMensagemFila(DispAtu.Dados.Modulo_ID, Protocolo);
} }
private void nudPressaoSP_ValueChanged(object sender, EventArgs e) private void nudPressaoSP_ValueChanged(object sender, EventArgs e)
@ -202,7 +202,7 @@ namespace AgroBase.Forms.Atuador
{ {
Bico.Atuado = !DispAtu.Dados.AtuacaoNivelAlto; Bico.Atuado = !DispAtu.Dados.AtuacaoNivelAlto;
string Protocolo = Bico.ProtocoloComando(); string Protocolo = Bico.ProtocoloComando();
DispAtu.AdicionarMensagemFila(Protocolo); DispAtu.AdicionarMensagemFila(DispAtu.Dados.Modulo_ID, Protocolo);
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";
@ -218,7 +218,7 @@ namespace AgroBase.Forms.Atuador
{ {
Bico.Atuado = DispAtu.Dados.AtuacaoNivelAlto; Bico.Atuado = DispAtu.Dados.AtuacaoNivelAlto;
string Protocolo = Bico.ProtocoloComando(); string Protocolo = Bico.ProtocoloComando();
DispAtu.AdicionarMensagemFila(Protocolo); DispAtu.AdicionarMensagemFila(DispAtu.Dados.Modulo_ID, Protocolo);
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";

View File

@ -194,7 +194,7 @@ namespace AgroBase.Forms.Direcional
{ {
var Motor = ((DirecionalModel)Dispositivo.Dados).Motores.FirstOrDefault(x => x.ID == ID); var Motor = ((DirecionalModel)Dispositivo.Dados).Motores.FirstOrDefault(x => x.ID == ID);
string Comando = Motor.ProtocoloComando(Direcao.Parado, true); string Comando = Motor.ProtocoloComando(Direcao.Parado, true);
Dispositivo.AdicionarMensagemFila(Comando); Dispositivo.AdicionarMensagemFila(((DirecionalModel)Dispositivo.Dados).Modulo_ID, Comando);
} }
} }

View File

@ -21,7 +21,7 @@ namespace AgroBase.Forms.Movimentacao
private void frmMovConfig_Load(object sender, EventArgs e) private void frmMovConfig_Load(object sender, EventArgs e)
{ {
nudDiametroRoda.Value = Convert.ToInt32(MovimentacaoModel.DiametroRoda * 1000); nudDiametroRoda.Value = Convert.ToInt32(VariaveisEquipamento.DiametroRoda * 1000);
if (Disp == null) if (Disp == null)
{ {
@ -130,7 +130,7 @@ namespace AgroBase.Forms.Movimentacao
private void nudDiametroRoda_ValueChanged(object sender, EventArgs e) private void nudDiametroRoda_ValueChanged(object sender, EventArgs e)
{ {
MovimentacaoModel.DiametroRoda = Convert.ToInt32(nudDiametroRoda.Value) / 1000; VariaveisEquipamento.DiametroRoda = Convert.ToInt32(nudDiametroRoda.Value) / 1000;
} }
} }
} }

View File

@ -81,7 +81,7 @@ namespace AgroBase.Forms
foreach (var Motor in DispMov.Dados.Motores) foreach (var Motor in DispMov.Dados.Motores)
{ {
string ProtocoloMotor = Motor.ProtocoloTeste(); string ProtocoloMotor = Motor.ProtocoloTeste();
DispMov.AdicionarMensagemFila(ProtocoloMotor); DispMov.AdicionarMensagemFila(DispMov.Dados.Modulo_ID, ProtocoloMotor);
System.Threading.Thread.Sleep(10); System.Threading.Thread.Sleep(10);
} }

View File

@ -28,9 +28,9 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea3 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); System.Windows.Forms.DataVisualization.Charting.Legend legend3 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
this.pnlCamerasSolo = new System.Windows.Forms.Panel(); this.pnlCamerasSolo = new System.Windows.Forms.Panel();
this.pnlCameraSoloE = new System.Windows.Forms.Panel(); this.pnlCameraSoloE = new System.Windows.Forms.Panel();
this.picCameraSoloE = new System.Windows.Forms.PictureBox(); this.picCameraSoloE = new System.Windows.Forms.PictureBox();
@ -89,7 +89,6 @@
this.lblCorrente = new System.Windows.Forms.Label(); this.lblCorrente = new System.Windows.Forms.Label();
this.lblRPM = new System.Windows.Forms.Label(); this.lblRPM = new System.Windows.Forms.Label();
this.lblVelocidade = new System.Windows.Forms.Label(); this.lblVelocidade = new System.Windows.Forms.Label();
this.lblPotencia = new System.Windows.Forms.Label();
this.lblKmh = new System.Windows.Forms.Label(); this.lblKmh = new System.Windows.Forms.Label();
this.pnlCamerasSolo.SuspendLayout(); this.pnlCamerasSolo.SuspendLayout();
this.pnlCameraSoloE.SuspendLayout(); this.pnlCameraSoloE.SuspendLayout();
@ -119,19 +118,19 @@
this.pnlCamerasSolo.BackColor = System.Drawing.Color.White; this.pnlCamerasSolo.BackColor = System.Drawing.Color.White;
this.pnlCamerasSolo.Controls.Add(this.pnlCameraSoloE); this.pnlCamerasSolo.Controls.Add(this.pnlCameraSoloE);
this.pnlCamerasSolo.Controls.Add(this.pnlCameraSoloD); this.pnlCamerasSolo.Controls.Add(this.pnlCameraSoloD);
this.pnlCamerasSolo.Location = new System.Drawing.Point(31, 404); this.pnlCamerasSolo.Location = new System.Drawing.Point(23, 328);
this.pnlCamerasSolo.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlCamerasSolo.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlCamerasSolo.Name = "pnlCamerasSolo"; this.pnlCamerasSolo.Name = "pnlCamerasSolo";
this.pnlCamerasSolo.Size = new System.Drawing.Size(784, 226); this.pnlCamerasSolo.Size = new System.Drawing.Size(588, 184);
this.pnlCamerasSolo.TabIndex = 0; this.pnlCamerasSolo.TabIndex = 0;
// //
// pnlCameraSoloE // pnlCameraSoloE
// //
this.pnlCameraSoloE.Controls.Add(this.picCameraSoloE); this.pnlCameraSoloE.Controls.Add(this.picCameraSoloE);
this.pnlCameraSoloE.Location = new System.Drawing.Point(3, 2); this.pnlCameraSoloE.Location = new System.Drawing.Point(2, 2);
this.pnlCameraSoloE.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlCameraSoloE.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlCameraSoloE.Name = "pnlCameraSoloE"; this.pnlCameraSoloE.Name = "pnlCameraSoloE";
this.pnlCameraSoloE.Size = new System.Drawing.Size(385, 219); this.pnlCameraSoloE.Size = new System.Drawing.Size(289, 178);
this.pnlCameraSoloE.TabIndex = 24; this.pnlCameraSoloE.TabIndex = 24;
// //
// picCameraSoloE // picCameraSoloE
@ -139,9 +138,9 @@
this.picCameraSoloE.BackColor = System.Drawing.SystemColors.ButtonFace; this.picCameraSoloE.BackColor = System.Drawing.SystemColors.ButtonFace;
this.picCameraSoloE.Dock = System.Windows.Forms.DockStyle.Fill; this.picCameraSoloE.Dock = System.Windows.Forms.DockStyle.Fill;
this.picCameraSoloE.Location = new System.Drawing.Point(0, 0); this.picCameraSoloE.Location = new System.Drawing.Point(0, 0);
this.picCameraSoloE.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.picCameraSoloE.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.picCameraSoloE.Name = "picCameraSoloE"; this.picCameraSoloE.Name = "picCameraSoloE";
this.picCameraSoloE.Size = new System.Drawing.Size(385, 219); this.picCameraSoloE.Size = new System.Drawing.Size(289, 178);
this.picCameraSoloE.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; this.picCameraSoloE.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.picCameraSoloE.TabIndex = 1; this.picCameraSoloE.TabIndex = 1;
this.picCameraSoloE.TabStop = false; this.picCameraSoloE.TabStop = false;
@ -149,10 +148,10 @@
// pnlCameraSoloD // pnlCameraSoloD
// //
this.pnlCameraSoloD.Controls.Add(this.picCameraSoloD); this.pnlCameraSoloD.Controls.Add(this.picCameraSoloD);
this.pnlCameraSoloD.Location = new System.Drawing.Point(395, 2); this.pnlCameraSoloD.Location = new System.Drawing.Point(296, 2);
this.pnlCameraSoloD.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlCameraSoloD.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlCameraSoloD.Name = "pnlCameraSoloD"; this.pnlCameraSoloD.Name = "pnlCameraSoloD";
this.pnlCameraSoloD.Size = new System.Drawing.Size(385, 219); this.pnlCameraSoloD.Size = new System.Drawing.Size(289, 178);
this.pnlCameraSoloD.TabIndex = 23; this.pnlCameraSoloD.TabIndex = 23;
// //
// picCameraSoloD // picCameraSoloD
@ -160,9 +159,9 @@
this.picCameraSoloD.BackColor = System.Drawing.SystemColors.ButtonFace; this.picCameraSoloD.BackColor = System.Drawing.SystemColors.ButtonFace;
this.picCameraSoloD.Dock = System.Windows.Forms.DockStyle.Fill; this.picCameraSoloD.Dock = System.Windows.Forms.DockStyle.Fill;
this.picCameraSoloD.Location = new System.Drawing.Point(0, 0); this.picCameraSoloD.Location = new System.Drawing.Point(0, 0);
this.picCameraSoloD.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.picCameraSoloD.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.picCameraSoloD.Name = "picCameraSoloD"; this.picCameraSoloD.Name = "picCameraSoloD";
this.picCameraSoloD.Size = new System.Drawing.Size(385, 219); this.picCameraSoloD.Size = new System.Drawing.Size(289, 178);
this.picCameraSoloD.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; this.picCameraSoloD.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.picCameraSoloD.TabIndex = 1; this.picCameraSoloD.TabIndex = 1;
this.picCameraSoloD.TabStop = false; this.picCameraSoloD.TabStop = false;
@ -171,10 +170,10 @@
// //
this.pnlAtuadores.BackColor = System.Drawing.Color.White; this.pnlAtuadores.BackColor = System.Drawing.Color.White;
this.pnlAtuadores.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.pnlAtuadores.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.pnlAtuadores.Location = new System.Drawing.Point(31, 638); this.pnlAtuadores.Location = new System.Drawing.Point(23, 518);
this.pnlAtuadores.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlAtuadores.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlAtuadores.Name = "pnlAtuadores"; this.pnlAtuadores.Name = "pnlAtuadores";
this.pnlAtuadores.Size = new System.Drawing.Size(784, 155); this.pnlAtuadores.Size = new System.Drawing.Size(589, 127);
this.pnlAtuadores.TabIndex = 1; this.pnlAtuadores.TabIndex = 1;
this.pnlAtuadores.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlAtuadores_Paint); this.pnlAtuadores.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlAtuadores_Paint);
// //
@ -182,10 +181,10 @@
// //
this.btnIniciarOperacao.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnIniciarOperacao.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnIniciarOperacao.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnIniciarOperacao.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnIniciarOperacao.Location = new System.Drawing.Point(1492, 720); this.btnIniciarOperacao.Location = new System.Drawing.Point(1119, 585);
this.btnIniciarOperacao.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.btnIniciarOperacao.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnIniciarOperacao.Name = "btnIniciarOperacao"; this.btnIniciarOperacao.Name = "btnIniciarOperacao";
this.btnIniciarOperacao.Size = new System.Drawing.Size(151, 65); this.btnIniciarOperacao.Size = new System.Drawing.Size(113, 53);
this.btnIniciarOperacao.TabIndex = 25; this.btnIniciarOperacao.TabIndex = 25;
this.btnIniciarOperacao.Text = "Iniciar Operação"; this.btnIniciarOperacao.Text = "Iniciar Operação";
this.btnIniciarOperacao.UseVisualStyleBackColor = true; this.btnIniciarOperacao.UseVisualStyleBackColor = true;
@ -195,18 +194,18 @@
// //
this.chartGraficos.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) this.chartGraficos.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
chartArea1.Name = "ChartArea1"; chartArea3.Name = "ChartArea1";
this.chartGraficos.ChartAreas.Add(chartArea1); this.chartGraficos.ChartAreas.Add(chartArea3);
legend1.Name = "Legend1"; legend3.Name = "Legend1";
this.chartGraficos.Legends.Add(legend1); this.chartGraficos.Legends.Add(legend3);
this.chartGraficos.Location = new System.Drawing.Point(853, 9); this.chartGraficos.Location = new System.Drawing.Point(640, 7);
this.chartGraficos.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chartGraficos.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chartGraficos.Name = "chartGraficos"; this.chartGraficos.Name = "chartGraficos";
series1.ChartArea = "ChartArea1"; series3.ChartArea = "ChartArea1";
series1.Legend = "Legend1"; series3.Legend = "Legend1";
series1.Name = "Series1"; series3.Name = "Series1";
this.chartGraficos.Series.Add(series1); this.chartGraficos.Series.Add(series3);
this.chartGraficos.Size = new System.Drawing.Size(788, 391); this.chartGraficos.Size = new System.Drawing.Size(591, 318);
this.chartGraficos.TabIndex = 2; this.chartGraficos.TabIndex = 2;
this.chartGraficos.Text = "chart1"; this.chartGraficos.Text = "chart1";
// //
@ -214,8 +213,9 @@
// //
this.lblDir_EF.AutoSize = true; this.lblDir_EF.AutoSize = true;
this.lblDir_EF.Location = new System.Drawing.Point(1, 1); this.lblDir_EF.Location = new System.Drawing.Point(1, 1);
this.lblDir_EF.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDir_EF.Name = "lblDir_EF"; this.lblDir_EF.Name = "lblDir_EF";
this.lblDir_EF.Size = new System.Drawing.Size(53, 16); this.lblDir_EF.Size = new System.Drawing.Size(45, 13);
this.lblDir_EF.TabIndex = 9; this.lblDir_EF.TabIndex = 9;
this.lblDir_EF.Text = "EF 000º"; this.lblDir_EF.Text = "EF 000º";
// //
@ -223,8 +223,9 @@
// //
this.lblDir_DF.AutoSize = true; this.lblDir_DF.AutoSize = true;
this.lblDir_DF.Location = new System.Drawing.Point(1, 1); this.lblDir_DF.Location = new System.Drawing.Point(1, 1);
this.lblDir_DF.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDir_DF.Name = "lblDir_DF"; this.lblDir_DF.Name = "lblDir_DF";
this.lblDir_DF.Size = new System.Drawing.Size(54, 16); this.lblDir_DF.Size = new System.Drawing.Size(46, 13);
this.lblDir_DF.TabIndex = 10; this.lblDir_DF.TabIndex = 10;
this.lblDir_DF.Text = "DF 000º"; this.lblDir_DF.Text = "DF 000º";
// //
@ -232,8 +233,9 @@
// //
this.lblDir_DT.AutoSize = true; this.lblDir_DT.AutoSize = true;
this.lblDir_DT.Location = new System.Drawing.Point(1, 2); this.lblDir_DT.Location = new System.Drawing.Point(1, 2);
this.lblDir_DT.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDir_DT.Name = "lblDir_DT"; this.lblDir_DT.Name = "lblDir_DT";
this.lblDir_DT.Size = new System.Drawing.Size(55, 16); this.lblDir_DT.Size = new System.Drawing.Size(47, 13);
this.lblDir_DT.TabIndex = 11; this.lblDir_DT.TabIndex = 11;
this.lblDir_DT.Text = "DT 000º"; this.lblDir_DT.Text = "DT 000º";
// //
@ -241,8 +243,9 @@
// //
this.lblDir_ET.AutoSize = true; this.lblDir_ET.AutoSize = true;
this.lblDir_ET.Location = new System.Drawing.Point(1, 2); this.lblDir_ET.Location = new System.Drawing.Point(1, 2);
this.lblDir_ET.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDir_ET.Name = "lblDir_ET"; this.lblDir_ET.Name = "lblDir_ET";
this.lblDir_ET.Size = new System.Drawing.Size(54, 16); this.lblDir_ET.Size = new System.Drawing.Size(46, 13);
this.lblDir_ET.TabIndex = 12; this.lblDir_ET.TabIndex = 12;
this.lblDir_ET.Text = "ET 000º"; this.lblDir_ET.Text = "ET 000º";
// //
@ -255,11 +258,11 @@
this.tabControl1.Controls.Add(this.tabInformacoes); this.tabControl1.Controls.Add(this.tabInformacoes);
this.tabControl1.Controls.Add(this.tabDeteccoes); this.tabControl1.Controls.Add(this.tabDeteccoes);
this.tabControl1.Controls.Add(this.tabPulverizador); this.tabControl1.Controls.Add(this.tabPulverizador);
this.tabControl1.Location = new System.Drawing.Point(853, 407); this.tabControl1.Location = new System.Drawing.Point(640, 331);
this.tabControl1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabControl1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tabControl1.Name = "tabControl1"; this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0; this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(628, 386); this.tabControl1.Size = new System.Drawing.Size(471, 314);
this.tabControl1.TabIndex = 17; this.tabControl1.TabIndex = 17;
// //
// tabMapa // tabMapa
@ -274,64 +277,69 @@
this.tabMapa.Controls.Add(this.pnlAnguloGPS); this.tabMapa.Controls.Add(this.pnlAnguloGPS);
this.tabMapa.Controls.Add(this.pnlAnguloMagnetometro); this.tabMapa.Controls.Add(this.pnlAnguloMagnetometro);
this.tabMapa.Controls.Add(this.lblMagnetometro); this.tabMapa.Controls.Add(this.lblMagnetometro);
this.tabMapa.Location = new System.Drawing.Point(4, 25); this.tabMapa.Location = new System.Drawing.Point(4, 22);
this.tabMapa.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabMapa.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tabMapa.Name = "tabMapa"; this.tabMapa.Name = "tabMapa";
this.tabMapa.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabMapa.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tabMapa.Size = new System.Drawing.Size(620, 357); this.tabMapa.Size = new System.Drawing.Size(463, 288);
this.tabMapa.TabIndex = 0; this.tabMapa.TabIndex = 0;
this.tabMapa.Text = "Mapa"; this.tabMapa.Text = "Mapa";
// //
// lblGPSprecisao // lblGPSprecisao
// //
this.lblGPSprecisao.AutoSize = true; this.lblGPSprecisao.AutoSize = true;
this.lblGPSprecisao.Location = new System.Drawing.Point(5, 143); this.lblGPSprecisao.Location = new System.Drawing.Point(4, 116);
this.lblGPSprecisao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblGPSprecisao.Name = "lblGPSprecisao"; this.lblGPSprecisao.Name = "lblGPSprecisao";
this.lblGPSprecisao.Size = new System.Drawing.Size(105, 16); this.lblGPSprecisao.Size = new System.Drawing.Size(86, 13);
this.lblGPSprecisao.TabIndex = 31; this.lblGPSprecisao.TabIndex = 31;
this.lblGPSprecisao.Text = "Precisão: 0,00 m"; this.lblGPSprecisao.Text = "Precisão: 0,00 m";
// //
// lblGPSaltitude // lblGPSaltitude
// //
this.lblGPSaltitude.AutoSize = true; this.lblGPSaltitude.AutoSize = true;
this.lblGPSaltitude.Location = new System.Drawing.Point(5, 175); this.lblGPSaltitude.Location = new System.Drawing.Point(4, 142);
this.lblGPSaltitude.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblGPSaltitude.Name = "lblGPSaltitude"; this.lblGPSaltitude.Name = "lblGPSaltitude";
this.lblGPSaltitude.Size = new System.Drawing.Size(88, 16); this.lblGPSaltitude.Size = new System.Drawing.Size(74, 13);
this.lblGPSaltitude.TabIndex = 30; this.lblGPSaltitude.TabIndex = 30;
this.lblGPSaltitude.Text = "Altitude: 0,0 m"; this.lblGPSaltitude.Text = "Altitude: 0,0 m";
// //
// lblGPSvelocidade // lblGPSvelocidade
// //
this.lblGPSvelocidade.AutoSize = true; this.lblGPSvelocidade.AutoSize = true;
this.lblGPSvelocidade.Location = new System.Drawing.Point(5, 159); this.lblGPSvelocidade.Location = new System.Drawing.Point(4, 129);
this.lblGPSvelocidade.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblGPSvelocidade.Name = "lblGPSvelocidade"; this.lblGPSvelocidade.Name = "lblGPSvelocidade";
this.lblGPSvelocidade.Size = new System.Drawing.Size(92, 16); this.lblGPSvelocidade.Size = new System.Drawing.Size(80, 13);
this.lblGPSvelocidade.TabIndex = 29; this.lblGPSvelocidade.TabIndex = 29;
this.lblGPSvelocidade.Text = "Vel.: 0,00 km/h"; this.lblGPSvelocidade.Text = "Vel.: 0,00 km/h";
// //
// lblGPSsatelites // lblGPSsatelites
// //
this.lblGPSsatelites.AutoSize = true; this.lblGPSsatelites.AutoSize = true;
this.lblGPSsatelites.Location = new System.Drawing.Point(5, 127); this.lblGPSsatelites.Location = new System.Drawing.Point(4, 103);
this.lblGPSsatelites.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblGPSsatelites.Name = "lblGPSsatelites"; this.lblGPSsatelites.Name = "lblGPSsatelites";
this.lblGPSsatelites.Size = new System.Drawing.Size(67, 16); this.lblGPSsatelites.Size = new System.Drawing.Size(54, 13);
this.lblGPSsatelites.TabIndex = 28; this.lblGPSsatelites.TabIndex = 28;
this.lblGPSsatelites.Text = "0 satélites"; this.lblGPSsatelites.Text = "0 satélites";
// //
// pnlMapa // pnlMapa
// //
this.pnlMapa.Location = new System.Drawing.Point(139, 2); this.pnlMapa.Location = new System.Drawing.Point(104, 2);
this.pnlMapa.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlMapa.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlMapa.Name = "pnlMapa"; this.pnlMapa.Name = "pnlMapa";
this.pnlMapa.Size = new System.Drawing.Size(479, 352); this.pnlMapa.Size = new System.Drawing.Size(359, 286);
this.pnlMapa.TabIndex = 0; this.pnlMapa.TabIndex = 0;
// //
// lblGPS // lblGPS
// //
this.lblGPS.AutoSize = true; this.lblGPS.AutoSize = true;
this.lblGPS.Location = new System.Drawing.Point(5, 2); this.lblGPS.Location = new System.Drawing.Point(4, 2);
this.lblGPS.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblGPS.Name = "lblGPS"; this.lblGPS.Name = "lblGPS";
this.lblGPS.Size = new System.Drawing.Size(35, 16); this.lblGPS.Size = new System.Drawing.Size(29, 13);
this.lblGPS.TabIndex = 19; this.lblGPS.TabIndex = 19;
this.lblGPS.Text = "GPS"; this.lblGPS.Text = "GPS";
// //
@ -340,10 +348,10 @@
this.pnlAnguloGPS.BackColor = System.Drawing.Color.White; this.pnlAnguloGPS.BackColor = System.Drawing.Color.White;
this.pnlAnguloGPS.BackgroundImage = global::AgroBase.Properties.Resources.rosa_dos_ventos; this.pnlAnguloGPS.BackgroundImage = global::AgroBase.Properties.Resources.rosa_dos_ventos;
this.pnlAnguloGPS.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; this.pnlAnguloGPS.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.pnlAnguloGPS.Location = new System.Drawing.Point(9, 22); this.pnlAnguloGPS.Location = new System.Drawing.Point(7, 18);
this.pnlAnguloGPS.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlAnguloGPS.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlAnguloGPS.Name = "pnlAnguloGPS"; this.pnlAnguloGPS.Name = "pnlAnguloGPS";
this.pnlAnguloGPS.Size = new System.Drawing.Size(104, 103); this.pnlAnguloGPS.Size = new System.Drawing.Size(78, 84);
this.pnlAnguloGPS.TabIndex = 18; this.pnlAnguloGPS.TabIndex = 18;
this.pnlAnguloGPS.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlAnguloGPS_Paint); this.pnlAnguloGPS.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlAnguloGPS_Paint);
// //
@ -352,30 +360,31 @@
this.pnlAnguloMagnetometro.BackColor = System.Drawing.Color.White; this.pnlAnguloMagnetometro.BackColor = System.Drawing.Color.White;
this.pnlAnguloMagnetometro.BackgroundImage = global::AgroBase.Properties.Resources.rosa_dos_ventos; this.pnlAnguloMagnetometro.BackgroundImage = global::AgroBase.Properties.Resources.rosa_dos_ventos;
this.pnlAnguloMagnetometro.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; this.pnlAnguloMagnetometro.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.pnlAnguloMagnetometro.Location = new System.Drawing.Point(9, 250); this.pnlAnguloMagnetometro.Location = new System.Drawing.Point(7, 203);
this.pnlAnguloMagnetometro.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlAnguloMagnetometro.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlAnguloMagnetometro.Name = "pnlAnguloMagnetometro"; this.pnlAnguloMagnetometro.Name = "pnlAnguloMagnetometro";
this.pnlAnguloMagnetometro.Size = new System.Drawing.Size(104, 103); this.pnlAnguloMagnetometro.Size = new System.Drawing.Size(78, 84);
this.pnlAnguloMagnetometro.TabIndex = 20; this.pnlAnguloMagnetometro.TabIndex = 20;
this.pnlAnguloMagnetometro.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlAnguloMagnetometro_Paint); this.pnlAnguloMagnetometro.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlAnguloMagnetometro_Paint);
// //
// lblMagnetometro // lblMagnetometro
// //
this.lblMagnetometro.AutoSize = true; this.lblMagnetometro.AutoSize = true;
this.lblMagnetometro.Location = new System.Drawing.Point(5, 231); this.lblMagnetometro.Location = new System.Drawing.Point(4, 188);
this.lblMagnetometro.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblMagnetometro.Name = "lblMagnetometro"; this.lblMagnetometro.Name = "lblMagnetometro";
this.lblMagnetometro.Size = new System.Drawing.Size(94, 16); this.lblMagnetometro.Size = new System.Drawing.Size(75, 13);
this.lblMagnetometro.TabIndex = 21; this.lblMagnetometro.TabIndex = 21;
this.lblMagnetometro.Text = "Magnetômetro"; this.lblMagnetometro.Text = "Magnetômetro";
// //
// tabInformacoes // tabInformacoes
// //
this.tabInformacoes.Controls.Add(this.gridDados); this.tabInformacoes.Controls.Add(this.gridDados);
this.tabInformacoes.Location = new System.Drawing.Point(4, 25); this.tabInformacoes.Location = new System.Drawing.Point(4, 22);
this.tabInformacoes.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabInformacoes.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tabInformacoes.Name = "tabInformacoes"; this.tabInformacoes.Name = "tabInformacoes";
this.tabInformacoes.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabInformacoes.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tabInformacoes.Size = new System.Drawing.Size(620, 357); this.tabInformacoes.Size = new System.Drawing.Size(463, 288);
this.tabInformacoes.TabIndex = 1; this.tabInformacoes.TabIndex = 1;
this.tabInformacoes.Text = "Informações"; this.tabInformacoes.Text = "Informações";
this.tabInformacoes.UseVisualStyleBackColor = true; this.tabInformacoes.UseVisualStyleBackColor = true;
@ -384,22 +393,22 @@
// //
this.gridDados.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.gridDados.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.gridDados.Dock = System.Windows.Forms.DockStyle.Fill; this.gridDados.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridDados.Location = new System.Drawing.Point(3, 2); this.gridDados.Location = new System.Drawing.Point(2, 2);
this.gridDados.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.gridDados.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gridDados.Name = "gridDados"; this.gridDados.Name = "gridDados";
this.gridDados.RowHeadersWidth = 51; this.gridDados.RowHeadersWidth = 51;
this.gridDados.RowTemplate.Height = 24; this.gridDados.RowTemplate.Height = 24;
this.gridDados.Size = new System.Drawing.Size(614, 353); this.gridDados.Size = new System.Drawing.Size(459, 284);
this.gridDados.TabIndex = 0; this.gridDados.TabIndex = 0;
// //
// tabDeteccoes // tabDeteccoes
// //
this.tabDeteccoes.Controls.Add(this.pnlDeteccoesRua); this.tabDeteccoes.Controls.Add(this.pnlDeteccoesRua);
this.tabDeteccoes.Location = new System.Drawing.Point(4, 25); this.tabDeteccoes.Location = new System.Drawing.Point(4, 22);
this.tabDeteccoes.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabDeteccoes.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tabDeteccoes.Name = "tabDeteccoes"; this.tabDeteccoes.Name = "tabDeteccoes";
this.tabDeteccoes.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabDeteccoes.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tabDeteccoes.Size = new System.Drawing.Size(620, 357); this.tabDeteccoes.Size = new System.Drawing.Size(463, 288);
this.tabDeteccoes.TabIndex = 2; this.tabDeteccoes.TabIndex = 2;
this.tabDeteccoes.Text = "Detecção rua"; this.tabDeteccoes.Text = "Detecção rua";
this.tabDeteccoes.UseVisualStyleBackColor = true; this.tabDeteccoes.UseVisualStyleBackColor = true;
@ -408,18 +417,18 @@
// //
this.pnlDeteccoesRua.Controls.Add(this.picSonar); this.pnlDeteccoesRua.Controls.Add(this.picSonar);
this.pnlDeteccoesRua.Dock = System.Windows.Forms.DockStyle.Fill; this.pnlDeteccoesRua.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlDeteccoesRua.Location = new System.Drawing.Point(3, 2); this.pnlDeteccoesRua.Location = new System.Drawing.Point(2, 2);
this.pnlDeteccoesRua.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlDeteccoesRua.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlDeteccoesRua.Name = "pnlDeteccoesRua"; this.pnlDeteccoesRua.Name = "pnlDeteccoesRua";
this.pnlDeteccoesRua.Size = new System.Drawing.Size(614, 353); this.pnlDeteccoesRua.Size = new System.Drawing.Size(459, 284);
this.pnlDeteccoesRua.TabIndex = 0; this.pnlDeteccoesRua.TabIndex = 0;
// //
// picSonar // picSonar
// //
this.picSonar.Location = new System.Drawing.Point(17, 16); this.picSonar.Location = new System.Drawing.Point(13, 13);
this.picSonar.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.picSonar.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.picSonar.Name = "picSonar"; this.picSonar.Name = "picSonar";
this.picSonar.Size = new System.Drawing.Size(579, 320); this.picSonar.Size = new System.Drawing.Size(434, 260);
this.picSonar.TabIndex = 0; this.picSonar.TabIndex = 0;
this.picSonar.TabStop = false; this.picSonar.TabStop = false;
// //
@ -429,11 +438,11 @@
this.tabPulverizador.Controls.Add(this.nudPressaoSP); this.tabPulverizador.Controls.Add(this.nudPressaoSP);
this.tabPulverizador.Controls.Add(this.btnDesligarBomba); this.tabPulverizador.Controls.Add(this.btnDesligarBomba);
this.tabPulverizador.Controls.Add(this.btnLigarBomba); this.tabPulverizador.Controls.Add(this.btnLigarBomba);
this.tabPulverizador.Location = new System.Drawing.Point(4, 25); this.tabPulverizador.Location = new System.Drawing.Point(4, 22);
this.tabPulverizador.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabPulverizador.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tabPulverizador.Name = "tabPulverizador"; this.tabPulverizador.Name = "tabPulverizador";
this.tabPulverizador.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabPulverizador.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tabPulverizador.Size = new System.Drawing.Size(620, 357); this.tabPulverizador.Size = new System.Drawing.Size(463, 288);
this.tabPulverizador.TabIndex = 3; this.tabPulverizador.TabIndex = 3;
this.tabPulverizador.Text = "Pulverizador"; this.tabPulverizador.Text = "Pulverizador";
this.tabPulverizador.UseVisualStyleBackColor = true; this.tabPulverizador.UseVisualStyleBackColor = true;
@ -442,24 +451,25 @@
// //
this.lblPressaoSP.AutoSize = true; this.lblPressaoSP.AutoSize = true;
this.lblPressaoSP.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblPressaoSP.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblPressaoSP.Location = new System.Drawing.Point(24, 14); this.lblPressaoSP.Location = new System.Drawing.Point(18, 11);
this.lblPressaoSP.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPressaoSP.Name = "lblPressaoSP"; this.lblPressaoSP.Name = "lblPressaoSP";
this.lblPressaoSP.Size = new System.Drawing.Size(89, 16); this.lblPressaoSP.Size = new System.Drawing.Size(72, 13);
this.lblPressaoSP.TabIndex = 29; this.lblPressaoSP.TabIndex = 29;
this.lblPressaoSP.Text = "Pressão SP"; this.lblPressaoSP.Text = "Pressão SP";
// //
// nudPressaoSP // nudPressaoSP
// //
this.nudPressaoSP.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.nudPressaoSP.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.nudPressaoSP.Location = new System.Drawing.Point(24, 33); this.nudPressaoSP.Location = new System.Drawing.Point(18, 27);
this.nudPressaoSP.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.nudPressaoSP.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.nudPressaoSP.Maximum = new decimal(new int[] { this.nudPressaoSP.Maximum = new decimal(new int[] {
200, 200,
0, 0,
0, 0,
0}); 0});
this.nudPressaoSP.Name = "nudPressaoSP"; this.nudPressaoSP.Name = "nudPressaoSP";
this.nudPressaoSP.Size = new System.Drawing.Size(105, 22); this.nudPressaoSP.Size = new System.Drawing.Size(79, 19);
this.nudPressaoSP.TabIndex = 28; this.nudPressaoSP.TabIndex = 28;
this.nudPressaoSP.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.nudPressaoSP.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.nudPressaoSP.ValueChanged += new System.EventHandler(this.nudPressaoSP_ValueChanged); this.nudPressaoSP.ValueChanged += new System.EventHandler(this.nudPressaoSP_ValueChanged);
@ -467,10 +477,10 @@
// btnDesligarBomba // btnDesligarBomba
// //
this.btnDesligarBomba.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnDesligarBomba.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnDesligarBomba.Location = new System.Drawing.Point(325, 21); this.btnDesligarBomba.Location = new System.Drawing.Point(244, 17);
this.btnDesligarBomba.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.btnDesligarBomba.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnDesligarBomba.Name = "btnDesligarBomba"; this.btnDesligarBomba.Name = "btnDesligarBomba";
this.btnDesligarBomba.Size = new System.Drawing.Size(139, 34); this.btnDesligarBomba.Size = new System.Drawing.Size(104, 28);
this.btnDesligarBomba.TabIndex = 27; this.btnDesligarBomba.TabIndex = 27;
this.btnDesligarBomba.Text = "Desligar Bomba"; this.btnDesligarBomba.Text = "Desligar Bomba";
this.btnDesligarBomba.UseVisualStyleBackColor = true; this.btnDesligarBomba.UseVisualStyleBackColor = true;
@ -479,10 +489,10 @@
// btnLigarBomba // btnLigarBomba
// //
this.btnLigarBomba.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnLigarBomba.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnLigarBomba.Location = new System.Drawing.Point(157, 21); this.btnLigarBomba.Location = new System.Drawing.Point(118, 17);
this.btnLigarBomba.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.btnLigarBomba.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnLigarBomba.Name = "btnLigarBomba"; this.btnLigarBomba.Name = "btnLigarBomba";
this.btnLigarBomba.Size = new System.Drawing.Size(139, 34); this.btnLigarBomba.Size = new System.Drawing.Size(104, 28);
this.btnLigarBomba.TabIndex = 26; this.btnLigarBomba.TabIndex = 26;
this.btnLigarBomba.Text = "Ligar Bomba"; this.btnLigarBomba.Text = "Ligar Bomba";
this.btnLigarBomba.UseVisualStyleBackColor = true; this.btnLigarBomba.UseVisualStyleBackColor = true;
@ -491,10 +501,10 @@
// pnlCameraRua // pnlCameraRua
// //
this.pnlCameraRua.Controls.Add(this.picCameraRua); this.pnlCameraRua.Controls.Add(this.picCameraRua);
this.pnlCameraRua.Location = new System.Drawing.Point(187, 28); this.pnlCameraRua.Location = new System.Drawing.Point(140, 23);
this.pnlCameraRua.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlCameraRua.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlCameraRua.Name = "pnlCameraRua"; this.pnlCameraRua.Name = "pnlCameraRua";
this.pnlCameraRua.Size = new System.Drawing.Size(476, 352); this.pnlCameraRua.Size = new System.Drawing.Size(357, 286);
this.pnlCameraRua.TabIndex = 22; this.pnlCameraRua.TabIndex = 22;
// //
// picCameraRua // picCameraRua
@ -502,9 +512,9 @@
this.picCameraRua.BackColor = System.Drawing.SystemColors.ButtonFace; this.picCameraRua.BackColor = System.Drawing.SystemColors.ButtonFace;
this.picCameraRua.Dock = System.Windows.Forms.DockStyle.Fill; this.picCameraRua.Dock = System.Windows.Forms.DockStyle.Fill;
this.picCameraRua.Location = new System.Drawing.Point(0, 0); this.picCameraRua.Location = new System.Drawing.Point(0, 0);
this.picCameraRua.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.picCameraRua.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.picCameraRua.Name = "picCameraRua"; this.picCameraRua.Name = "picCameraRua";
this.picCameraRua.Size = new System.Drawing.Size(476, 352); this.picCameraRua.Size = new System.Drawing.Size(357, 286);
this.picCameraRua.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.picCameraRua.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.picCameraRua.TabIndex = 0; this.picCameraRua.TabIndex = 0;
this.picCameraRua.TabStop = false; this.picCameraRua.TabStop = false;
@ -516,19 +526,19 @@
this.pnlDir_EF.Controls.Add(this.btnRef_EF); this.pnlDir_EF.Controls.Add(this.btnRef_EF);
this.pnlDir_EF.Controls.Add(this.lblDir_EF); this.pnlDir_EF.Controls.Add(this.lblDir_EF);
this.pnlDir_EF.Location = new System.Drawing.Point(0, 0); this.pnlDir_EF.Location = new System.Drawing.Point(0, 0);
this.pnlDir_EF.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlDir_EF.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlDir_EF.Name = "pnlDir_EF"; this.pnlDir_EF.Name = "pnlDir_EF";
this.pnlDir_EF.Size = new System.Drawing.Size(200, 199); this.pnlDir_EF.Size = new System.Drawing.Size(150, 162);
this.pnlDir_EF.TabIndex = 23; this.pnlDir_EF.TabIndex = 23;
// //
// chbLivre_EF // chbLivre_EF
// //
this.chbLivre_EF.AutoSize = true; this.chbLivre_EF.AutoSize = true;
this.chbLivre_EF.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.chbLivre_EF.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.chbLivre_EF.Location = new System.Drawing.Point(135, 177); this.chbLivre_EF.Location = new System.Drawing.Point(101, 144);
this.chbLivre_EF.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chbLivre_EF.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbLivre_EF.Name = "chbLivre_EF"; this.chbLivre_EF.Name = "chbLivre_EF";
this.chbLivre_EF.Size = new System.Drawing.Size(58, 20); this.chbLivre_EF.Size = new System.Drawing.Size(49, 17);
this.chbLivre_EF.TabIndex = 17; this.chbLivre_EF.TabIndex = 17;
this.chbLivre_EF.Text = "Livre"; this.chbLivre_EF.Text = "Livre";
this.chbLivre_EF.UseVisualStyleBackColor = true; this.chbLivre_EF.UseVisualStyleBackColor = true;
@ -536,20 +546,20 @@
// chbCmd_EF // chbCmd_EF
// //
this.chbCmd_EF.AutoSize = true; this.chbCmd_EF.AutoSize = true;
this.chbCmd_EF.Location = new System.Drawing.Point(4, 177); this.chbCmd_EF.Location = new System.Drawing.Point(3, 144);
this.chbCmd_EF.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chbCmd_EF.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbCmd_EF.Name = "chbCmd_EF"; this.chbCmd_EF.Name = "chbCmd_EF";
this.chbCmd_EF.Size = new System.Drawing.Size(83, 20); this.chbCmd_EF.Size = new System.Drawing.Size(68, 17);
this.chbCmd_EF.TabIndex = 15; this.chbCmd_EF.TabIndex = 15;
this.chbCmd_EF.Text = "Controlar"; this.chbCmd_EF.Text = "Controlar";
this.chbCmd_EF.UseVisualStyleBackColor = true; this.chbCmd_EF.UseVisualStyleBackColor = true;
// //
// btnRef_EF // btnRef_EF
// //
this.btnRef_EF.Location = new System.Drawing.Point(148, 2); this.btnRef_EF.Location = new System.Drawing.Point(111, 2);
this.btnRef_EF.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.btnRef_EF.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnRef_EF.Name = "btnRef_EF"; this.btnRef_EF.Name = "btnRef_EF";
this.btnRef_EF.Size = new System.Drawing.Size(49, 23); this.btnRef_EF.Size = new System.Drawing.Size(37, 19);
this.btnRef_EF.TabIndex = 13; this.btnRef_EF.TabIndex = 13;
this.btnRef_EF.Text = "REF"; this.btnRef_EF.Text = "REF";
this.btnRef_EF.UseVisualStyleBackColor = true; this.btnRef_EF.UseVisualStyleBackColor = true;
@ -560,20 +570,20 @@
this.pnlDir_ET.Controls.Add(this.chbCmd_ET); this.pnlDir_ET.Controls.Add(this.chbCmd_ET);
this.pnlDir_ET.Controls.Add(this.btnRef_ET); this.pnlDir_ET.Controls.Add(this.btnRef_ET);
this.pnlDir_ET.Controls.Add(this.lblDir_ET); this.pnlDir_ET.Controls.Add(this.lblDir_ET);
this.pnlDir_ET.Location = new System.Drawing.Point(0, 199); this.pnlDir_ET.Location = new System.Drawing.Point(0, 162);
this.pnlDir_ET.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlDir_ET.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlDir_ET.Name = "pnlDir_ET"; this.pnlDir_ET.Name = "pnlDir_ET";
this.pnlDir_ET.Size = new System.Drawing.Size(200, 199); this.pnlDir_ET.Size = new System.Drawing.Size(150, 162);
this.pnlDir_ET.TabIndex = 24; this.pnlDir_ET.TabIndex = 24;
// //
// chbLivre_ET // chbLivre_ET
// //
this.chbLivre_ET.AutoSize = true; this.chbLivre_ET.AutoSize = true;
this.chbLivre_ET.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.chbLivre_ET.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.chbLivre_ET.Location = new System.Drawing.Point(135, 177); this.chbLivre_ET.Location = new System.Drawing.Point(101, 144);
this.chbLivre_ET.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chbLivre_ET.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbLivre_ET.Name = "chbLivre_ET"; this.chbLivre_ET.Name = "chbLivre_ET";
this.chbLivre_ET.Size = new System.Drawing.Size(58, 20); this.chbLivre_ET.Size = new System.Drawing.Size(49, 17);
this.chbLivre_ET.TabIndex = 16; this.chbLivre_ET.TabIndex = 16;
this.chbLivre_ET.Text = "Livre"; this.chbLivre_ET.Text = "Livre";
this.chbLivre_ET.UseVisualStyleBackColor = true; this.chbLivre_ET.UseVisualStyleBackColor = true;
@ -581,20 +591,20 @@
// chbCmd_ET // chbCmd_ET
// //
this.chbCmd_ET.AutoSize = true; this.chbCmd_ET.AutoSize = true;
this.chbCmd_ET.Location = new System.Drawing.Point(4, 177); this.chbCmd_ET.Location = new System.Drawing.Point(3, 144);
this.chbCmd_ET.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chbCmd_ET.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbCmd_ET.Name = "chbCmd_ET"; this.chbCmd_ET.Name = "chbCmd_ET";
this.chbCmd_ET.Size = new System.Drawing.Size(83, 20); this.chbCmd_ET.Size = new System.Drawing.Size(68, 17);
this.chbCmd_ET.TabIndex = 15; this.chbCmd_ET.TabIndex = 15;
this.chbCmd_ET.Text = "Controlar"; this.chbCmd_ET.Text = "Controlar";
this.chbCmd_ET.UseVisualStyleBackColor = true; this.chbCmd_ET.UseVisualStyleBackColor = true;
// //
// btnRef_ET // btnRef_ET
// //
this.btnRef_ET.Location = new System.Drawing.Point(148, 2); this.btnRef_ET.Location = new System.Drawing.Point(111, 2);
this.btnRef_ET.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.btnRef_ET.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnRef_ET.Name = "btnRef_ET"; this.btnRef_ET.Name = "btnRef_ET";
this.btnRef_ET.Size = new System.Drawing.Size(49, 23); this.btnRef_ET.Size = new System.Drawing.Size(37, 19);
this.btnRef_ET.TabIndex = 13; this.btnRef_ET.TabIndex = 13;
this.btnRef_ET.Text = "REF"; this.btnRef_ET.Text = "REF";
this.btnRef_ET.UseVisualStyleBackColor = true; this.btnRef_ET.UseVisualStyleBackColor = true;
@ -605,20 +615,20 @@
this.pnlDir_DT.Controls.Add(this.chbCmd_DT); this.pnlDir_DT.Controls.Add(this.chbCmd_DT);
this.pnlDir_DT.Controls.Add(this.btnRef_DT); this.pnlDir_DT.Controls.Add(this.btnRef_DT);
this.pnlDir_DT.Controls.Add(this.lblDir_DT); this.pnlDir_DT.Controls.Add(this.lblDir_DT);
this.pnlDir_DT.Location = new System.Drawing.Point(648, 199); this.pnlDir_DT.Location = new System.Drawing.Point(486, 162);
this.pnlDir_DT.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlDir_DT.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlDir_DT.Name = "pnlDir_DT"; this.pnlDir_DT.Name = "pnlDir_DT";
this.pnlDir_DT.Size = new System.Drawing.Size(200, 199); this.pnlDir_DT.Size = new System.Drawing.Size(150, 162);
this.pnlDir_DT.TabIndex = 24; this.pnlDir_DT.TabIndex = 24;
// //
// chbLivre_DT // chbLivre_DT
// //
this.chbLivre_DT.AutoSize = true; this.chbLivre_DT.AutoSize = true;
this.chbLivre_DT.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.chbLivre_DT.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.chbLivre_DT.Location = new System.Drawing.Point(135, 177); this.chbLivre_DT.Location = new System.Drawing.Point(101, 144);
this.chbLivre_DT.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chbLivre_DT.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbLivre_DT.Name = "chbLivre_DT"; this.chbLivre_DT.Name = "chbLivre_DT";
this.chbLivre_DT.Size = new System.Drawing.Size(58, 20); this.chbLivre_DT.Size = new System.Drawing.Size(49, 17);
this.chbLivre_DT.TabIndex = 19; this.chbLivre_DT.TabIndex = 19;
this.chbLivre_DT.Text = "Livre"; this.chbLivre_DT.Text = "Livre";
this.chbLivre_DT.UseVisualStyleBackColor = true; this.chbLivre_DT.UseVisualStyleBackColor = true;
@ -626,20 +636,20 @@
// chbCmd_DT // chbCmd_DT
// //
this.chbCmd_DT.AutoSize = true; this.chbCmd_DT.AutoSize = true;
this.chbCmd_DT.Location = new System.Drawing.Point(4, 177); this.chbCmd_DT.Location = new System.Drawing.Point(3, 144);
this.chbCmd_DT.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chbCmd_DT.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbCmd_DT.Name = "chbCmd_DT"; this.chbCmd_DT.Name = "chbCmd_DT";
this.chbCmd_DT.Size = new System.Drawing.Size(83, 20); this.chbCmd_DT.Size = new System.Drawing.Size(68, 17);
this.chbCmd_DT.TabIndex = 13; this.chbCmd_DT.TabIndex = 13;
this.chbCmd_DT.Text = "Controlar"; this.chbCmd_DT.Text = "Controlar";
this.chbCmd_DT.UseVisualStyleBackColor = true; this.chbCmd_DT.UseVisualStyleBackColor = true;
// //
// btnRef_DT // btnRef_DT
// //
this.btnRef_DT.Location = new System.Drawing.Point(148, 2); this.btnRef_DT.Location = new System.Drawing.Point(111, 2);
this.btnRef_DT.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.btnRef_DT.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnRef_DT.Name = "btnRef_DT"; this.btnRef_DT.Name = "btnRef_DT";
this.btnRef_DT.Size = new System.Drawing.Size(49, 23); this.btnRef_DT.Size = new System.Drawing.Size(37, 19);
this.btnRef_DT.TabIndex = 12; this.btnRef_DT.TabIndex = 12;
this.btnRef_DT.Text = "REF"; this.btnRef_DT.Text = "REF";
this.btnRef_DT.UseVisualStyleBackColor = true; this.btnRef_DT.UseVisualStyleBackColor = true;
@ -650,20 +660,20 @@
this.pnlDir_DF.Controls.Add(this.chbCmd_DF); this.pnlDir_DF.Controls.Add(this.chbCmd_DF);
this.pnlDir_DF.Controls.Add(this.btnRef_DF); this.pnlDir_DF.Controls.Add(this.btnRef_DF);
this.pnlDir_DF.Controls.Add(this.lblDir_DF); this.pnlDir_DF.Controls.Add(this.lblDir_DF);
this.pnlDir_DF.Location = new System.Drawing.Point(648, 0); this.pnlDir_DF.Location = new System.Drawing.Point(486, 0);
this.pnlDir_DF.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pnlDir_DF.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlDir_DF.Name = "pnlDir_DF"; this.pnlDir_DF.Name = "pnlDir_DF";
this.pnlDir_DF.Size = new System.Drawing.Size(200, 199); this.pnlDir_DF.Size = new System.Drawing.Size(150, 162);
this.pnlDir_DF.TabIndex = 24; this.pnlDir_DF.TabIndex = 24;
// //
// chbLivre_DF // chbLivre_DF
// //
this.chbLivre_DF.AutoSize = true; this.chbLivre_DF.AutoSize = true;
this.chbLivre_DF.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.chbLivre_DF.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.chbLivre_DF.Location = new System.Drawing.Point(135, 177); this.chbLivre_DF.Location = new System.Drawing.Point(101, 144);
this.chbLivre_DF.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chbLivre_DF.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbLivre_DF.Name = "chbLivre_DF"; this.chbLivre_DF.Name = "chbLivre_DF";
this.chbLivre_DF.Size = new System.Drawing.Size(58, 20); this.chbLivre_DF.Size = new System.Drawing.Size(49, 17);
this.chbLivre_DF.TabIndex = 18; this.chbLivre_DF.TabIndex = 18;
this.chbLivre_DF.Text = "Livre"; this.chbLivre_DF.Text = "Livre";
this.chbLivre_DF.UseVisualStyleBackColor = true; this.chbLivre_DF.UseVisualStyleBackColor = true;
@ -671,20 +681,20 @@
// chbCmd_DF // chbCmd_DF
// //
this.chbCmd_DF.AutoSize = true; this.chbCmd_DF.AutoSize = true;
this.chbCmd_DF.Location = new System.Drawing.Point(4, 177); this.chbCmd_DF.Location = new System.Drawing.Point(3, 144);
this.chbCmd_DF.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chbCmd_DF.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbCmd_DF.Name = "chbCmd_DF"; this.chbCmd_DF.Name = "chbCmd_DF";
this.chbCmd_DF.Size = new System.Drawing.Size(83, 20); this.chbCmd_DF.Size = new System.Drawing.Size(68, 17);
this.chbCmd_DF.TabIndex = 14; this.chbCmd_DF.TabIndex = 14;
this.chbCmd_DF.Text = "Controlar"; this.chbCmd_DF.Text = "Controlar";
this.chbCmd_DF.UseVisualStyleBackColor = true; this.chbCmd_DF.UseVisualStyleBackColor = true;
// //
// btnRef_DF // btnRef_DF
// //
this.btnRef_DF.Location = new System.Drawing.Point(148, 2); this.btnRef_DF.Location = new System.Drawing.Point(111, 2);
this.btnRef_DF.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.btnRef_DF.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnRef_DF.Name = "btnRef_DF"; this.btnRef_DF.Name = "btnRef_DF";
this.btnRef_DF.Size = new System.Drawing.Size(49, 23); this.btnRef_DF.Size = new System.Drawing.Size(37, 19);
this.btnRef_DF.TabIndex = 13; this.btnRef_DF.TabIndex = 13;
this.btnRef_DF.Text = "REF"; this.btnRef_DF.Text = "REF";
this.btnRef_DF.UseVisualStyleBackColor = true; this.btnRef_DF.UseVisualStyleBackColor = true;
@ -693,9 +703,10 @@
// //
this.lblDistanciaEsquerda.AutoSize = true; this.lblDistanciaEsquerda.AutoSize = true;
this.lblDistanciaEsquerda.Font = new System.Drawing.Font("Mongolian Baiti", 9.25F, System.Drawing.FontStyle.Bold); this.lblDistanciaEsquerda.Font = new System.Drawing.Font("Mongolian Baiti", 9.25F, System.Drawing.FontStyle.Bold);
this.lblDistanciaEsquerda.Location = new System.Drawing.Point(205, 9); this.lblDistanciaEsquerda.Location = new System.Drawing.Point(154, 7);
this.lblDistanciaEsquerda.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDistanciaEsquerda.Name = "lblDistanciaEsquerda"; this.lblDistanciaEsquerda.Name = "lblDistanciaEsquerda";
this.lblDistanciaEsquerda.Size = new System.Drawing.Size(184, 16); this.lblDistanciaEsquerda.Size = new System.Drawing.Size(161, 14);
this.lblDistanciaEsquerda.TabIndex = 26; this.lblDistanciaEsquerda.TabIndex = 26;
this.lblDistanciaEsquerda.Text = "Distancia Esq: 00.00 cm"; this.lblDistanciaEsquerda.Text = "Distancia Esq: 00.00 cm";
// //
@ -703,19 +714,20 @@
// //
this.lblDistanciaDireita.AutoSize = true; this.lblDistanciaDireita.AutoSize = true;
this.lblDistanciaDireita.Font = new System.Drawing.Font("Mongolian Baiti", 9F, System.Drawing.FontStyle.Bold); this.lblDistanciaDireita.Font = new System.Drawing.Font("Mongolian Baiti", 9F, System.Drawing.FontStyle.Bold);
this.lblDistanciaDireita.Location = new System.Drawing.Point(452, 9); this.lblDistanciaDireita.Location = new System.Drawing.Point(339, 7);
this.lblDistanciaDireita.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDistanciaDireita.Name = "lblDistanciaDireita"; this.lblDistanciaDireita.Name = "lblDistanciaDireita";
this.lblDistanciaDireita.Size = new System.Drawing.Size(179, 16); this.lblDistanciaDireita.Size = new System.Drawing.Size(143, 13);
this.lblDistanciaDireita.TabIndex = 27; this.lblDistanciaDireita.TabIndex = 27;
this.lblDistanciaDireita.Text = "Distancia Dir: 00.00 cm"; this.lblDistanciaDireita.Text = "Distancia Dir: 00.00 cm";
// //
// chbSonar // chbSonar
// //
this.chbSonar.AutoSize = true; this.chbSonar.AutoSize = true;
this.chbSonar.Location = new System.Drawing.Point(303, 383); this.chbSonar.Location = new System.Drawing.Point(227, 311);
this.chbSonar.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chbSonar.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbSonar.Name = "chbSonar"; this.chbSonar.Name = "chbSonar";
this.chbSonar.Size = new System.Drawing.Size(229, 20); this.chbSonar.Size = new System.Drawing.Size(183, 17);
this.chbSonar.TabIndex = 28; this.chbSonar.TabIndex = 28;
this.chbSonar.Text = "Desvio de obstáculos automático"; this.chbSonar.Text = "Desvio de obstáculos automático";
this.chbSonar.UseVisualStyleBackColor = true; this.chbSonar.UseVisualStyleBackColor = true;
@ -724,9 +736,10 @@
// //
this.lblTensao.AutoSize = true; 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.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(1481, 432); this.lblTensao.Location = new System.Drawing.Point(1111, 351);
this.lblTensao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblTensao.Name = "lblTensao"; this.lblTensao.Name = "lblTensao";
this.lblTensao.Size = new System.Drawing.Size(164, 46); this.lblTensao.Size = new System.Drawing.Size(136, 37);
this.lblTensao.TabIndex = 29; this.lblTensao.TabIndex = 29;
this.lblTensao.Text = "42,00 V"; this.lblTensao.Text = "42,00 V";
// //
@ -734,9 +747,10 @@
// //
this.lblCorrente.AutoSize = true; 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.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(1481, 478); this.lblCorrente.Location = new System.Drawing.Point(1111, 388);
this.lblCorrente.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblCorrente.Name = "lblCorrente"; this.lblCorrente.Name = "lblCorrente";
this.lblCorrente.Size = new System.Drawing.Size(164, 46); this.lblCorrente.Size = new System.Drawing.Size(134, 37);
this.lblCorrente.TabIndex = 30; this.lblCorrente.TabIndex = 30;
this.lblCorrente.Text = "10,00 A"; this.lblCorrente.Text = "10,00 A";
// //
@ -744,9 +758,10 @@
// //
this.lblRPM.AutoSize = true; 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.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(1481, 524); this.lblRPM.Location = new System.Drawing.Point(1111, 426);
this.lblRPM.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblRPM.Name = "lblRPM"; this.lblRPM.Name = "lblRPM";
this.lblRPM.Size = new System.Drawing.Size(170, 46); this.lblRPM.Size = new System.Drawing.Size(137, 37);
this.lblRPM.TabIndex = 31; this.lblRPM.TabIndex = 31;
this.lblRPM.Text = "45 RPM"; this.lblRPM.Text = "45 RPM";
// //
@ -754,39 +769,30 @@
// //
this.lblVelocidade.AutoSize = true; 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.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(1481, 570); this.lblVelocidade.Location = new System.Drawing.Point(1111, 463);
this.lblVelocidade.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblVelocidade.Name = "lblVelocidade"; this.lblVelocidade.Name = "lblVelocidade";
this.lblVelocidade.Size = new System.Drawing.Size(124, 46); this.lblVelocidade.Size = new System.Drawing.Size(101, 37);
this.lblVelocidade.TabIndex = 32; this.lblVelocidade.TabIndex = 32;
this.lblVelocidade.Text = "10,00"; this.lblVelocidade.Text = "10,00";
// //
// lblPotencia
//
this.lblPotencia.AutoSize = true;
this.lblPotencia.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblPotencia.Location = new System.Drawing.Point(1481, 616);
this.lblPotencia.Name = "lblPotencia";
this.lblPotencia.Size = new System.Drawing.Size(125, 46);
this.lblPotencia.TabIndex = 33;
this.lblPotencia.Text = "100%";
//
// lblKmh // lblKmh
// //
this.lblKmh.AutoSize = true; this.lblKmh.AutoSize = true;
this.lblKmh.Location = new System.Drawing.Point(1611, 591); this.lblKmh.Location = new System.Drawing.Point(1208, 480);
this.lblKmh.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblKmh.Name = "lblKmh"; this.lblKmh.Name = "lblKmh";
this.lblKmh.Size = new System.Drawing.Size(36, 16); this.lblKmh.Size = new System.Drawing.Size(32, 13);
this.lblKmh.TabIndex = 20; this.lblKmh.TabIndex = 20;
this.lblKmh.Text = "km/h"; this.lblKmh.Text = "km/h";
// //
// frmOperacaoManual // frmOperacaoManual
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White; this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(1657, 799); this.ClientSize = new System.Drawing.Size(1243, 649);
this.Controls.Add(this.lblKmh); this.Controls.Add(this.lblKmh);
this.Controls.Add(this.lblPotencia);
this.Controls.Add(this.lblVelocidade); this.Controls.Add(this.lblVelocidade);
this.Controls.Add(this.lblRPM); this.Controls.Add(this.lblRPM);
this.Controls.Add(this.lblCorrente); this.Controls.Add(this.lblCorrente);
@ -804,7 +810,7 @@
this.Controls.Add(this.chartGraficos); this.Controls.Add(this.chartGraficos);
this.Controls.Add(this.pnlAtuadores); this.Controls.Add(this.pnlAtuadores);
this.Controls.Add(this.pnlCamerasSolo); this.Controls.Add(this.pnlCamerasSolo);
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.Name = "frmOperacaoManual"; this.Name = "frmOperacaoManual";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Operação Manual"; this.Text = "Operação Manual";
@ -902,7 +908,6 @@
private System.Windows.Forms.Label lblCorrente; private System.Windows.Forms.Label lblCorrente;
private System.Windows.Forms.Label lblRPM; private System.Windows.Forms.Label lblRPM;
private System.Windows.Forms.Label lblVelocidade; private System.Windows.Forms.Label lblVelocidade;
private System.Windows.Forms.Label lblPotencia;
private System.Windows.Forms.Label lblKmh; private System.Windows.Forms.Label lblKmh;
} }
} }

View File

@ -15,6 +15,7 @@ using AForge.Video;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.Windows.Forms.DataVisualization.Charting; using System.Windows.Forms.DataVisualization.Charting;
using AgroBase.Services; using AgroBase.Services;
using Emgu.CV;
namespace AgroBase.Forms.Operacoes namespace AgroBase.Forms.Operacoes
{ {
@ -22,6 +23,7 @@ namespace AgroBase.Forms.Operacoes
{ {
Timer tmrLeitura; Timer tmrLeitura;
DateTime UltimoComandoDir = DateTime.Now; DateTime UltimoComandoDir = DateTime.Now;
GraficoInterativoModel graficoMovGeral;
public frmOperacaoManual() public frmOperacaoManual()
{ {
@ -49,6 +51,7 @@ namespace AgroBase.Forms.Operacoes
PopularInformacoesGerais(); PopularInformacoesGerais();
InicializarMapa(); InicializarMapa();
PopularBicos(); PopularBicos();
InicializarGraficos();
tmrLeitura = new Timer() { Interval = 500 }; tmrLeitura = new Timer() { Interval = 500 };
tmrLeitura.Tick += tmrLeitura_Tick; tmrLeitura.Tick += tmrLeitura_Tick;
@ -124,8 +127,8 @@ namespace AgroBase.Forms.Operacoes
lblTensao.Text = PZEMService.UltimaLeitura.Tensao.ToString("0.00") + " v"; lblTensao.Text = PZEMService.UltimaLeitura.Tensao.ToString("0.00") + " v";
lblCorrente.Text = PZEMService.UltimaLeitura.Corrente.ToString("0.00") + " A"; lblCorrente.Text = PZEMService.UltimaLeitura.Corrente.ToString("0.00") + " A";
lblRPM.Text = Variaveis.OperacaoEmAndamento.DispMov.Dados.Motores.Average(x => x.RPM).ToString("0") + " rpm"; lblRPM.Text = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Average(x => x.MovMotor.RPM).ToString("0") + " rpm";
lblVelocidade.Text = Variaveis.OperacaoEmAndamento.DispMov.Dados.Motores.Average(x => x.VelocidadeInstantanea).ToString("0.00"); lblVelocidade.Text = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Average(x => x.MovMotor.VelocidadeInstantanea).ToString("0.00");
chbSonar.Enabled = Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.Any(x => x.Componente == S_Code.sSNR && x.Inicializado); chbSonar.Enabled = Variaveis.OperacaoEmAndamento.DispSen.Dados.Sensores.Any(x => x.Componente == S_Code.sSNR && x.Inicializado);
if (!chbSonar.Enabled) if (!chbSonar.Enabled)
@ -142,9 +145,9 @@ namespace AgroBase.Forms.Operacoes
GeneralJoystick.Angulo *= -1; GeneralJoystick.Angulo *= -1;
direcaoDesvio = Direcao.Baixo; direcaoDesvio = Direcao.Baixo;
} }
Variaveis.OperacaoEmAndamento.DispDir.Dados.Motores.ForEach(Motor => Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ForEach(Modulo =>
{ {
Variaveis.OperacaoEmAndamento.DispDir.AdicionarMensagemFila(Motor.ProtocoloComando(direcaoDesvio)); Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(Modulo.Modulo_ID, Modulo.DirMotor.ProtocoloComando(direcaoDesvio));
}); });
UltimoComandoDir = DateTime.Now; UltimoComandoDir = DateTime.Now;
} }
@ -184,9 +187,9 @@ namespace AgroBase.Forms.Operacoes
private void DefinirStatusInicialChb(CheckBox chbCmd, CheckBox chbLivre) private void DefinirStatusInicialChb(CheckBox chbCmd, CheckBox chbLivre)
{ {
string ID = chbCmd.Name.Split('_')[1]; string ID = chbCmd.Name.Split('_')[1];
var Motor = Variaveis.OperacaoEmAndamento.DispDir.Dados.Motores.FirstOrDefault(x => x.ID == ID); var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == ID);
chbCmd.Checked = Motor.Controlar; chbCmd.Checked = Modulo.DirMotor.Controlar;
chbLivre.Checked = Motor.Livre; chbLivre.Checked = Modulo.DirMotor.Livre;
} }
private void pnlDir_Paint(object sender, PaintEventArgs e) private void pnlDir_Paint(object sender, PaintEventArgs e)
@ -196,17 +199,12 @@ namespace AgroBase.Forms.Operacoes
private void DesenharGraficos(object sender, PaintEventArgs e) private void DesenharGraficos(object sender, PaintEventArgs e)
{ {
if (!Variaveis.DispositivosConectados.Any(d => d.Dispositivo == T_Code.Dir))
{
return;
}
Panel pnl = (Panel)sender; Panel pnl = (Panel)sender;
string ID = pnl.Name.Replace("pnlDir_", ""); string ID = pnl.Name.Replace("pnlDir_", "");
var Motor = ((DirecionalModel)Variaveis.DispositivosConectados.FirstOrDefault(d => d.Dispositivo == T_Code.Dir).Dados).Motores.FirstOrDefault(m => m.ID == ID); var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(m => m.Modulo_ID == ID);
Label lblAngulo = pnl.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lblDir_" + ID); Label lblAngulo = pnl.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lblDir_" + ID);
lblAngulo.Text = ID + " " + ((Motor.Sentido_SP == Sentido.Antihorario ? -1 : 1) * Motor.Angulo).ToString("000") + "º"; lblAngulo.Text = ID + " " + ((Modulo.DirMotor.Sentido_SP == Sentido.Antihorario ? -1 : 1) * Modulo.DirMotor.Angulo).ToString("000") + "º";
// Use o objeto Graphics para desenhar a representação do motor // Use o objeto Graphics para desenhar a representação do motor
Graphics g = e.Graphics; Graphics g = e.Graphics;
@ -221,7 +219,7 @@ namespace AgroBase.Forms.Operacoes
// Desenhe a linha externa (set point) // Desenhe a linha externa (set point)
double setPointAngleInRadians = (Motor.Sentido_SP == Sentido.Antihorario ? -1 : 1) * ((Motor.Angulo_SP * Math.PI) / 180); double setPointAngleInRadians = (Modulo.DirMotor.Sentido_SP == Sentido.Antihorario ? -1 : 1) * ((Modulo.DirMotor.Angulo_SP * Math.PI) / 180);
int setPointX = centerX + (int)((radius + 10) * Math.Sin(setPointAngleInRadians)); int setPointX = centerX + (int)((radius + 10) * Math.Sin(setPointAngleInRadians));
int setPointY = centerY - (int)((radius + 10) * Math.Cos(setPointAngleInRadians)); int setPointY = centerY - (int)((radius + 10) * Math.Cos(setPointAngleInRadians));
g.DrawLine(Pens.Green, centerX, centerY, setPointX, setPointY); g.DrawLine(Pens.Green, centerX, centerY, setPointX, setPointY);
@ -229,7 +227,7 @@ namespace AgroBase.Forms.Operacoes
// Desenhe a seta que indica o sentido // Desenhe a seta que indica o sentido
int arrowLength = 15; // Comprimento da seta int arrowLength = 15; // Comprimento da seta
if (Motor.Sentido_SP == Sentido.Horario) if (Modulo.DirMotor.Sentido_SP == Sentido.Horario)
{ {
// Desenhe uma seta para a direita (sentido horário) // Desenhe uma seta para a direita (sentido horário)
Point arrowStart = new Point(setPointX, setPointY); Point arrowStart = new Point(setPointX, setPointY);
@ -259,13 +257,13 @@ namespace AgroBase.Forms.Operacoes
// Desenhe uma linha para representar a posição do eixo do motor // Desenhe uma linha para representar a posição do eixo do motor
double angleInRadians = (Motor.Angulo * Math.PI) / 180; double angleInRadians = (Modulo.DirMotor.Angulo * Math.PI) / 180;
int x = centerX + (int)(radius * Math.Sin(angleInRadians)); int x = centerX + (int)(radius * Math.Sin(angleInRadians));
int y = centerY - (int)(radius * Math.Cos(angleInRadians)); int y = centerY - (int)(radius * Math.Cos(angleInRadians));
g.DrawLine(Pens.Red, centerX, centerY, x, y); g.DrawLine(Pens.Red, centerX, centerY, x, y);
// Desenhe a seta que indica o sentido // Desenhe a seta que indica o sentido
if (Motor.Sentido == Sentido.Horario) if (Modulo.DirMotor.Sentido == Sentido.Horario)
{ {
// Desenhe uma seta para a direita (sentido horário) // Desenhe uma seta para a direita (sentido horário)
Point arrowStart = new Point(x, y); Point arrowStart = new Point(x, y);
@ -304,11 +302,7 @@ namespace AgroBase.Forms.Operacoes
int yA = centerY - (int)((radius) * Math.Cos(angle)); // Adicione 20 para afastar do círculo principal int yA = centerY - (int)((radius) * Math.Cos(angle)); // Adicione 20 para afastar do círculo principal
Rectangle rect = new Rectangle(xA - radiusCircle, yA - radiusCircle, 2 * radiusCircle, 2 * radiusCircle); Rectangle rect = new Rectangle(xA - radiusCircle, yA - radiusCircle, 2 * radiusCircle, 2 * radiusCircle);
bool Acionado = bool Acionado = false;
Motor.Ref000 && i == 0 ||
Motor.Ref090 && i == 1 ||
Motor.Ref180 && i == 2 ||
Motor.Ref270 && i == 3;
using (SolidBrush brush = new SolidBrush(Acionado ? Color.Red : Color.DarkRed)) using (SolidBrush brush = new SolidBrush(Acionado ? Color.Red : Color.DarkRed))
{ {
g.FillEllipse(brush, rect); g.FillEllipse(brush, rect);
@ -351,26 +345,26 @@ namespace AgroBase.Forms.Operacoes
private void btnRef_Click(object sender, EventArgs e) private void btnRef_Click(object sender, EventArgs e)
{ {
string ID = ((Button)sender).Name.Replace("btnRef_", ""); string ID = ((Button)sender).Name.Replace("btnRef_", "");
var Dispositivo = Variaveis.OperacaoEmAndamento.DispDir; var Dispositivo = Variaveis.OperacaoEmAndamento.DispMvd;
var Motor = Dispositivo.Dados.Motores.FirstOrDefault(x => x.ID == ID); var Modulo = Dispositivo.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == ID);
string Comando = Motor.ProtocoloComando(Direcao.Parado, true); var Comando = Modulo.DirMotor.ProtocoloComando(Direcao.Parado);
Dispositivo.AdicionarMensagemFila(Comando); Dispositivo.AdicionarMensagemFila(Modulo.Modulo_ID, Comando);
} }
private void chbCmd_CheckedChanged(object sender, EventArgs e) private void chbCmd_CheckedChanged(object sender, EventArgs e)
{ {
string ID = ((CheckBox)sender).Name.Replace("chbCmd_", ""); string ID = ((CheckBox)sender).Name.Replace("chbCmd_", "");
var Dispositivo = Variaveis.OperacaoEmAndamento.DispDir; var Dispositivo = Variaveis.OperacaoEmAndamento.DispMvd;
var Motor = Dispositivo.Dados.Motores.FirstOrDefault(x => x.ID == ID); var Modulo = Dispositivo.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == ID);
Motor.Controlar = ((CheckBox)sender).Checked; Modulo.DirMotor.Controlar = ((CheckBox)sender).Checked;
} }
private void chbLivre_CheckedChanged(object sender, EventArgs e) private void chbLivre_CheckedChanged(object sender, EventArgs e)
{ {
string ID = ((CheckBox)sender).Name.Replace("chbLivre_", ""); string ID = ((CheckBox)sender).Name.Replace("chbLivre_", "");
var Dispositivo = Variaveis.OperacaoEmAndamento.DispDir; var Dispositivo = Variaveis.OperacaoEmAndamento.DispMvd;
var Motor = Dispositivo.Dados.Motores.FirstOrDefault(x => x.ID == ID); var Modulo = Dispositivo.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == ID);
Motor.Livre = ((CheckBox)sender).Checked; Modulo.DirMotor.Livre = ((CheckBox)sender).Checked;
} }
#endregion #endregion
@ -461,15 +455,71 @@ namespace AgroBase.Forms.Operacoes
#region Graficos #region Graficos
private void InicializarGraficos()
{
//var Logs = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.SelectMany(x => x.MovMotor.LogGrafico).ToList();
var Logs = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == "ET").MovMotor.LogGrafico.ToList();
var Momentos = Logs.Select(x => x.Momento.ToString("mm:ss:fff")).ToList();
graficoMovGeral = new GraficoInterativoModel(chartGraficos, Momentos, new List<GraficoInterativoSerieModel>()
{
new GraficoInterativoSerieModel()
{
Titulo = "RPM SP",
Valores = Logs.Select(x => Convert.ToDouble(x.RPM_SP)).ToList(),
Visivel = true,
MostrarValor = true
},
new GraficoInterativoSerieModel()
{
Titulo = "RPM",
Valores = Logs.Select(x => x.RPM).ToList(),
Visivel = true,
MostrarValor = true
},
new GraficoInterativoSerieModel()
{
Titulo = "Temperatura",
Valores = Logs.Select(x => x.Temperatura).ToList(),
Visivel = true,
MostrarValor = true
},
/*new GraficoInterativoSerieModel()
{
Titulo = "EF",
Valores = Logs.Where(x => x.Modulo_ID == "EF").Select(x => x.RPM).ToList(),
Visivel = true,
MostrarValor = true
},
new GraficoInterativoSerieModel()
{
Titulo = "DT",
Valores = Logs.Where(x => x.Modulo_ID == "DT").Select(x => x.RPM).ToList(),
Visivel = true,
MostrarValor = true
},
new GraficoInterativoSerieModel()
{
Titulo = "DF",
Valores = Logs.Where(x => x.Modulo_ID == "DF").Select(x => x.RPM).ToList(),
Visivel = true,
MostrarValor = true
},*/
});
}
private void AtualizarGrafico() private void AtualizarGrafico()
{ {
MovSensorimanetoGrafico Log = null; var Logs = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.SelectMany(x => x.MovMotor.LogGrafico);
int idx = Logs.Count() > 59 ? 60 : Logs.Count() - 1;
graficoMovGeral.AtualizarDados(idx);
var Motor = Variaveis.OperacaoEmAndamento.DispMov.Dados.Motores.FirstOrDefault(x => x.ID == "ET" && x.LogGrafico.Any()); /*MvdMotorMOVSensorimanetoGrafico Log = null;
if (Motor.LogGrafico.Count > 0) var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == "ET" && x.MovMotor.LogGrafico.Any());
if (Modulo.MovMotor.LogGrafico.Count > 0)
{ {
Log = Motor.LogGrafico.Last(); Log = Modulo.MovMotor.LogGrafico.Last();
} }
double Minimo = 0; double Minimo = 0;
@ -478,7 +528,7 @@ namespace AgroBase.Forms.Operacoes
Chart chart = chartGraficos; Chart chart = chartGraficos;
chart.Titles.Clear(); chart.Titles.Clear();
//chart.Titles.Add("Acompanhamento"); //chart.Titles.Add("Acompanhamento");
var Logs = (Motor.LogGrafico.Count > MovimentacaoModel.LogsManter ? Motor.LogGrafico.Skip(Math.Max(0, Motor.LogGrafico.Count - MovimentacaoModel.LogsManter)).Take(MovimentacaoModel.LogsManter).ToList() : Motor.LogGrafico).Where(log => log.ComponenteID == Motor.ID).ToList(); var Logs = (Modulo.MovMotor.LogGrafico.Count > MovimentacaoModel.LogsManter ? Modulo.MovMotor.LogGrafico.Skip(Math.Max(0, Modulo.MovMotor.LogGrafico.Count - MovimentacaoModel.LogsManter)).Take(MovimentacaoModel.LogsManter).ToList() : Modulo.MovMotor.LogGrafico).Where(log => log.Modulo_ID == Modulo.Modulo_ID).ToList();
chart.Series.Clear(); chart.Series.Clear();
List<string> Momentos = Logs.Select(x => x.Momento.ToString("mm:ss:fff")).ToList(); List<string> Momentos = Logs.Select(x => x.Momento.ToString("mm:ss:fff")).ToList();
@ -496,6 +546,13 @@ namespace AgroBase.Forms.Operacoes
Minimo = Logs.Min(x => x.RPM_SP) < Minimo ? Logs.Min(x => x.RPM_SP) : Minimo; Minimo = Logs.Min(x => x.RPM_SP) < Minimo ? Logs.Min(x => x.RPM_SP) : Minimo;
Maximo = Logs.Max(x => x.RPM_SP) > Maximo ? Logs.Max(x => x.RPM_SP) : Maximo; Maximo = Logs.Max(x => x.RPM_SP) > Maximo ? Logs.Max(x => x.RPM_SP) : Maximo;
var serieRPM = new Series("RPM: " + (Log != null ? Log.RPM : 0));
serieRPM.Points.DataBindXY(Momentos, Logs.Select(x => x.RPM).ToList());
serieRPM.ChartType = SeriesChartType.Spline;
chart.Series.Add(serieRPM);
Minimo = Logs.Min(x => x.RPM) < Minimo ? Logs.Min(x => x.RPM) : Minimo;
Maximo = Logs.Max(x => x.RPM) > Maximo ? Logs.Max(x => x.RPM) : Maximo;
var serieTemperatura = new Series("Temperatura: " + (Log != null ? Log.Temperatura : 0)); var serieTemperatura = new Series("Temperatura: " + (Log != null ? Log.Temperatura : 0));
serieTemperatura.Points.DataBindXY(Momentos, Logs.Select(x => x.Temperatura).ToList()); serieTemperatura.Points.DataBindXY(Momentos, Logs.Select(x => x.Temperatura).ToList());
serieTemperatura.ChartType = SeriesChartType.Line; serieTemperatura.ChartType = SeriesChartType.Line;
@ -509,7 +566,7 @@ namespace AgroBase.Forms.Operacoes
} }
chart.ChartAreas[0].AxisY.Minimum = Minimo - 5; chart.ChartAreas[0].AxisY.Minimum = Minimo - 5;
chart.ChartAreas[0].AxisY.Maximum = Maximo + 5; chart.ChartAreas[0].AxisY.Maximum = Maximo + 5;*/
} }
#endregion #endregion
@ -550,7 +607,7 @@ namespace AgroBase.Forms.Operacoes
private void AtualizarInformacoesGerais() private void AtualizarInformacoesGerais()
{ {
gridDados.Rows[0].Cells[1].Value = Variaveis.OperacaoEmAndamento.Tempo.Hours.ToString("00") + ":" + Variaveis.OperacaoEmAndamento.Tempo.Minutes.ToString("00") + ":" + Variaveis.OperacaoEmAndamento.Tempo.Seconds.ToString("00"); gridDados.Rows[0].Cells[1].Value = Variaveis.OperacaoEmAndamento.Tempo.Hours.ToString("00") + ":" + Variaveis.OperacaoEmAndamento.Tempo.Minutes.ToString("00") + ":" + Variaveis.OperacaoEmAndamento.Tempo.Seconds.ToString("00");
gridDados.Rows[1].Cells[1].Value = TimeSpan.FromSeconds(Variaveis.OperacaoEmAndamento.DispMov.Dados.TempoEmAtividade).ToString(@"hh\:mm\:ss"); gridDados.Rows[1].Cells[1].Value = TimeSpan.FromSeconds(Variaveis.OperacaoEmAndamento.DispMvd.Dados.TempoEmAtividade).ToString(@"hh\:mm\:ss");
gridDados.Rows[2].Cells[1].Value = Variaveis.OperacaoEmAndamento.Sensoriamento.VelocidadeMedia.ToString("0.00"); gridDados.Rows[2].Cells[1].Value = Variaveis.OperacaoEmAndamento.Sensoriamento.VelocidadeMedia.ToString("0.00");
gridDados.Rows[3].Cells[1].Value = Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaPercorrida.Sum().ToString("0.00"); gridDados.Rows[3].Cells[1].Value = Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaPercorrida.Sum().ToString("0.00");
gridDados.Rows[4].Cells[1].Value = (PZEMService.Iniciado && PZEMService.UltimaLeitura != null ? Variaveis.OperacaoEmAndamento.Sensoriamento.PorcentagemBateria.ToString("00.00") : ""); gridDados.Rows[4].Cells[1].Value = (PZEMService.Iniciado && PZEMService.UltimaLeitura != null ? Variaveis.OperacaoEmAndamento.Sensoriamento.PorcentagemBateria.ToString("00.00") : "");
@ -637,7 +694,7 @@ namespace AgroBase.Forms.Operacoes
{ {
Bico.Atuado = Bico.Atuado ? !Variaveis.OperacaoEmAndamento.DispAtu.Dados.AtuacaoNivelAlto : Variaveis.OperacaoEmAndamento.DispAtu.Dados.AtuacaoNivelAlto; Bico.Atuado = Bico.Atuado ? !Variaveis.OperacaoEmAndamento.DispAtu.Dados.AtuacaoNivelAlto : Variaveis.OperacaoEmAndamento.DispAtu.Dados.AtuacaoNivelAlto;
string Protocolo = Bico.ProtocoloComando(); string Protocolo = Bico.ProtocoloComando();
Variaveis.OperacaoEmAndamento.DispAtu.AdicionarMensagemFila(Protocolo); Variaveis.OperacaoEmAndamento.DispAtu.AdicionarMensagemFila(Variaveis.OperacaoEmAndamento.DispAtu.Dados.Modulo_ID, Protocolo);
pnlAtuadores.Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: " + (Bico.Atuado ? "Ligado" : "Desligado"); pnlAtuadores.Controls.OfType<Label>().First(x => x.Name == "lblCmd_" + ID).Text = "Comando: " + (Bico.Atuado ? "Ligado" : "Desligado");
btn.Text = Bico.Atuado ? "Desligar" : "Ligar"; btn.Text = Bico.Atuado ? "Desligar" : "Ligar";
@ -665,7 +722,7 @@ namespace AgroBase.Forms.Operacoes
private void EnviarProtocoloComandoBomba() private void EnviarProtocoloComandoBomba()
{ {
string Protocolo = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora.ProtocoloComando(); string Protocolo = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BombaPressurizadora.ProtocoloComando();
Variaveis.OperacaoEmAndamento.DispAtu.AdicionarMensagemFila(Protocolo); Variaveis.OperacaoEmAndamento.DispAtu.AdicionarMensagemFila(Variaveis.OperacaoEmAndamento.DispAtu.Dados.Modulo_ID, Protocolo);
} }
private void pnlAtuadores_Paint(object sender, PaintEventArgs e) private void pnlAtuadores_Paint(object sender, PaintEventArgs e)
@ -740,9 +797,8 @@ namespace AgroBase.Forms.Operacoes
} }
} }
#endregion
#endregion
} }
} }

View File

@ -8,6 +8,7 @@ using System.Data;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting; using System.Windows.Forms.DataVisualization.Charting;
@ -60,18 +61,13 @@ namespace AgroBase.Forms
private void PreencherOpcoes() private void PreencherOpcoes()
{ {
var DispCon = Variaveis.DispositivosConectados.Where(x => x.Dispositivo == T_Code.Dir).ToList(); foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos)
foreach (var Dispositivo in DispCon)
{ {
foreach (var Motor in ((DirecionalModel)Dispositivo.Dados).Motores) CheckBox chbControlar = pnlFundo.Controls.OfType<CheckBox>().FirstOrDefault(ctrl => ctrl.Name == "chb" + Modulo.Modulo_ID + "Controlar");
{ chbControlar.Checked = Modulo.DirMotor.Controlar;
CheckBox chbControlar = pnlFundo.Controls.OfType<CheckBox>().FirstOrDefault(ctrl => ctrl.Name == "chb" + Motor.ID + "Controlar"); CheckBox chbLivre = pnlFundo.Controls.OfType<CheckBox>().FirstOrDefault(ctrl => ctrl.Name == "chb" + Modulo.Modulo_ID + "Livre");
chbControlar.Checked = Motor.Controlar; chbLivre.Checked = Modulo.DirMotor.Livre;
CheckBox chbLivre = pnlFundo.Controls.OfType<CheckBox>().FirstOrDefault(ctrl => ctrl.Name == "chb" + Motor.ID + "Livre");
chbLivre.Checked = Motor.Livre;
}
} }
} }
public void AtualizaGrafico() public void AtualizaGrafico()
@ -94,50 +90,46 @@ namespace AgroBase.Forms
private void AtualzarDadosMovimentacao() private void AtualzarDadosMovimentacao()
{ {
var DispMov = (DispositivosService<MovimentacaoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x._Porta.IsOpen && x.Dispositivo == T_Code.Mov);
if (DispMov == null)
{
return;
}
if (chartEF.InvokeRequired) if (chartEF.InvokeRequired)
{ {
chartEF.Invoke(new Action(AtualizaGrafico)); chartEF.Invoke(new Action(AtualizaGrafico));
} }
else else
{ {
lblTempoConectado.Text = "Tempo conectado: " + TimeSpan.FromSeconds(DispMov.TempoConectado).ToString(@"hh\:mm\:ss") + " hrs"; var DispMvd = Variaveis.OperacaoEmAndamento.DispMvd;
lblTempoEmMovimento.Text = "Tempo em movimento: " + TimeSpan.FromSeconds(DispMov.Dados.TempoEmAtividade).ToString(@"hh\:mm\:ss") + " hrs";
lblDistanciaTotal.Text = "Distancia percorrida total: " + DispMov.Dados.DistanciaPercorridaTotal.ToString("0.00") + " m";
lblDistanciaParcial.Text = "Distancia percorrida parcial: " + DispMov.Dados.DistanciaPercorridaParcial.ToString("0.00") + " m";
foreach (var Motor in DispMov.Dados.Motores.Where(x => x.Comandar))
{
Label lblTitulo = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lblM_" + Motor.ID);
lblTitulo.ForeColor = Motor.Comandar ? Motor.Inicializado ? Color.Green : Color.Red : Color.Black;
lblTitulo.Text = lblTitulo.Text.Split(' ')[0] + " (" + Motor.ID + ") - Alm: " + Motor.CodigoAlarme;
Label lblM_RPMSP = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Motor.ID + "M_RPMSP");
lblM_RPMSP.Text = "RPM SP: " + Motor.RPM_SP.ToString("0.00");
Label lblM_RPM = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Motor.ID + "M_RPM");
lblM_RPM.Text = "RPM: " + Motor.RPM.ToString("0.00");
Label lblM_Velocidade = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Motor.ID + "M_Velocidade");
lblM_Velocidade.Text = "Velocidade: " + Motor.VelocidadeInstantanea.ToString("0.00") + " Km/h";
Label lblM_SentidoSP = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Motor.ID + "M_SentidoSP");
lblM_SentidoSP.Text = "Sentido SP: " + Enum.GetName(typeof(Sentido), Motor.Sentido_SP);
Label lblM_Sentido = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Motor.ID + "M_Sentido");
lblM_Sentido.Text = "Sentido: " + Enum.GetName(typeof(Sentido), Motor.Sentido);
Label lblM_Temperatura = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Motor.ID + "M_Temperatura");
lblM_Temperatura.Text = "Temperatura: " + Motor.Temperatura.ToString("0.00") + "ºC";
lblM_Temperatura.ForeColor = Motor.Alarmes.Any(x => x.Tipo == S_Code.sTMP && (x.Maximo || x.Minimo)) ? Color.Red : Color.Black;
Label lblM_Corrente = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Motor.ID + "M_Corrente");
lblM_Corrente.Text = "Corrente: " + Motor.Corrente_Max.ToString("0.00") + "A";
Label lblM_Tensao = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Motor.ID + "M_Tensao");
lblTensao.Text = "Tensão: " + Motor.Tensao.ToString("0.00") + "V";
MovSensorimanetoGrafico Log = null; lblTempoConectado.Text = "Tempo conectado: " + TimeSpan.FromSeconds(DispMvd.TempoConectado).ToString(@"hh\:mm\:ss") + " hrs";
if (Motor.LogGrafico.Count > 0) lblTempoEmMovimento.Text = "Tempo em movimento: " + TimeSpan.FromSeconds(DispMvd.Dados.TempoEmAtividade).ToString(@"hh\:mm\:ss") + " hrs";
lblDistanciaTotal.Text = "Distancia percorrida total: " + DispMvd.Dados.DistanciaPercorridaTotal.ToString("0.00") + " m";
lblDistanciaParcial.Text = "Distancia percorrida parcial: " + DispMvd.Dados.DistanciaPercorridaParcial.ToString("0.00") + " m";
foreach (var Modulo in DispMvd.Dados.Modulos.Where(x => x.MovMotor.Comandar))
{
Label lblTitulo = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lblM_" + Modulo.MovMotor.ID);
lblTitulo.ForeColor = Modulo.MovMotor.Comandar ? Modulo.MovMotor.Inicializado ? Color.Green : Color.Red : Color.Black;
lblTitulo.Text = lblTitulo.Text.Split(' ')[0] + " (" + Modulo.MovMotor.ID + ") - Alm: " + Modulo.MovMotor.CodigoAlarme;
Label lblM_RPMSP = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Modulo.MovMotor.ID + "M_RPMSP");
lblM_RPMSP.Text = "RPM SP: " + Modulo.MovMotor.RPM_SP.ToString("0.00");
Label lblM_RPM = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Modulo.MovMotor.ID + "M_RPM");
lblM_RPM.Text = "RPM: " + Modulo.MovMotor.RPM.ToString("0.00");
Label lblM_Velocidade = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Modulo.MovMotor.ID + "M_Velocidade");
lblM_Velocidade.Text = "Velocidade: " + Modulo.MovMotor.VelocidadeInstantanea.ToString("0.00") + " Km/h";
Label lblM_SentidoSP = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Modulo.MovMotor.ID + "M_SentidoSP");
lblM_SentidoSP.Text = "Sentido SP: " + Enum.GetName(typeof(Sentido), Modulo.MovMotor.Sentido_SP);
Label lblM_Sentido = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Modulo.MovMotor.ID + "M_Sentido");
lblM_Sentido.Text = "Sentido: " + Enum.GetName(typeof(Sentido), Modulo.MovMotor.Sentido);
Label lblM_Temperatura = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Modulo.MovMotor.ID + "M_Temperatura");
lblM_Temperatura.Text = "Temperatura: " + Modulo.MovMotor.Temperatura.ToString("0.00") + "ºC";
lblM_Temperatura.ForeColor = Modulo.MovMotor.CodigoAlarme > 0 ? Color.Red : Color.Black;
Label lblM_Corrente = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Modulo.MovMotor.ID + "M_Corrente");
lblM_Corrente.Text = "Corrente: " + Modulo.MovMotor.Corrente_Max.ToString("0.00") + "A";
Label lblM_Tensao = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + Modulo.MovMotor.ID + "M_Tensao");
lblTensao.Text = "Tensão: " + Modulo.MovMotor.Tensao.ToString("0.00") + "V";
MvdMotorMOVSensorimanetoGrafico Log = null;
if (Modulo.MovMotor.LogGrafico.Count > 0)
{ {
Log = Motor.LogGrafico[Motor.LogGrafico.Count - 1]; Log = Modulo.MovMotor.LogGrafico[Modulo.MovMotor.LogGrafico.Count - 1];
} }
double Minimo = 0; double Minimo = 0;
@ -146,10 +138,10 @@ namespace AgroBase.Forms
try try
{ {
Chart chart = (Chart)(pnlFundo.Controls.Find("chart" + Motor.ID, false).First()); Chart chart = (Chart)(pnlFundo.Controls.Find("chart" + Modulo.Modulo_ID, false).First());
chart.Titles.Clear(); chart.Titles.Clear();
chart.Titles.Add(Motor.Descricao); chart.Titles.Add(Modulo.MovMotor.ID);
var Logs = (Motor.LogGrafico.Count > MovimentacaoModel.LogsManter ? Motor.LogGrafico.Skip(Math.Max(0, Motor.LogGrafico.Count - MovimentacaoModel.LogsManter)).Take(MovimentacaoModel.LogsManter).ToList() : Motor.LogGrafico).Where(log => log.ComponenteID == Motor.ID).ToList(); var Logs = (Modulo.MovMotor.LogGrafico.Count > MovimentacaoModel.LogsManter ? Modulo.MovMotor.LogGrafico.Skip(Math.Max(0, Modulo.MovMotor.LogGrafico.Count - MovimentacaoModel.LogsManter)).Take(MovimentacaoModel.LogsManter).ToList() : Modulo.MovMotor.LogGrafico).Where(log => log.Modulo_ID == Modulo.Modulo_ID).ToList();
chart.Series.Clear(); chart.Series.Clear();
List<string> Momentos = Logs.Select(x => x.Momento.ToString("mm:ss:fff")).ToList(); List<string> Momentos = Logs.Select(x => x.Momento.ToString("mm:ss:fff")).ToList();
@ -200,23 +192,18 @@ namespace AgroBase.Forms
private void DesenharGraficos(object sender, PaintEventArgs e) private void DesenharGraficos(object sender, PaintEventArgs e)
{ {
if (!Variaveis.DispositivosConectados.Any(d => d.Dispositivo == T_Code.Dir))
{
return;
}
PictureBox pic = (PictureBox)sender; PictureBox pic = (PictureBox)sender;
string ID = pic.Name.Replace("pic", ""); string ID = pic.Name.Replace("pic", "");
var Motor = ((DirecionalModel)Variaveis.DispositivosConectados.FirstOrDefault(d => d.Dispositivo == T_Code.Dir).Dados).Motores.FirstOrDefault(m => m.ID == ID); var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(m => m.Modulo_ID == ID);
Label lblA_SP = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + ID + "A_SP"); Label lblA_SP = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + ID + "A_SP");
lblA_SP.Text = "Angulo SP: " + ((Motor.Sentido_SP == Sentido.Antihorario ? -1 : 1) * Motor.Angulo_SP).ToString("000") + "º"; lblA_SP.Text = "Angulo SP: " + ((Modulo.DirMotor.Sentido_SP == Sentido.Antihorario ? -1 : 1) * Modulo.DirMotor.Angulo_SP).ToString("000") + "º";
Label lblA = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + ID + "A"); Label lblA = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + ID + "A");
lblA.Text = "Angulo: " + Motor.Angulo.ToString("000") + "º"; lblA.Text = "Angulo: " + Modulo.DirMotor.Angulo.ToString("000") + "º";
Label lblA_SentidoSP = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + ID + "A_SentidoSP"); Label lblA_SentidoSP = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + ID + "A_SentidoSP");
lblA_SentidoSP.Text = "Sentido SP: " + Enum.GetName(typeof(Sentido), Motor.Sentido_SP); lblA_SentidoSP.Text = "Sentido SP: " + Enum.GetName(typeof(Sentido), Modulo.DirMotor.Sentido_SP);
Label lblA_Sentido = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + ID + "A_Sentido"); Label lblA_Sentido = pnlFundo.Controls.OfType<Label>().FirstOrDefault(ctrl => ctrl.Name == "lbl" + ID + "A_Sentido");
lblA_Sentido.Text = "Sentido: " + Enum.GetName(typeof(Sentido), Motor.Sentido); lblA_Sentido.Text = "Sentido: " + Enum.GetName(typeof(Sentido), Modulo.DirMotor.Sentido);
// Use o objeto Graphics para desenhar a representação do motor // Use o objeto Graphics para desenhar a representação do motor
Graphics g = e.Graphics; Graphics g = e.Graphics;
@ -231,7 +218,7 @@ namespace AgroBase.Forms
// Desenhe a linha externa (set point) // Desenhe a linha externa (set point)
double setPointAngleInRadians = (Motor.Sentido_SP == Sentido.Antihorario ? -1 : 1) * ((Motor.Angulo_SP * Math.PI) / 180); double setPointAngleInRadians = (Modulo.DirMotor.Sentido_SP == Sentido.Antihorario ? -1 : 1) * ((Modulo.DirMotor.Angulo_SP * Math.PI) / 180);
int setPointX = centerX + (int)((radius + 10) * Math.Sin(setPointAngleInRadians)); int setPointX = centerX + (int)((radius + 10) * Math.Sin(setPointAngleInRadians));
int setPointY = centerY - (int)((radius + 10) * Math.Cos(setPointAngleInRadians)); int setPointY = centerY - (int)((radius + 10) * Math.Cos(setPointAngleInRadians));
g.DrawLine(Pens.Green, centerX, centerY, setPointX, setPointY); g.DrawLine(Pens.Green, centerX, centerY, setPointX, setPointY);
@ -239,7 +226,7 @@ namespace AgroBase.Forms
// Desenhe a seta que indica o sentido // Desenhe a seta que indica o sentido
int arrowLength = 15; // Comprimento da seta int arrowLength = 15; // Comprimento da seta
if (Motor.Sentido_SP == Sentido.Horario) if (Modulo.DirMotor.Sentido_SP == Sentido.Horario)
{ {
// Desenhe uma seta para a direita (sentido horário) // Desenhe uma seta para a direita (sentido horário)
Point arrowStart = new Point(setPointX, setPointY); Point arrowStart = new Point(setPointX, setPointY);
@ -269,13 +256,13 @@ namespace AgroBase.Forms
// Desenhe uma linha para representar a posição do eixo do motor // Desenhe uma linha para representar a posição do eixo do motor
double angleInRadians = (Motor.Angulo * Math.PI) / 180; double angleInRadians = (Modulo.DirMotor.Angulo * Math.PI) / 180;
int x = centerX + (int)(radius * Math.Sin(angleInRadians)); int x = centerX + (int)(radius * Math.Sin(angleInRadians));
int y = centerY - (int)(radius * Math.Cos(angleInRadians)); int y = centerY - (int)(radius * Math.Cos(angleInRadians));
g.DrawLine(Pens.Red, centerX, centerY, x, y); g.DrawLine(Pens.Red, centerX, centerY, x, y);
// Desenhe a seta que indica o sentido // Desenhe a seta que indica o sentido
if (Motor.Sentido == Sentido.Horario) if (Modulo.DirMotor.Sentido == Sentido.Horario)
{ {
// Desenhe uma seta para a direita (sentido horário) // Desenhe uma seta para a direita (sentido horário)
Point arrowStart = new Point(x, y); Point arrowStart = new Point(x, y);
@ -313,11 +300,7 @@ namespace AgroBase.Forms
int yA = centerY - (int)((radius) * Math.Cos(angle)); // Adicione 20 para afastar do círculo principal int yA = centerY - (int)((radius) * Math.Cos(angle)); // Adicione 20 para afastar do círculo principal
Rectangle rect = new Rectangle(xA - radiusCircle, yA - radiusCircle, 2 * radiusCircle, 2 * radiusCircle); Rectangle rect = new Rectangle(xA - radiusCircle, yA - radiusCircle, 2 * radiusCircle, 2 * radiusCircle);
bool Acionado = bool Acionado = false;
Motor.Ref000 && i == 0 ||
Motor.Ref090 && i == 1 ||
Motor.Ref180 && i == 2 ||
Motor.Ref270 && i == 3;
using (SolidBrush brush = new SolidBrush(Acionado ? Color.Red : Color.DarkRed)) using (SolidBrush brush = new SolidBrush(Acionado ? Color.Red : Color.DarkRed))
{ {
g.FillEllipse(brush, rect); g.FillEllipse(brush, rect);
@ -360,13 +343,9 @@ namespace AgroBase.Forms
private void btnReferenciar_Click(object sender, EventArgs e) private void btnReferenciar_Click(object sender, EventArgs e)
{ {
string ID = ((Button)sender).Name.Substring(3, 2); string ID = ((Button)sender).Name.Substring(3, 2);
var DispCon = Variaveis.DispositivosConectados.Where(x => x._Porta.IsOpen && x.Dispositivo == T_Code.Dir).ToList(); var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == ID);
foreach (var Dispositivo in DispCon) string Comando = Modulo.DirMotor.ProtocoloComando(Direcao.Parado);
{ Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(Modulo.Modulo_ID, Comando);
var Motor = ((DirecionalModel)Dispositivo.Dados).Motores.FirstOrDefault(x => x.ID == ID);
string Comando = Motor.ProtocoloComando(Direcao.Parado, true);
Dispositivo.AdicionarMensagemFila(Comando);
}
} }
private void btnReverter_Click(object sender, EventArgs e) private void btnReverter_Click(object sender, EventArgs e)
@ -384,23 +363,15 @@ namespace AgroBase.Forms
private void ChbLivre_CheckedChanged(object sender, EventArgs e) private void ChbLivre_CheckedChanged(object sender, EventArgs e)
{ {
string ID = ((CheckBox)sender).Name.Substring(3, 2); string ID = ((CheckBox)sender).Name.Substring(3, 2);
var DispCon = Variaveis.DispositivosConectados.Where(x => x._Porta.IsOpen && x.Dispositivo == T_Code.Dir).ToList(); var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == ID);
foreach (var Dispositivo in DispCon) Modulo.DirMotor.Livre = ((CheckBox)sender).Checked;
{
var Motor = ((DirecionalModel)Dispositivo.Dados).Motores.FirstOrDefault(x => x.ID == ID);
Motor.Livre = ((CheckBox)sender).Checked;
}
} }
private void ChbControlar_CheckedChanged(object sender, EventArgs e) private void ChbControlar_CheckedChanged(object sender, EventArgs e)
{ {
string ID = ((CheckBox)sender).Name.Substring(3, 2); string ID = ((CheckBox)sender).Name.Substring(3, 2);
var DispCon = Variaveis.DispositivosConectados.Where(x => x._Porta.IsOpen && x.Dispositivo == T_Code.Dir).ToList(); var Modulo = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.FirstOrDefault(x => x.Modulo_ID == ID);
foreach (var Dispositivo in DispCon) Modulo.DirMotor.Controlar = ((CheckBox)sender).Checked;
{
var Motor = ((DirecionalModel)Dispositivo.Dados).Motores.FirstOrDefault(x => x.ID == ID);
Motor.Controlar = ((CheckBox)sender).Checked;
}
} }

View File

@ -21,7 +21,7 @@ namespace AgroBase.Forms
public frmInstancial() public frmInstancial()
{ {
InitializeComponent(); InitializeComponent();
FilaService.Inicializar(true); FilaService.Inicializar();
} }
private void frmInstancial_Shown(object sender, EventArgs e) private void frmInstancial_Shown(object sender, EventArgs e)

View File

@ -155,12 +155,38 @@ namespace AgroBase.Forms
}).ToList()); }).ToList());
break; break;
} }
case T_Code.Mvd:
{
DispositivosService<MovimentacaoUnificadaModel> Disp = (DispositivosService<MovimentacaoUnificadaModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == TipoDisp);
if (Disp == null)
{
return;
}
this.Text = "Pinout - Movimentação Unificado";
Funcoes = ModuloMvdModel.Funcoes.ToList();
Pinout = ModuloMvdModel.Pinout;
Dispositivos = new List<DispositivoDataModel>();
Dispositivos.Add(new DispositivoDataModel()
{
ID = Disp.Dados.Modulos.First().MovMotor.ID,
Funcoes = Disp.Dados.Modulos.First().MovMotor.Funcoes
});
Dispositivos.Add(new DispositivoDataModel()
{
ID = Disp.Dados.Modulos.First().DirMotor.ID,
Funcoes = Disp.Dados.Modulos.First().DirMotor.Funcoes
});
break;
}
} }
chbMCP1.Checked = Pinout.ExpansorGPIO; chbMCP1.Checked = Pinout.ExpansorGPIO;
txtMCP1.Text = Pinout.EnderecoExpansor; txtMCP1.Text = Pinout.EnderecoExpansor;
Funcoes.ForEach(x => Pinos.Add(Enum.GetName(typeof(FuncoesPinout), x))); Funcoes.ForEach(x => Pinos.Add(TipoDisp.ToString() + " " + Enum.GetName(typeof(FuncoesPinout), x)));
foreach (var Dispositivo in Dispositivos) foreach (var Dispositivo in Dispositivos)
{ {
@ -183,7 +209,7 @@ namespace AgroBase.Forms
cmb.Enabled = (Selecionado.Barramento == TiposBarramentos.CONTROLADOR && Selecionado.Habilitado) || (Selecionado.Barramento == TiposBarramentos.EXPANSORI2C && chbMCP1.Checked); cmb.Enabled = (Selecionado.Barramento == TiposBarramentos.CONTROLADOR && Selecionado.Habilitado) || (Selecionado.Barramento == TiposBarramentos.EXPANSORI2C && chbMCP1.Checked);
if (Selecionado.Habilitado) if (Selecionado.Habilitado)
{ {
cmb.SelectedItem = (Selecionado.Funcao != FuncoesPinout.Geral ? Selecionado.ComponenteID + " " : "") + Enum.GetName(typeof(FuncoesPinout), Selecionado.Funcao); cmb.SelectedItem = Selecionado.ComponenteID + " " + Enum.GetName(typeof(FuncoesPinout), Selecionado.Funcao);
} }
} }
} }
@ -243,6 +269,9 @@ namespace AgroBase.Forms
case T_Code.Atu: case T_Code.Atu:
AtuadorModel.Pinout = Pinout; AtuadorModel.Pinout = Pinout;
break; break;
case T_Code.Mvd:
ModuloMvdModel.Pinout = Pinout;
break;
} }
} }

View File

@ -31,6 +31,9 @@ namespace AgroBase
public partial class frmPrincipal : Form public partial class frmPrincipal : Form
{ {
public static bool Fechando = false;
public frmPrincipal() public frmPrincipal()
{ {
InitializeComponent(); InitializeComponent();
@ -54,6 +57,8 @@ namespace AgroBase
private async Task EncerrarProcessos() private async Task EncerrarProcessos()
{ {
Fechando = true;
foreach (var Disp in Variaveis.DispositivosConectados) foreach (var Disp in Variaveis.DispositivosConectados)
{ {
if (Disp._Porta.IsOpen) if (Disp._Porta.IsOpen)
@ -69,7 +74,7 @@ namespace AgroBase
Disp.SalvarParametros(Disp.Dados); Disp.SalvarParametros(Disp.Dados);
} }
while (!FilaService.Liberado && FilaService.FeatureAtivada) while (!FilaService.Liberado)
{ {
await Task.Delay(500); await Task.Delay(500);
} }
@ -166,7 +171,7 @@ namespace AgroBase
SerialService.DispositivosMapeados SerialService.DispositivosMapeados
.Select(x => new ListViewItem() .Select(x => new ListViewItem()
{ {
Text = x.PortaCOM + " - " + Enum.GetName(typeof(T_Code), x.Dispositivo) + " v" + x.Versao + " - " + Text = x.PortaCOM + " - " + Enum.GetName(typeof(T_Code), x.Dispositivo) + " v" + x.Versao + " (" + x.Mod_ID + ") - " +
(x.Dispositivo == T_Code.Gps ? (GPSService.Iniciado ? "Conectado" : "Desconectado") : (x.Dispositivo == T_Code.Gps ? (GPSService.Iniciado ? "Conectado" : "Desconectado") :
x.Dispositivo == T_Code.Pzm ? (PZEMService.Iniciado ? "Conectado" : "Desconectado") : x.Dispositivo == T_Code.Pzm ? (PZEMService.Iniciado ? "Conectado" : "Desconectado") :
x.Dispositivo == T_Code.Lra ? (LoRaService.Iniciado ? "Conectado" : "Desconectado") : x.Dispositivo == T_Code.Lra ? (LoRaService.Iniciado ? "Conectado" : "Desconectado") :
@ -185,15 +190,16 @@ namespace AgroBase
Variaveis.OperacaoEmAndamento.DispAtu == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Atu) || Variaveis.OperacaoEmAndamento.DispAtu == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Atu) ||
Variaveis.OperacaoEmAndamento.DispDir == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Dir) || Variaveis.OperacaoEmAndamento.DispDir == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Dir) ||
Variaveis.OperacaoEmAndamento.DispMov == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mov) || Variaveis.OperacaoEmAndamento.DispMov == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mov) ||
Variaveis.OperacaoEmAndamento.DispMvd == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Mvd) ||
Variaveis.OperacaoEmAndamento.DispSen == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Sen) Variaveis.OperacaoEmAndamento.DispSen == null && Variaveis.DispositivosConectados.Any(x => x.Dispositivo == T_Code.Sen)
) )
{ {
Variaveis.OperacaoEmAndamento = OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModoOperacao.SelectedIndex); Variaveis.OperacaoEmAndamento = OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModoOperacao.SelectedIndex);
} }
if (Variaveis.OperacaoEmAndamento.DispMov != null && Convert.ToInt32(Variaveis.OperacaoEmAndamento.DispMov.Dados.Motores.Average(x => x.RPM_Max)) != trkRPM.Maximum) if (Variaveis.OperacaoEmAndamento.DispMvd != null && Convert.ToInt32(Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Average(x => x.MovMotor.RPM_Max)) != trkRPM.Maximum)
{ {
trkRPM.Maximum = Convert.ToInt32(Variaveis.OperacaoEmAndamento.DispMov.Dados.Motores.Average(x => x.RPM_Max)); trkRPM.Maximum = Convert.ToInt32(Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Average(x => x.MovMotor.RPM_Max));
trkKmh.Maximum = Convert.ToInt32(MovimentacaoModel.CalculaVelocidadeRPM(trkRPM.Maximum)); trkKmh.Maximum = Convert.ToInt32(MovimentacaoModel.CalculaVelocidadeRPM(trkRPM.Maximum));
} }
} }

View File

@ -56,6 +56,7 @@ namespace AgroBase.Models
Lra = 106, Lra = 106,
Wit = 107, Wit = 107,
Bld = 108, Bld = 108,
Mvd = 109,
} }
public enum F_Code public enum F_Code
@ -67,6 +68,7 @@ namespace AgroBase.Models
Cmd = 293, Cmd = 293,
Err = 404, Err = 404,
Msg = 655, Msg = 655,
Req = 887,
} }
public enum S_Code public enum S_Code

View File

@ -43,7 +43,7 @@ namespace AgroBase
public static bool Pressionado = false; public static bool Pressionado = false;
public static List<IDispositivosService> DispCon; public static List<IDispositivosService> DispCon;
public static int RPM { get; set; } = 30; public static int RPM { get; set; } = 60;
public static double Angulo { get; set; } = 20; public static double Angulo { get; set; } = 20;
public static int Velocidade { get; set; } = 50; public static int Velocidade { get; set; } = 50;
@ -490,14 +490,14 @@ namespace AgroBase
else if (Comando.Comando == Keys.Add) else if (Comando.Comando == Keys.Add)
{ {
Comando.Dispositivo = T_Code.Mov; Comando.Dispositivo = T_Code.Mov;
DirecaoAtual = MovimentacaoModel.UltimaDirecao; DirecaoAtual = MovimentacaoUnificadaModel.UltimaDirecao;
frmInstancial.frmPrincipal.AtualizaRPM(frmInstancial.frmPrincipal.trkRPM.Value + 1); frmInstancial.frmPrincipal.AtualizaRPM(frmInstancial.frmPrincipal.trkRPM.Value + 1);
Pressionado = true; Pressionado = true;
} }
else if (Comando.Comando == Keys.Subtract) else if (Comando.Comando == Keys.Subtract)
{ {
Comando.Dispositivo = T_Code.Mov; Comando.Dispositivo = T_Code.Mov;
DirecaoAtual = MovimentacaoModel.UltimaDirecao; DirecaoAtual = MovimentacaoUnificadaModel.UltimaDirecao;
frmInstancial.frmPrincipal.AtualizaRPM(frmInstancial.frmPrincipal.trkRPM.Value - 1); frmInstancial.frmPrincipal.AtualizaRPM(frmInstancial.frmPrincipal.trkRPM.Value - 1);
Pressionado = true; Pressionado = true;
} }
@ -576,34 +576,35 @@ namespace AgroBase
for (int i = 0; i < 1; i++) for (int i = 0; i < 1; i++)
{ {
List<string> Protocolos = new List<string>(); var Protocolos = new Dictionary<string, string>();
IDispositivosService Dispositivo = default(IDispositivosService); IDispositivosService Dispositivo = default(IDispositivosService);
switch (Comando.Dispositivo) switch (Comando.Dispositivo)
{ {
case T_Code.Mov: case T_Code.Mov:
{ {
Protocolos = Variaveis.OperacaoEmAndamento.DispMov.Dados.Motores.Select(x => x.ProtocoloComando(DirecaoAtual)).ToList(); Protocolos = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ToDictionary(x => x.Modulo_ID, x => x.MovMotor.ProtocoloComando(DirecaoAtual));
Dispositivo = Variaveis.OperacaoEmAndamento.DispMov; Dispositivo = Variaveis.OperacaoEmAndamento.DispMvd;
break; break;
} }
case T_Code.Dir: case T_Code.Dir:
{ {
Protocolos = Variaveis.OperacaoEmAndamento.DispDir.Dados.Motores.Select(x => x.ProtocoloComando(DirecaoAtual)).ToList(); Protocolos = Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.ToDictionary(x => x.Modulo_ID, x => x.DirMotor.ProtocoloComando(DirecaoAtual));
Dispositivo = Variaveis.OperacaoEmAndamento.DispDir; Dispositivo = Variaveis.OperacaoEmAndamento.DispMvd;
break; break;
} }
case T_Code.Atu: case T_Code.Atu:
{ {
var Bico = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == Comando.IDcontrolar); /*var Bico = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == Comando.IDcontrolar);
Bico.Atuado = Comando.Comando == Keys.Escape ? false : true; Bico.Atuado = Comando.Comando == Keys.Escape ? false : true;
Protocolos.Add(Bico.ProtocoloComando()); Protocolos.Add(Bico.ProtocoloComando());
Dispositivo = Variaveis.OperacaoEmAndamento.DispAtu; Dispositivo = Variaveis.OperacaoEmAndamento.DispAtu;
ModuloID = Variaveis.OperacaoEmAndamento.DispAtu.Dados.Modulo_ID;*/
break; break;
} }
} }
foreach (var ProtocoloMotor in Protocolos) foreach (var ProtocoloMotor in Protocolos)
{ {
Dispositivo.AdicionarMensagemFila(ProtocoloMotor); Dispositivo.AdicionarMensagemFila(ProtocoloMotor.Key, ProtocoloMotor.Value);
Task.Delay(10); Task.Delay(10);
Console.WriteLine(ProtocoloMotor); Console.WriteLine(ProtocoloMotor);
} }

View File

@ -11,6 +11,7 @@ namespace AgroBase.Models
{ {
public int Id { get; set; } public int Id { get; set; }
public T_Code Dispositivo { get; set; } public T_Code Dispositivo { get; set; }
public string ID_Modulo { get; set; }
public string Mensagem { get;set; } public string Mensagem { get;set; }
public DateTime AdicionadoEm { get; set; } public DateTime AdicionadoEm { get; set; }
public bool Enviado { get; set; } public bool Enviado { get; set; }

View File

@ -12,6 +12,8 @@ namespace AgroBase.Models.Modules
{ {
public class AtuadorModel : DispositivoBaseModel public class AtuadorModel : DispositivoBaseModel
{ {
public string Modulo_ID { get; set; } = T_Code.Atu.ToString();
private bool _MensagemConexaoRecebida { get; set; } = false; private bool _MensagemConexaoRecebida { get; set; } = false;
public bool MensagemConexaoRecebida(bool Reset = false) public bool MensagemConexaoRecebida(bool Reset = false)
{ {
@ -239,19 +241,34 @@ namespace AgroBase.Models.Modules
return Atuador; return Atuador;
} }
public List<string> ProtocoloConfiguracao(bool Conectar) public Dictionary<string, List<string>> ProtocoloConfiguracao(bool Conectar)
{ {
List<string> Config = BicosPulverizadores.Select(x => x.ProtocoloConfiguracaoBico(Conectar)).ToList(); // Inicializar o dicionário
Config.Add(BombaPressurizadora.ProtocoloConfiguracaoBomba(Conectar)); var configDictionary = new Dictionary<string, List<string>>();
Config.AddRange(Sensores.Select(x => x.ProtocoloConfiguracaoSensor(Pinout, Conectar)).ToList());
string ProtocoloMOD = // Adicionar configurações dos Bicos Pulverizadores
var bicosConfig = BicosPulverizadores.Select(x => x.ProtocoloConfiguracaoBico(Conectar)).ToList();
configDictionary.Add(Modulo_ID, bicosConfig);
// Adicionar configuração da Bomba Pressurizadora
var bombaConfig = new List<string> { BombaPressurizadora.ProtocoloConfiguracaoBomba(Conectar) };
configDictionary.Add(Modulo_ID, bombaConfig);
// Adicionar configurações dos Sensores
var sensoresConfig = Sensores.Select(x => x.ProtocoloConfiguracaoSensor(Pinout, Conectar)).ToList();
configDictionary.Add(Modulo_ID, sensoresConfig);
// Adicionar configuração do ProtocoloMOD
string protocoloMOD =
((int)F_Code.Cfg).ToString() + SerialService.SplitMessage + ((int)F_Code.Cfg).ToString() + SerialService.SplitMessage +
"MD" + SerialService.SplitParams + "MD" + SerialService.SplitParams +
(Conectar ? "1" : "0") + SerialService.SplitParams + (Conectar ? "1" : "0") + SerialService.SplitParams +
_TaxaAmostragem.ToString() + SerialService.SplitParams + _TaxaAmostragem.ToString() + SerialService.SplitParams +
(AtuacaoNivelAlto ? "1" : "0"); (AtuacaoNivelAlto ? "1" : "0");
Config.Add(ProtocoloMOD); var protocoloMODConfig = new List<string> { protocoloMOD };
return Config; configDictionary.Add(Modulo_ID, protocoloMODConfig);
return configDictionary;
} }
public void RecebeProtocoloSerial(string Protocolo) public void RecebeProtocoloSerial(string Protocolo)

View File

@ -15,6 +15,8 @@ namespace AgroBase.Models.Modules
{ {
public class DirecionalModel : DispositivoBaseModel public class DirecionalModel : DispositivoBaseModel
{ {
public string Modulo_ID { get; set; } = T_Code.Dir.ToString();
private bool _MensagemConexaoRecebida { get; set; } = false; private bool _MensagemConexaoRecebida { get; set; } = false;
public bool MensagemConexaoRecebida(bool Reset = false) public bool MensagemConexaoRecebida(bool Reset = false)
{ {
@ -138,20 +140,26 @@ namespace AgroBase.Models.Modules
}; };
} }
public List<string> ProtocoloConfiguracao(bool Conectar) public Dictionary<string, List<string>> ProtocoloConfiguracao(bool Conectar)
{ {
List<string> Config = Motores.Select(x => x.ProtocoloConfiguracaoMotor(Conectar)).ToList(); // Inicializar o dicionário
string ProtocoloMOD = var configDictionary = new Dictionary<string, List<string>>();
// Adicionar configurações dos Motores
var motoresConfig = Motores.Select(x => x.ProtocoloConfiguracaoMotor(Conectar)).ToList();
configDictionary.Add(Modulo_ID, motoresConfig);
// Adicionar configuração do ProtocoloMOD
string protocoloMOD =
((int)F_Code.Cfg).ToString() + SerialService.SplitMessage + ((int)F_Code.Cfg).ToString() + SerialService.SplitMessage +
"MD" + SerialService.SplitParams + "MD" + SerialService.SplitParams +
(Conectar ? "1" : "0") + SerialService.SplitParams + (Conectar ? "1" : "0") + SerialService.SplitParams +
_TaxaAmostragem.ToString("00000"); // + SerialService.SplitParams + _TaxaAmostragem.ToString("00000");
//(AA_Ref000 ? "1" : "0") + SerialService.SplitParams +
//(AA_Ref090 ? "1" : "0") + SerialService.SplitParams + var protocoloMODConfig = new List<string> { protocoloMOD };
//(AA_Ref270 ? "1" : "0") + SerialService.SplitParams + configDictionary.Add(Modulo_ID, protocoloMODConfig);
//PinoutModel.PinoProtocolo(Pinout, Funcoes);
Config.Add(ProtocoloMOD); return configDictionary;
return Config;
} }
public void RecebeProtocoloSerial(string Protocolo) public void RecebeProtocoloSerial(string Protocolo)

View File

@ -10,12 +10,11 @@ namespace AgroBase.Models
{ {
public interface DispositivoBaseModel public interface DispositivoBaseModel
{ {
bool MensagemConexaoRecebida(bool Reset = false);
void RecebeProtocoloSerial(string Protocolo); void RecebeProtocoloSerial(string Protocolo);
string GetTaxaAmostragem(); string GetTaxaAmostragem();
void SetTaxaAmostragem(int TaxaAmostragem); void SetTaxaAmostragem(int TaxaAmostragem);
bool GetStatusConexao(); bool GetStatusConexao();
List<string> ProtocoloConfiguracao(bool Conectar); Dictionary<string, List<string>> ProtocoloConfiguracao(bool Conectar);
void IniciarRegistrador(); void IniciarRegistrador();
} }

View File

@ -15,6 +15,8 @@ namespace AgroBase.Models
{ {
public class MovimentacaoModel : DispositivoBaseModel public class MovimentacaoModel : DispositivoBaseModel
{ {
public string Modulo_ID { get; set; } = T_Code.Mov.ToString();
private bool _MensagemConexaoRecebida { get; set; } = false; private bool _MensagemConexaoRecebida { get; set; } = false;
public bool MensagemConexaoRecebida(bool Reset = false) public bool MensagemConexaoRecebida(bool Reset = false)
{ {
@ -31,7 +33,6 @@ namespace AgroBase.Models
public static int NumPolos { get; set; } = 0; public static int NumPolos { get; set; } = 0;
public static int Rampa { get; set; } = 0; public static int Rampa { get; set; } = 0;
public static int RPM_Max { get; set; } = 0; public static int RPM_Max { get; set; } = 0;
public static double DiametroRoda { get; set; } = 0.3556;
public static int LogsManter { get; set; } = 60; public static int LogsManter { get; set; } = 60;
public static PinoutDataModel Pinout { get; set; } public static PinoutDataModel Pinout { get; set; }
@ -116,16 +117,28 @@ namespace AgroBase.Models
}; };
} }
public List<string> ProtocoloConfiguracao(bool Conectar) public Dictionary<string, List<string>> ProtocoloConfiguracao(bool Conectar)
{ {
List<string> Config = Motores.Where(x => x.Comandar).Select(x => x.ProtocoloConfiguracaoMotor(Conectar)).ToList(); // Inicializar o dicionário
string ProtocoloMOD = var configDictionary = new Dictionary<string, List<string>>();
// Adicionar configurações dos Motores que devem ser comandados
var motoresConfig = Motores
.Where(x => x.Comandar)
.Select(x => x.ProtocoloConfiguracaoMotor(Conectar))
.ToList();
configDictionary.Add(Modulo_ID, motoresConfig);
// Adicionar configuração do ProtocoloMOD
string protocoloMOD =
((int)F_Code.Cfg).ToString() + SerialService.SplitMessage + ((int)F_Code.Cfg).ToString() + SerialService.SplitMessage +
"MD" + SerialService.SplitParams + "MD" + SerialService.SplitParams +
(Conectar ? "1" : "0") + SerialService.SplitParams + (Conectar ? "1" : "0") + SerialService.SplitParams +
_TaxaAmostragem.ToString(); _TaxaAmostragem.ToString();
Config.Add(ProtocoloMOD); var protocoloMODConfig = new List<string> { protocoloMOD };
return Config; configDictionary.Add(Modulo_ID, protocoloMODConfig);
return configDictionary;
} }
public void RecebeProtocoloSerial(string Protocolo) public void RecebeProtocoloSerial(string Protocolo)
@ -296,13 +309,13 @@ namespace AgroBase.Models
public static double CalculaVelocidadeRPM(double RPM) public static double CalculaVelocidadeRPM(double RPM)
{ {
double VelocidadeInstantanea = Math.Round((Math.PI * DiametroRoda * 60 * RPM) / 1000, 2); // Km/h double VelocidadeInstantanea = Math.Round((Math.PI * VariaveisEquipamento.DiametroRoda * 60 * RPM) / 1000, 2); // Km/h
return VelocidadeInstantanea; return VelocidadeInstantanea;
} }
public static double CalculaRPMVelocidade(double Velocidade) public static double CalculaRPMVelocidade(double Velocidade)
{ {
double RPM = Math.Round((Velocidade * 1000) / (Math.PI * DiametroRoda * 60), 2); double RPM = Math.Round((Velocidade * 1000) / (Math.PI * VariaveisEquipamento.DiametroRoda * 60), 2);
return RPM; return RPM;
} }
@ -484,7 +497,7 @@ namespace AgroBase.Models
if (Inicializado && (!AlarmeAnterior || Adicionado) && AlarmeAtual) // Motor iniciado, Não estava em alarme anteriormente ou foi adicionado agora, alarme atual if (Inicializado && (!AlarmeAnterior || Adicionado) && AlarmeAtual) // Motor iniciado, Não estava em alarme anteriormente ou foi adicionado agora, alarme atual
{ {
Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mov).AdicionarMensagemFila(ProtocoloComando(Direcao.Frente, true)); Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mov).AdicionarMensagemFila(Variaveis.OperacaoEmAndamento.DispMov.Dados.Modulo_ID, ProtocoloComando(Direcao.Frente, true));
} }
Alm.Valor = _Alarme.Valor; Alm.Valor = _Alarme.Valor;

View File

@ -0,0 +1,606 @@
using AgroBase.Comum;
using AgroBase.Services;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static AgroBase.Models.Enuns;
namespace AgroBase.Models.Modules
{
public class MovimentacaoUnificadaModel : DispositivoBaseModel
{
private bool _conectado = false;
public bool Conectado
{
get
{
return Modulos.Any(x => x.Conectado);
}
set
{
_conectado = value;
}
}
public static int _TaxaAmostragem { get; set; } = 1000;
public List<ModuloMvdModel> Modulos { get; set; } = new List<ModuloMvdModel>();
public static Direcao UltimaDirecao { get; set; } = Direcao.Parado;
public double DistanciaPercorridaOperacao { get; set; } = 0;
public int TempoEmAtividade { get; set; } = 0;
public double DistanciaPercorridaTotal { get; set; } = 0;
public double DistanciaPercorridaParcial { get; set; } = 0;
public static MovimentacaoUnificadaModel CarregarParametrosIniciais()
{
return new MovimentacaoUnificadaModel()
{
Modulos = new List<ModuloMvdModel>()
{
new ModuloMvdModel()
{
Modulo_ID = "ET",
MovMotor = MvdMotorBLDC.CarregarParametrosIniciais(),
DirMotor = MvdMotorPasso.CarregarParametrosIniciais(),
},
new ModuloMvdModel()
{
Modulo_ID = "EF",
MovMotor = MvdMotorBLDC.CarregarParametrosIniciais(),
DirMotor = MvdMotorPasso.CarregarParametrosIniciais()
},
new ModuloMvdModel()
{
Modulo_ID = "DT",
MovMotor = MvdMotorBLDC.CarregarParametrosIniciais(),
DirMotor = MvdMotorPasso.CarregarParametrosIniciais()
},
new ModuloMvdModel()
{
Modulo_ID = "DF",
MovMotor = MvdMotorBLDC.CarregarParametrosIniciais(),
DirMotor = MvdMotorPasso.CarregarParametrosIniciais()
},
},
};
}
public Dictionary<string, List<string>> ProtocoloConfiguracao(bool Conectar)
{
var Config = Modulos.Where(x => x.MovMotor.Comandar || x.DirMotor.Comandar).ToDictionary(x => x.Modulo_ID, x => x.ProtocoloConfiguracao(Conectar).ToList());
return Config;
}
public void RecebeProtocoloSerial(string Protocolo)
{
string Mod_ID = Protocolo.Split(SerialService.SplitMessage[0])[0];
string mensagem = Protocolo.Substring(Mod_ID.Length + 1, Protocolo.Length - Mod_ID.Length - 1);
if (!string.IsNullOrEmpty(Protocolo) && mensagem[0].ToString() == SerialService.BeginSensor)
{
try
{
string[] Dados = mensagem.Replace(SerialService.BeginSensor, "").Split(SerialService.EndLine[0])[0].Split(';');
S_Code TipoSensor = (S_Code)(int.Parse(Dados[0]));
string _IDcomponente = Dados[1];
ModuloMvdModel Modulo = Modulos.FirstOrDefault(x => x.Modulo_ID == Mod_ID);
if (Modulo == null)
{
Console.WriteLine("Módulo " + Mod_ID + " não encontrado!");
return;
}
if (_IDcomponente == Modulo.Modulo_ID)
{
Modulo.Conectado = Dados[2] == "1";
DispositivosService<MovimentacaoUnificadaModel> Disp = (DispositivosService<MovimentacaoUnificadaModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mvd);
Disp.AcaoConexao().ConfigureAwait(false);
if (Modulo.Conectado)
{
LoopAquisicaoDados().ConfigureAwait(false);
}
return;
}
try
{
switch (TipoSensor)
{
case S_Code.sBLD:
{
double rpm = 0;
double.TryParse(Dados[2].Replace(".", ","), out rpm);
Modulo.MovMotor.RPM = rpm;
double temperatura = 0;
double.TryParse(Dados[3].Replace(".", ","), out temperatura);
temperatura = FuncoesMatematicas.CalcularTemperatura(temperatura, -1.038);
Modulo.MovMotor.Temperatura = temperatura;
double tensao = 0;
double.TryParse(Dados[4].Replace(".", ","), out tensao);
Modulo.MovMotor.Tensao = tensao;
double corrente_max = 0;
double.TryParse(Dados[5].Replace(".", ","), out corrente_max);
corrente_max = FuncoesMatematicas.Map(corrente_max, 15780, 16799, 0, 20.6);
Modulo.MovMotor.Corrente_Max = corrente_max;
bool ligado = Dados[6] == "1";
Modulo.MovMotor.Ligado = ligado;
int sentido = 0;
int.TryParse(Dados[7], out sentido);
Modulo.MovMotor.Sentido = (Sentido)sentido;
bool freio = Dados[8] == "1";
Modulo.MovMotor.Freio = freio;
int codAlarme = 0;
int.TryParse(Dados[9], out codAlarme);
Modulo.MovMotor.CodigoAlarme = codAlarme;
double tempDriver = 0;
double.TryParse(Dados[10].Replace(".", ","), out tempDriver);
tempDriver = FuncoesMatematicas.CalcularTemperatura(tempDriver, 0);
Modulo.MovMotor.TemperaturaDriver = tempDriver;
Modulo.MovMotor.LogGrafico.Add(new MvdMotorMOVSensorimanetoGrafico()
{
Momento = DateTime.Now,
Modulo_ID = Modulo.Modulo_ID,
RPM_SP = Modulo.MovMotor.RPM_SP,
RPM = Modulo.MovMotor.RPM,
Corrente = Modulo.MovMotor.Corrente,
Sentido = Modulo.MovMotor.Sentido,
Temperatura = Modulo.MovMotor.Temperatura,
TemperaturaDriver = Modulo.MovMotor.TemperaturaDriver,
Tensao = Modulo.MovMotor.Tensao,
Velocidade = Modulo.MovMotor.VelocidadeInstantanea
});
break;
}
case S_Code.sENC:
{
int _sentido = 0;
int.TryParse(Dados[2].ToString(), out _sentido);
Modulo.DirMotor.Sentido = (Sentido)_sentido;
int _angulo = 0;
int.TryParse(Dados[3].ToString(), out _angulo);
Modulo.DirMotor.Angulo = _angulo;
break;
}
case S_Code.sCFG:
{
bool Inicializado = Dados[2] == "1";
if (_IDcomponente == Modulo.MovMotor.ID)
{
Modulo.MovMotor.Inicializado = Inicializado;
}
else if (_IDcomponente == Modulo.DirMotor.ID)
{
Modulo.DirMotor.Inicializado = Inicializado;
}
break;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
public string GetTaxaAmostragem()
{
return _TaxaAmostragem.ToString("00000");
}
public void SetTaxaAmostragem(int TaxaAmostragem)
{
_TaxaAmostragem = TaxaAmostragem;
}
public bool GetStatusConexao()
{
return Modulos.Any(x => x.Conectado);
}
public void IniciarRegistrador()
{
}
private async Task LoopAquisicaoDados()
{
if (Conectado)
{
await Task.Delay(_TaxaAmostragem);
Modulos.ForEach(x =>
{
if (x.MovMotor.Inicializado)
{
Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(x.Modulo_ID, x.MovMotor.ProtocoloAquisicaoDados());
}
if (x.DirMotor.Inicializado)
{
Variaveis.OperacaoEmAndamento.DispMvd.AdicionarMensagemFila(x.Modulo_ID, x.DirMotor.ProtocoloAquisicaoDados());
}
});
if (UltimaDirecao != Direcao.Parado)
{
TempoEmAtividade++;
double VelocidadeMedia = Modulos.Average(x => x.MovMotor.VelocidadeInstantanea * 1000 / 3600);
DistanciaPercorridaTotal += 1 * VelocidadeMedia;
DistanciaPercorridaParcial += (UltimaDirecao == Direcao.Frente ? 1 : UltimaDirecao == Direcao.Tras ? -1 : 0) * VelocidadeMedia;
DistanciaPercorridaOperacao += 1 * VelocidadeMedia;
}
await LoopAquisicaoDados();
}
}
}
public class ModuloMvdModel
{
public string Modulo_ID { get; set; }
public bool Disponivel { get; set; }
public bool Conectado { get; set; } = false;
public MvdMotorBLDC MovMotor { get; set; }
public MvdMotorPasso DirMotor { get; set; }
public static PinoutDataModel Pinout { get; set; }
public static List<FuncoesPinout> Funcoes { get; set; } = new List<FuncoesPinout>()
{
FuncoesPinout.TX,
FuncoesPinout.RX,
FuncoesPinout.ModbusDI,
FuncoesPinout.ModbusRO,
FuncoesPinout.ModbusDE_RE
};
public List<string> ProtocoloConfiguracao(bool Conectar)
{
List<string> Config = new List<string>();
var _pinout = new PinoutDataModel()
{
ExpansorGPIO = Pinout.ExpansorGPIO,
EnderecoExpansor = Pinout.EnderecoExpansor,
Pinos = Pinout.Pinos.ToList(),
};
_pinout.Pinos = _pinout.Pinos.Where(x => x.ComponenteID == T_Code.Mvd.ToString()).ToList();
string ProtocoloMOD =
((int)F_Code.Cfg).ToString() + SerialService.SplitMessage +
Modulo_ID + SerialService.SplitParams +
(Conectar ? "1" : "0") + SerialService.SplitParams +
MovimentacaoUnificadaModel._TaxaAmostragem.ToString() + SerialService.SplitParams +
PinoutModel.PinoProtocolo(_pinout, Funcoes);
if (Conectar)
{
Config.Add(ProtocoloMOD);
}
if (MovMotor.Comandar)
{
Config.Add(MovMotor.ProtocoloConfiguracao(Conectar));
}
if (DirMotor.Comandar)
{
Config.Add(DirMotor.ProtocoloConfiguracao(Conectar));
}
if (!Conectar)
{
Config.Add(ProtocoloMOD);
}
return Config;
}
}
public class MvdMotorBLDC
{
public string ID { get; set; } = T_Code.Mov.ToString();
// SETs
public string Endereco { get; set; } = "0x01";
public bool Ligado { get; set; } = false;
public bool Freio { get; set; } = false;
public int CodigoAlarme { get; set; } = 0;
public int RPM_SP { get; set; } = 0;
public Sentido Sentido_SP { get; set; } = Sentido.Parado;
public int NumeroPolos { get; set; } = 2;
public int Rampa { get; set; } = 0;
public int RPM_Max { get; set; } = 800;
// GETs
public double RPM { get; set; } = 0;
public Sentido Sentido { get; set; } = Sentido.Parado;
public double Temperatura { get; set; } = 0;
public double TemperaturaDriver { get; set; } = 0;
public double Tensao { get; set; } = 0;
public double Corrente_Max { get; set; } = 0;
public double Corrente { get; set; } = 0;
public double VelocidadeInstantanea
{
get
{
return MovimentacaoModel.CalculaVelocidadeRPM(RPM);
}
}
public bool Comandar { get; set; } = false;
public bool Alarme { get; set; } = false;
public bool Inicializado { get; set; } = false;
public ConfiguracaoSentidoMotor ConfigSentidos { get; set; }
public List<FuncoesPinout> Funcoes { get; set; }
public List<MvdMotorMOVSensorimanetoGrafico> LogGrafico { get; set; } = new List<MvdMotorMOVSensorimanetoGrafico>();
public static MvdMotorBLDC CarregarParametrosIniciais()
{
return new MvdMotorBLDC()
{
ID = T_Code.Mov.ToString(),
Endereco = "0x01",
ConfigSentidos = new ConfiguracaoSentidoMotor()
{
Direita = Sentido.Antihorario,
Esquerda = Sentido.Horario,
Frente = Sentido.Horario,
Tras = Sentido.Antihorario
},
Funcoes = new List<FuncoesPinout>()
{
FuncoesPinout.TMP
}
};
}
public string ProtocoloConfiguracao(bool Conectar)
{
var _pinout = new PinoutDataModel()
{
ExpansorGPIO = ModuloMvdModel.Pinout.ExpansorGPIO,
EnderecoExpansor = ModuloMvdModel.Pinout.EnderecoExpansor,
Pinos = ModuloMvdModel.Pinout.Pinos.ToList(),
};
_pinout.Pinos = _pinout.Pinos.Where(x => x.ComponenteID == ID).ToList();
string Protocolo =
((int)F_Code.Cfg).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams +
(Conectar ? "1" : "0") + SerialService.SplitParams +
Endereco + SerialService.SplitParams +
NumeroPolos + SerialService.SplitParams +
Rampa + SerialService.SplitParams +
RPM_Max + SerialService.SplitParams +
PinoutModel.PinoProtocolo(_pinout, Funcoes);
return Protocolo;
}
public string ProtocoloComando(Direcao DirecaoAtual, bool CmdAlarme = false)
{
if (Inicializado && Comandar && (!Alarme || CmdAlarme))
{
if (!CmdAlarme)
{
MovimentacaoUnificadaModel.UltimaDirecao = DirecaoAtual;
}
RPM_SP =
DirecaoAtual == Direcao.Parado || CmdAlarme ? 0 :
GeneralJoystick.RPM;
switch (DirecaoAtual)
{
case Direcao.Frente:
Sentido_SP = ConfigSentidos.Frente;
break;
case Direcao.Tras:
Sentido_SP = ConfigSentidos.Tras;
break;
case Direcao.Esquerda:
Sentido_SP = ConfigSentidos.Esquerda;
break;
case Direcao.Direita:
Sentido_SP = ConfigSentidos.Direita;
break;
case Direcao.Parado:
default:
Sentido_SP = ConfigSentidos.Parado;
break;
}
string ProtocoloMotor = "";
ProtocoloMotor =
((int)F_Code.Cmd).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams +
((int)Sentido_SP).ToString() + SerialService.SplitParams +
RPM_SP.ToString() + SerialService.SplitParams +
(Freio ? "1" : "0");
return ProtocoloMotor;
}
return "";
}
public string ProtocoloAquisicaoDados()
{
if (Inicializado)
{
string ProtocoloMotor =
((int)F_Code.Req).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams +
"";
return ProtocoloMotor;
}
return "";
}
}
public class MvdMotorPasso
{
public string ID { get; set; } = T_Code.Dir.ToString();
// SETs
public Sentido Sentido_SP { get; set; } = Sentido.Parado;
public double Angulo_SP { get; set; } = 0;
public int Velocidade { get; set; } = 50;
public double Angulo_Offset { get; set; } = 0;
public bool Estabilizar { get; set; } = false;
public bool Livre { get; set; } = false;
// GETs
public Sentido Sentido { get; set; } = Sentido.Parado;
public double Angulo { get; set; } = 0;
public bool Comandar { get; set; } = false;
public bool Controlar { get; set; } = false;
public bool Inicializado { get; set; } = false;
public ConfiguracaoSentidoMotor ConfigSentidos { get; set; }
public List<FuncoesPinout> Funcoes { get; set; }
public static MvdMotorPasso CarregarParametrosIniciais()
{
return new MvdMotorPasso()
{
ID = T_Code.Dir.ToString(),
ConfigSentidos = new ConfiguracaoSentidoMotor()
{
Direita = Sentido.Antihorario,
Esquerda = Sentido.Horario,
Frente = Sentido.Parado,
Tras = Sentido.Parado
},
Funcoes = new List<FuncoesPinout>()
{
FuncoesPinout.PUL,
FuncoesPinout.DIR,
FuncoesPinout.ENA,
FuncoesPinout.EncoderAbsoluto
}
};
}
public string ProtocoloConfiguracao(bool Conectar)
{
var _pinout = new PinoutDataModel()
{
ExpansorGPIO = ModuloMvdModel.Pinout.ExpansorGPIO,
EnderecoExpansor = ModuloMvdModel.Pinout.EnderecoExpansor,
Pinos = ModuloMvdModel.Pinout.Pinos.ToList(),
};
_pinout.Pinos = _pinout.Pinos.Where(x => x.ComponenteID == ID).ToList();
string Protocolo =
((int)F_Code.Cfg).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams +
(Conectar ? "1" : "0") + SerialService.SplitParams +
(Estabilizar ? "1" : "0") + SerialService.SplitParams +
Angulo_Offset.ToString() + SerialService.SplitParams +
PinoutModel.PinoProtocolo(_pinout, Funcoes);
return Protocolo;
}
public string ProtocoloComando(Direcao Direcao)
{
if (Inicializado && Comandar && (Controlar))
{
Sentido_SP =
Direcao == Direcao.Cima ? ConfigSentidos.Direita :
Direcao == Direcao.Baixo ? ConfigSentidos.Esquerda :
!Livre && Sentido_SP == Sentido.Horario ? Sentido.Antihorario :
!Livre && Sentido_SP == Sentido.Antihorario ? Sentido.Horario :
Sentido.Parado;
Angulo_SP = Livre ? -1 : (Direcao != Direcao.Cima && Direcao != Direcao.Baixo) ? 0 : GeneralJoystick.Angulo;
Velocidade = GeneralJoystick.Velocidade;
string ProtocoloMotor =
((int)F_Code.Cmd).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams +
((int)Sentido_SP).ToString() + SerialService.SplitParams +
Angulo_SP.ToString() + SerialService.SplitParams +
Velocidade.ToString();
return ProtocoloMotor;
}
return "";
}
public string ProtocoloAquisicaoDados()
{
if (Inicializado)
{
string ProtocoloMotor =
((int)F_Code.Req).ToString() + SerialService.SplitMessage +
ID + SerialService.SplitParams +
"";
return ProtocoloMotor;
}
return "";
}
}
public class MvdMotorMOVSensorimanetoGrafico
{
public DateTime Momento { get; set; }
public string Modulo_ID { get; set; }
public int RPM_SP { get; set; }
public double RPM { get; set; }
public double Temperatura { get; set; }
public double TemperaturaDriver { get; set; }
public Sentido Sentido { get; set; }
public double Velocidade { get; set; }
public double Tensao { get; set; }
public double Corrente { get; set; }
}
}

View File

@ -186,8 +186,8 @@ namespace AgroBase.Models.Modules
{ {
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 99, ComponenteID = "", Descricao = "1", Funcao = FuncoesPinout.Desabilitado, Habilitado = false }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 99, ComponenteID = "", Descricao = "1", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 98, ComponenteID = "", Descricao = "2", Funcao = FuncoesPinout.Desabilitado, Habilitado = false }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 98, ComponenteID = "", Descricao = "2", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 36, ComponenteID = "", Descricao = "3", Funcao = FuncoesPinout.NaoConectado, Habilitado = true }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 36, ComponenteID = "", Descricao = "3", Funcao = FuncoesPinout.NaoConectado, Habilitado = false },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 39, ComponenteID = "", Descricao = "4", Funcao = FuncoesPinout.NaoConectado, Habilitado = true }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 39, ComponenteID = "", Descricao = "4", Funcao = FuncoesPinout.NaoConectado, Habilitado = false },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 34, ComponenteID = "", Descricao = "5", Funcao = FuncoesPinout.NaoConectado, Habilitado = true }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 34, ComponenteID = "", Descricao = "5", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 35, ComponenteID = "", Descricao = "6", Funcao = FuncoesPinout.NaoConectado, Habilitado = true }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 35, ComponenteID = "", Descricao = "6", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 32, ComponenteID = "", Descricao = "7", Funcao = FuncoesPinout.NaoConectado, Habilitado = true }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 32, ComponenteID = "", Descricao = "7", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
@ -217,8 +217,8 @@ namespace AgroBase.Models.Modules
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 19, ComponenteID = "", Descricao = "37", Funcao = FuncoesPinout.NaoConectado, Habilitado = true }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 19, ComponenteID = "", Descricao = "37", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 95, ComponenteID = "", Descricao = "38", Funcao = FuncoesPinout.Desabilitado, Habilitado = false }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 95, ComponenteID = "", Descricao = "38", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 21, ComponenteID = "", Descricao = "39", Funcao = FuncoesPinout.NaoConectado, Habilitado = true }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 21, ComponenteID = "", Descricao = "39", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 3, ComponenteID = "", Descricao = "40", Funcao = FuncoesPinout.RX, Habilitado = false }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 3, ComponenteID = "", Descricao = "40", Funcao = FuncoesPinout.RX, Habilitado = true },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 1, ComponenteID = "", Descricao = "41", Funcao = FuncoesPinout.TX, Habilitado = false }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 1, ComponenteID = "", Descricao = "41", Funcao = FuncoesPinout.TX, Habilitado = true },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 22, ComponenteID = "", Descricao = "42", Funcao = FuncoesPinout.Desabilitado, Habilitado = true }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 22, ComponenteID = "", Descricao = "42", Funcao = FuncoesPinout.Desabilitado, Habilitado = true },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 23, ComponenteID = "", Descricao = "43", Funcao = FuncoesPinout.Desabilitado, Habilitado = true }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 23, ComponenteID = "", Descricao = "43", Funcao = FuncoesPinout.Desabilitado, Habilitado = true },
new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 94, ComponenteID = "", Descricao = "44", Funcao = FuncoesPinout.Desabilitado, Habilitado = false }, new PinoutModel() { Controlador = TiposControladores.ESP32_WROVER, Barramento = TiposBarramentos.CONTROLADOR, Pino = 94, ComponenteID = "", Descricao = "44", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
@ -357,7 +357,10 @@ namespace AgroBase.Models.Modules
Sinaleiro, Sinaleiro,
ServoX, ServoX,
ServoY, ServoY,
EncoderAbsoluto EncoderAbsoluto,
ModbusDI,
ModbusRO,
ModbusDE_RE
} }
public static class PinoutUtils public static class PinoutUtils

View File

@ -17,6 +17,8 @@ namespace AgroBase.Models.Modules
{ {
public class SensoriamentoModel : DispositivoBaseModel public class SensoriamentoModel : DispositivoBaseModel
{ {
public string Modulo_ID { get; set; } = T_Code.Sen.ToString();
private bool _MensagemConexaoRecebida { get; set; } = false; private bool _MensagemConexaoRecebida { get; set; } = false;
public bool MensagemConexaoRecebida(bool Reset = false) public bool MensagemConexaoRecebida(bool Reset = false)
{ {
@ -359,18 +361,35 @@ namespace AgroBase.Models.Modules
}; };
} }
public List<string> ProtocoloConfiguracao(bool Conectar) public Dictionary<string, List<string>> ProtocoloConfiguracao(bool Conectar)
{ {
List<string> Config = Sensores.Where(x => x.Aferir).Select(x => x.ProtocoloConfiguracaoSensor(Pinout, Conectar)).ToList(); // Inicializar o dicionário
Config.AddRange(Sinaleiros.Select(x => x.ProtocoloConfiguracaoSinaleiro(Pinout, Conectar)).ToList()); var configDictionary = new Dictionary<string, List<string>>();
string ProtocoloMOD =
// Adicionar configurações dos Sensores que devem ser aferidos
var sensoresConfig = Sensores
.Where(x => x.Aferir)
.Select(x => x.ProtocoloConfiguracaoSensor(Pinout, Conectar))
.ToList();
configDictionary.Add(Modulo_ID, sensoresConfig);
// Adicionar configurações dos Sinaleiros
var sinaleirosConfig = Sinaleiros
.Select(x => x.ProtocoloConfiguracaoSinaleiro(Pinout, Conectar))
.ToList();
configDictionary.Add(Modulo_ID, sinaleirosConfig);
// Adicionar configuração do ProtocoloMOD
string protocoloMOD =
((int)F_Code.Cfg).ToString() + SerialService.SplitMessage + ((int)F_Code.Cfg).ToString() + SerialService.SplitMessage +
"MD" + SerialService.SplitParams + "MD" + SerialService.SplitParams +
(Conectar ? "1" : "0") + SerialService.SplitParams + (Conectar ? "1" : "0") + SerialService.SplitParams +
_TaxaAmostragem.ToString() + SerialService.SplitParams + _TaxaAmostragem.ToString() + SerialService.SplitParams +
PinoutModel.PinoProtocolo(Pinout, Funcoes); PinoutModel.PinoProtocolo(Pinout, Funcoes);
Config.Add(ProtocoloMOD); var protocoloMODConfig = new List<string> { protocoloMOD };
return Config; configDictionary.Add(Modulo_ID, protocoloMODConfig);
return configDictionary;
} }
public void RecebeProtocoloSerial(string Protocolo) public void RecebeProtocoloSerial(string Protocolo)
@ -621,7 +640,7 @@ namespace AgroBase.Models.Modules
foreach (var _motor in Variaveis.OperacaoEmAndamento.DispMov.Dados.Motores) foreach (var _motor in Variaveis.OperacaoEmAndamento.DispMov.Dados.Motores)
{ {
string ProtocoloParada = _motor.ProtocoloComando(Direcao.Frente, true); string ProtocoloParada = _motor.ProtocoloComando(Direcao.Frente, true);
Variaveis.OperacaoEmAndamento.DispMov.AdicionarMensagemFila(ProtocoloParada); Variaveis.OperacaoEmAndamento.DispMov.AdicionarMensagemFila(Variaveis.OperacaoEmAndamento.DispMov.Dados.Modulo_ID, ProtocoloParada);
} }
} }
} }

View File

@ -143,7 +143,7 @@ namespace AgroBase.Models.Operacoes
null; null;
foreach (var ProtocoloMotor in Protocolos) foreach (var ProtocoloMotor in Protocolos)
{ {
Dispositivo.AdicionarMensagemFila(ProtocoloMotor); //Dispositivo.AdicionarMensagemFila(ProtocoloMotor);
System.Threading.Thread.Sleep(10); System.Threading.Thread.Sleep(10);
} }

View File

@ -89,6 +89,7 @@ namespace AgroBase.Models
public ModoOperacao Modo { get; set; } public ModoOperacao Modo { get; set; }
public OperacaoMapaGPSModel OpMapaGPS { get; set; } = new OperacaoMapaGPSModel(); public OperacaoMapaGPSModel OpMapaGPS { get; set; } = new OperacaoMapaGPSModel();
public OperacaoManualModel OpManual { get; set; } = new OperacaoManualModel(); public OperacaoManualModel OpManual { get; set; } = new OperacaoManualModel();
public DispositivosService<MovimentacaoUnificadaModel> DispMvd { get; set; }
public DispositivosService<SensoriamentoModel> DispSen { get; set; } public DispositivosService<SensoriamentoModel> DispSen { get; set; }
public DispositivosService<MovimentacaoModel> DispMov { get; set; } public DispositivosService<MovimentacaoModel> DispMov { get; set; }
public DispositivosService<DirecionalModel> DispDir { get; set; } public DispositivosService<DirecionalModel> DispDir { get; set; }
@ -257,6 +258,8 @@ namespace AgroBase.Models
var DirConectado = (DispositivosService<DirecionalModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Dir); var DirConectado = (DispositivosService<DirecionalModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Dir);
var AtuConectado = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Atu); var AtuConectado = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Atu);
var MvdConectado = (DispositivosService<MovimentacaoUnificadaModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Mvd);
Variaveis.OperacaoEmAndamento.tmrLogs.Stop(); Variaveis.OperacaoEmAndamento.tmrLogs.Stop();
OperacaoModel OperacaoCarregar = new OperacaoModel(Modo) OperacaoModel OperacaoCarregar = new OperacaoModel(Modo)
@ -268,6 +271,7 @@ namespace AgroBase.Models
DispDir = DirConectado, DispDir = DirConectado,
DispMov = MovConectado, DispMov = MovConectado,
DispSen = SenConectado, DispSen = SenConectado,
DispMvd = MvdConectado,
Sensoriamento = new OperacaoSensoriamentoLogModel(), Sensoriamento = new OperacaoSensoriamentoLogModel(),
}; };
@ -300,13 +304,8 @@ namespace AgroBase.Models
{ {
new OperacaoModulosMandatoriosModel() new OperacaoModulosMandatoriosModel()
{ {
Dispositivo = T_Code.Mov, Dispositivo = T_Code.Mvd,
Mandatorio = false, Mandatorio = true,
},
new OperacaoModulosMandatoriosModel()
{
Dispositivo = T_Code.Dir,
Mandatorio = false,
}, },
}; };
OperacaoCarregar.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>() OperacaoCarregar.ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>()
@ -419,7 +418,7 @@ namespace AgroBase.Models
OperacaoCarregar.DispSen.Dados.Sinaleiros.First(x => x.ID == "LEDOP").Comportamento = Variaveis.ComportamentoPorStatus(); OperacaoCarregar.DispSen.Dados.Sinaleiros.First(x => x.ID == "LEDOP").Comportamento = Variaveis.ComportamentoPorStatus();
OperacaoCarregar.DispSen.Dados.Sinaleiros.ForEach(x => OperacaoCarregar.DispSen.AdicionarMensagemFila(x.ProtocoloComando())); OperacaoCarregar.DispSen.Dados.Sinaleiros.ForEach(x => OperacaoCarregar.DispSen.AdicionarMensagemFila(Variaveis.OperacaoEmAndamento.DispSen.Dados.Modulo_ID, x.ProtocoloComando()));
} }
@ -474,18 +473,10 @@ namespace AgroBase.Models
TempoAguardando = DateTime.Now; TempoAguardando = DateTime.Now;
TimestampFim = 0; TimestampFim = 0;
Mapa.IdxRuaAtual = 0; Mapa.IdxRuaAtual = 0;
if (DispMov != null) if (DispMvd != null)
{ {
DispMov.Dados.DistanciaPercorridaOperacao = 0; DispMvd.Dados.DistanciaPercorridaOperacao = 0;
DispMov.Dados.TempoEmAtividade = 0; DispMvd.Dados.TempoEmAtividade = 0;
}
if (DispDir != null)
{
DispDir.Dados.Motores.ForEach(x =>
{
x.Referenciado = false;
x.Referenciando = false;
});
} }
Sensoriamento.DistanciaPercorrida = new List<double>(); Sensoriamento.DistanciaPercorrida = new List<double>();
if (Modo == ModoOperacao.MapaGPS) if (Modo == ModoOperacao.MapaGPS)
@ -543,7 +534,7 @@ namespace AgroBase.Models
{ {
DispAtu.Dados.BombaPressurizadora.BombaAtuada = false; DispAtu.Dados.BombaPressurizadora.BombaAtuada = false;
string Protocolo = DispAtu.Dados.BombaPressurizadora.ProtocoloComando(); string Protocolo = DispAtu.Dados.BombaPressurizadora.ProtocoloComando();
DispAtu.AdicionarMensagemFila(Protocolo); DispAtu.AdicionarMensagemFila(DispAtu.Dados.Modulo_ID, Protocolo);
} }
Iniciado = false; Iniciado = false;
@ -566,7 +557,7 @@ namespace AgroBase.Models
{ {
DispAtu.Dados.BombaPressurizadora.BombaAtuada = true; DispAtu.Dados.BombaPressurizadora.BombaAtuada = true;
string Protocolo = DispAtu.Dados.BombaPressurizadora.ProtocoloComando(); string Protocolo = DispAtu.Dados.BombaPressurizadora.ProtocoloComando();
DispAtu.AdicionarMensagemFila(Protocolo); DispAtu.AdicionarMensagemFila(DispAtu.Dados.Modulo_ID, Protocolo);
} }
await Task.Delay(5000); await Task.Delay(5000);
@ -578,31 +569,17 @@ namespace AgroBase.Models
if (Bico.Inicializado) if (Bico.Inicializado)
{ {
Bico.Atuado = true; Bico.Atuado = true;
DispAtu.AdicionarMensagemFila(Bico.ProtocoloComando()); DispAtu.AdicionarMensagemFila(DispAtu.Dados.Modulo_ID, Bico.ProtocoloComando());
await Task.Delay(1000); await Task.Delay(1000);
Bico.Atuado = false; Bico.Atuado = false;
DispAtu.AdicionarMensagemFila(Bico.ProtocoloComando()); DispAtu.AdicionarMensagemFila(DispAtu.Dados.Modulo_ID, Bico.ProtocoloComando());
} }
} }
await Task.Delay(1000); await Task.Delay(1000);
} }
// Referenciar o direcional
if (DispDir != null)
{
foreach (var Motor in DispDir.Dados.Motores)
{
DispDir.AdicionarMensagemFila(Motor.ProtocoloComando(Direcao.Parado, true));
while (Motor.Referenciando)
{
await Task.Delay(500);
}
}
}
} }
@ -635,7 +612,7 @@ namespace AgroBase.Models
DistanciaPercorrida = new List<double>(Sensoriamento.DistanciaPercorrida), DistanciaPercorrida = new List<double>(Sensoriamento.DistanciaPercorrida),
PorcentagemBateria = Sensoriamento.PorcentagemBateria, PorcentagemBateria = Sensoriamento.PorcentagemBateria,
AnguloCarroBussola = Sensoriamento.AnguloCarroBussola, AnguloCarroBussola = Sensoriamento.AnguloCarroBussola,
TempoMovimento = DispMov.Dados.TempoEmAtividade, TempoMovimento = DispMvd.Dados.TempoEmAtividade,
StatusOperacao = _EtapaAtual, StatusOperacao = _EtapaAtual,
StatusCarro = OpMapaGPS.ReferencialRuaGPS.StatusAtual, StatusCarro = OpMapaGPS.ReferencialRuaGPS.StatusAtual,
ErvasIdentificadas = OpMapaGPS.Sensoriamento.AtuacoesPorBico.Sum(), ErvasIdentificadas = OpMapaGPS.Sensoriamento.AtuacoesPorBico.Sum(),
@ -669,41 +646,23 @@ namespace AgroBase.Models
}; };
SalvarLog(T_Code.Gps.ToString(), logGps, Fim); SalvarLog(T_Code.Gps.ToString(), logGps, Fim);
DispDir.Dados.Motores.ForEach(Motor => DispMvd.Dados.Modulos.ForEach(Modulo =>
{ {
DirSensoriamentoLogModel log = new DirSensoriamentoLogModel() MvdSensoriamentoLogModel log = new MvdSensoriamentoLogModel()
{
Momento = Agora,
ComponenteID = Motor.ID,
Inicializado = Motor.Inicializado,
Controlar = Motor.Controlar,
Angulo_SP = Motor.Angulo_SP,
Angulo = Motor.Angulo,
Sentido_SP = Motor.Sentido_SP,
Sentido = Motor.Sentido,
Velocidade = Motor.Velocidade,
};
SalvarLog(DispDir.Dispositivo.ToString(), log, false);
});
DispMov.Dados.Motores.ForEach(Motor =>
{
MovSensoriamentoLogModel log = new MovSensoriamentoLogModel()
{ {
Momento = Agora, Momento = Agora,
ComponenteID = Motor.ID, Modulo_ID = Modulo.MovMotor.ID,
Inicializado = Motor.Inicializado, Inicializado = Modulo.MovMotor.Inicializado,
Alarme = Motor.Alarme, RPM_SP = Modulo.MovMotor.RPM_SP,
RPM_SP = Motor.RPM_SP, RPM = Modulo.MovMotor.RPM,
RPM = Motor.RPM, Corrente = Modulo.MovMotor.Corrente,
Corrente = Motor.Corrente, Temperatura = Modulo.MovMotor.Temperatura,
Temperatura = Motor.Temperatura, Tensao = Modulo.MovMotor.Tensao,
Tensao = Motor.Tensao, Sentido_SP = Modulo.MovMotor.Sentido_SP,
Sentido_SP = Motor.Sentido_SP, Sentido = Modulo.MovMotor.Sentido,
Sentido = Motor.Sentido, Velocidade = Modulo.MovMotor.VelocidadeInstantanea,
Velocidade = Motor.VelocidadeInstantanea,
}; };
SalvarLog(DispMov.Dispositivo.ToString(), log, false); SalvarLog(DispMvd.Dispositivo.ToString(), log, false);
}); });
AtuSensoriamentoLogModel logAtu = new AtuSensoriamentoLogModel() AtuSensoriamentoLogModel logAtu = new AtuSensoriamentoLogModel()
@ -817,8 +776,8 @@ namespace AgroBase.Models
PercentualBateria = Math.Round(Sensoriamento.PorcentagemBateria, 2), PercentualBateria = Math.Round(Sensoriamento.PorcentagemBateria, 2),
PercentualReservatorio = Math.Round(DispAtu.Dados.PercentualReservatorio, 2), PercentualReservatorio = Math.Round(DispAtu.Dados.PercentualReservatorio, 2),
PressaoLinha = Math.Round(DispAtu.Dados.PressaoLinha, 2), PressaoLinha = Math.Round(DispAtu.Dados.PressaoLinha, 2),
Temperatura = Math.Round(DispMov.Dados.Motores.Average(x => x.Temperatura), 2), Temperatura = Math.Round(DispMvd.Dados.Modulos.Average(x => x.MovMotor.Temperatura), 2),
Velocidade = Math.Round(DispMov.Dados.Motores.Average(x => x.VelocidadeInstantanea), 2), Velocidade = Math.Round(DispMvd.Dados.Modulos.Average(x => x.MovMotor.VelocidadeInstantanea), 2),
} }
}; };
@ -913,7 +872,7 @@ namespace AgroBase.Models
DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDAT").Comportamento.statusLED = Modo == ModoOperacao.MapaGPS ? StatusLED.Aceso : StatusLED.Apagado; DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDAT").Comportamento.statusLED = Modo == ModoOperacao.MapaGPS ? StatusLED.Aceso : StatusLED.Apagado;
DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDMN").Comportamento.statusLED = Modo == ModoOperacao.Manual ? StatusLED.Aceso : StatusLED.Apagado; DispSen.Dados.Sinaleiros.FirstOrDefault(x => x.ID == "LEDMN").Comportamento.statusLED = Modo == ModoOperacao.Manual ? StatusLED.Aceso : StatusLED.Apagado;
DispSen.Dados.Sinaleiros.ForEach(x => DispSen.AdicionarMensagemFila(x.ProtocoloComando())); DispSen.Dados.Sinaleiros.ForEach(x => DispSen.AdicionarMensagemFila(DispSen.Dados.Modulo_ID, x.ProtocoloComando()));
} }
} }
@ -1029,7 +988,7 @@ namespace AgroBase.Models
{ {
get get
{ {
return Variaveis.OperacaoEmAndamento.DispMov.Dados.Motores.Average(x => x.VelocidadeInstantanea); return Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos.Average(x => x.MovMotor.VelocidadeInstantanea);
} }
} }
public double PorcentagemBateria { get; set; } = 0; public double PorcentagemBateria { get; set; } = 0;
@ -1197,4 +1156,20 @@ namespace AgroBase.Models
} }
public class MvdSensoriamentoLogModel
{
public DateTime Momento { get; set; }
public string Modulo_ID { get; set; }
public bool Inicializado { get; set; }
public double RPM_SP { get; set; }
public double RPM { get; set; }
public double Velocidade { get; set; }
public Sentido Sentido_SP { get; set; }
public Sentido Sentido { get; set; }
public double Temperatura { get; set; }
public double Corrente { get; set; }
public double Tensao { get; set; }
public int CodAlarme { get; set; }
}
} }

View File

@ -25,7 +25,7 @@ namespace AgroBase.Models
public static List<IDispositivosService> DispositivosConectados { get; set; } = new List<IDispositivosService>(); public static List<IDispositivosService> DispositivosConectados { get; set; } = new List<IDispositivosService>();
public static OperacaoModel OperacaoEmAndamento { get; set; } = new OperacaoModel(ModoOperacao.Manual); public static OperacaoModel OperacaoEmAndamento { get; set; } = new OperacaoModel(ModoOperacao.Manual);
public static MqttService MqttService { get; set; } = new MqttService("localhost", 1883); public static MqttService MqttService { get; set; } = new MqttService("localhost", 1883);
public static List<T_Code> DispositivosConexaoInicial = new List<T_Code>() { T_Code.Dir, T_Code.Mov, T_Code.Atu, T_Code.Sen }; public static List<T_Code> DispositivosConexaoInicial = new List<T_Code>() { T_Code.Mvd, T_Code.Atu, T_Code.Sen };
public static SensorSinaleiroComportamentoModel ComportamentoPorStatus(StatusOperacao? _status = null) public static SensorSinaleiroComportamentoModel ComportamentoPorStatus(StatusOperacao? _status = null)
{ {
if (_status == null) if (_status == null)
@ -120,6 +120,7 @@ namespace AgroBase.Models
public static class VariaveisEquipamento public static class VariaveisEquipamento
{ {
public static double Largura { get; } = 80; public static double Largura { get; } = 80;
public static double DiametroRoda { get; set; } = 0.3556;
public static double BateriaMax { get; set; } = 20; public static double BateriaMax { get; set; } = 20;
public static LoRaParametrosModel ComunicacaoLoRaBaseConfig { get; set; } = new LoRaParametrosModel() public static LoRaParametrosModel ComunicacaoLoRaBaseConfig { get; set; } = new LoRaParametrosModel()
{ {

View File

@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.IO.Ports; using System.IO.Ports;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using static AgroBase.Models.Enuns; using static AgroBase.Models.Enuns;
@ -33,7 +34,6 @@ namespace AgroBase.Comum
public Button btnAtualizar { get; set; } public Button btnAtualizar { get; set; }
public TextBox txtEnvios { get; set; } public TextBox txtEnvios { get; set; }
public RichTextBox txaConsole { get; set; } public RichTextBox txaConsole { get; set; }
public Timer tmrConexao { get; set; }
public int _index { get; set; } public int _index { get; set; }
public List<DispositivoLogModel> Logs { get; set; } = new List<DispositivoLogModel>(); public List<DispositivoLogModel> Logs { get; set; } = new List<DispositivoLogModel>();
public T Dados { get; set; } = new T(); public T Dados { get; set; } = new T();
@ -163,7 +163,18 @@ namespace AgroBase.Comum
LimparBufferSerial(false); LimparBufferSerial(false);
_Porta.Close(); Task.Run(() =>
{
try
{
_Porta.Close();
}
catch (Exception ex)
{
// Log ou trate a exceção conforme necessário
MessageBox.Show($"Erro ao fechar a porta serial: {ex.Message}");
}
});
lblStatus.Text = StatusPorta(); lblStatus.Text = StatusPorta();
@ -180,15 +191,7 @@ namespace AgroBase.Comum
{ {
if (!_Porta.IsOpen || string.IsNullOrEmpty(Dados)) if (!_Porta.IsOpen || string.IsNullOrEmpty(Dados))
{ {
//Console.WriteLine("Dados não enviados: " + Dados + " - Porta " + _Porta.PortName + " aberta " + _Porta.IsOpen); throw new Exception("A porta " + _Porta.PortName + " não está aberta");
if (FilaService.FeatureAtivada)
{
throw new Exception("A porta " + _Porta.PortName + " não está aberta");
}
else
{
return;
}
} }
AtualizarConsole("> " + DateTime.Now.ToString("HH:mm:ss:fff") + " - " + Dados); AtualizarConsole("> " + DateTime.Now.ToString("HH:mm:ss:fff") + " - " + Dados);
@ -211,11 +214,11 @@ namespace AgroBase.Comum
} }
} }
public void AdicionarMensagemFila(string Dados) public void AdicionarMensagemFila(string Mod_ID, string mensagem)
{ {
if (PortaCOM() != "") if (PortaCOM() != "")
{ {
FilaService.AdicionarMensagemFila(Dispositivo, Dados); FilaService.AdicionarMensagemFila(Mod_ID, Dispositivo, mensagem);
} }
} }
@ -251,6 +254,11 @@ namespace AgroBase.Comum
AtuadorModel.Pinout = PinoutModel.CarregarPinout(Variaveis.CaminhoParametros + "pinout" + Enum.GetName(typeof(T_Code), Dispositivo) + ".pin"); AtuadorModel.Pinout = PinoutModel.CarregarPinout(Variaveis.CaminhoParametros + "pinout" + Enum.GetName(typeof(T_Code), Dispositivo) + ".pin");
break; break;
case T_Code.Mvd:
Dados = CarregarParametros(MovimentacaoUnificadaModel.CarregarParametrosIniciais());
ModuloMvdModel.Pinout = PinoutModel.CarregarPinout(Variaveis.CaminhoParametros + "pinout" + Enum.GetName(typeof(T_Code), Dispositivo) + ".pin");
break;
default: default:
Dados = default(T); Dados = default(T);
break; break;
@ -412,6 +420,17 @@ namespace AgroBase.Comum
clbDispositivos.SetItemChecked(clbDispositivos.Items.Count - 1, Sensor.Aferir); clbDispositivos.SetItemChecked(clbDispositivos.Items.Count - 1, Sensor.Aferir);
} }
} }
else if (Dados is MovimentacaoUnificadaModel mvdModel && Dispositivo == T_Code.Mvd)
{
clbDispositivos.Items.Clear();
foreach (var modulo in mvdModel.Modulos)
{
clbDispositivos.Items.Add(modulo.Modulo_ID + " " + modulo.MovMotor.ID.ToString());
clbDispositivos.SetItemChecked(clbDispositivos.Items.Count - 1, modulo.MovMotor.Comandar);
clbDispositivos.Items.Add(modulo.Modulo_ID + " " + modulo.DirMotor.ID.ToString());
clbDispositivos.SetItemChecked(clbDispositivos.Items.Count - 1, modulo.DirMotor.Comandar);
}
}
clbDispositivos.ItemCheck -= clbDispositivos_ItemCheck; clbDispositivos.ItemCheck -= clbDispositivos_ItemCheck;
clbDispositivos.ItemCheck += clbDispositivos_ItemCheck; clbDispositivos.ItemCheck += clbDispositivos_ItemCheck;
@ -456,13 +475,6 @@ namespace AgroBase.Comum
Size = new System.Drawing.Size() { Height = 141, Width = 300 }, Size = new System.Drawing.Size() { Height = 141, Width = 300 },
ReadOnly = true ReadOnly = true
}; };
tmrConexao = new Timer()
{
Interval = 1000,
Enabled = false
};
tmrConexao.Tick -= TmrConexao_Tick;
tmrConexao.Tick += TmrConexao_Tick;
tmrLimpeza = new Timer() tmrLimpeza = new Timer()
{ {
Interval = 1000, Interval = 1000,
@ -549,16 +561,6 @@ namespace AgroBase.Comum
} }
} }
private void TmrConexao_Tick(object sender, EventArgs e)
{
if (!FilaService.ExistemMensagensPendentesEnvio(Dispositivo) && Dados.MensagemConexaoRecebida())
{
AcaoConexao();
Dados.MensagemConexaoRecebida(true);
tmrConexao.Enabled = false;
}
}
private void TmrLimpeza_Tick(object sender, EventArgs e) private void TmrLimpeza_Tick(object sender, EventArgs e)
{ {
if (Ticks % 5 == 0) if (Ticks % 5 == 0)
@ -669,10 +671,31 @@ namespace AgroBase.Comum
} }
} }
break; break;
case T_Code.Mvd:
if (Dados is MovimentacaoUnificadaModel mvdModel)
{
mvdModel.Modulos.ForEach(x =>
{
x.MovMotor.Comandar = false;
x.DirMotor.Comandar = false;
});
foreach (var Item in ((CheckedListBox)sender).CheckedItems)
{
if (mvdModel.Modulos.Any(x => (x.Modulo_ID + " " + x.MovMotor.ID) == Item.ToString()))
{
mvdModel.Modulos.FirstOrDefault(x => x.Modulo_ID == Item.ToString().Split(' ')[0] && x.MovMotor.ID == Item.ToString().Split(' ')[1]).MovMotor.Comandar = true;
}
else if (mvdModel.Modulos.Any(x => (x.Modulo_ID + " " + x.DirMotor.ID) == Item.ToString()))
{
mvdModel.Modulos.FirstOrDefault(x => x.Modulo_ID == Item.ToString().Split(' ')[0] && x.DirMotor.ID == Item.ToString().Split(' ')[1]).DirMotor.Comandar = true;
}
}
}
break;
} }
var Config = Dados.ProtocoloConfiguracao(true); var Config = Dados.ProtocoloConfiguracao(true);
frmInstancial.frmPrincipal.lblStripErro.Text = Config[Config.Count - 1]; frmInstancial.frmPrincipal.lblStripErro.Text = Config.Any() ? Config.FirstOrDefault().Value.FirstOrDefault() : "";
} }
private void nudAmostragem_ValueChanged(object sender, EventArgs e) private void nudAmostragem_ValueChanged(object sender, EventArgs e)
@ -710,7 +733,9 @@ namespace AgroBase.Comum
{ {
if (e.KeyCode == Keys.Enter && txtEnvios.Text != "") if (e.KeyCode == Keys.Enter && txtEnvios.Text != "")
{ {
AdicionarMensagemFila(txtEnvios.Text); string modId = txtEnvios.Text.Split('¬')[0];
string mensagem = txtEnvios.Text.Split('¬')[1];
AdicionarMensagemFila(modId, mensagem);
txtEnvios.Text = ""; txtEnvios.Text = "";
txtEnvios.Focus(); txtEnvios.Focus();
} }
@ -738,22 +763,21 @@ namespace AgroBase.Comum
return; return;
} }
if (Dispositivo == T_Code.Vzo) string mensagem = "";
{
Dispositivo = (T_Code)(int.Parse(Recebido.Substring(0, 3)));
lblStatus.Invoke((Action)(() => lblStatus.Text = StatusPorta() + " - " + Enum.GetName(typeof(T_Code), Dispositivo)));
}
if (FilaService.FeatureAtivada) if (Recebido.Contains(SerialService.SplitMessage))
{ {
if (Recebido.Length >= 3 && int.TryParse(Recebido.Substring(0, 3), out int val)) string Mod_ID = Recebido.Split(SerialService.SplitMessage[0])[0];
mensagem = Recebido.Substring(Mod_ID.Length + 1, Recebido.Length - Mod_ID.Length - 1);
if (mensagem.Length >= 3 && int.TryParse(mensagem.Substring(0, 3), out int val))
{ {
F_Code funcao = (F_Code)(val); F_Code funcao = (F_Code)(val);
if (funcao == F_Code.Msg) if (funcao == F_Code.Msg)
{ {
try try
{ {
int _id = int.Parse(Recebido.Split(';')[1]); int _id = int.Parse(mensagem.Split(SerialService.SplitParams[0])[1]);
FilaService.MarcarMensagemRecebida(_id); FilaService.MarcarMensagemRecebida(_id);
} }
catch catch
@ -773,7 +797,7 @@ namespace AgroBase.Comum
AtualizarConsole("< " + DateTime.Now.ToString("HH:mm:ss:fff") + " - " + Recebido); AtualizarConsole("< " + DateTime.Now.ToString("HH:mm:ss:fff") + " - " + Recebido);
if (Recebido[0].ToString() == SerialService.BeginSensor && !EqualityComparer<T>.Default.Equals(Dados, default(T))) if (mensagem != "" && mensagem[0].ToString() == SerialService.BeginSensor && !EqualityComparer<T>.Default.Equals(Dados, default(T)))
{ {
Dados.RecebeProtocoloSerial(Recebido); Dados.RecebeProtocoloSerial(Recebido);
} }
@ -781,7 +805,7 @@ namespace AgroBase.Comum
public void btnConectar_Click(object sender, EventArgs e) public void btnConectar_Click(object sender, EventArgs e)
{ {
List<string> Config = new List<string>(); var Config = new Dictionary<string, List<string>>();
if (_Porta.IsOpen) if (_Porta.IsOpen)
{ {
@ -790,10 +814,9 @@ namespace AgroBase.Comum
Config = Dados.ProtocoloConfiguracao(false); Config = Dados.ProtocoloConfiguracao(false);
foreach (var ProtocoloConfiguracao in Config) foreach (var ProtocoloConfiguracao in Config)
{ {
if (ProtocoloConfiguracao != "") if (ProtocoloConfiguracao.Key != "" && ProtocoloConfiguracao.Value.Any())
{ {
AdicionarMensagemFila(ProtocoloConfiguracao); ProtocoloConfiguracao.Value.ForEach(x => AdicionarMensagemFila(ProtocoloConfiguracao.Key, x));
//System.Threading.Thread.Sleep(100);
} }
} }
} }
@ -806,20 +829,24 @@ namespace AgroBase.Comum
Config = Dados.ProtocoloConfiguracao(true); Config = Dados.ProtocoloConfiguracao(true);
foreach (var ProtocoloConfiguracao in Config) foreach (var ProtocoloConfiguracao in Config)
{ {
if (ProtocoloConfiguracao != "") if (ProtocoloConfiguracao.Key != "" && ProtocoloConfiguracao.Value.Any())
{ {
AdicionarMensagemFila(ProtocoloConfiguracao); ProtocoloConfiguracao.Value.ForEach(x => AdicionarMensagemFila(ProtocoloConfiguracao.Key, x));
//System.Threading.Thread.Sleep(100);
} }
} }
} }
} }
GeneralJoystick.AtualizaDispositivo(); GeneralJoystick.AtualizaDispositivo();
tmrConexao.Enabled = true; //tmrConexao.Enabled = true;
} }
public void AcaoConexao() public async Task AcaoConexao()
{ {
while (FilaService.ExistemMensagensPendentesEnvio(Dispositivo) || FilaService.ExistemMensagensPendentesResposta(Dispositivo))
{
await Task.Delay(300);
}
if (!Dados.GetStatusConexao()) if (!Dados.GetStatusConexao())
{ {
if (DesconectarPortaSerial()) if (DesconectarPortaSerial())
@ -835,30 +862,49 @@ namespace AgroBase.Comum
public void AcaoDesconectar() public void AcaoDesconectar()
{ {
cmbPorta.Enabled = true; // Verifica se a invocação é necessária
cmbBaudRate.Enabled = true; if (cmbPorta.InvokeRequired)
btnAtualizar.Enabled = true; {
nudAmostragem.Enabled = true; // Invoca a ação na thread de UI
txtEnvios.ReadOnly = true; cmbPorta.Invoke(new Action(AcaoDesconectar));
txtEnvios.Text = ""; }
btnConectar.Text = "Conectar"; else
{
// Código que altera as propriedades dos componentes
cmbPorta.Enabled = true;
cmbBaudRate.Enabled = true;
btnAtualizar.Enabled = true;
nudAmostragem.Enabled = true;
txtEnvios.ReadOnly = true;
txtEnvios.Text = "";
btnConectar.Text = "Conectar";
tmrLimpeza.Enabled = false; tmrLimpeza.Enabled = false;
SalvarLog(); SalvarLog();
}
} }
public void AcaoConectar() public void AcaoConectar()
{ {
cmbPorta.Enabled = false; // Verifica se a invocação é necessária
cmbBaudRate.Enabled = false; if (cmbPorta.InvokeRequired)
btnAtualizar.Enabled = false; {
nudAmostragem.Enabled = false; // Invoca a ação na thread de UI
txtEnvios.ReadOnly = false; cmbPorta.Invoke(new Action(AcaoConectar));
txtEnvios.Text = ""; }
btnConectar.Text = "Desconectar"; else
{
tmrLimpeza.Enabled = true; // Código que altera as propriedades dos componentes
cmbPorta.Enabled = false;
cmbBaudRate.Enabled = false;
btnAtualizar.Enabled = false;
nudAmostragem.Enabled = false;
txtEnvios.ReadOnly = false;
txtEnvios.Text = "";
btnConectar.Text = "Desconectar";
tmrLimpeza.Enabled = true;
}
} }
private void btnAtualizar_Click(object sender, EventArgs e) private void btnAtualizar_Click(object sender, EventArgs e)
@ -882,7 +928,7 @@ namespace AgroBase.Comum
} }
public T CarregarParametros(object empty) public T CarregarParametros(dynamic empty)
{ {
string nomeArquivo = Variaveis.CaminhoParametros + "parameters" + Enum.GetName(typeof(T_Code), Dispositivo) + ".par"; string nomeArquivo = Variaveis.CaminhoParametros + "parameters" + Enum.GetName(typeof(T_Code), Dispositivo) + ".par";
if (!File.Exists(nomeArquivo)) if (!File.Exists(nomeArquivo))

View File

@ -53,6 +53,15 @@ namespace AgroBase.Services
_Porta = porta, _Porta = porta,
_CriadoEm = DateTime.Now, _CriadoEm = DateTime.Now,
}; };
case T_Code.Mvd:
return new DispositivosService<MovimentacaoUnificadaModel>
{
Dispositivo = tipoDispositivo,
_Nome = nome,
_Descricao = descricao,
_Porta = porta,
_CriadoEm = DateTime.Now,
};
default: default:
throw new ArgumentException("Tipo de dispositivo não reconhecido."); throw new ArgumentException("Tipo de dispositivo não reconhecido.");
} }

View File

@ -12,7 +12,6 @@ namespace AgroBase.Services
public class FilaService public class FilaService
{ {
private static List<MensagemFilaModel> MensagensFila; private static List<MensagemFilaModel> MensagensFila;
public static bool FeatureAtivada = false;
public static bool Liberado public static bool Liberado
{ {
get get
@ -22,23 +21,22 @@ namespace AgroBase.Services
} }
public static void Inicializar(bool Ativado) public static void Inicializar()
{ {
MensagensFila = new List<MensagemFilaModel>(); MensagensFila = new List<MensagemFilaModel>();
EnviarMensagensLoop().ConfigureAwait(false); EnviarMensagensLoop().ConfigureAwait(false);
FeatureAtivada = Ativado;
} }
public static void AdicionarMensagemFila(T_Code Dispositivo, string Mensagem) public static void AdicionarMensagemFila(string Modulo_ID, T_Code Dispositivo, string Mensagem)
{ {
if (Mensagem != "") if (Mensagem != "")
{ {
MensagensFila.Add(new MensagemFilaModel() MensagensFila.Add(new MensagemFilaModel()
{ {
Id = MensagensFila.Count + 1, Id = MensagensFila.Count + 1,
ID_Modulo = Modulo_ID,
Dispositivo = Dispositivo, Dispositivo = Dispositivo,
Mensagem = Mensagem, Mensagem = Mensagem,
AdicionadoEm = DateTime.Now, AdicionadoEm = DateTime.Now,
@ -82,34 +80,24 @@ namespace AgroBase.Services
var Dispositivo = Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Mensagem.Dispositivo); var Dispositivo = Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Mensagem.Dispositivo);
if (Dispositivo != null) if (Dispositivo != null)
{ {
if (FeatureAtivada) try
{
try
{
Dispositivo.EnviarDadosSerial(
SerialService.BeginLine +
Mensagem.Id +
SerialService.SplitMessage +
Mensagem.Mensagem +
SerialService.EndLine
);
return true;
}
catch (Exception ex)
{
Console.WriteLine("Erro ao enviar mensagem para o dispositivo " + Dispositivo.Dispositivo.ToString() + " - " + ex.Message);
return false;
}
}
else
{ {
Dispositivo.EnviarDadosSerial( Dispositivo.EnviarDadosSerial(
Mensagem.Mensagem + SerialService.BeginLine +
Mensagem.Id +
SerialService.SplitMessage +
Mensagem.ID_Modulo +
SerialService.SplitMessage +
Mensagem.Mensagem +
SerialService.EndLine SerialService.EndLine
); );
MarcarMensagemRecebida(Mensagem.Id);
return true; return true;
} }
catch (Exception ex)
{
Console.WriteLine("Erro ao enviar mensagem para o dispositivo " + Dispositivo.Dispositivo.ToString() + " - " + ex.Message);
return false;
}
} }
else else
{ {
@ -122,6 +110,11 @@ namespace AgroBase.Services
return MensagensFila.Any(x => x.Dispositivo == Dispositivo && !x.Enviado); return MensagensFila.Any(x => x.Dispositivo == Dispositivo && !x.Enviado);
} }
public static bool ExistemMensagensPendentesResposta(T_Code Dispositivo)
{
return MensagensFila.Any(x => x.Dispositivo == Dispositivo && x.Enviado && !x.Recebido);
}
private static bool FilaLiberada(T_Code Dispositivo) private static bool FilaLiberada(T_Code Dispositivo)
{ {
// Consulta mensagens do dispositivo // Consulta mensagens do dispositivo

View File

@ -28,7 +28,7 @@ namespace AgroBase.Services
void AcaoDesconectar(); void AcaoDesconectar();
void SalvarParametros(DispositivoBaseModel dados); void SalvarParametros(DispositivoBaseModel dados);
void LimparBufferSerial(bool LimparConsole); void LimparBufferSerial(bool LimparConsole);
void AdicionarMensagemFila(string Protocolo); void AdicionarMensagemFila(string Mod_ID, string Protocolo);
void EnviarDadosSerial(string Protocolo); void EnviarDadosSerial(string Protocolo);
void btnConectar_Click(object sender, EventArgs e); void btnConectar_Click(object sender, EventArgs e);
} }

View File

@ -21,7 +21,6 @@ namespace AgroBase.Services
public static string BeginSensor = "#"; public static string BeginSensor = "#";
public static string SplitMessage = ";"; public static string SplitMessage = ";";
public static string SplitParams = ","; public static string SplitParams = ",";
public static string ProtocoloCheck = BeginLine + SplitMessage + 0 + SplitMessage + ((int)F_Code.Chk).ToString() + SplitMessage + "check" + EndLine;
public static List<T_Code> DispositivosMotores = new List<T_Code>() { T_Code.Mov, T_Code.Dir }; public static List<T_Code> DispositivosMotores = new List<T_Code>() { T_Code.Mov, T_Code.Dir };
public class DispositivoDetalhesModel public class DispositivoDetalhesModel
@ -30,12 +29,10 @@ namespace AgroBase.Services
public T_Code Dispositivo { get; set; } public T_Code Dispositivo { get; set; }
public bool Erro { get; set; } public bool Erro { get; set; }
public int Versao { get; set; } public int Versao { get; set; }
public string Mod_ID { get; set; }
} }
public static List<DispositivoDetalhesModel> DispositivosMapeados = new List<DispositivoDetalhesModel>(); public static List<DispositivoDetalhesModel> DispositivosMapeados = new List<DispositivoDetalhesModel>();
public static List<SerialPort> PortasAguardandoResposta = new List<SerialPort>();
public static List<SerialPort> PortasComErro = new List<SerialPort>();
public static List<SerialPort> PortasDesconhecidas = new List<SerialPort>();
private static Dictionary<string, int> TentativasPortas = new Dictionary<string, int>(); private static Dictionary<string, int> TentativasPortas = new Dictionary<string, int>();
private static bool VarreduraEmAndamento = false; private static bool VarreduraEmAndamento = false;
@ -49,60 +46,66 @@ namespace AgroBase.Services
VarreduraEmAndamento = true; VarreduraEmAndamento = true;
PortasAguardandoResposta.ForEach(Porta =>
{
PortasComErro.Add(Porta);
});
await ProcessarPortasComErroAsync();
var dispositivosMapeados = DispositivosMapeados.ToList(); var dispositivosMapeados = DispositivosMapeados.ToList();
var Portas = SerialPort.GetPortNames(); var Portas = SerialPort.GetPortNames();
var PortasNaoMapeadas = Portas.Where(x => !dispositivosMapeados.Select(y => y.PortaCOM).Contains(x) && !PortasComErro.Select(y => y.PortName).Contains(x) && !PortasDesconhecidas.Select(y => y.PortName).Contains(x)).ToList(); var PortasNaoMapeadas = Portas.Where(x => !dispositivosMapeados.Select(y => y.PortaCOM).Contains(x)).ToList();
for (int i = 0; i < PortasNaoMapeadas.Count(); i++) for (int i = 0; i < PortasNaoMapeadas.Count(); i++)
{ {
string PortaCom = PortasNaoMapeadas[i].ToString(); string PortaCom = PortasNaoMapeadas[i].ToString();
SerialPort _Porta = new SerialPort() { PortName = PortaCom, BaudRate = 115200 }; SerialPort _Porta = new SerialPort() { PortName = PortaCom, BaudRate = 115200 };
_Porta.DataReceived -= _Porta_DataReceived;
_Porta.DataReceived += _Porta_DataReceived; bool PortaDispositivoProprio = false;
string CodigoTest = ProtocoloCheck;
try try
{ {
_Porta.Open(); _Porta.Open();
_Porta.Write(CodigoTest);
PortasAguardandoResposta.Add(_Porta); foreach (var Modulo in Variaveis.OperacaoEmAndamento.DispMvd.Dados.Modulos)
{
string ProtocoloCheck =
BeginLine +
0 + SplitMessage +
Modulo.Modulo_ID + SplitMessage +
((int)F_Code.Chk).ToString() + SplitMessage +
"check" +
EndLine;
_Porta.Write(ProtocoloCheck);
await Task.Delay(1000);
PortaDispositivoProprio = ProcessarRespostaDispositivo(_Porta);
if (!PortaDispositivoProprio)
{
break;
}
};
} }
catch (Exception ex) catch (Exception ex)
{ {
_Porta.Close();
Console.WriteLine(ex.Message.ToString()); Console.WriteLine(ex.Message.ToString());
PortasComErro.Add(_Porta);
} }
finally
{
_Porta.Close();
}
if (!PortaDispositivoProprio)
{
await TentarIdentificarDispositivo(_Porta);
}
} }
var DispositivosRemovidos = dispositivosMapeados.Where(x => !Portas.Contains(x.PortaCOM)).ToList(); var DispositivosRemovidos = dispositivosMapeados.Where(x => !Portas.Contains(x.PortaCOM)).ToList();
foreach (var Dispositivo in DispositivosRemovidos) foreach (var Dispositivo in DispositivosRemovidos)
{ {
DispositivosMapeados.Remove(Dispositivo); DispositivosMapeados.Remove(Dispositivo);
} }
Portas = SerialPort.GetPortNames();
PortasDesconhecidas.ForEach(x =>
{
if (!Portas.Contains(x.PortName))
{
PortasDesconhecidas.Remove(x);
}
});
PortasComErro.ForEach(x =>
{
if (!Portas.Contains(x.PortName))
{
PortasComErro.Remove(x);
}
});
if (!Variaveis.CaminhoSistema.Contains("AgroMonitor")) if (!Variaveis.CaminhoSistema.Contains("AgroMonitor"))
{ {
AtualizarDispositivos(); AtualizarDispositivos();
@ -111,6 +114,64 @@ namespace AgroBase.Services
VarreduraEmAndamento = false; VarreduraEmAndamento = false;
} }
private static bool ProcessarRespostaDispositivo(SerialPort Porta)
{
string Recebido = Porta.ReadLine();
if (Recebido.Length > 2)
{
if (Recebido.Contains("$GPTXT"))
{
GPSService.AtualizarPortaCOM(Porta);
return false;
}
T_Code Dispositivo = T_Code.Vzo;
F_Code Verificacao = F_Code.Nda;
int Versao = 0;
var Dados = Recebido.Split(';');
string Mod_ID = Dados[0];
int code = 0;
int.TryParse(Dados[1], out code);
if (code == 0)
{
return false;
}
if ((F_Code)code == F_Code.Msg)
{
return true;
}
Dispositivo = (T_Code)(int.Parse(Dados[1]));
int.TryParse(Dados[2], out int check);
Verificacao = (F_Code)check;
int.TryParse(Dados[3], out int versao);
Versao = versao;
if (Dispositivo != T_Code.Vzo && !DispositivosMapeados.Any(x => x.Dispositivo == Dispositivo && x.Mod_ID == Mod_ID))
{
DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
PortaCOM = Porta.PortName,
Dispositivo = Dispositivo,
Erro = Verificacao == F_Code.Err,
Versao = Versao,
Mod_ID = Mod_ID,
});
}
return true;
}
return false;
}
public static void AtualizarDispositivos() public static void AtualizarDispositivos()
{ {
Variaveis.DispositivosConexaoInicial.ForEach(Dispositivo => Variaveis.DispositivosConexaoInicial.ForEach(Dispositivo =>
@ -145,7 +206,7 @@ namespace AgroBase.Services
dispositivoService = DispositivosServiceFactory.CreateDispositivoService( dispositivoService = DispositivosServiceFactory.CreateDispositivoService(
Dispositivo, Dispositivo,
"Nome: " + Enum.GetName(typeof(T_Code), Dispositivo), "Nome: " + Enum.GetName(typeof(T_Code), Dispositivo),
"Descrição: " + Enum.GetName(typeof(T_Code), Dispositivo), "Descrição: " + string.Join(", ", DispositivosMapeados.Where(x => x.Dispositivo == Dispositivo).Select(x => x.Mod_ID).ToArray()),
new SerialPort() new SerialPort()
); );
Variaveis.DispositivosConectados.Add(dispositivoService); Variaveis.DispositivosConectados.Add(dispositivoService);
@ -169,90 +230,6 @@ namespace AgroBase.Services
}); });
} }
private static void _Porta_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var Porta = ((SerialPort)sender);
try
{
string Recebido = Porta.ReadLine();
if (Recebido.Length > 2)
{
if (Recebido.Contains("$GPTXT"))
{
GPSService.AtualizarPortaCOM(Porta);
return;
}
T_Code Dispositivo = T_Code.Vzo;
F_Code Verificacao = F_Code.Nda;
int Versao = 0;
var Dados = Recebido.Split(';');
int code = 0;
int.TryParse(Dados[0], out code);
if (code == 0)
{
//Porta.Close();
return;
}
if ((F_Code)code == F_Code.Msg)
{
return;
}
Dispositivo = (T_Code)(int.Parse(Dados[0]));
int.TryParse(Dados[1], out int check);
Verificacao = (F_Code)check;
int.TryParse(Dados[2], out int versao);
Versao = versao;
if (Dispositivo != T_Code.Vzo)
{
DispositivosMapeados.Add(new DispositivoDetalhesModel()
{
PortaCOM = Porta.PortName,
Dispositivo = Dispositivo,
Erro = Verificacao == F_Code.Err,
Versao = Versao,
});
}
Porta.Close();
PortasAguardandoResposta.Remove(Porta);
}
}
catch (Exception ex)
{
Console.WriteLine("Erro ao receber dados da porta " + Porta.PortName);
}
}
private static async Task ProcessarPortasComErroAsync()
{
List<SerialPort> PortasSucesso = new List<SerialPort>();
foreach (var Porta in PortasComErro)
{
Porta.DataReceived -= _Porta_DataReceived;
PortasAguardandoResposta.Remove(Porta);
Porta.Close();
SerialPort porta = new SerialPort() { PortName = Porta.PortName };
bool encontrada = await TentarIdentificarDispositivo(porta);
if (encontrada)
{
PortasSucesso.Add(Porta);
}
}
PortasSucesso.ForEach(x => PortasComErro.Remove(x));
PortasDesconhecidas.ForEach(x => PortasComErro.Remove(x));
}
private static async Task<bool> TentarIdentificarDispositivo(SerialPort porta) private static async Task<bool> TentarIdentificarDispositivo(SerialPort porta)
{ {
// Método para tentar identificar dispositivos que não respondem ao comando de verificação padrão // Método para tentar identificar dispositivos que não respondem ao comando de verificação padrão

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

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

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

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-06-07T10:19:00.7567428-03:00","Protocolo":"@1;ET;258;Mov,1,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:19:02.8986621-03:00","Protocolo":"ET;655,1,$\r","Enviado":false},{"Momento":"2024-06-07T10:19:02.899659-03:00","Protocolo":"@2;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:19:02.9192525-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:19:03.0296029-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T10:19:11.643249-03:00","Protocolo":"@3;ET;258;Mov,0,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:19:11.643249-03:00","Protocolo":"ET;655,3,$\r","Enviado":false},{"Momento":"2024-06-07T10:19:11.6716499-03:00","Protocolo":"@4;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:19:11.6909813-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:19:11.8015245-03:00","Protocolo":"ET;655,4,$\r","Enviado":false},{"Momento":"2024-06-07T10:19:11.8101444-03:00","Protocolo":"@2;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:19:11.8289208-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:19:11.9393706-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T10:19:21.5438894-03:00","Protocolo":"@5;ET;258;Mov,0,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:19:21.5494348-03:00","Protocolo":"ET;655,5,$\r","Enviado":false},{"Momento":"2024-06-07T10:19:21.5576103-03:00","Protocolo":"@6;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:19:21.5761178-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:19:21.6863065-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T10:19:22.5660101-03:00","Protocolo":"@2;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:19:22.5855793-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:19:22.6963176-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T10:19:23.5784944-03:00","Protocolo":"@6;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:19:23.5979611-03:00","Protocolo":"ET;655,2,$\r","Enviado":false},{"Momento":"2024-06-07T10:19:23.7081852-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:20:30.458566-03:00","Protocolo":"ET;655,7,$\r","Enviado":false},{"Momento":"2024-06-07T10:20:30.4595631-03:00","Protocolo":"@7;ET;258;Mov,0,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:20:30.5085453-03:00","Protocolo":"@8;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:20:30.5266812-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:20:30.637599-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T10:20:31.5164541-03:00","Protocolo":"@6;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:20:31.5352411-03:00","Protocolo":"ET;655,8,$\r","Enviado":false},{"Momento":"2024-06-07T10:20:31.6454978-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:23:10.3637392-03:00","Protocolo":"@9;ET;258;Mov,1,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:23:10.3657426-03:00","Protocolo":"ET;655,9,$\r","Enviado":false},{"Momento":"2024-06-07T10:23:10.3946572-03:00","Protocolo":"@10;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:23:10.3981422-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:23:10.5093541-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T10:23:11.4173492-03:00","Protocolo":"@6;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:23:11.4337655-03:00","Protocolo":"ET;655,10,$\r","Enviado":false},{"Momento":"2024-06-07T10:23:11.5452119-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-06-07T10:29:21.9414866-03:00","Protocolo":"@1;ET;258;Mov,0,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:29:21.9449644-03:00","Protocolo":"ET;655,1,$\r","Enviado":false},{"Momento":"2024-06-07T10:29:21.9777686-03:00","Protocolo":"@2;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:29:21.9891662-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T10:29:22.0950311-03:00","Protocolo":"ET;655,2,$\r","Enviado":false},{"Momento":"2024-06-07T10:29:44.1110057-03:00","Protocolo":"@3;ET;258;Mov,1,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:29:44.1120411-03:00","Protocolo":"ET;655,3,$\r","Enviado":false},{"Momento":"2024-06-07T10:29:44.1327763-03:00","Protocolo":"@4;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:29:44.1425888-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:29:44.2537742-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T10:29:52.7409467-03:00","Protocolo":"@5;ET;258;Mov,0,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:29:52.7468069-03:00","Protocolo":"ET;655,5,$\r","Enviado":false},{"Momento":"2024-06-07T10:29:52.776594-03:00","Protocolo":"@6;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:29:52.7944984-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T10:29:52.9041746-03:00","Protocolo":"ET;655,6,$\r","Enviado":false},{"Momento":"2024-06-07T10:29:52.9081855-03:00","Protocolo":"@4;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:29:52.9191028-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:29:53.0309257-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T10:29:58.4935761-03:00","Protocolo":"@7;ET;258;Mov,0,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:29:58.4990416-03:00","Protocolo":"ET;655,7,$\r","Enviado":false},{"Momento":"2024-06-07T10:29:58.5201786-03:00","Protocolo":"@8;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:29:58.537846-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T10:29:58.6480533-03:00","Protocolo":"ET;655,8,$\r","Enviado":false},{"Momento":"2024-06-07T10:29:58.6566895-03:00","Protocolo":"@4;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:29:58.6656008-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:29:58.7759516-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T10:32:46.8941913-03:00","Protocolo":"@9;ET;258;Mov,0,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:32:49.0580319-03:00","Protocolo":"@10;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:32:52.9087459-03:00","Protocolo":"ET;655,9,$\r","Enviado":false},{"Momento":"2024-06-07T10:32:56.9898814-03:00","Protocolo":"@4;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:33:06.6620787-03:00","Protocolo":"@10;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:33:09.1966239-03:00","Protocolo":"@4;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:33:09.2196141-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-06-07T13:41:07.0939406-03:00","Protocolo":"@1;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:41:07.1033709-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:41:07.1043795-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T13:41:10.0161009-03:00","Protocolo":"@2;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:41:10.0299322-03:00","Protocolo":"ET;655,1,$\r","Enviado":false},{"Momento":"2024-06-07T13:41:10.5725141-03:00","Protocolo":"ET;Mov Iniciado\r","Enviado":false},{"Momento":"2024-06-07T13:41:10.5837098-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T13:41:11.0938485-03:00","Protocolo":"ET;655,2,$\r","Enviado":false},{"Momento":"2024-06-07T13:41:11.9651559-03:00","Protocolo":"ET;#544;Mov;0.00;1485.50;16927.93;16810.32;0;0;0;0;16869.83$\r","Enviado":false},{"Momento":"2024-06-07T13:41:13.3697428-03:00","Protocolo":"ET;#544;Mov;0.00;2805.49;16927.93;16810.32;0;0;0;0;16870.93$\r","Enviado":false},{"Momento":"2024-06-07T13:41:14.6512034-03:00","Protocolo":"@3;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:41:14.6670435-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false}

View File

@ -0,0 +1 @@
[{"Momento":"2024-06-07T13:44:02.8094408-03:00","Protocolo":"@1;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:44:02.819613-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:44:02.819613-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T13:44:02.9308586-03:00","Protocolo":"ET;655,1,$\r","Enviado":false},{"Momento":"2024-06-07T13:44:02.9593175-03:00","Protocolo":"@2;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:44:02.9666583-03:00","Protocolo":"ET;Mov ja inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:44:02.977334-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T13:44:03.4884299-03:00","Protocolo":"ET;655,2,$\r","Enviado":false},{"Momento":"2024-06-07T13:44:09.7527294-03:00","Protocolo":"@3;ET;258;Mov,0,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:44:09.7591174-03:00","Protocolo":"ET;Mov Desligado\r","Enviado":false},{"Momento":"2024-06-07T13:44:09.7704566-03:00","Protocolo":"ET;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-06-07T13:44:10.2809432-03:00","Protocolo":"ET;655,3,$\r","Enviado":false},{"Momento":"2024-06-07T13:44:10.2962733-03:00","Protocolo":"@4;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:44:10.3129782-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T13:44:15.7959636-03:00","Protocolo":"@5;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:44:15.8048394-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:44:15.806829-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T13:44:15.9166935-03:00","Protocolo":"ET;655,5,$\r","Enviado":false},{"Momento":"2024-06-07T13:44:15.9289522-03:00","Protocolo":"@6;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:44:16.4900628-03:00","Protocolo":"ET;Mov Iniciado\r","Enviado":false},{"Momento":"2024-06-07T13:44:16.5012716-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T13:44:16.9404142-03:00","Protocolo":"@4;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:44:17.0123161-03:00","Protocolo":"ET;655,6,$\r","Enviado":false},{"Momento":"2024-06-07T13:44:17.034168-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T13:44:25.7538454-03:00","Protocolo":"@7;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:44:25.7626209-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:44:25.7654826-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T13:44:25.8738244-03:00","Protocolo":"ET;655,7,$\r","Enviado":false},{"Momento":"2024-06-07T13:44:25.8871732-03:00","Protocolo":"@8;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:44:25.8953795-03:00","Protocolo":"ET;Mov ja inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:44:25.9058531-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T13:44:26.4168348-03:00","Protocolo":"ET;655,8,$\r","Enviado":false},{"Momento":"2024-06-07T13:44:26.4236132-03:00","Protocolo":"@4;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:44:26.4408385-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T13:44:36.7185304-03:00","Protocolo":"@9;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:44:36.7270081-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:44:36.7295529-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T13:44:36.8391395-03:00","Protocolo":"ET;655,9,$\r","Enviado":false},{"Momento":"2024-06-07T13:44:36.8461429-03:00","Protocolo":"@10;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:44:36.8530812-03:00","Protocolo":"ET;Mov ja inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:44:36.8633369-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T13:44:37.3741238-03:00","Protocolo":"ET;655,10,$\r","Enviado":false},{"Momento":"2024-06-07T13:44:37.384193-03:00","Protocolo":"@4;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:44:37.4004422-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false}

View File

@ -0,0 +1 @@
[{"Momento":"2024-06-07T13:47:44.0898317-03:00","Protocolo":"@1;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:47:44.0985317-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:47:44.0995515-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T13:47:44.211852-03:00","Protocolo":"ET;655,1,$\r","Enviado":false},{"Momento":"2024-06-07T13:47:44.2292313-03:00","Protocolo":"@2;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:47:44.2361537-03:00","Protocolo":"ET;Mov ja inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:47:44.2470803-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T13:47:47.0721696-03:00","Protocolo":"ET;655,2,$\r","Enviado":false},{"Momento":"2024-06-07T13:47:52.3061034-03:00","Protocolo":"@3;ET;258;Mov,0,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:47:52.312692-03:00","Protocolo":"ET;Mov Desligado\r","Enviado":false},{"Momento":"2024-06-07T13:47:52.3238706-03:00","Protocolo":"ET;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-06-07T13:47:52.8350419-03:00","Protocolo":"ET;655,3,$\r","Enviado":false},{"Momento":"2024-06-07T13:47:52.8421798-03:00","Protocolo":"@4;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:47:52.8589938-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T13:47:55.3267545-03:00","Protocolo":"@5;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:47:55.3354593-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:47:55.3375422-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T13:47:55.4463493-03:00","Protocolo":"ET;655,5,$\r","Enviado":false},{"Momento":"2024-06-07T13:47:55.4538121-03:00","Protocolo":"@6;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:47:56.0165413-03:00","Protocolo":"ET;Mov Iniciado\r","Enviado":false},{"Momento":"2024-06-07T13:47:56.0257241-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T13:47:56.4634269-03:00","Protocolo":"@4;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:47:56.5369539-03:00","Protocolo":"ET;655,6,$\r","Enviado":false},{"Momento":"2024-06-07T13:47:56.5587692-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-06-07T12:57:09.014698-03:00","Protocolo":"@1;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T12:57:09.0250104-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T12:57:09.0260137-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T12:57:09.1362495-03:00","Protocolo":"ET;655,1,$\r","Enviado":false},{"Momento":"2024-06-07T12:57:09.1537885-03:00","Protocolo":"@2;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T12:57:09.8258305-03:00","Protocolo":"ET;Mov Iniciado\r","Enviado":false},{"Momento":"2024-06-07T12:57:09.8360206-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T12:57:10.348348-03:00","Protocolo":"ET;655,2,$\r","Enviado":false},{"Momento":"2024-06-07T12:57:11.1080516-03:00","Protocolo":"ET;#544;Mov;0.00;1508.50;16927.10;16810.32;0;0;0;0;16861.64$\r","Enviado":false},{"Momento":"2024-06-07T12:57:12.5114433-03:00","Protocolo":"ET;#544;Mov;0.00;2894.65;16927.88;16810.32;0;0;0;0;16861.64$\r","Enviado":false},{"Momento":"2024-06-07T12:57:13.915405-03:00","Protocolo":"ET;#544;Mov;0.00;3026.18;16927.88;16806.26;0;0;0;0;16861.64$\r","Enviado":false},{"Momento":"2024-06-07T12:57:15.3191419-03:00","Protocolo":"ET;#544;Mov;0.00;3008.47;16927.88;16810.32;0;0;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T12:57:16.7237549-03:00","Protocolo":"ET;#544;Mov;0.00;3027.97;16927.88;16810.32;0;0;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T12:57:18.1274748-03:00","Protocolo":"ET;#544;Mov;0.00;3033.70;16927.88;16810.32;0;0;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T12:57:19.531252-03:00","Protocolo":"ET;#544;Mov;0.00;3036.19;16927.88;16810.32;0;0;0;0;16858.36$\r","Enviado":false},{"Momento":"2024-06-07T12:57:20.9349053-03:00","Protocolo":"ET;#544;Mov;0.00;3039.43;16927.10;16806.26;0;0;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T12:57:22.3392774-03:00","Protocolo":"ET;#544;Mov;0.00;3040.68;16927.10;16810.32;0;0;0;0;16859.45$\r","Enviado":false},{"Momento":"2024-06-07T12:57:23.7421391-03:00","Protocolo":"ET;#544;Mov;118.00;3026.61;16927.10;16806.26;0;0;0;0;16858.36$\r","Enviado":false},{"Momento":"2024-06-07T12:57:25.1463172-03:00","Protocolo":"ET;#544;Mov;96.00;3023.45;16927.10;16806.26;0;0;0;0;16862.82$\r","Enviado":false},{"Momento":"2024-06-07T12:57:26.5505755-03:00","Protocolo":"ET;#544;Mov;0.00;3041.47;16927.10;16806.26;0;0;0;0;16862.82$\r","Enviado":false},{"Momento":"2024-06-07T12:57:27.4760132-03:00","Protocolo":"@3;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T12:57:27.4923982-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T12:57:27.6029329-03:00","Protocolo":"ET;655,3,$\r","Enviado":false},{"Momento":"2024-06-07T12:57:27.6186708-03:00","Protocolo":"@4;ET;258;Mov,0,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T12:57:27.6260613-03:00","Protocolo":"ET;Mov Desligado\r","Enviado":false},{"Momento":"2024-06-07T12:57:27.6375083-03:00","Protocolo":"ET;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-06-07T12:57:28.1473917-03:00","Protocolo":"ET;655,4,$\r","Enviado":false},{"Momento":"2024-06-07T12:57:35.2684546-03:00","Protocolo":"@5;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T12:57:35.278513-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T12:57:35.27994-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T12:57:35.3887551-03:00","Protocolo":"ET;655,5,$\r","Enviado":false},{"Momento":"2024-06-07T12:57:35.4022145-03:00","Protocolo":"@6;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T12:57:35.9639217-03:00","Protocolo":"ET;Mov Iniciado\r","Enviado":false},{"Momento":"2024-06-07T12:57:35.9747111-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T12:57:36.4851108-03:00","Protocolo":"ET;655,6,$\r","Enviado":false},{"Momento":"2024-06-07T12:57:37.3560714-03:00","Protocolo":"ET;#544;Mov;0.00;1580.50;16927.10;16810.32;0;0;0;0;16861.73$\r","Enviado":false},{"Momento":"2024-06-07T12:57:38.7605767-03:00","Protocolo":"ET;#544;Mov;0.00;2855.28;16927.10;16810.32;0;0;0;0;16862.82$\r","Enviado":false},{"Momento":"2024-06-07T12:57:40.1634786-03:00","Protocolo":"ET;#544;Mov;0.00;2986.89;16927.10;16810.32;0;0;0;0;16861.73$\r","Enviado":false}

View File

@ -0,0 +1 @@
[{"Momento":"2024-06-07T10:58:31.4582469-03:00","Protocolo":"@1;ET;258;Mov,1,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:58:31.4653367-03:00","Protocolo":"ET;655,1,$\r","Enviado":false},{"Momento":"2024-06-07T10:58:31.489977-03:00","Protocolo":"@2;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:58:31.5088194-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:58:31.6199059-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T10:58:39.8875215-03:00","Protocolo":"@3;ET;258;Mov,0,0x01,2,0,800,0,32$","Enviado":true},{"Momento":"2024-06-07T10:58:39.8931453-03:00","Protocolo":"ET;655,3,$\r","Enviado":false},{"Momento":"2024-06-07T10:58:39.9093502-03:00","Protocolo":"@4;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:58:39.9264409-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T10:58:40.038104-03:00","Protocolo":"ET;655,4,$\r","Enviado":false},{"Momento":"2024-06-07T10:58:40.0431694-03:00","Protocolo":"@2;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T10:58:40.0528972-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T10:58:40.1631986-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false}

View File

@ -0,0 +1 @@
[{"Momento":"2024-06-07T13:00:03.6861111-03:00","Protocolo":"@1;ET;258;ET,1,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:00:03.690535-03:00","Protocolo":"Modbus Inicializado\r","Enviado":false},{"Momento":"2024-06-07T13:00:03.6915321-03:00","Protocolo":"ET;#211;ET;1$\r","Enviado":false},{"Momento":"2024-06-07T13:00:03.8007944-03:00","Protocolo":"ET;655,1,$\r","Enviado":false},{"Momento":"2024-06-07T13:00:03.8123468-03:00","Protocolo":"@2;ET;258;Mov,1,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:00:04.3740376-03:00","Protocolo":"ET;Mov Iniciado\r","Enviado":false},{"Momento":"2024-06-07T13:00:04.3840929-03:00","Protocolo":"ET;#211;Mov;1$\r","Enviado":false},{"Momento":"2024-06-07T13:00:04.8950264-03:00","Protocolo":"ET;655,2,$\r","Enviado":false},{"Momento":"2024-06-07T13:00:05.8764405-03:00","Protocolo":"ET;#544;Mov;0.00;1468.50;16930.51;16810.32;1;2;0;0;16862.82$\r","Enviado":false},{"Momento":"2024-06-07T13:00:07.3906728-03:00","Protocolo":"ET;#544;Mov;0.00;2857.84;16929.98;16806.26;1;2;0;0;16860.63$\r","Enviado":false},{"Momento":"2024-06-07T13:00:08.9049228-03:00","Protocolo":"ET;#544;Mov;0.00;3016.72;16929.98;16810.32;1;2;0;0;16861.73$\r","Enviado":false},{"Momento":"2024-06-07T13:00:10.4188933-03:00","Protocolo":"ET;#544;Mov;0.00;3038.21;16929.98;16810.32;1;2;0;0;16862.82$\r","Enviado":false},{"Momento":"2024-06-07T13:00:11.9337142-03:00","Protocolo":"ET;#544;Mov;0.00;3133.40;16929.98;16810.32;1;2;0;0;16861.73$\r","Enviado":false},{"Momento":"2024-06-07T13:00:13.4481534-03:00","Protocolo":"ET;#544;Mov;0.00;3076.86;16927.88;16810.32;1;2;0;0;16861.73$\r","Enviado":false},{"Momento":"2024-06-07T13:00:14.9622189-03:00","Protocolo":"ET;#544;Mov;0.00;3062.71;16929.98;16810.32;1;2;0;0;16861.73$\r","Enviado":false},{"Momento":"2024-06-07T13:00:16.4775783-03:00","Protocolo":"ET;#544;Mov;0.00;3073.49;16929.98;16806.26;1;2;0;0;16861.73$\r","Enviado":false},{"Momento":"2024-06-07T13:00:17.9908497-03:00","Protocolo":"ET;#544;Mov;0.00;3070.56;16929.98;16810.32;1;2;0;0;16861.73$\r","Enviado":false},{"Momento":"2024-06-07T13:00:19.5051094-03:00","Protocolo":"ET;#544;Mov;0.00;3063.39;16930.51;16806.26;1;2;0;0;16862.82$\r","Enviado":false},{"Momento":"2024-06-07T13:00:21.0200562-03:00","Protocolo":"ET;#544;Mov;0.00;3049.98;16929.98;16806.26;1;2;0;0;16862.82$\r","Enviado":false},{"Momento":"2024-06-07T13:00:40.3781815-03:00","Protocolo":"ET;#544;Mov;0.00;3052.10;16930.51;16810.32;1;2;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T13:00:41.7811603-03:00","Protocolo":"ET;#544;Mov;0.00;3095.21;16929.98;16806.26;1;2;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T13:00:41.7890225-03:00","Protocolo":"ET;#544;Mov;0.00;3088.05;16929.98;16806.26;1;2;0;0;16858.36$\r","Enviado":false},{"Momento":"2024-06-07T13:00:41.7920177-03:00","Protocolo":"ET;#544;Mov;0.00;3083.80;16929.98;16806.26;1;2;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T13:00:41.7950075-03:00","Protocolo":"ET;#544;Mov;0.00;3053.85;16929.98;16810.32;1;2;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T13:00:41.8035577-03:00","Protocolo":"ET;#544;Mov;0.00;3048.30;16929.98;16806.26;1;2;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T13:00:42.2258452-03:00","Protocolo":"ET;#544;Mov;0.00;3053.46;16929.98;16810.32;1;2;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T13:00:43.7401862-03:00","Protocolo":"ET;#544;Mov;0.00;3050.74;16930.51;16810.32;1;2;0;0;16861.64$\r","Enviado":false},{"Momento":"2024-06-07T13:00:45.2556089-03:00","Protocolo":"ET;#544;Mov;0.00;3048.66;16929.98;16806.26;1;2;0;0;16860.55$\r","Enviado":false},{"Momento":"2024-06-07T13:00:46.7153507-03:00","Protocolo":"@3;ET;258;ET,0,500,0,1,0,3,0,17,0,16,0,4$","Enviado":true},{"Momento":"2024-06-07T13:00:46.7328502-03:00","Protocolo":"ET;#211;ET;0$\r","Enviado":false},{"Momento":"2024-06-07T13:00:46.8433372-03:00","Protocolo":"ET;655,3,$\r","Enviado":false},{"Momento":"2024-06-07T13:00:46.8506091-03:00","Protocolo":"@4;ET;258;Mov,0,0x01,2,0,800,0,34$","Enviado":true},{"Momento":"2024-06-07T13:00:46.8573631-03:00","Protocolo":"ET;Mov Desligado\r","Enviado":false},{"Momento":"2024-06-07T13:00:46.8676336-03:00","Protocolo":"ET;#211;Mov;0$\r","Enviado":false},{"Momento":"2024-06-07T13:00:47.3787482-03:00","Protocolo":"ET;655,4,$\r","Enviado":false}

View File

@ -1 +1 @@
{"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"CapacidadeReservatorio":30.0,"AtuacaoNivelAlto":true,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":34.42987713140743},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":14.876485059544191},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.103588945512129},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.437319738098896},{"ID":"B05","Posicao":5,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B06","Posicao":6,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B07","Posicao":7,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B08","Posicao":8,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B09","Posicao":9,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B10","Posicao":10,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0}],"BombaPressurizadora":{"ID":"BOMBA","BombaAtuada":false,"Ligado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[14,35,36,37,5],"PressaoSP":85.0,"Pressao":82.01,"Potencia":0.0},"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":25222.0,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":[1117263.12],"ValorMinimo":-1.281631101976581E+32,"ValorMaximo":2.8836731440342142E+24,"LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","Leituras":[82.01],"ValorMinimo":0.0,"ValorMaximo":127.63,"LimiteMaximo":120.0,"LimiteMinimo":60.0}],"PercentualInicioPulverizacao":0.3,"ScriptDeteccaoErvas":"weed-detector-v7.py","_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"_MassaLeitura":1117263.12,"MassaReservatorio":15.236908365395459,"VolumeReservatorio":14.511341300376627,"PercentualReservatorio":48.371137667922085,"VolumeVazaoAferido":102.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"_LeituraPulsos":0,"_LeituraPeriodo":0,"VazaoFluxoMLpS":0.0,"VolumeVazaoML":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"_LeituraPressao":2631.0,"PressaoLinha":82.01,"PressaoLinhaCalc":82.0030336996337} {"Modulo_ID":"Atu","Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"CapacidadeReservatorio":30.0,"AtuacaoNivelAlto":true,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":34.42987713140743},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":14.876485059544191},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.103588945512129},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.437319738098896},{"ID":"B05","Posicao":5,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B06","Posicao":6,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B07","Posicao":7,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B08","Posicao":8,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B09","Posicao":9,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B10","Posicao":10,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0}],"BombaPressurizadora":{"ID":"BOMBA","BombaAtuada":false,"Ligado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[14,35,36,37,5],"PressaoSP":85.0,"Pressao":82.01,"Potencia":0.0},"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":25222.0,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":[1117263.12],"ValorMinimo":-1.281631101976581E+32,"ValorMaximo":2.8836731440342142E+24,"LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","Leituras":[82.01],"ValorMinimo":0.0,"ValorMaximo":127.63,"LimiteMaximo":120.0,"LimiteMinimo":60.0}],"PercentualInicioPulverizacao":0.3,"ScriptDeteccaoErvas":"weed-detector-v7.py","_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"_MassaLeitura":1117263.12,"MassaReservatorio":15.236908365395459,"VolumeReservatorio":14.511341300376627,"PercentualReservatorio":48.371137667922085,"VolumeVazaoAferido":102.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"_LeituraPulsos":0,"_LeituraPeriodo":0,"VazaoFluxoMLpS":0.0,"VolumeVazaoML":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"_LeituraPressao":2631.0,"PressaoLinha":82.01,"PressaoLinhaCalc":82.0030336996337}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"ExpansorGPIO":false,"EnderecoExpansor":"","Pinos":[{"Controlador":1,"Barramento":0,"Pino":99,"Descricao":"1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":98,"Descricao":"2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":36,"Descricao":"3","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":39,"Descricao":"4","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":34,"Descricao":"5","Funcao":12,"Habilitado":true,"ComponenteID":"Mov"},{"Controlador":1,"Barramento":0,"Pino":35,"Descricao":"6","Funcao":41,"Habilitado":true,"ComponenteID":"Dir"},{"Controlador":1,"Barramento":0,"Pino":32,"Descricao":"7","Funcao":14,"Habilitado":true,"ComponenteID":"Dir"},{"Controlador":1,"Barramento":0,"Pino":33,"Descricao":"8","Funcao":9,"Habilitado":true,"ComponenteID":"Dir"},{"Controlador":1,"Barramento":0,"Pino":25,"Descricao":"9","Funcao":13,"Habilitado":true,"ComponenteID":"Dir"},{"Controlador":1,"Barramento":0,"Pino":26,"Descricao":"10","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":27,"Descricao":"11","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":14,"Descricao":"12","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":12,"Descricao":"13","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":97,"Descricao":"14","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":13,"Descricao":"15","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":9,"Descricao":"16","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":10,"Descricao":"17","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":11,"Descricao":"18","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":96,"Descricao":"19","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":6,"Descricao":"26","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":7,"Descricao":"27","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":8,"Descricao":"28","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":15,"Descricao":"29","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":2,"Descricao":"30","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":0,"Descricao":"31","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":4,"Descricao":"32","Funcao":44,"Habilitado":true,"ComponenteID":"Mvd"},{"Controlador":1,"Barramento":0,"Pino":16,"Descricao":"33","Funcao":43,"Habilitado":true,"ComponenteID":"Mvd"},{"Controlador":1,"Barramento":0,"Pino":17,"Descricao":"34","Funcao":42,"Habilitado":true,"ComponenteID":"Mvd"},{"Controlador":1,"Barramento":0,"Pino":5,"Descricao":"35","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":18,"Descricao":"36","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":19,"Descricao":"37","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":95,"Descricao":"38","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":21,"Descricao":"39","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":3,"Descricao":"40","Funcao":3,"Habilitado":true,"ComponenteID":"Mvd"},{"Controlador":1,"Barramento":0,"Pino":1,"Descricao":"41","Funcao":2,"Habilitado":true,"ComponenteID":"Mvd"},{"Controlador":1,"Barramento":0,"Pino":22,"Descricao":"42","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":23,"Descricao":"43","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":94,"Descricao":"44","Funcao":0,"Habilitado":false,"ComponenteID":""}]}

View File

@ -25,7 +25,7 @@
<meta name="viewport" content="width=device-width, <meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style> <style>
#map_459afd82b51d20eef5f835f948f180a0 { #map_8b586f11575e819f69488b3cb1e07185 {
position: relative; position: relative;
width: 100.0%; width: 100.0%;
height: 100.0%; height: 100.0%;
@ -39,14 +39,14 @@
<body> <body>
<div class="folium-map" id="map_459afd82b51d20eef5f835f948f180a0" ></div> <div class="folium-map" id="map_8b586f11575e819f69488b3cb1e07185" ></div>
</body> </body>
<script> <script>
var map_459afd82b51d20eef5f835f948f180a0 = L.map( var map_8b586f11575e819f69488b3cb1e07185 = L.map(
"map_459afd82b51d20eef5f835f948f180a0", "map_8b586f11575e819f69488b3cb1e07185",
{ {
center: [0.0, 0.0], center: [0.0, 0.0],
crs: L.CRS.EPSG3857, crs: L.CRS.EPSG3857,
@ -60,13 +60,13 @@
var tile_layer_accc0020d010bc302c3d24b743a95dc6 = L.tileLayer( var tile_layer_a637a965e96688db341ceb0d0bccfa80 = L.tileLayer(
"https://tile.openstreetmap.org/{z}/{x}/{y}.png", "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false} {"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
); );
tile_layer_accc0020d010bc302c3d24b743a95dc6.addTo(map_459afd82b51d20eef5f835f948f180a0); tile_layer_a637a965e96688db341ceb0d0bccfa80.addTo(map_8b586f11575e819f69488b3cb1e07185);
</script> </script>
@ -87,7 +87,7 @@
} }
trajeto_json_add({"features": []}); trajeto_json_add({"features": []});
trajeto_json.addTo(map_459afd82b51d20eef5f835f948f180a0); trajeto_json.addTo(map_8b586f11575e819f69488b3cb1e07185);
function adicionarGeometria(novaGeometria) { function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria); trajeto_json.addData(novaGeometria);
@ -145,7 +145,7 @@
var marcadorDinamico = L.marker([0, 0], { var marcadorDinamico = L.marker([0, 0], {
icon: customIcon icon: customIcon
}).addTo(map_459afd82b51d20eef5f835f948f180a0); }).addTo(map_8b586f11575e819f69488b3cb1e07185);
// Conectar ao broker MQTT // Conectar ao broker MQTT
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
@ -183,7 +183,7 @@
marcadorDinamico.setRotationAngle(angulo); marcadorDinamico.setRotationAngle(angulo);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]); adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
map_459afd82b51d20eef5f835f948f180a0.setView(novaPosicao, map_459afd82b51d20eef5f835f948f180a0.getZoom()); map_8b586f11575e819f69488b3cb1e07185.setView(novaPosicao, map_8b586f11575e819f69488b3cb1e07185.getZoom());
}); });
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) { function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {

View File

@ -1 +1 @@
fd547cec450dd4e7cc70eb5c8487b1e9776deeb08c0f3d1efb1d416ed404d584 3ecf17375a3098315637453bf91621393469c9e74c20f06fcd13d32858384541

View File

@ -23,6 +23,7 @@ enum F_Code {
Cmd = 293, Cmd = 293,
Err = 404, Err = 404,
Msg = 655, Msg = 655,
Req = 887,
}; };
enum S_Code { enum S_Code {

View File

@ -8,10 +8,19 @@
#ifndef ModbusService #ifndef ModbusService
#define ModbusService #define ModbusService
// Fila para armazenar mensagens Modbus
QueueHandle_t modbusQueue;
TaskHandle_t modbusTaskHandle = NULL;
// Definir prioridades
#define PRIORITY_HIGH 1
#define PRIORITY_LOW 0
HardwareSerial SerialDriver(1); HardwareSerial SerialDriver(1);
#define RXD1 16 long ModbusBaudRate = 9600;
#define TXD1 17 int RXD1 = 16;
#define DE_RE_PIN 4 // Pino para DE e RE int TXD1 = 17;
int DE_RE_PIN = 4;
bool Debug = false; bool Debug = false;
class ModbusGetResponse { class ModbusGetResponse {
@ -25,10 +34,6 @@ class ModbusGetResponse {
ModbusGetResponse() : _address(0), _command_code(0), _num_registers(0), _value(0.0) {} ModbusGetResponse() : _address(0), _command_code(0), _num_registers(0), _value(0.0) {}
}; };
// Definir prioridades
#define PRIORITY_HIGH 1
#define PRIORITY_LOW 0
// Estrutura para armazenar dados da mensagem Modbus // Estrutura para armazenar dados da mensagem Modbus
struct ModbusMessage { struct ModbusMessage {
uint8_t slaveAddress; uint8_t slaveAddress;
@ -42,9 +47,6 @@ struct ModbusMessage {
bool waitCallback; bool waitCallback;
}; };
// Fila para armazenar mensagens Modbus
QueueHandle_t modbusQueue;
// Função para calcular CRC16 // Função para calcular CRC16
uint16_t calculateCRC(const uint8_t* data, uint8_t length) { uint16_t calculateCRC(const uint8_t* data, uint8_t length) {
uint16_t crc = 0xFFFF; uint16_t crc = 0xFFFF;
@ -161,23 +163,52 @@ void processModbusQueue(void* pvParameters) {
// Função para inicializar o Modbus // Função para inicializar o Modbus
void InicializarModbus(bool _debug = false) { void InicializarModbus(bool iniciar, int _rx, int _tx, int _md, long _baudRate = 9600, bool _debug = false) {
SerialDriver.begin(9600, SERIAL_8N2, RXD1, TXD1); // Se a comunicação serial já estiver inicializada, encerre-a
if (SerialDriver) {
SerialDriver.end();
}
// Se a fila já estiver criada, delete-a
if (modbusQueue != NULL) {
vQueueDelete(modbusQueue);
modbusQueue = NULL;
}
// Se a tarefa já estiver criada, delete-a
if (modbusTaskHandle != NULL) {
vTaskDelete(modbusTaskHandle);
modbusTaskHandle = NULL;
}
if (!iniciar) {
return;
}
// Inicializar os novos pinos
RXD1 = _rx;
TXD1 = _tx;
DE_RE_PIN = _md;
ModbusBaudRate = _baudRate;
// Inicializar a comunicação serial
SerialDriver.begin(ModbusBaudRate, SERIAL_8N2, RXD1, TXD1);
Serial.println("Modbus Inicializado"); Serial.println("Modbus Inicializado");
// Configurar o pino DE/RE
pinMode(DE_RE_PIN, OUTPUT); pinMode(DE_RE_PIN, OUTPUT);
digitalWrite(DE_RE_PIN, LOW); // Inicialmente em modo de recepção digitalWrite(DE_RE_PIN, LOW); // Inicialmente em modo de recepção
Debug = _debug; Debug = _debug;
// Criar a fila de mensagens Modbus // Criar a fila de mensagens Modbus
modbusQueue = xQueueCreate(10, sizeof(ModbusMessage)); modbusQueue = xQueueCreate(100, sizeof(ModbusMessage));
if (modbusQueue == NULL) { if (modbusQueue == NULL) {
Serial.println("Erro ao criar a fila de mensagens Modbus"); Serial.println("Erro ao criar a fila de mensagens Modbus");
} }
// Criar a tarefa de processamento da fila // Criar a tarefa de processamento da fila
xTaskCreate(processModbusQueue, "ProcessModbusQueue", 4096, NULL, 1, NULL); xTaskCreate(processModbusQueue, "ProcessModbusQueue", 4096, NULL, 1, &modbusTaskHandle);
} }
// Função para construir o comando Modbus // Função para construir o comando Modbus

View File

@ -7,43 +7,18 @@
const char BeginLine = '@'; const char BeginLine = '@';
const char EndLine = '$'; const char EndLine = '$';
const char BeginSensor = '#'; const char BeginSensor = '#';
const char* SplitMessage = ";";
const char* SplitParams = ",";
const int MAX_PROTOCOLS = 20; const int MAX_PROTOCOLS = 20;
class ProtocoloSerial { class ProtocoloSerial {
public: public:
F_Code funcao; F_Code funcao;
String Mod_ID;
String protocolo; String protocolo;
int idMensagem; int idMensagem;
}; };
int LerBufferSerial(ProtocoloSerial (&protocolos)[MAX_PROTOCOLS]) {
int protocolCount = 0; // Contador de protocolos
if (Serial.available() > 0) {
String protocoloAtual = "";
F_Code _funcaoAtual = Nda;
while (Serial.available()) {
char entrada = (char)Serial.read();
if (entrada == EndLine) {
if (protocoloAtual.length() > 0 && protocolCount < MAX_PROTOCOLS) {
protocolos[protocolCount].funcao = _funcaoAtual;
protocolos[protocolCount].protocolo = protocoloAtual;
protocoloAtual = ""; // Reseta o protocolo atual
_funcaoAtual = Nda;
protocolCount++;
}
} else {
protocoloAtual += entrada;
}
if (protocoloAtual.length() == 3 && _funcaoAtual == Nda) {
_funcaoAtual = (F_Code)(protocoloAtual.toInt());
protocoloAtual = "";
}
}
}
return protocolCount; // Retorna o número de protocolos lidos
}
std::vector<String> SplitString(String message, const char *delimiter) { std::vector<String> SplitString(String message, const char *delimiter) {
std::vector<String> partes; std::vector<String> partes;
char messageArray[256]; char messageArray[256];
@ -56,7 +31,7 @@ std::vector<String> SplitString(String message, const char *delimiter) {
return partes; return partes;
} }
std::vector<ProtocoloSerial> LerBufferSerialFila() { std::vector<ProtocoloSerial> LerBufferSerialFila(String Mod_ID) {
std::vector<ProtocoloSerial> protocolos; std::vector<ProtocoloSerial> protocolos;
if (Serial.available() > 0) { if (Serial.available() > 0) {
@ -73,13 +48,16 @@ std::vector<ProtocoloSerial> LerBufferSerialFila() {
ProtocoloIniciado = false; ProtocoloIniciado = false;
if (protocoloAtual.length() > 0) { if (protocoloAtual.length() > 0) {
std::vector<String> partes = SplitString(protocoloAtual, (char*)";"); std::vector<String> partes = SplitString(protocoloAtual, SplitMessage);
if (partes.size() == 3) { if (partes.size() == 4) {
ProtocoloSerial objeto; ProtocoloSerial objeto;
objeto.idMensagem = partes[0].toInt(); objeto.idMensagem = partes[0].toInt();
objeto.funcao = (F_Code)(partes[1].toInt()); objeto.Mod_ID = partes[1];
objeto.protocolo = partes[2]; objeto.funcao = (F_Code)(partes[2].toInt());
protocolos.push_back(objeto); objeto.protocolo = partes[3];
if (Mod_ID == objeto.Mod_ID) {
protocolos.push_back(objeto);
}
} }
break; break;
@ -95,8 +73,8 @@ std::vector<ProtocoloSerial> LerBufferSerialFila() {
void EnviarDadosSerial(String ID, String Mensagem) { void EnviarDadosSerial(String Mod_ID, String Mensagem) {
String ProtocoloEnvio = ID + ";" + Mensagem; String ProtocoloEnvio = Mod_ID + SplitMessage + Mensagem;
Serial.println(ProtocoloEnvio); Serial.println(ProtocoloEnvio);
Serial.flush(); Serial.flush();
vTaskDelay(pdMS_TO_TICKS(10)); vTaskDelay(pdMS_TO_TICKS(10));
@ -104,8 +82,8 @@ void EnviarDadosSerial(String ID, String Mensagem) {
String MontarProtocoloMensagemRecebida(int idMensagem) { String MontarProtocoloMensagemRecebida(int idMensagem) {
String protocolo = String protocolo =
(String)Msg + ";" + (String)Msg + SplitParams +
(String)idMensagem + ";" + (String)idMensagem + SplitParams +
EndLine; EndLine;
return protocolo; return protocolo;
} }
@ -179,12 +157,10 @@ String MontarDadosProtocoloEncoder(Sentido sentido, int angulo, bool ref0, bool
return Protocolo; return Protocolo;
} }
String MontarDadosProtocoloEncoderAbsoluto(Sentido sentido, int angulo, bool referenciando, bool referenciado) { String MontarDadosProtocoloEncoderAbsoluto(Sentido sentido, int angulo) {
String Protocolo = String Protocolo =
(String)sentido + ";" + (String)sentido + ";" +
(String)angulo + ";" + (String)angulo;
(referenciando ? "1" : "0") + ";" +
(referenciado ? "1" : "0");
return Protocolo; return Protocolo;
} }

View File

@ -7,7 +7,6 @@
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\ModbusService.h" #include "C:\ZendionInc\agrobot_base\Firmware\Modulos\ModbusService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\utils.h" #include "C:\ZendionInc\agrobot_base\Firmware\Modulos\utils.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\Pinout.h" #include "C:\ZendionInc\agrobot_base\Firmware\Modulos\Pinout.h"
#include <HardwareSerial.h>
#include <SimpleKalmanFilter.h> #include <SimpleKalmanFilter.h>
#define D_Code Mvd #define D_Code Mvd
@ -15,10 +14,13 @@
String Mod_ID = ""; String Mod_ID = "";
int Cod_Alarme = 0; int Cod_Alarme = 0;
#define _pinoLED RGB_BUILTIN
#define _pinoAddr0 36 #define _pinoAddr0 36
#define _pinoAddr1 39 #define _pinoAddr1 39
int _pinModbusRX = 16;
int _pinModbusTX = 17;
int _pinModbusMD = 4;
void AtualizarEnderecoModulo() { void AtualizarEnderecoModulo() {
bool A0 = digitalRead(_pinoAddr0) == 1; bool A0 = digitalRead(_pinoAddr0) == 1;
bool A1 = digitalRead(_pinoAddr1) == 1; bool A1 = digitalRead(_pinoAddr1) == 1;
@ -44,13 +46,13 @@ int _TaxaAmostragem = 500;
class MotorBLDC { class MotorBLDC {
public: public:
String _ID = (String)Mov; String _ID = "Mov";
bool Iniciado = false; bool Iniciado = false;
bool Testando = false; bool Testando = false;
PinoModel _pinoTMP; PinoModel _pinoTMP;
SimpleKalmanFilter* tempKalman; SimpleKalmanFilter* tempKalman = nullptr;
byte _endereco; byte _endereco;
int _numPolos; int _numPolos;
@ -85,14 +87,12 @@ class MotorBLDC {
Iniciado = ConfigurarDriver(); Iniciado = ConfigurarDriver();
if (_pinoTMP.Definido()) {
_pinoTMP.Conectar();
tempKalman = new (std::nothrow) SimpleKalmanFilter(2, 2, 0.01);
}
if (Iniciado) { if (Iniciado) {
if (_pinoTMP.Definido()) {
_pinoTMP.Conectar();
tempKalman = new SimpleKalmanFilter(2, 2, 0.01);
}
xTaskCreatePinnedToCore(&MotorBLDC::MovTaskWrapper, "MovTask", 5000, this, 20, &MovTaskHandle, tskNO_AFFINITY);
AtualizarDadosControle(true); AtualizarDadosControle(true);
EnviarDadosSerial(Mod_ID, _ID + " Iniciado"); EnviarDadosSerial(Mod_ID, _ID + " Iniciado");
@ -108,14 +108,12 @@ class MotorBLDC {
return; return;
} }
// Parar a execução das tarefas
vTaskDelete(MovTaskHandle);
// Redefinir as configurações para os valores iniciais // Redefinir as configurações para os valores iniciais
_pinoTMP.Desconectar(); _pinoTMP.Desconectar();
// Outras redefinições de variáveis de estado, se necessário // Outras redefinições de variáveis de estado, se necessário
delete tempKalman; delete tempKalman;
tempKalman = nullptr;
EnviarDadosSerial(Mod_ID, _ID + " Desligado"); EnviarDadosSerial(Mod_ID, _ID + " Desligado");
@ -126,6 +124,61 @@ class MotorBLDC {
AtualizarDadosControle(true); AtualizarDadosControle(true);
} }
void AtualizarDadosControle(bool reset = false) {
if (!Iniciado) {
return;
}
if (reset) {
_Ligado = false;
_Freio = false;
_SentidoSP = Parado;
_RPM_SP = 0;
}
if (_SentidoSP != Parado && _SentidoSP != _Sentido) {
int std = EnviarComandoModbus(_endereco, 0x06, 0x006D, _SentidoSP == Horario ? 1 : 0)._value;
_Sentido = !Ligado ? Parado : std == 0 ? Horario : Antihorario;
}
if (_RPM_SP != RPM_SP) {
RPM_SP = EnviarComandoModbus(_endereco, 0x06, 0x0056, _RPM_SP)._value;
}
if (_Freio != Freio) {
Freio = EnviarComandoModbus(_endereco, 0x06, 0x006A, _Freio ? 1 : 0)._value == 1;
}
if (_Ligado != Ligado) {
Ligado = EnviarComandoModbus(_endereco, 0x06, 0x0066, _Ligado ? 1 : 0)._value == 1;
}
/*if (_SentidoSP != Parado && _SentidoSP != _Sentido) {
EnviarComandoModbus(_endereco, 0x06, 0x006D, _SentidoSP == Horario ? 1 : 0, false);
}
if (_RPM_SP != RPM_SP) {
EnviarComandoModbus(_endereco, 0x06, 0x0056, _RPM_SP, false);
}
if (_Freio != Freio) {
EnviarComandoModbus(_endereco, 0x06, 0x006A, _Freio ? 1 : 0, false);
}
if (_Ligado != Ligado) {
EnviarComandoModbus(_endereco, 0x06, 0x0066, _Ligado ? 1 : 0, false);
}*/
/*EnviarComandoModbus(_endereco, 0x06, 0x006D, _SentidoSP == Horario ? 1 : 0, false);
EnviarComandoModbus(_endereco, 0x06, 0x0056, _RPM_SP, false);
EnviarComandoModbus(_endereco, 0x06, 0x006A, _Freio ? 1 : 0, false);
EnviarComandoModbus(_endereco, 0x06, 0x0066, _Ligado ? 1 : 0, false);*/
}
void RequisitarDados() {
AferirDadosDriver();
AferirTemperatura();
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sBLD, _ID, MontarDadosProtocoloBLD(RPM, Temperatura, Tensao, CorrenteMax, Ligado, _Sentido, Freio, CodAlarme, TemperaturaDriver)));
}
private:
ModbusGetResponse EnviarComandoModbus(byte endereco, byte funcao, byte registro, int valor, bool aguardarResposta = true) { ModbusGetResponse EnviarComandoModbus(byte endereco, byte funcao, byte registro, int valor, bool aguardarResposta = true) {
const int maxTentativas = 2; const int maxTentativas = 2;
int tentativas = 0; int tentativas = 0;
@ -212,87 +265,6 @@ class MotorBLDC {
return false; return false;
} }
void AtualizarDadosControle(bool reset = false) {
if (!Iniciado) {
return;
}
if (reset) {
_Ligado = false;
_Freio = false;
_SentidoSP = Parado;
_RPM_SP = 0;
}
/*if (_SentidoSP != Parado && _SentidoSP != _Sentido) {
int std = EnviarComandoModbus(_endereco, 0x06, 0x006D, _SentidoSP == Horario ? 1 : 0)._value;
_Sentido = !Ligado ? Parado : std == 0 ? Horario : Antihorario;
}
if (_RPM_SP != RPM_SP) {
RPM_SP = EnviarComandoModbus(_endereco, 0x06, 0x0056, _RPM_SP)._value;
}
if (_Freio != Freio) {
Freio = EnviarComandoModbus(_endereco, 0x06, 0x006A, _Freio ? 1 : 0)._value == 1;
}
if (_Ligado != Ligado) {
Ligado = EnviarComandoModbus(_endereco, 0x06, 0x0066, _Ligado ? 1 : 0)._value == 1;
}*/
if (_SentidoSP != Parado && _SentidoSP != _Sentido) {
EnviarComandoModbus(_endereco, 0x06, 0x006D, _SentidoSP == Horario ? 1 : 0, false);
}
if (_RPM_SP != RPM_SP) {
EnviarComandoModbus(_endereco, 0x06, 0x0056, _RPM_SP, false);
}
if (_Freio != Freio) {
EnviarComandoModbus(_endereco, 0x06, 0x006A, _Freio ? 1 : 0, false);
}
if (_Ligado != Ligado) {
EnviarComandoModbus(_endereco, 0x06, 0x0066, _Ligado ? 1 : 0, false);
}
/*EnviarComandoModbus(_endereco, 0x06, 0x006D, _SentidoSP == Horario ? 1 : 0, false);
EnviarComandoModbus(_endereco, 0x06, 0x0056, _RPM_SP, false);
EnviarComandoModbus(_endereco, 0x06, 0x006A, _Freio ? 1 : 0, false);
EnviarComandoModbus(_endereco, 0x06, 0x0066, _Ligado ? 1 : 0, false);*/
}
private:
TaskHandle_t MovTaskHandle = NULL;
static void MovTaskWrapper(void *pvParameters) {
MotorBLDC *motor = static_cast<MotorBLDC*>(pvParameters);
motor->MovTask();
}
void MovTask() {
unsigned long firstMilis = millis();
while (1)
{
if (!Conectado) {
// Caso não esteja conectado, aguarda 1 segundo até a próxima verificação, liberando uso de CPU
vTaskDelay(1000);
continue;
}
long intMillis = (millis() - firstMilis);
// A cada _TaxaAmostragem, enviar os dados para o software
if (intMillis >= _TaxaAmostragem) {
AferirTemperatura();
AferirDadosDriver();
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sBLD, _ID, MontarDadosProtocoloBLD(RPM, Temperatura, Tensao, CorrenteMax, Ligado, _Sentido, Freio, CodAlarme, TemperaturaDriver)));
firstMilis = millis();
}
// Aguarda metade do menor período possível entre leituras
vTaskDelay(1);
}
}
void AferirDadosDriver() { void AferirDadosDriver() {
RPM_SP = EnviarComandoModbus(_endereco, 0x03, 0x0056, 1)._value; RPM_SP = EnviarComandoModbus(_endereco, 0x03, 0x0056, 1)._value;
RPM = EnviarComandoModbus(_endereco, 0x03, 0x005F, 1)._value; RPM = EnviarComandoModbus(_endereco, 0x03, 0x005F, 1)._value;
@ -313,7 +285,216 @@ class MotorBLDC {
}; };
class MotorPasso {
public:
String _ID = "Dir";
int _canal = 0;
bool Iniciado = false;
bool Testando = false;
// Definições
PinoModel _pinoENA;
PinoModel _pinoDIR;
PinoModel _pinoPUL;
PinoModel _pinoEncoder;
SimpleKalmanFilter* encoderKalman = nullptr;
// Consumo
double _Angulo;
Sentido _Sentido;
// Entrada de dados
double _Angulo_SP;
int _Angulo_Offset = 0;
Sentido _Sentido_SP = Parado;
bool _MotorLigado = false;
bool _Estabilizar = true;
double _frequencia = 4000;
int FrequenciaMaxima = 10000;
int dutyCycle = 512;
void Inicializar() {
if (Iniciado) {
EnviarDadosSerial(Mod_ID, _ID + " ja inicializado");
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
if (_pinoPUL.Definido()) {
AtualizarPWM();
}
_pinoENA.Conectar(true);
_pinoDIR.Conectar(false);
_pinoEncoder.Conectar();
_Angulo_SP = 0;
_MotorLigado = false;
encoderKalman = new (std::nothrow) SimpleKalmanFilter(1, 2, 0.01);
xTaskCreatePinnedToCore(&MotorPasso::DirTaskWrapper, "DirTask", 5000, this, 18, &DirTaskHandle, tskNO_AFFINITY);
EnviarDadosSerial(Mod_ID, _ID + " Iniciado");
Iniciado = true;
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void AtualizarPWM() {
ledcSetup(_canal, _frequencia, 10);
ledcAttachPin(_pinoPUL.num, _canal);
ledcWrite(_canal, dutyCycle);
}
void Desligar() {
if (!Iniciado) {
EnviarDadosSerial(Mod_ID, _ID + " nao esta inicializado");
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
// Parar a execução das tarefas
vTaskDelete(DirTaskHandle);
delete encoderKalman;
encoderKalman = nullptr;
// Redefinir as configurações para os valores iniciais
_pinoENA.Desconectar();
_pinoDIR.Desconectar();
_pinoPUL.Desconectar();
_pinoEncoder.Desconectar();
EnviarDadosSerial(Mod_ID, _ID + " Desligado");
Iniciado = false;
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void RequisitarDados() {
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sENC, _ID, MontarDadosProtocoloEncoderAbsoluto(_Sentido, _Angulo)));
}
private:
double _Margem = 0.5;
double _AgMin = 380;
double _AgMax = 3430;
int RefMin = -90;
int RefMax = 90;
double _anguloAnterior = 0;
double _anguloAtual = 0;
double _taxaMudancaAngulo = 0;
TaskHandle_t DirTaskHandle = NULL;
static void DirTaskWrapper(void *pvParameters) {
MotorPasso* motor = static_cast<MotorPasso*>(pvParameters);
motor->DirTask();
}
void DirTask() {
unsigned long previousMillisRampa = millis();
while (true) {
if (!Conectado) {
vTaskDelay(1000);
continue;
}
AferirPosicao();
DefinirSentidoDeGiro();
VerificarAnguloSP();
Atualizar();
vTaskDelay(1);
}
}
void AferirPosicao() {
if (_pinoEncoder.Definido()) {
int leitura = _pinoEncoder.get();
float leituraNormalizada = encoderKalman->updateEstimate(leitura);
double _angulo = fmap(leituraNormalizada, _AgMin, _AgMax, RefMin, RefMax);
double angulo_com_offset = _angulo - _Angulo_Offset;
// Normaliza o ângulo para o intervalo de -90 a 90 graus
while (angulo_com_offset > RefMax) angulo_com_offset -= 180;
while (angulo_com_offset < RefMin) angulo_com_offset += 180;
_Angulo = angulo_com_offset;
}
}
void DefinirSentidoDeGiro() {
_anguloAtual = _Angulo;
// Calcular a taxa de mudança do ângulo
_taxaMudancaAngulo = (_anguloAtual - _anguloAnterior) / (1.0 / 1000.0); // Supondo que a leitura é feita a cada 1 ms
if (_MotorLigado) {
if (_taxaMudancaAngulo > 0) {
_Sentido = Horario;
} else if (_taxaMudancaAngulo < 0) {
_Sentido = Antihorario;
} else {
_Sentido = Parado;
}
} else {
_Sentido = Parado;
}
_anguloAnterior = _anguloAtual;
}
unsigned long previousMillisCorrecao = millis();
void VerificarAnguloSP() {
bool ModoSP = (_Angulo_SP > -1);
if (_MotorLigado) {
double AnguloComparar = ModoSP ? _Angulo_SP : RefMax;
if (_Sentido_SP == Horario && _Angulo >= AnguloComparar) {
_MotorLigado = false;
}
else if (_Sentido_SP == Antihorario && _Angulo <= (AnguloComparar * -1)) {
_MotorLigado = false;
}
}
else if (ModoSP) {
if (millis() - previousMillisCorrecao >= _TaxaAmostragem) {
previousMillisCorrecao = millis();
bool NoRangeZero = (_Angulo >= -_Margem && _Angulo <= _Margem);
bool NoRangeSP = (_Angulo >= (_Angulo_SP - _Margem) && _Angulo <= (_Angulo_SP + _Margem));
if (_Angulo_SP == 0 && !NoRangeZero && _Estabilizar) {
_Sentido_SP = _Angulo > 0 ? Antihorario : Horario;
_MotorLigado = true;
}
else if (!NoRangeSP) {
_MotorLigado = true;
}
}
}
}
void Atualizar() {
_pinoENA.set(!_MotorLigado);
_pinoDIR.set(_Sentido_SP != Antihorario);
}
};
MotorBLDC MotorMOV; MotorBLDC MotorMOV;
MotorPasso MotorDIR;
void setup() { void setup() {
pinMode(_pinoAddr0, INPUT); pinMode(_pinoAddr0, INPUT);
@ -321,81 +502,140 @@ void setup() {
AtualizarEnderecoModulo(); AtualizarEnderecoModulo();
Serial.begin(_baudRate); Serial.begin(_baudRate, SERIAL_8N1, 1, 3);
delay(10); delay(10);
InicializarModbus();
} }
void loop() { void loop() {
std::vector<ProtocoloSerial> protocolos = LerBufferSerialFila(); std::vector<ProtocoloSerial> protocolos = LerBufferSerialFila(Mod_ID);
for (int i = 0; i < protocolos.size(); i++) { for (int i = 0; i < protocolos.size(); i++) {
ProcessarProtocolo(protocolos[i].protocolo, protocolos[i].funcao, protocolos[i].idMensagem); ProcessarProtocolo(protocolos[i]);
} }
} }
void ProcessarProtocolo(String Protocolo, F_Code _funcao, int idMensagem) { void ProcessarProtocolo(ProtocoloSerial Mensagem) {
switch (Mensagem.funcao) {
if (_funcao == Chk) { case Chk:
EnviarDadosSerial(Mod_ID, MontarProtocoloVerificacao(D_Code, VERSION)); ProcessarChk(Mensagem);
break;
case Cfg:
ProcessarCfg(Mensagem);
break;
case Cmd:
ProcessarCmd(Mensagem);
break;
case Req:
ProcessarReq(Mensagem);
break;
} }
/*else if (_funcao == Cfg) {
std::vector<String> Partes = SplitString(Protocolo, (char*)",");
String ID = Partes[0]; EnviarDadosSerial(Mod_ID, MontarProtocoloMensagemRecebida(Mensagem.idMensagem));
bool Conectar = Partes[1] == "1"; }
if (ID == "MD") {
_TaxaAmostragem = Partes[2].toInt();
EnviarDadosSerial(MontarProtocoloSensor(sCFG, "MD", Conectar ? "1" : "0"));
vTaskDelay(pdMS_TO_TICKS(100)); void ProcessarChk(ProtocoloSerial Mensagem) {
EnviarDadosSerial(Mod_ID, MontarProtocoloVerificacao(D_Code, VERSION));
}
Conectado = Conectar; void ProcessarCfg(ProtocoloSerial Mensagem) {
std::vector<String> Partes = SplitString(Mensagem.protocolo, SplitParams);
String ID = Partes[0];
bool Conectar = Partes[1] == "1";
if (ID == Mod_ID) {
_TaxaAmostragem = Partes[2].toInt();
TiposBarramentos txB = (TiposBarramentos)Partes[3].toInt();
int txP = Partes[4].toInt();
TiposBarramentos rxB = (TiposBarramentos)Partes[5].toInt();
int rxP = Partes[6].toInt();
TiposBarramentos MtxB = (TiposBarramentos)Partes[7].toInt();
int MtxP = Partes[8].toInt();
TiposBarramentos MrxB = (TiposBarramentos)Partes[9].toInt();
int MrxP = Partes[10].toInt();
TiposBarramentos MmdB = (TiposBarramentos)Partes[11].toInt();
int MmdP = Partes[12].toInt();
_pinModbusMD = MmdP;
_pinModbusRX = MrxP;
_pinModbusTX = MtxP;
InicializarModbus(Conectar, _pinModbusRX, _pinModbusTX, _pinModbusMD);
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, Mod_ID, Conectar ? "1" : "0"));
vTaskDelay(100);
Conectado = Conectar;
}
else if (ID == MotorMOV._ID) {
if (Conectar) {
MotorMOV._endereco = stringToByte(Partes[2]);
MotorMOV._numPolos = Partes[3].toInt();
MotorMOV._rampa = Partes[4].toInt();
MotorMOV._rpmMax = Partes[5].toInt();
MotorMOV._pinoTMP = PinoModel(Partes[7].toInt(), (TiposBarramentos)Partes[6].toInt(), _INPUT, ANALOGICO);
MotorMOV.Inicializar();
} }
else { else {
int canal = Partes[2].toInt(); MotorMOV.Desligar();
String addr = Partes[3];
int num_polos = Partes[4].toInt();
int rampa = Partes[5].toInt();
int rpm_max = Partes[6].toInt();
TiposBarramentos tmpB = (TiposBarramentos)Partes[7].toInt();
int tmp = Partes[8].toInt();
MotorBLDC* _motor = MotorPorID(ID);
if (Conectar) {
_motor->_canal = canal;
_motor->_endereco = stringToByte(addr);
_motor->_numPolos = num_polos;
_motor->_rampa = rampa;
_motor->_rpmMax = rpm_max;
_motor->_pinoTMP = PinoModel(tmp, tmpB, _INPUT, ANALOGICO);
_motor->Inicializar();
}
else {
_motor->Desligar();
}
vTaskDelay(pdMS_TO_TICKS(500));
} }
vTaskDelay(500);
} }
else if (_funcao == Cmd) { else if (ID == MotorDIR._ID) {
std::vector<String> Partes = SplitString(Protocolo, (char*)","); if (Conectar) {
MotorDIR._Estabilizar = Partes[2] == "1";
MotorDIR._Angulo_Offset = Partes[3].toInt();
MotorDIR._pinoPUL = PinoModel(Partes[5].toInt(), (TiposBarramentos)Partes[4].toInt(), _PWM);
MotorDIR._pinoDIR = PinoModel(Partes[7].toInt(), (TiposBarramentos)Partes[6].toInt(), _OUTPUT);
MotorDIR._pinoENA = PinoModel(Partes[9].toInt(), (TiposBarramentos)Partes[8].toInt(), _OUTPUT);
MotorDIR._pinoEncoder = PinoModel(Partes[11].toInt(), (TiposBarramentos)Partes[10].toInt(), _INPUT, ANALOGICO);
String ID = Partes[0]; MotorDIR.Inicializar();
}
MotorBLDC* _motor = MotorPorID(ID); else {
MotorDIR.Desligar();
_motor->_SentidoSP = (Sentido)Partes[1].toInt(); }
_motor->_Ligado = _motor->_SentidoSP != Parado;
_motor->_RPM_SP = Partes[2].toInt();
_motor->_Freio = Partes[3] == "1";
_motor->AtualizarDadosControle();
}*/
EnviarDadosSerial(Mod_ID, MontarProtocoloMensagemRecebida(idMensagem));
vTaskDelay(500);
}
}
void ProcessarCmd(ProtocoloSerial Mensagem) {
std::vector<String> Partes = SplitString(Mensagem.protocolo, SplitParams);
String ID = Partes[0];
if (ID == MotorMOV._ID) {
MotorMOV._SentidoSP = (Sentido)Partes[1].toInt();
MotorMOV._Ligado = MotorMOV._SentidoSP != Parado;
MotorMOV._RPM_SP = Partes[2].toInt();
MotorMOV._Freio = Partes[3] == "1";
MotorMOV.AtualizarDadosControle();
}
else if (ID == MotorDIR._ID) {
MotorDIR._Sentido_SP = (Sentido)Partes[1].toInt();
MotorDIR._Angulo_SP = Partes[2].toInt();
MotorDIR._frequencia = (Partes[3].toInt() / 100.0) * MotorDIR.FrequenciaMaxima;
MotorDIR.AtualizarPWM();
MotorDIR._MotorLigado = MotorDIR._Sentido_SP != Parado;
}
}
void ProcessarReq(ProtocoloSerial Mensagem) {
std::vector<String> Partes = SplitString(Mensagem.protocolo, SplitParams);
String ID = Partes[0];
if (ID == MotorMOV._ID) {
MotorMOV.RequisitarDados();
}
else if (ID == MotorDIR._ID) {
MotorDIR.RequisitarDados();
}
} }