diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/1e926ec3-31ba-4fb8-abf3-455b5fa822c2.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/1e926ec3-31ba-4fb8-abf3-455b5fa822c2.vsidx deleted file mode 100644 index adbfb7864..000000000 Binary files a/AgroBase/.vs/AgroBase/FileContentIndex/1e926ec3-31ba-4fb8-abf3-455b5fa822c2.vsidx and /dev/null differ diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/365693cd-9bf5-4956-826f-7c46d8a6471a.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/365693cd-9bf5-4956-826f-7c46d8a6471a.vsidx deleted file mode 100644 index 2d1cee25d..000000000 Binary files a/AgroBase/.vs/AgroBase/FileContentIndex/365693cd-9bf5-4956-826f-7c46d8a6471a.vsidx and /dev/null differ diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/659dad43-4990-44c6-94cf-c2f184c7ed5b.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/659dad43-4990-44c6-94cf-c2f184c7ed5b.vsidx new file mode 100644 index 000000000..508297f11 Binary files /dev/null and b/AgroBase/.vs/AgroBase/FileContentIndex/659dad43-4990-44c6-94cf-c2f184c7ed5b.vsidx differ diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/abd5b484-1a2f-4d8a-8489-f7bb3c3c318d.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/abd5b484-1a2f-4d8a-8489-f7bb3c3c318d.vsidx deleted file mode 100644 index 3203b4969..000000000 Binary files a/AgroBase/.vs/AgroBase/FileContentIndex/abd5b484-1a2f-4d8a-8489-f7bb3c3c318d.vsidx and /dev/null differ diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/cc4b70e1-766b-41c7-8a36-18c30b65b2c1.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/cc4b70e1-766b-41c7-8a36-18c30b65b2c1.vsidx deleted file mode 100644 index 49373b00a..000000000 Binary files a/AgroBase/.vs/AgroBase/FileContentIndex/cc4b70e1-766b-41c7-8a36-18c30b65b2c1.vsidx and /dev/null differ diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/e222b3cf-d824-401f-9de4-c937c46f01ab.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/e222b3cf-d824-401f-9de4-c937c46f01ab.vsidx deleted file mode 100644 index e5b357a24..000000000 Binary files a/AgroBase/.vs/AgroBase/FileContentIndex/e222b3cf-d824-401f-9de4-c937c46f01ab.vsidx and /dev/null differ diff --git a/AgroBase/.vs/AgroBase/v17/.suo b/AgroBase/.vs/AgroBase/v17/.suo index b12956aea..bf9f7aaba 100644 Binary files a/AgroBase/.vs/AgroBase/v17/.suo and b/AgroBase/.vs/AgroBase/v17/.suo differ diff --git a/AgroBase/.vs/AgroBase/v17/DocumentLayout.json b/AgroBase/.vs/AgroBase/v17/DocumentLayout.json index 06f100a9c..f5d652ecd 100644 --- a/AgroBase/.vs/AgroBase/v17/DocumentLayout.json +++ b/AgroBase/.vs/AgroBase/v17/DocumentLayout.json @@ -3,20 +3,16 @@ "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\\mpccontrolleraprimorado.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\mpccontrolleraprimorado.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\\oidcanservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\oidcanservice.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\\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\\models\\modules\\dispositivobasemodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\modules\\dispositivobasemodel.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\\atuadormodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\modules\\atuadormodel.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}" } ], "DocumentGroupContainers": [ @@ -26,58 +22,45 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 0, + "SelectedChildIndex": 2, "Children": [ - { - "$type": "Document", - "DocumentIndex": 0, - "Title": "MPCControllerAprimorado.cs", - "DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\MPCControllerAprimorado.cs", - "RelativeDocumentMoniker": "AgroBase\\Models\\MPCControllerAprimorado.cs", - "ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\MPCControllerAprimorado.cs", - "RelativeToolTip": "AgroBase\\Models\\MPCControllerAprimorado.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAABoAAABcAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-16T16:33:32.578Z", - "EditorCaption": "" - }, { "$type": "Document", "DocumentIndex": 2, - "Title": "DispositivoBaseModel.cs", - "DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\DispositivoBaseModel.cs", - "RelativeDocumentMoniker": "AgroBase\\Models\\Modules\\DispositivoBaseModel.cs", - "ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\DispositivoBaseModel.cs", - "RelativeToolTip": "AgroBase\\Models\\Modules\\DispositivoBaseModel.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAnAAAA", + "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": "AQIAAAAAAAAAAAAAAAAAAPEAAAAzAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-16T13:20:21.786Z", + "WhenOpened": "2025-05-02T10:28:02.411Z", "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 1, - "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": "AQIAABsHAAAAAAAAAAAuwEUIAAAOAAAA", + "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": "AQIAAPYAAAAAAAAAAAAwwF8BAAA/AAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-15T10:44:14.963Z", + "WhenOpened": "2025-05-02T09:59:28.094Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 3, - "Title": "AtuadorModel.cs", - "DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\AtuadorModel.cs", - "RelativeDocumentMoniker": "AgroBase\\Models\\Modules\\AtuadorModel.cs", - "ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Modules\\AtuadorModel.cs", - "RelativeToolTip": "AgroBase\\Models\\Modules\\AtuadorModel.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAEAAAAYAAAA", + "DocumentIndex": 0, + "Title": "OIDCanService.cs", + "DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\OIDCanService.cs", + "RelativeDocumentMoniker": "AgroBase\\Services\\OIDCanService.cs", + "ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\OIDCanService.cs", + "RelativeToolTip": "AgroBase\\Services\\OIDCanService.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAMAAAABGAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-15T10:40:50.024Z", + "WhenOpened": "2025-05-01T23:29:12.777Z", "EditorCaption": "" } ] diff --git a/AgroBase/AgroBase/Forms/frmMKS.cs b/AgroBase/AgroBase/Forms/frmMKS.cs index 05418bb6e..f239012d0 100644 --- a/AgroBase/AgroBase/Forms/frmMKS.cs +++ b/AgroBase/AgroBase/Forms/frmMKS.cs @@ -2377,7 +2377,7 @@ namespace AgroBase.Forms { if (!CanService.IsConnected) { - CanService.DefinirPortaCOM(new SerialPort(cmbPorta.Text, Convert.ToInt32(cmbBaud.Text))); + Task.Run(async () => await CanService.DefinirPortaCOM(new SerialPort(cmbPorta.Text, Convert.ToInt32(cmbBaud.Text)))); } if (CanService.IsConnected) diff --git a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs index 32619ef64..939c61ed3 100644 --- a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs +++ b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs @@ -392,7 +392,11 @@ namespace AgroBase.Models.Modules { if (!CanService.IsConnected) { - CanService.DefinirPortaCOM(porta); + bool sucesso = await CanService.DefinirPortaCOM(porta); + if (!sucesso) + { + return false; + } } CanService.RegistrarHandler(_EnderecoCAN_Rx, _AtuHandler); diff --git a/AgroBase/AgroBase/Models/Modules/MovimentacaoModel.cs b/AgroBase/AgroBase/Models/Modules/MovimentacaoModel.cs index fc2e63a61..af8996856 100644 --- a/AgroBase/AgroBase/Models/Modules/MovimentacaoModel.cs +++ b/AgroBase/AgroBase/Models/Modules/MovimentacaoModel.cs @@ -30,6 +30,7 @@ namespace AgroBase.Models.Modules return Leitura?.CorrenteMotor != 0; } } + public double LeituraRPM { get; set; } = 0; public bool ComandoLigado { get; set; } = false; //public bool Freio { get; set; } = false; public OidCodigoErro CodigoAlarme @@ -395,14 +396,12 @@ namespace AgroBase.Models.Modules return; } - byte Addr = _EnderecoCAN_Tx; - DateTime Agora = DateTime.Now; - - bool SentidoAlterado = Sentido_SP != Sentido.Parado && (Leitura == null || Leitura.Direcao != Sentido_SP); - bool RPMAlterado = ComandoLigado && (Leitura == null || _Controle.PercentualVelocidadeSP != Variaveis.OperacaoEmAndamento.ControleAnterior.PercentualVelocidadeSP); - bool LigadoAlterado = Leitura == null || ComandoLigado != LeituraLigado; - bool FreioAlterado = Leitura == null || Leitura.Freado != Freado; - bool EnviaComando = SentidoAlterado || RPMAlterado || LigadoAlterado; + bool PrimeiraLeitura = Leitura == null; + bool SentidoAlterado = (Leitura?.Direcao ?? Sentido.Parado) != Sentido_SP; + bool RPMAlterado = LeituraRPM != RPM_SP; + bool LigadoAlterado = LeituraLigado != ComandoLigado; + bool FreioAlterado = (Leitura?.Freado ?? false) != Freado; + bool EnviaComando = PrimeiraLeitura || SentidoAlterado || RPMAlterado || LigadoAlterado; OidFuncCode modoControle = Freado ? OidFuncCode.ComandoCorrenteFreio : @@ -418,6 +417,8 @@ namespace AgroBase.Models.Modules float velocidade = RPM_SP * mx; OIDCanService.ComandoControle(_EnderecoCAN_Tx, _EnderecoCAN_Rx, modoControle, velocidade); + + LeituraRPM = RPM_SP; } } diff --git a/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs b/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs index 251f5da89..7b1c9f65b 100644 --- a/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs +++ b/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs @@ -775,7 +775,11 @@ namespace AgroBase.Models.Modules { if (!CanService.IsConnected) { - CanService.DefinirPortaCOM(porta); + bool sucesso = await CanService.DefinirPortaCOM(porta); + if (!sucesso) + { + return false; + } } CanService.RegistrarHandler(_EnderecoCAN_Rx, _SenHandler); diff --git a/AgroBase/AgroBase/Services/CANService.cs b/AgroBase/AgroBase/Services/CANService.cs index 85e543459..c29a8bb31 100644 --- a/AgroBase/AgroBase/Services/CANService.cs +++ b/AgroBase/AgroBase/Services/CANService.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; -using System.Threading; using System.Threading.Tasks; using static AgroBase.Models.Enums; @@ -60,7 +59,6 @@ namespace AgroBase.Services public static SerialPort _PortaCAN; public static string _portName; private static int _baudRate; - private static object _lock = new object(); public static bool IsConnected { get; private set; } public static bool Iniciado { @@ -73,12 +71,11 @@ namespace AgroBase.Services private static AsyncTaskTimerModel tmrOuvirCAN; private static AsyncTaskTimerModel tmrProcessarCAN; private static StringBuilder SerialCANBuffer = new StringBuilder(); - private static object _framesLock = new object(); - private static readonly Queue FramesRecebidos = new Queue(); + private static ConcurrentQueue FramesRecebidos = new ConcurrentQueue(); private static readonly ConcurrentDictionary _roteadores = new ConcurrentDictionary(); private static byte? _ultimoIdEnviado = null; - private static List Mensagens = new List(); + private static ConcurrentDictionary MensagensPendentes = new ConcurrentDictionary(); public static void RegistrarHandler(byte endereco_rx, ICanMessageHandler handler) @@ -86,48 +83,51 @@ namespace AgroBase.Services _roteadores[endereco_rx] = handler; } - public static void DefinirPortaCOM(SerialPort Porta) + public static async Task DefinirPortaCOM(SerialPort Porta) { if (!IsConnected) { Porta.Close(); } + bool sucesso = false; + if (_PortaCAN == null || !IsConnected) { - lock (_lock) - { - _portName = Porta.PortName; - _baudRate = 115200; + _portName = Porta.PortName; + _baudRate = 115200; - _PortaCAN = new SerialPort(_portName, _baudRate, Parity.None, 8, StopBits.One); - _PortaCAN.Open(); + _PortaCAN = new SerialPort(_portName, _baudRate, Parity.None, 8, StopBits.One); + _PortaCAN.Open(); - EnviarComando("S6\r"); // 500Kbps - Thread.Sleep(100); - EnviarComando("O\r"); // Open CAN - Thread.Sleep(100); + sucesso = EnviarComando("S6\r"); // 500Kbps + if (!sucesso) return sucesso; + await Task.Delay(100); + sucesso = EnviarComando("O\r"); // Open CAN + await Task.Delay(100); + if (!sucesso) return sucesso; - tmrOuvirCAN?.Dispose(); - tmrOuvirCAN = new AsyncTaskTimerModel("tmrOuvirCAN", OuvirCAN, 5); - tmrOuvirCAN.Start(); + tmrOuvirCAN?.Dispose(); + tmrOuvirCAN = new AsyncTaskTimerModel("tmrOuvirCAN", OuvirCAN, 5); + tmrOuvirCAN.Start(); - tmrEnviarCAN?.Dispose(); - tmrEnviarCAN = new AsyncTaskTimerModel("tmrEnviarCAN", EnviarCAN, 100); - tmrEnviarCAN.Start(); + tmrEnviarCAN?.Dispose(); + tmrEnviarCAN = new AsyncTaskTimerModel("tmrEnviarCAN", EnviarCAN, 5); + tmrEnviarCAN.Start(); - tmrProcessarCAN?.Dispose(); - tmrProcessarCAN = new AsyncTaskTimerModel("tmrProcessarCAN", ProcessarCAN, 5); - tmrProcessarCAN.Start(); + tmrProcessarCAN?.Dispose(); + tmrProcessarCAN = new AsyncTaskTimerModel("tmrProcessarCAN", ProcessarCAN, 10); + tmrProcessarCAN.Start(); - IsConnected = true; - } + IsConnected = true; } if (_PortaCAN != null && !_PortaCAN.IsOpen) { _PortaCAN.Open(); } + + return sucesso; } private static async Task OuvirCAN() @@ -147,10 +147,7 @@ namespace AgroBase.Services if (!string.IsNullOrWhiteSpace(frame)) { - lock (_framesLock) - { - FramesRecebidos.Enqueue(frame); - } + FramesRecebidos.Enqueue(frame); } } else @@ -163,17 +160,7 @@ namespace AgroBase.Services private static async Task ProcessarCAN() { - string frame = null; - - lock (_framesLock) - { - if (FramesRecebidos.Count > 0) - { - frame = FramesRecebidos.Dequeue(); - } - } - - if (frame != null) + if (FramesRecebidos.TryDequeue(out string frame)) { ProcessarFrameCAN(frame); } @@ -198,20 +185,12 @@ namespace AgroBase.Services } byte fCodeRx = data[0]; - - var mensagem = new CanMessage(); - lock (Mensagens) - { - mensagem = Mensagens - .Where(x => x.IdRx == id) - .OrderBy(x => x.EnviadoEm) - .FirstOrDefault(x => x.Enviado && !x.Respondido && x.funcCodeRx == fCodeRx); - } + var mensagem = new CanMessage() { IdTx = (byte)id, IdRx = (byte)id, funcCodeRx = fCodeRx, DataRx = data }; - if (mensagem == null) + if (!MensagensPendentes.TryRemove(GerarChaveDicionarioFila(mensagem), out mensagem)) { - mensagem = new CanMessage { IdTx = (byte)id, IdRx = (byte)id, DataRx = data }; + mensagem = new CanMessage { IdTx = (byte)id, IdRx = (byte)id, funcCodeRx = fCodeRx, DataRx = data }; } mensagem.DataRx = data; @@ -226,6 +205,8 @@ namespace AgroBase.Services { Console.WriteLine($"[CAN] ID_Num não tratado: 0x{id:X2}, fCodeRx: 0x{fCodeRx:X2}"); } + + LimparMensagensAntigas(); } catch (Exception ex) { @@ -260,70 +241,51 @@ namespace AgroBase.Services ComResposta = get }; - lock (Mensagens) + string chave = GerarChaveDicionarioFila(novaMensagem); + + if (MensagensPendentes.ContainsKey(chave)) { - // Limpa mensagens antigas antes de avaliar - LimparMensagensAntigas(); - - var existente = Mensagens.FirstOrDefault(x => - x.IdTx == novaMensagem.IdTx && - x.funcCodeTx == novaMensagem.funcCodeTx && - x.funcCodeRx == novaMensagem.funcCodeRx && - x.ComResposta == novaMensagem.ComResposta && - x.DataTx.SequenceEqual(novaMensagem.DataTx) && - (!x.Enviado || (x.ComResposta && !x.Respondido)) // Está pendente - ); - - if (existente != null) - { - // Já existe mensagem igual aguardando ou pendente - return; - } - - // Log e adiciona - //Console.WriteLine($"[MSG] - MENSAGEM ADICIONADA NA FILA para o módulo {Dispositivo} - {FuncoesGlobais.ConverterComandoBytesParaTexto(novaMensagem.DataTx)}"); - Mensagens.Add(novaMensagem); + return; } + + MensagensPendentes.TryAdd(chave, novaMensagem); } private static CanMessage ObterProximaMensagem() { - lock (Mensagens) + var mensagensPendentes = MensagensPendentes.Values + .Where(x => !x.Enviado) + .ToList(); + + if (!mensagensPendentes.Any()) + return null; + + // Agrupa por IdTx e ordena os grupos + var idsDisponiveis = mensagensPendentes + .Select(x => x.IdTx) + .Distinct() + .OrderBy(x => x) + .ToList(); + + byte proximoId; + + if (!_ultimoIdEnviado.HasValue || !idsDisponiveis.Contains(_ultimoIdEnviado.Value)) { - var idsDisponiveis = Mensagens - .Where(x => !x.Enviado) - .Select(x => x.IdTx) - .Distinct() - .OrderBy(id => id) - .ToList(); - - if (!idsDisponiveis.Any()) - return null; - - byte proximoId; - - if (!_ultimoIdEnviado.HasValue || !idsDisponiveis.Contains(_ultimoIdEnviado.Value)) - { - // Começa pelo menor ID disponível - proximoId = idsDisponiveis.First(); - } - else - { - // Busca o próximo ID após o último usado - var index = idsDisponiveis.IndexOf(_ultimoIdEnviado.Value); - if (index + 1 < idsDisponiveis.Count) - proximoId = idsDisponiveis[index + 1]; - else - proximoId = idsDisponiveis.First(); // ciclo completo - } - - var msg = Mensagens - .Where(x => !x.Enviado && x.IdTx == proximoId) - .OrderBy(x => x.Momento) - .FirstOrDefault(); - - return msg; + proximoId = idsDisponiveis.First(); } + else + { + var index = idsDisponiveis.IndexOf(_ultimoIdEnviado.Value); + proximoId = (index + 1 < idsDisponiveis.Count) ? idsDisponiveis[index + 1] : idsDisponiveis.First(); + } + + // Seleciona a mensagem mais antiga com esse IdTx + var proximaMsg = mensagensPendentes + .Where(x => x.IdTx == proximoId) + .OrderBy(x => x.Momento) + .FirstOrDefault(); + + return proximaMsg; } private static async Task EnviarCAN() @@ -338,16 +300,18 @@ namespace AgroBase.Services if (_ultimoIdEnviado.HasValue && msg.IdTx == _ultimoIdEnviado.Value) { - await Task.Delay(5); + //await Task.Delay(5); } - lock (_lock) - { - EnviarComando(frame); + EnviarComando(frame); - msg.Enviado = true; - msg.EnviadoEm = DateTime.Now; - _ultimoIdEnviado = msg.IdTx; + msg.Enviado = true; + msg.EnviadoEm = DateTime.Now; + _ultimoIdEnviado = msg.IdTx; + + if (!msg.ComResposta) + { + MensagensPendentes.TryRemove(GerarChaveDicionarioFila(msg), out _); } } } @@ -363,26 +327,40 @@ namespace AgroBase.Services return frame; } - private static void EnviarComando(string comando) + private static bool EnviarComando(string comando) { if (_PortaCAN?.IsOpen == true) { - _PortaCAN.Write(comando); - - //Console.WriteLine($"[CAN] Frame enviado: {comando}"); + bool sucesso = SerialService.EnviarDadosPortaSerial(_PortaCAN, comando, false, 20); + if (sucesso) + { + //Console.WriteLine($"[CAN] Frame enviado: {comando}"); + } + else + { + Console.WriteLine($"[CAN] Erro ao enviar frame: {comando}"); + } + return sucesso; } + return false; } private static void LimparMensagensAntigas() { - lock (Mensagens) + var agora = DateTime.Now; + + foreach (var item in MensagensPendentes) { - var limite = DateTime.Now.AddSeconds(-5); // ⏱ 5 segundos de validade - Mensagens.RemoveAll(x => - (!x.ComResposta && x.Enviado) || // Mensagem que não precisa resposta e já foi enviada - (x.ComResposta && x.Respondido && x.RespondidoEm < limite) || // Resposta antiga - (x.ComResposta && x.Enviado && !x.Respondido && x.EnviadoEm < limite) // Enviada mas nunca respondida e já passou do prazo - ); + var msg = item.Value; + + if (!msg.ComResposta && msg.Enviado) // mensagem sem resposta e já enviada + MensagensPendentes.TryRemove(item.Key, out _); + + else if (msg.ComResposta && msg.Respondido) + MensagensPendentes.TryRemove(item.Key, out _); + + else if (msg.ComResposta && msg.Enviado && !msg.Respondido && msg.EnviadoEm < agora.AddSeconds(-5)) + MensagensPendentes.TryRemove(item.Key, out _); } } @@ -391,12 +369,10 @@ namespace AgroBase.Services tmrOuvirCAN?.Dispose(); tmrEnviarCAN?.Dispose(); - lock (Mensagens) - { - Mensagens.Clear(); - } + MensagensPendentes.Clear(); SerialCANBuffer.Clear(); + FramesRecebidos = new ConcurrentQueue(); _roteadores.Clear(); _ultimoIdEnviado = null; @@ -422,6 +398,11 @@ namespace AgroBase.Services return (byte)(soma & 0xFF); } + private static string GerarChaveDicionarioFila(CanMessage msg) + { + byte parametro = (msg?.DataTx?.Length ?? 0) > 1 ? msg.DataTx[1] : (byte)0x00; + return $"{msg.IdRx}_{msg.funcCodeRx}_{parametro}"; + } } } \ No newline at end of file diff --git a/AgroBase/AgroBase/Services/MKS057DCanService.cs b/AgroBase/AgroBase/Services/MKS057DCanService.cs index 1ce4c1f2a..22111e183 100644 --- a/AgroBase/AgroBase/Services/MKS057DCanService.cs +++ b/AgroBase/AgroBase/Services/MKS057DCanService.cs @@ -43,7 +43,11 @@ namespace AgroBase.Services { if (!CanService.IsConnected) { - CanService.DefinirPortaCOM(porta); + bool sucesso = await CanService.DefinirPortaCOM(porta); + if (!sucesso) + { + return false; + } } if (CanService.IsConnected) diff --git a/AgroBase/AgroBase/Services/OIDCanService.cs b/AgroBase/AgroBase/Services/OIDCanService.cs index 0b1d8ab51..72f0fc128 100644 --- a/AgroBase/AgroBase/Services/OIDCanService.cs +++ b/AgroBase/AgroBase/Services/OIDCanService.cs @@ -13,7 +13,6 @@ namespace AgroBase.Services public class OIDCanService { public static List DadosLeitura = new List(); - private static int _MStep { get; set; } = 16; private static T_Code Dispositivo { get; set; } = T_Code.Oid; private static OidHandler _OidHandler { get; set; } = new OidHandler(); private static AsyncTaskTimerModel tmrHeartbeat; @@ -37,7 +36,11 @@ namespace AgroBase.Services { if (!CanService.IsConnected) { - CanService.DefinirPortaCOM(porta); + bool sucesso = await CanService.DefinirPortaCOM(porta); + if (!sucesso) + { + return false; + } } if (CanService.IsConnected) @@ -84,7 +87,7 @@ namespace AgroBase.Services if (tmrHeartbeat == null || !(tmrHeartbeat?.IsRunning ?? false)) { tmrHeartbeat?.Dispose(); - tmrHeartbeat = new AsyncTaskTimerModel("tmrOidHeartbeat", tmrHeartbeat_Tick, 1000); + tmrHeartbeat = new AsyncTaskTimerModel("tmrOidHeartbeat", tmrHeartbeat_Tick, 500); tmrHeartbeat.Start(); } @@ -125,42 +128,43 @@ namespace AgroBase.Services public static void RequisitarDado(byte idTx, byte idRx, OidParametros dado) { - EnviarComando(Dispositivo, idTx, idRx, (byte)OidFuncCode.Consulta, new byte[] { (byte)dado }); + EnviarComando(Dispositivo, idTx, idRx, (byte)OidFuncCode.Consulta, new byte[] { (byte)dado }, true); } - public static void ComandoControle(byte idTx, byte idRx, OidFuncCode tipoControle, double setPoint) + public static void ComandoControle(byte idTx, byte idRx, OidFuncCode funcCode, double setPoint) { byte[] setPointBytes = null; - switch (tipoControle) + switch (funcCode) { case OidFuncCode.ComandoCorrente: case OidFuncCode.ComandoCorrenteFreio: case OidFuncCode.AjusteCorrenteMaxima: { short corrente_10mA = (short)(setPoint * 100); - setPointBytes = BitConverter.GetBytes(corrente_10mA); + setPointBytes = BitConverter.GetBytes(corrente_10mA).Reverse().ToArray(); break; } case OidFuncCode.ComandoVelocidade: { int erpm = (int)(setPoint * VariaveisEquipamento.NumeroPolosMotor); - setPointBytes = BitConverter.GetBytes(erpm); + setPointBytes = BitConverter.GetBytes(erpm).Reverse().ToArray(); break; } case OidFuncCode.ComandoCicloTrabalho: { short duty = (short)(Math.Max(-100, Math.Min(setPoint, 100)) * 10); - setPointBytes = BitConverter.GetBytes(duty); + setPointBytes = BitConverter.GetBytes(duty).Reverse().ToArray(); break; } case OidFuncCode.AjusteAceleracaoVelocidade: case OidFuncCode.AjusteDesaceleracaoVelocidade: { + if (setPoint <= 0) setPoint = 1; double erpmMax = VariaveisEquipamento.RPM_Max_Roda * VariaveisEquipamento.RelacaoRPM * VariaveisEquipamento.NumeroPolosMotor; int aceleracao = (int)(erpmMax / setPoint); // setPoint = tempo (s) - setPointBytes = BitConverter.GetBytes(aceleracao); + setPointBytes = BitConverter.GetBytes(aceleracao).Reverse().ToArray(); break; } case OidFuncCode.Heartbeat: @@ -170,7 +174,7 @@ namespace AgroBase.Services } default: { - Console.WriteLine($"[OID] Comando nao mapeado: {tipoControle.ToString()}"); + Console.WriteLine($"[OID] Comando nao mapeado: {funcCode.ToString()}"); break; } } @@ -178,10 +182,12 @@ namespace AgroBase.Services if (setPointBytes == null) return; - if (BitConverter.IsLittleEndian) - Array.Reverse(setPointBytes); + if (funcCode != OidFuncCode.Heartbeat) + { + //Console.WriteLine($"[OID] Comando enviado para fila: {idTx.ToString("X")} {((byte)funcCode).ToString("X")} {string.Join(" ", setPointBytes.Select(x => x.ToString("X")))}"); + } - EnviarComando(Dispositivo, idTx, idRx, (byte)tipoControle, setPointBytes); + EnviarComando(Dispositivo, idTx, idRx, (byte)funcCode, setPointBytes, false); } private static void ConfigurarDriver(MovimentacaoModel Modulo) @@ -210,6 +216,7 @@ namespace AgroBase.Services ComandoControle(Mod.MovMotor._EnderecoCAN_Tx, Mod.MovMotor._EnderecoCAN_Rx, OidFuncCode.Heartbeat, novoValor); + Mod.MovMotor.heartBeatValue = novoValor; } } } @@ -304,6 +311,8 @@ namespace AgroBase.Services OidParametros parametro = (OidParametros)mensagem.DataRx[1]; byte[] valorBytes = mensagem.DataRx.Skip(2).ToArray(); + //Console.WriteLine($"[OID] Dados brutos recebidos do driver {mensagem.IdTx} - {string.Join(" ", mensagem.DataRx.Select(x => x.ToString("X")))}"); + if (BitConverter.IsLittleEndian) Array.Reverse(valorBytes); diff --git a/AgroBase/AgroBase/Services/SerialService.cs b/AgroBase/AgroBase/Services/SerialService.cs index 397870844..157f264ef 100644 --- a/AgroBase/AgroBase/Services/SerialService.cs +++ b/AgroBase/AgroBase/Services/SerialService.cs @@ -36,7 +36,7 @@ namespace AgroBase.Services private static bool VarreduraEmAndamento = false; - public static bool EnviarDadosPortaSerial(SerialPort _porta, string Dados, bool DebugMode = false) + public static bool EnviarDadosPortaSerial(SerialPort _porta, string Dados, bool DebugMode = false, int timeout = 2000) { bool ForceDebug = false; if (ForceDebug) @@ -61,7 +61,7 @@ namespace AgroBase.Services try { // Define o tempo de espera máximo para a operação de escrita - _porta.WriteTimeout = 2000; // 2 segundos de timeout para escrita (ajuste conforme necessário) + _porta.WriteTimeout = timeout; // 2 segundos de timeout para escrita (ajuste conforme necessário) // Verifica se há dados para enviar if (string.IsNullOrEmpty(Dados)) diff --git a/AgroBase/AgroBase/bin/Debug/AgroBase.pdb b/AgroBase/AgroBase/bin/Debug/AgroBase.pdb index 4f391d556..d38b8bf00 100644 Binary files a/AgroBase/AgroBase/bin/Debug/AgroBase.pdb and b/AgroBase/AgroBase/bin/Debug/AgroBase.pdb differ diff --git a/AgroBase/AgroBase/bin/Debug/DawnCache/data_1 b/AgroBase/AgroBase/bin/Debug/DawnCache/data_1 index 932d8d60b..104d3a32b 100644 Binary files a/AgroBase/AgroBase/bin/Debug/DawnCache/data_1 and b/AgroBase/AgroBase/bin/Debug/DawnCache/data_1 differ diff --git a/AgroBase/AgroBase/bin/Debug/GPUCache/data_1 b/AgroBase/AgroBase/bin/Debug/GPUCache/data_1 index a5aa72e1f..10d95c474 100644 Binary files a/AgroBase/AgroBase/bin/Debug/GPUCache/data_1 and b/AgroBase/AgroBase/bin/Debug/GPUCache/data_1 differ diff --git a/AgroBase/AgroBase/bin/Debug/Parametros/parametersMvd-2_0.par b/AgroBase/AgroBase/bin/Debug/Parametros/parametersMvd-2_0.par index e56134e05..395ade588 100644 --- a/AgroBase/AgroBase/bin/Debug/Parametros/parametersMvd-2_0.par +++ b/AgroBase/AgroBase/bin/Debug/Parametros/parametersMvd-2_0.par @@ -1 +1 @@ -{"tmrRegistrador":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":1000,"StackTrace":"MovimentacaoUnificadaModel.IniciarRegistrador","Id":"tmrRegistrador_Mvd","TimeTick":"00:00:00"},"tmrRegistradorMOV":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":300,"StackTrace":"MovimentacaoUnificadaModel.IniciarRegistrador","Id":"tmrRegistrador_Mov","TimeTick":"00:00:00"},"tmrRegistradorDIR":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":300,"StackTrace":"MovimentacaoUnificadaModel.IniciarRegistrador","Id":"tmrRegistrador_Dir","TimeTick":"00:00:00"},"Dispositivo":109,"_EnderecoCAN_Tx":0,"_EnderecoCAN_Rx":0,"Conectado":true,"_TaxaAmostragem":1000,"DistanciaPercorridaOperacao":0.0,"TempoEmAtividade":0.0,"DistanciaPercorridaTotal":0.0,"DistanciaPercorridaParcial":0.0,"VelocidadeMedia":0.0,"DiametroRoda":0.365,"ReducaoMotorBLDC":5.0,"RPM_Max_MotorBLDC":500.0,"IP_Mov":"192.168.105.10","IP_Dir":"192.168.105.11","Modulos":[{"Modulo_ID":"ET","Disponivel":false,"RequisitarDados":false,"Conectado":true,"MovMotor":{"ID":"Mov","_EnderecoCAN_Tx":5,"_EnderecoCAN_Rx":5,"heartBeatValue":0,"Mod_ID":"ET","LeituraLigado":false,"ComandoLigado":false,"CodigoAlarme":0,"AlarmeMotor":false,"RPM_SP":0,"RPM_SP_Controle":0,"RPM_SP_Leitura":0,"Sentido_SP":0,"NumeroPolos":10,"Rampa":0,"CorrenteTorqueMaximo":40,"OffsetLeitura":1.0,"AlarmeComando":false,"RPM_Roda":0.0,"Sentido":0,"Temperatura":0.0,"TemperaturaDriver":29.0,"Tensao":15.0,"Corrente_Barramento":0.0,"Corrente_Motor":0.0,"Potencia":0.0,"CicloTrabalho":1.2,"RPM_Motor":0.0,"VelocidadeInstantanea":0.0,"Comandar":true,"AlarmeSensores":false,"Inicializado":true,"Leitura":{"EnderecoTx":5,"EnderecoRx":5,"Iniciado":true,"Configurado":false,"UltimoComandoRecebido":"2025-05-01T15:25:06.0211208-03:00","ModoControle":0,"CodigoAlarme":0,"ERPM":0,"CorrenteMotor":0.0,"CorrenteBarramento":0.0,"Direcao":0,"RPM":0.0,"Tensao":15.0,"Temperatura":29.0,"Potencia":0.0,"CicloTrabalho":1.2,"Freado":false,"PosicaoAbsoluta":0.0,"PosicaoRelativa":0.0,"ModoCodificador":0.0,"ErroHistorico":0.0,"IO_Status":0.0},"CompensacaoNecessaria":false,"ConfigSentidos":{"RodasDianteiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoArco":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RotacionarNoEixo":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoLateral":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"Diagnostico":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0}},"Funcoes":[12,14,9,5,10],"LogGrafico":[],"Alarmes":[{"Tipo":411,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false},{"Tipo":4,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false}],"ConfigFreio":{"Incremental":true,"AnguloInicial":10,"Leitura":false,"Controle":false}},"DirMotor":{"ID":"Dir","_EnderecoCAN_Tx":1,"_EnderecoCAN_Rx":1,"Mod_ID":"ET","Sentido_SP":0,"Angulo_SP":0.0,"FolgaMecanica":0.0,"Velocidade_Max":600.0,"Velocidade":240,"Sentido":0,"SentidoReal":1,"Angulo":0.0,"RPM":0.0,"IN1_Atuado":true,"IN2_Atuado":true,"Referenciando":false,"Comandar":true,"Inicializado":false,"Leitura":null,"UltimaDirecao":0,"UltimoComandoEnviado":"2025-04-23T16:04:24.3299975-03:00","RetornandoAzero":false,"EmMovimento":false,"AtingiuAnguloSP":true,"ConfigSentidos":{"RodasDianteiras":{"Frente":0,"Tras":0,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"MovimentoDiagonal":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"MovimentoArco":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"RotacionarNoEixo":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":1,"Parado":0},"MovimentoLateral":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"Diagnostico":{"Frente":2,"Tras":1,"Esquerda":1,"Direita":2,"Parado":0}},"Funcoes":[13,9,14,41]}},{"Modulo_ID":"EF","Disponivel":false,"RequisitarDados":false,"Conectado":false,"MovMotor":{"ID":"Mov","_EnderecoCAN_Tx":7,"_EnderecoCAN_Rx":7,"heartBeatValue":0,"Mod_ID":"EF","LeituraLigado":true,"ComandoLigado":false,"CodigoAlarme":0,"AlarmeMotor":false,"RPM_SP":0,"RPM_SP_Controle":0,"RPM_SP_Leitura":0,"Sentido_SP":0,"NumeroPolos":10,"Rampa":0,"CorrenteTorqueMaximo":40,"OffsetLeitura":1.0,"AlarmeComando":false,"RPM_Roda":0.0,"Sentido":0,"Temperatura":0.0,"TemperaturaDriver":0.0,"Tensao":0.0,"Corrente_Barramento":0.0,"Corrente_Motor":0.0,"Potencia":0.0,"CicloTrabalho":0.0,"RPM_Motor":0.0,"VelocidadeInstantanea":0.0,"Comandar":true,"AlarmeSensores":false,"Inicializado":false,"Leitura":null,"CompensacaoNecessaria":false,"ConfigSentidos":{"RodasDianteiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoArco":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RotacionarNoEixo":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoLateral":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"Diagnostico":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0}},"Funcoes":[12,14,9,5,10],"LogGrafico":[],"Alarmes":[{"Tipo":411,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false},{"Tipo":4,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false}],"ConfigFreio":{"Incremental":true,"AnguloInicial":10,"Leitura":false,"Controle":false}},"DirMotor":{"ID":"Dir","_EnderecoCAN_Tx":3,"_EnderecoCAN_Rx":3,"Mod_ID":"EF","Sentido_SP":0,"Angulo_SP":0.0,"FolgaMecanica":9.0,"Velocidade_Max":600.0,"Velocidade":240,"Sentido":0,"SentidoReal":2,"Angulo":0.0,"RPM":0.0,"IN1_Atuado":true,"IN2_Atuado":true,"Referenciando":false,"Comandar":true,"Inicializado":false,"Leitura":null,"UltimaDirecao":0,"UltimoComandoEnviado":"2025-04-23T16:08:00.9051359-03:00","RetornandoAzero":false,"EmMovimento":false,"AtingiuAnguloSP":true,"ConfigSentidos":{"RodasDianteiras":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"RodasTraseiras":{"Frente":0,"Tras":0,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"MovimentoArco":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"RotacionarNoEixo":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":1,"Parado":0},"MovimentoLateral":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"Diagnostico":{"Frente":2,"Tras":1,"Esquerda":1,"Direita":2,"Parado":0}},"Funcoes":[13,9,14,41]}},{"Modulo_ID":"DT","Disponivel":false,"RequisitarDados":false,"Conectado":false,"MovMotor":{"ID":"Mov","_EnderecoCAN_Tx":6,"_EnderecoCAN_Rx":6,"heartBeatValue":0,"Mod_ID":"DT","LeituraLigado":true,"ComandoLigado":false,"CodigoAlarme":0,"AlarmeMotor":false,"RPM_SP":0,"RPM_SP_Controle":0,"RPM_SP_Leitura":0,"Sentido_SP":0,"NumeroPolos":10,"Rampa":0,"CorrenteTorqueMaximo":40,"OffsetLeitura":1.0,"AlarmeComando":false,"RPM_Roda":0.0,"Sentido":0,"Temperatura":0.0,"TemperaturaDriver":0.0,"Tensao":0.0,"Corrente_Barramento":0.0,"Corrente_Motor":0.0,"Potencia":0.0,"CicloTrabalho":0.0,"RPM_Motor":0.0,"VelocidadeInstantanea":0.0,"Comandar":true,"AlarmeSensores":false,"Inicializado":false,"Leitura":null,"CompensacaoNecessaria":false,"ConfigSentidos":{"RodasDianteiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoArco":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RotacionarNoEixo":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoLateral":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"Diagnostico":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0}},"Funcoes":[12,14,9,5,10],"LogGrafico":[],"Alarmes":[{"Tipo":411,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false},{"Tipo":4,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false}],"ConfigFreio":{"Incremental":false,"AnguloInicial":170,"Leitura":false,"Controle":false}},"DirMotor":{"ID":"Dir","_EnderecoCAN_Tx":2,"_EnderecoCAN_Rx":2,"Mod_ID":"DT","Sentido_SP":0,"Angulo_SP":0.0,"FolgaMecanica":3.0,"Velocidade_Max":600.0,"Velocidade":240,"Sentido":0,"SentidoReal":2,"Angulo":0.0,"RPM":0.0,"IN1_Atuado":true,"IN2_Atuado":true,"Referenciando":false,"Comandar":true,"Inicializado":false,"Leitura":null,"UltimaDirecao":0,"UltimoComandoEnviado":"2025-04-23T16:04:24.3299975-03:00","RetornandoAzero":false,"EmMovimento":false,"AtingiuAnguloSP":true,"ConfigSentidos":{"RodasDianteiras":{"Frente":0,"Tras":0,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"MovimentoDiagonal":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"MovimentoArco":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"RotacionarNoEixo":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":1,"Parado":0},"MovimentoLateral":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"Diagnostico":{"Frente":2,"Tras":1,"Esquerda":1,"Direita":2,"Parado":0}},"Funcoes":[13,9,14,41]}},{"Modulo_ID":"DF","Disponivel":false,"RequisitarDados":false,"Conectado":false,"MovMotor":{"ID":"Mov","_EnderecoCAN_Tx":8,"_EnderecoCAN_Rx":8,"heartBeatValue":0,"Mod_ID":"DF","LeituraLigado":true,"ComandoLigado":false,"CodigoAlarme":0,"AlarmeMotor":false,"RPM_SP":0,"RPM_SP_Controle":0,"RPM_SP_Leitura":0,"Sentido_SP":0,"NumeroPolos":10,"Rampa":0,"CorrenteTorqueMaximo":40,"OffsetLeitura":1.0,"AlarmeComando":false,"RPM_Roda":0.0,"Sentido":0,"Temperatura":0.0,"TemperaturaDriver":0.0,"Tensao":0.0,"Corrente_Barramento":0.0,"Corrente_Motor":0.0,"Potencia":0.0,"CicloTrabalho":0.0,"RPM_Motor":0.0,"VelocidadeInstantanea":0.0,"Comandar":true,"AlarmeSensores":false,"Inicializado":false,"Leitura":null,"CompensacaoNecessaria":false,"ConfigSentidos":{"RodasDianteiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoArco":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RotacionarNoEixo":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoLateral":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"Diagnostico":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0}},"Funcoes":[12,14,9,5,10],"LogGrafico":[],"Alarmes":[{"Tipo":411,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false},{"Tipo":4,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false}],"ConfigFreio":{"Incremental":false,"AnguloInicial":170,"Leitura":false,"Controle":false}},"DirMotor":{"ID":"Dir","_EnderecoCAN_Tx":4,"_EnderecoCAN_Rx":4,"Mod_ID":"DF","Sentido_SP":0,"Angulo_SP":0.0,"FolgaMecanica":6.0,"Velocidade_Max":600.0,"Velocidade":240,"Sentido":0,"SentidoReal":1,"Angulo":0.0,"RPM":0.0,"IN1_Atuado":true,"IN2_Atuado":true,"Referenciando":false,"Comandar":true,"Inicializado":false,"Leitura":null,"UltimaDirecao":0,"UltimoComandoEnviado":"2025-04-23T16:08:00.9051359-03:00","RetornandoAzero":false,"EmMovimento":false,"AtingiuAnguloSP":true,"ConfigSentidos":{"RodasDianteiras":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"RodasTraseiras":{"Frente":0,"Tras":0,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"MovimentoArco":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"RotacionarNoEixo":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":1,"Parado":0},"MovimentoLateral":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"Diagnostico":{"Frente":2,"Tras":1,"Esquerda":1,"Direita":2,"Parado":0}},"Funcoes":[13,9,14,41]}}]} \ No newline at end of file +{"tmrRegistrador":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":1000,"StackTrace":"MovimentacaoUnificadaModel.IniciarRegistrador","Id":"tmrRegistrador_Mvd","TimeTick":"00:00:00"},"tmrRegistradorMOV":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":1000,"StackTrace":"MovimentacaoUnificadaModel.IniciarRegistrador","Id":"tmrRegistrador_Mov","TimeTick":"00:00:00"},"tmrRegistradorDIR":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":300,"StackTrace":"MovimentacaoUnificadaModel.IniciarRegistrador","Id":"tmrRegistrador_Dir","TimeTick":"00:00:00"},"Dispositivo":109,"_EnderecoCAN_Tx":0,"_EnderecoCAN_Rx":0,"Conectado":true,"_TaxaAmostragem":1000,"DistanciaPercorridaOperacao":0.0,"TempoEmAtividade":0.0,"DistanciaPercorridaTotal":0.0,"DistanciaPercorridaParcial":0.0,"VelocidadeMedia":0.0,"DiametroRoda":0.365,"ReducaoMotorBLDC":5.0,"RPM_Max_MotorBLDC":500.0,"IP_Mov":"192.168.105.10","IP_Dir":"192.168.105.11","Modulos":[{"Modulo_ID":"ET","Disponivel":false,"RequisitarDados":false,"Conectado":true,"MovMotor":{"ID":"Mov","_EnderecoCAN_Tx":5,"_EnderecoCAN_Rx":5,"heartBeatValue":0,"Mod_ID":"ET","LeituraLigado":false,"LeituraRPM":0.0,"ComandoLigado":false,"CodigoAlarme":0,"AlarmeMotor":false,"RPM_SP":0,"RPM_SP_Controle":0,"RPM_SP_Leitura":0,"Sentido_SP":0,"NumeroPolos":10,"Rampa":1,"CorrenteTorqueMaximo":40,"OffsetLeitura":1.0,"AlarmeComando":false,"RPM_Roda":0.0,"Sentido":0,"Temperatura":0.0,"TemperaturaDriver":20.0,"Tensao":41.0,"Corrente_Barramento":0.0,"Corrente_Motor":0.0,"Potencia":0.0,"CicloTrabalho":-0.4,"RPM_Motor":0.0,"VelocidadeInstantanea":0.0,"Comandar":true,"AlarmeSensores":false,"Inicializado":true,"Leitura":{"EnderecoTx":5,"EnderecoRx":5,"Iniciado":true,"Configurado":true,"UltimoComandoRecebido":"2025-05-02T08:07:28.5289899-03:00","ModoControle":0,"CodigoAlarme":0,"ERPM":0,"CorrenteMotor":0.0,"CorrenteBarramento":0.0,"Direcao":0,"RPM":0.0,"Tensao":41.0,"Temperatura":20.0,"Potencia":0.0,"CicloTrabalho":-0.4,"Freado":false,"PosicaoAbsoluta":0.0,"PosicaoRelativa":0.0,"ModoCodificador":0.0,"ErroHistorico":0.0,"IO_Status":0.0},"CompensacaoNecessaria":false,"ConfigSentidos":{"RodasDianteiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoArco":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RotacionarNoEixo":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoLateral":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"Diagnostico":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0}},"Funcoes":[12,14,9,5,10],"LogGrafico":[],"Alarmes":[{"Tipo":411,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false},{"Tipo":4,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false}],"ConfigFreio":{"Incremental":true,"AnguloInicial":10,"Leitura":false,"Controle":false}},"DirMotor":{"ID":"Dir","_EnderecoCAN_Tx":1,"_EnderecoCAN_Rx":1,"Mod_ID":"ET","Sentido_SP":0,"Angulo_SP":0.0,"FolgaMecanica":0.0,"Velocidade_Max":600.0,"Velocidade":240,"Sentido":0,"SentidoReal":1,"Angulo":0.0,"RPM":0.0,"IN1_Atuado":true,"IN2_Atuado":true,"Referenciando":false,"Comandar":true,"Inicializado":false,"Leitura":null,"UltimaDirecao":0,"UltimoComandoEnviado":"2025-04-23T16:04:24.3299975-03:00","RetornandoAzero":false,"EmMovimento":false,"AtingiuAnguloSP":true,"ConfigSentidos":{"RodasDianteiras":{"Frente":0,"Tras":0,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"MovimentoDiagonal":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"MovimentoArco":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"RotacionarNoEixo":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":1,"Parado":0},"MovimentoLateral":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"Diagnostico":{"Frente":2,"Tras":1,"Esquerda":1,"Direita":2,"Parado":0}},"Funcoes":[13,9,14,41]}},{"Modulo_ID":"EF","Disponivel":false,"RequisitarDados":false,"Conectado":false,"MovMotor":{"ID":"Mov","_EnderecoCAN_Tx":7,"_EnderecoCAN_Rx":7,"heartBeatValue":0,"Mod_ID":"EF","LeituraLigado":true,"LeituraRPM":0.0,"ComandoLigado":false,"CodigoAlarme":0,"AlarmeMotor":false,"RPM_SP":0,"RPM_SP_Controle":0,"RPM_SP_Leitura":0,"Sentido_SP":0,"NumeroPolos":10,"Rampa":1,"CorrenteTorqueMaximo":40,"OffsetLeitura":1.0,"AlarmeComando":false,"RPM_Roda":0.0,"Sentido":0,"Temperatura":0.0,"TemperaturaDriver":0.0,"Tensao":0.0,"Corrente_Barramento":0.0,"Corrente_Motor":0.0,"Potencia":0.0,"CicloTrabalho":0.0,"RPM_Motor":0.0,"VelocidadeInstantanea":0.0,"Comandar":true,"AlarmeSensores":false,"Inicializado":false,"Leitura":null,"CompensacaoNecessaria":false,"ConfigSentidos":{"RodasDianteiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoArco":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RotacionarNoEixo":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoLateral":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"Diagnostico":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0}},"Funcoes":[12,14,9,5,10],"LogGrafico":[],"Alarmes":[{"Tipo":411,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false},{"Tipo":4,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false}],"ConfigFreio":{"Incremental":true,"AnguloInicial":10,"Leitura":false,"Controle":false}},"DirMotor":{"ID":"Dir","_EnderecoCAN_Tx":3,"_EnderecoCAN_Rx":3,"Mod_ID":"EF","Sentido_SP":0,"Angulo_SP":0.0,"FolgaMecanica":9.0,"Velocidade_Max":600.0,"Velocidade":240,"Sentido":0,"SentidoReal":2,"Angulo":0.0,"RPM":0.0,"IN1_Atuado":true,"IN2_Atuado":true,"Referenciando":false,"Comandar":true,"Inicializado":false,"Leitura":null,"UltimaDirecao":0,"UltimoComandoEnviado":"2025-04-23T16:08:00.9051359-03:00","RetornandoAzero":false,"EmMovimento":false,"AtingiuAnguloSP":true,"ConfigSentidos":{"RodasDianteiras":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"RodasTraseiras":{"Frente":0,"Tras":0,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"MovimentoArco":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"RotacionarNoEixo":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":1,"Parado":0},"MovimentoLateral":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"Diagnostico":{"Frente":2,"Tras":1,"Esquerda":1,"Direita":2,"Parado":0}},"Funcoes":[13,9,14,41]}},{"Modulo_ID":"DT","Disponivel":false,"RequisitarDados":false,"Conectado":false,"MovMotor":{"ID":"Mov","_EnderecoCAN_Tx":6,"_EnderecoCAN_Rx":6,"heartBeatValue":0,"Mod_ID":"DT","LeituraLigado":true,"LeituraRPM":0.0,"ComandoLigado":false,"CodigoAlarme":0,"AlarmeMotor":false,"RPM_SP":0,"RPM_SP_Controle":0,"RPM_SP_Leitura":0,"Sentido_SP":0,"NumeroPolos":10,"Rampa":1,"CorrenteTorqueMaximo":40,"OffsetLeitura":1.0,"AlarmeComando":false,"RPM_Roda":0.0,"Sentido":0,"Temperatura":0.0,"TemperaturaDriver":0.0,"Tensao":0.0,"Corrente_Barramento":0.0,"Corrente_Motor":0.0,"Potencia":0.0,"CicloTrabalho":0.0,"RPM_Motor":0.0,"VelocidadeInstantanea":0.0,"Comandar":true,"AlarmeSensores":false,"Inicializado":false,"Leitura":null,"CompensacaoNecessaria":false,"ConfigSentidos":{"RodasDianteiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoArco":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RotacionarNoEixo":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoLateral":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"Diagnostico":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0}},"Funcoes":[12,14,9,5,10],"LogGrafico":[],"Alarmes":[{"Tipo":411,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false},{"Tipo":4,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false}],"ConfigFreio":{"Incremental":false,"AnguloInicial":170,"Leitura":false,"Controle":false}},"DirMotor":{"ID":"Dir","_EnderecoCAN_Tx":2,"_EnderecoCAN_Rx":2,"Mod_ID":"DT","Sentido_SP":0,"Angulo_SP":0.0,"FolgaMecanica":3.0,"Velocidade_Max":600.0,"Velocidade":240,"Sentido":0,"SentidoReal":2,"Angulo":0.0,"RPM":0.0,"IN1_Atuado":true,"IN2_Atuado":true,"Referenciando":false,"Comandar":true,"Inicializado":false,"Leitura":null,"UltimaDirecao":0,"UltimoComandoEnviado":"2025-04-23T16:04:24.3299975-03:00","RetornandoAzero":false,"EmMovimento":false,"AtingiuAnguloSP":true,"ConfigSentidos":{"RodasDianteiras":{"Frente":0,"Tras":0,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"MovimentoDiagonal":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"MovimentoArco":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"RotacionarNoEixo":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":1,"Parado":0},"MovimentoLateral":{"Frente":0,"Tras":0,"Esquerda":2,"Direita":1,"Parado":0},"Diagnostico":{"Frente":2,"Tras":1,"Esquerda":1,"Direita":2,"Parado":0}},"Funcoes":[13,9,14,41]}},{"Modulo_ID":"DF","Disponivel":false,"RequisitarDados":false,"Conectado":false,"MovMotor":{"ID":"Mov","_EnderecoCAN_Tx":8,"_EnderecoCAN_Rx":8,"heartBeatValue":0,"Mod_ID":"DF","LeituraLigado":true,"LeituraRPM":0.0,"ComandoLigado":false,"CodigoAlarme":0,"AlarmeMotor":false,"RPM_SP":0,"RPM_SP_Controle":0,"RPM_SP_Leitura":0,"Sentido_SP":0,"NumeroPolos":10,"Rampa":1,"CorrenteTorqueMaximo":40,"OffsetLeitura":1.0,"AlarmeComando":false,"RPM_Roda":0.0,"Sentido":0,"Temperatura":0.0,"TemperaturaDriver":0.0,"Tensao":0.0,"Corrente_Barramento":0.0,"Corrente_Motor":0.0,"Potencia":0.0,"CicloTrabalho":0.0,"RPM_Motor":0.0,"VelocidadeInstantanea":0.0,"Comandar":true,"AlarmeSensores":false,"Inicializado":false,"Leitura":null,"CompensacaoNecessaria":false,"ConfigSentidos":{"RodasDianteiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RodasTraseiras":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoArco":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0},"RotacionarNoEixo":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoLateral":{"Frente":2,"Tras":1,"Esquerda":0,"Direita":0,"Parado":0},"Diagnostico":{"Frente":1,"Tras":2,"Esquerda":0,"Direita":0,"Parado":0}},"Funcoes":[12,14,9,5,10],"LogGrafico":[],"Alarmes":[{"Tipo":411,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false},{"Tipo":4,"Valor":-1.0,"Minimo":true,"Maximo":false,"ParaMinimo":false,"ParaMaximo":false}],"ConfigFreio":{"Incremental":false,"AnguloInicial":170,"Leitura":false,"Controle":false}},"DirMotor":{"ID":"Dir","_EnderecoCAN_Tx":4,"_EnderecoCAN_Rx":4,"Mod_ID":"DF","Sentido_SP":0,"Angulo_SP":0.0,"FolgaMecanica":6.0,"Velocidade_Max":600.0,"Velocidade":240,"Sentido":0,"SentidoReal":1,"Angulo":0.0,"RPM":0.0,"IN1_Atuado":true,"IN2_Atuado":true,"Referenciando":false,"Comandar":true,"Inicializado":false,"Leitura":null,"UltimaDirecao":0,"UltimoComandoEnviado":"2025-04-23T16:08:00.9051359-03:00","RetornandoAzero":false,"EmMovimento":false,"AtingiuAnguloSP":true,"ConfigSentidos":{"RodasDianteiras":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"RodasTraseiras":{"Frente":0,"Tras":0,"Esquerda":0,"Direita":0,"Parado":0},"MovimentoDiagonal":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"MovimentoArco":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"RotacionarNoEixo":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":1,"Parado":0},"MovimentoLateral":{"Frente":0,"Tras":0,"Esquerda":1,"Direita":2,"Parado":0},"Diagnostico":{"Frente":2,"Tras":1,"Esquerda":1,"Direita":2,"Parado":0}},"Funcoes":[13,9,14,41]}}]} \ No newline at end of file diff --git a/AgroBase/AgroBase/bin/Debug/Python/Output/mapa_gps.html b/AgroBase/AgroBase/bin/Debug/Python/Output/mapa_gps.html index cb7f1c7fc..5315ee57e 100644 --- a/AgroBase/AgroBase/bin/Debug/Python/Output/mapa_gps.html +++ b/AgroBase/AgroBase/bin/Debug/Python/Output/mapa_gps.html @@ -25,7 +25,7 @@