iniciado
This commit is contained in:
parent
562d6b724a
commit
d666143af5
Binary file not shown.
|
|
@ -3,52 +3,8 @@
|
|||
"WorkspaceRootPath": "C:\\ZendionINC\\agrobot_base\\AgroBase\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\modules\\direcionalmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\modules\\direcionalmodel.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\\movimentacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\modules\\movimentacaomodel.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\\forms\\movimentacao\\frmmovconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\movimentacao\\frmmovconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
|
||||
},
|
||||
{
|
||||
"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\\modules\\pinoutmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\modules\\pinoutmodel.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\\frmacompanhamento.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmacompanhamento.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
|
||||
},
|
||||
{
|
||||
"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\\models\\variaveis.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\variaveis.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\\sensoriamentomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\modules\\sensoriamentomodel.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\\wt901cservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\wt901cservice.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\\enuns.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}"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
|
|
@ -58,157 +14,19 @@
|
|||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 2,
|
||||
"SelectedChildIndex": 0,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"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": "AQIAAOkAAAAAAAAAAIA9wAsBAAAAAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-05T13:56:57.085Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"Title": "frmMovConfig.cs [Design]",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Movimentacao\\frmMovConfig.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Forms\\Movimentacao\\frmMovConfig.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Movimentacao\\frmMovConfig.cs [Design]",
|
||||
"RelativeToolTip": "AgroBase\\Forms\\Movimentacao\\frmMovConfig.cs [Design]",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-05T17:08:27.297Z",
|
||||
"EditorCaption": " [Design]"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "DirecionalModel.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\DirecionalModel.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Models\\Modules\\DirecionalModel.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\DirecionalModel.cs",
|
||||
"RelativeToolTip": "AgroBase\\Models\\Modules\\DirecionalModel.cs",
|
||||
"ViewState": "AQIAAAgAAAAAAAAAAIAwwKoAAAAAAAAA",
|
||||
"Title": "Enuns.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Enuns.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Models\\Enuns.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Enuns.cs",
|
||||
"RelativeToolTip": "AgroBase\\Models\\Enuns.cs",
|
||||
"ViewState": "AQIAAAgAAAAAAAAAAAAxwDUAAAAMAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-05T12:25:23.841Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 4,
|
||||
"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": "AQIAAMQCAAAAAAAAAIA9wN8CAAAfAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-05T12:11:58.639Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"Title": "PinoutModel.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\PinoutModel.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Models\\Modules\\PinoutModel.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\PinoutModel.cs",
|
||||
"RelativeToolTip": "AgroBase\\Models\\Modules\\PinoutModel.cs",
|
||||
"ViewState": "AQIAABUAAAAAAAAAAAA4wIAAAAAAAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-05T11:57:33.236Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 6,
|
||||
"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": "AQIAAAcAAAAAAAAAAAASwDkAAAAAAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-05T11:19:50.984Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 8,
|
||||
"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": "AQIAAAAAAAAAAAAAAAAAAHQAAAAUAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-04T13:26:58.628Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 7,
|
||||
"Title": "frmAcompanhamento.cs [Design]",
|
||||
"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 [Design]",
|
||||
"RelativeToolTip": "AgroBase\\Forms\\frmAcompanhamento.cs [Design]",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-04T13:26:35.932Z",
|
||||
"EditorCaption": " [Design]"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 9,
|
||||
"Title": "Variaveis.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Variaveis.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Models\\Variaveis.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Variaveis.cs",
|
||||
"RelativeToolTip": "AgroBase\\Models\\Variaveis.cs",
|
||||
"ViewState": "AQIAAIgAAAAAAAAAAAAIwJ0BAABPAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-04T11:07:28.156Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 10,
|
||||
"Title": "SensoriamentoModel.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\SensoriamentoModel.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Models\\Modules\\SensoriamentoModel.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\SensoriamentoModel.cs",
|
||||
"RelativeToolTip": "AgroBase\\Models\\Modules\\SensoriamentoModel.cs",
|
||||
"ViewState": "AQIAAIcBAAAAAAAAAAAgwNoBAACSAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-04T11:06:48.719Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 11,
|
||||
"Title": "WT901CService.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\WT901CService.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Services\\WT901CService.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\WT901CService.cs",
|
||||
"RelativeToolTip": "AgroBase\\Services\\WT901CService.cs",
|
||||
"ViewState": "AQIAAAAAAAAAAAAAAAAAABwAAAAQAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-04T10:42:18.417Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "MovimentacaoModel.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\MovimentacaoModel.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Models\\Modules\\MovimentacaoModel.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\MovimentacaoModel.cs",
|
||||
"RelativeToolTip": "AgroBase\\Models\\Modules\\MovimentacaoModel.cs",
|
||||
"ViewState": "AQIAAIcAAAAAAAAAAADwv58AAAAkAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-06-04T10:59:59.838Z",
|
||||
"WhenOpened": "2024-06-06T10:38:10.351Z",
|
||||
"EditorCaption": ""
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -7,6 +7,12 @@ enum T_Code {
|
|||
Dir = 101,
|
||||
Sen = 102,
|
||||
Atu = 103,
|
||||
Gps = 104,
|
||||
Pzm = 105,
|
||||
Lra = 106,
|
||||
Wit = 107,
|
||||
Bld = 108,
|
||||
Mvd = 109,
|
||||
};
|
||||
|
||||
enum F_Code {
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ class PinoModel {
|
|||
}
|
||||
};
|
||||
|
||||
void iniciarMCP(T_Code Modulo, int sda, int scl, byte endereco, bool Mandatorio = false) {
|
||||
void iniciarMCP(T_Code Modulo, String Mod_ID, int sda, int scl, byte endereco, bool Mandatorio = false) {
|
||||
Serial.println("Iniciando MCP23X17...");
|
||||
if (!mcpInicializado) {
|
||||
bool init = Wire.begin(sda, scl);
|
||||
|
|
@ -99,9 +99,9 @@ void iniciarMCP(T_Code Modulo, int sda, int scl, byte endereco, bool Mandatorio
|
|||
Serial.println("Erro ao iniciar MCP23X17!");
|
||||
if (Mandatorio) {
|
||||
Serial.println("Conexão obrigatória, tentando novamente em 5 segundos...");
|
||||
EnviarDadosSerial(MontarProtocoloErro(Modulo));
|
||||
EnviarDadosSerial(Mod_ID, MontarProtocoloErro(Modulo));
|
||||
delay(5000);
|
||||
iniciarMCP(Modulo, sda, scl, endereco, Mandatorio);
|
||||
iniciarMCP(Modulo, Mod_ID, sda, scl, endereco, Mandatorio);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -95,8 +95,9 @@ std::vector<ProtocoloSerial> LerBufferSerialFila() {
|
|||
|
||||
|
||||
|
||||
void EnviarDadosSerial(String Mensagem) {
|
||||
Serial.println(Mensagem);
|
||||
void EnviarDadosSerial(String ID, String Mensagem) {
|
||||
String ProtocoloEnvio = ID + ";" + Mensagem;
|
||||
Serial.println(ProtocoloEnvio);
|
||||
Serial.flush();
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,401 @@
|
|||
// Dispositivo: Movimentação e Direcional Unificados
|
||||
// Versão Firmware: 1
|
||||
// Ultima atualização: 06/06/2024
|
||||
// Atualização: Unificação dos módulos direcional e movimentação
|
||||
|
||||
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.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\Pinout.h"
|
||||
#include <HardwareSerial.h>
|
||||
#include <SimpleKalmanFilter.h>
|
||||
|
||||
#define D_Code Mvd
|
||||
#define VERSION 1
|
||||
String Mod_ID = "";
|
||||
int Cod_Alarme = 0;
|
||||
|
||||
#define _pinoLED RGB_BUILTIN
|
||||
#define _pinoAddr0 36
|
||||
#define _pinoAddr1 39
|
||||
|
||||
void AtualizarEnderecoModulo() {
|
||||
bool A0 = digitalRead(_pinoAddr0) == 1;
|
||||
bool A1 = digitalRead(_pinoAddr1) == 1;
|
||||
|
||||
if (!A0 && !A1) {
|
||||
Mod_ID = "ET";
|
||||
}
|
||||
else if (A0 && !A1) {
|
||||
Mod_ID = "EF";
|
||||
}
|
||||
else if (!A0 && A1) {
|
||||
Mod_ID = "DT";
|
||||
}
|
||||
else if (A0 && A1) {
|
||||
Mod_ID = "DF";
|
||||
}
|
||||
}
|
||||
|
||||
long _baudRate = 115200;
|
||||
bool Conectado = false;
|
||||
int _TaxaAmostragem = 500;
|
||||
|
||||
|
||||
class MotorBLDC {
|
||||
public:
|
||||
String _ID = (String)Mov;
|
||||
|
||||
bool Iniciado = false;
|
||||
bool Testando = false;
|
||||
|
||||
PinoModel _pinoTMP;
|
||||
SimpleKalmanFilter* tempKalman;
|
||||
|
||||
byte _endereco;
|
||||
int _numPolos;
|
||||
int _rampa;
|
||||
int _rpmMax;
|
||||
|
||||
// Consumo
|
||||
double RPM;
|
||||
double RPM_SP;
|
||||
double Temperatura;
|
||||
double TemperaturaDriver;
|
||||
double Tensao;
|
||||
double CorrenteMax;
|
||||
bool Ligado;
|
||||
bool Freio;
|
||||
Sentido _Sentido = Parado;
|
||||
int CodAlarme;
|
||||
|
||||
// Entrada de dados
|
||||
double _RPM_SP;
|
||||
bool _Ligado = false;
|
||||
bool _Freio = false;
|
||||
Sentido _SentidoSP = Parado;
|
||||
|
||||
|
||||
void Inicializar() {
|
||||
if (Iniciado) {
|
||||
EnviarDadosSerial(Mod_ID, _ID + " ja inicializado");
|
||||
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
|
||||
return;
|
||||
}
|
||||
|
||||
Iniciado = ConfigurarDriver();
|
||||
|
||||
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);
|
||||
|
||||
EnviarDadosSerial(Mod_ID, _ID + " Iniciado");
|
||||
}
|
||||
|
||||
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
|
||||
}
|
||||
|
||||
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(MovTaskHandle);
|
||||
|
||||
// Redefinir as configurações para os valores iniciais
|
||||
_pinoTMP.Desconectar();
|
||||
|
||||
// Outras redefinições de variáveis de estado, se necessário
|
||||
delete tempKalman;
|
||||
|
||||
EnviarDadosSerial(Mod_ID, _ID + " Desligado");
|
||||
|
||||
Iniciado = false;
|
||||
|
||||
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
|
||||
|
||||
AtualizarDadosControle(true);
|
||||
}
|
||||
|
||||
ModbusGetResponse EnviarComandoModbus(byte endereco, byte funcao, byte registro, int valor, bool aguardarResposta = true) {
|
||||
const int maxTentativas = 2;
|
||||
int tentativas = 0;
|
||||
bool sucesso = false;
|
||||
ModbusGetResponse resposta;
|
||||
|
||||
while (tentativas < maxTentativas && !sucesso) {
|
||||
uint8_t response[256];
|
||||
uint8_t length = 0;
|
||||
|
||||
sendModbusCommand(endereco, funcao, registro, valor, response, length, aguardarResposta);
|
||||
|
||||
if (aguardarResposta) {
|
||||
// GET
|
||||
if (funcao == 0x03) {
|
||||
if (length >= 5) { // Verifica se a resposta tem pelo menos 5 bytes (endereco, codigo_comando, numero_registros, 2 bytes de dados, 2 bytes de CRC)
|
||||
resposta._success = true;
|
||||
resposta._address = response[0];
|
||||
resposta._command_code = response[1];
|
||||
resposta._num_registers = response[2];
|
||||
|
||||
if (resposta._num_registers == 2) { // Caso de 2 bytes (sem ponto flutuante)
|
||||
uint16_t value = (response[3] << 8) | response[4]; // Combina os dois bytes
|
||||
resposta._value = static_cast<double>(value); // Converte para double
|
||||
sucesso = true;
|
||||
} else if (resposta._num_registers == 4 && length >= 7) { // Caso de 4 bytes (com ponto flutuante)
|
||||
uint16_t highBytes = (response[3] << 8) | response[4]; // Combina os dois primeiros bytes
|
||||
uint16_t lowBytes = (response[5] << 8) | response[6]; // Combina os dois últimos bytes
|
||||
|
||||
// Converte para double
|
||||
resposta._value = highBytes + (lowBytes / 10000.0); // Supondo que os valores após a vírgula são representados em 4 dígitos decimais
|
||||
sucesso = true;
|
||||
} else {
|
||||
Serial.println("Numero de registros inesperado ou resposta incompleta.");
|
||||
resposta._success = false;
|
||||
}
|
||||
} else {
|
||||
Serial.println("Resposta incompleta.");
|
||||
resposta._success = false;
|
||||
}
|
||||
}
|
||||
// SET
|
||||
else if (funcao == 0x06) {
|
||||
if (length >= 8) {
|
||||
resposta._success = true;
|
||||
resposta._address = response[0];
|
||||
resposta._command_code = response[1];
|
||||
resposta._num_registers = 0;
|
||||
resposta._value = (response[4] << 8) | response[5];
|
||||
sucesso = true;
|
||||
} else {
|
||||
Serial.println("Erro ao enviar comando");
|
||||
resposta._success = false;
|
||||
}
|
||||
}
|
||||
|
||||
tentativas++;
|
||||
}
|
||||
else {
|
||||
sucesso = true;
|
||||
resposta._success = sucesso;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return resposta;
|
||||
}
|
||||
|
||||
bool ConfigurarDriver() {
|
||||
ModbusGetResponse a = EnviarComandoModbus(_endereco, 0x06, 0x00B6, 1);
|
||||
if (a._success) {
|
||||
ModbusGetResponse b = EnviarComandoModbus(_endereco, 0x06, 0x0076, 0);
|
||||
if (b._success) {
|
||||
ModbusGetResponse c = EnviarComandoModbus(_endereco, 0x06, 0x0086, _numPolos);
|
||||
if (c._success) {
|
||||
ModbusGetResponse d = EnviarComandoModbus(_endereco, 0x06, 0x008A, _rampa);
|
||||
if (d._success) {
|
||||
ModbusGetResponse e = EnviarComandoModbus(_endereco, 0x06, 0x0092, _rpmMax);
|
||||
return e._success;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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() {
|
||||
RPM_SP = EnviarComandoModbus(_endereco, 0x03, 0x0056, 1)._value;
|
||||
RPM = EnviarComandoModbus(_endereco, 0x03, 0x005F, 1)._value;
|
||||
Ligado = EnviarComandoModbus(_endereco, 0x03, 0x0066, 1)._value == 1;
|
||||
Freio = EnviarComandoModbus(_endereco, 0x03, 0x006A, 1)._value == 1;
|
||||
_Sentido = Ligado ? EnviarComandoModbus(_endereco, 0x03, 0x006D, 1)._value == 1 ? Horario : Antihorario : Parado;
|
||||
CodAlarme = EnviarComandoModbus(_endereco, 0x03, 0x0076, 1)._value;
|
||||
Tensao = EnviarComandoModbus(_endereco, 0x03, 0x00C8, 2)._value;
|
||||
CorrenteMax = EnviarComandoModbus(_endereco, 0x03, 0x0096, 2)._value;
|
||||
TemperaturaDriver = EnviarComandoModbus(_endereco, 0x03, 0x00D2, 2)._value;
|
||||
}
|
||||
|
||||
void AferirTemperatura() {
|
||||
int leitura = _pinoTMP.get();
|
||||
float leituraNormalizada = tempKalman->updateEstimate(leitura);
|
||||
Temperatura = leituraNormalizada;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
MotorBLDC MotorMOV;
|
||||
|
||||
void setup() {
|
||||
pinMode(_pinoAddr0, INPUT);
|
||||
pinMode(_pinoAddr1, INPUT);
|
||||
|
||||
AtualizarEnderecoModulo();
|
||||
|
||||
Serial.begin(_baudRate);
|
||||
|
||||
delay(10);
|
||||
|
||||
InicializarModbus();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
std::vector<ProtocoloSerial> protocolos = LerBufferSerialFila();
|
||||
|
||||
for (int i = 0; i < protocolos.size(); i++) {
|
||||
ProcessarProtocolo(protocolos[i].protocolo, protocolos[i].funcao, protocolos[i].idMensagem);
|
||||
}
|
||||
}
|
||||
|
||||
void ProcessarProtocolo(String Protocolo, F_Code _funcao, int idMensagem) {
|
||||
|
||||
if (_funcao == Chk) {
|
||||
EnviarDadosSerial(Mod_ID, MontarProtocoloVerificacao(D_Code, VERSION));
|
||||
}
|
||||
/*else if (_funcao == Cfg) {
|
||||
std::vector<String> Partes = SplitString(Protocolo, (char*)",");
|
||||
|
||||
String ID = Partes[0];
|
||||
bool Conectar = Partes[1] == "1";
|
||||
if (ID == "MD") {
|
||||
_TaxaAmostragem = Partes[2].toInt();
|
||||
|
||||
EnviarDadosSerial(MontarProtocoloSensor(sCFG, "MD", Conectar ? "1" : "0"));
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(100));
|
||||
|
||||
Conectado = Conectar;
|
||||
}
|
||||
else {
|
||||
int canal = Partes[2].toInt();
|
||||
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));
|
||||
}
|
||||
}
|
||||
else if (_funcao == Cmd) {
|
||||
std::vector<String> Partes = SplitString(Protocolo, (char*)",");
|
||||
|
||||
String ID = Partes[0];
|
||||
|
||||
MotorBLDC* _motor = MotorPorID(ID);
|
||||
|
||||
_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));
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue