Elipse E3 - Arduino Uno (MOBUS RTU) - DUVIDA

Olá
tudo bem?
eu montei esse codigo no arduino:

#include <modbus.h>

#include <modbusDevice.h>

#include <modbusRegBank.h>

#include <modbusSlave.h>

modbusDevice regBank;

modbusSlave slave;

void setup() {

Serial.begin(9600); // Define a taxa de baud como 9600

regBank.add(13); // Adiciona registro no banco

slave._device = &regBank; // Associa o regBank ao escravo Modbus

slave.setBaud(9600); // Configura a comunicação Modbus

pinMode(13, OUTPUT); // Define o pino 13 como saída

}

void loop() {

slave.run(); // Processa as requisições Modbus

int i;

for (i = 0; i < 3; i++) {

digitalWrite(13, HIGH); // Liga o LED

delay(500);             // Espera 500 milissegundos

digitalWrite(13, LOW);  // Desliga o LED

delay(500);

}

delay(5000); // Espera 5 segundos

}

Estou tentando fazer a comunicação com elipse E3 studio porem esta dando erro. Alguem pode me ajudar?

A Elipse Software criou este espaço com a ideia de estimular a troca de informações entre usuários de nossos produtos. Reservamo-nos o direito de não responder por este canal. Se você deseja suporte imediato, por gentileza, entre em contato pelo e-mail suporte@elipse.com.br ou pelos telefones (11) 3061-2828 / (21) 2430-5912 / (31) 4062-5824 / (41) 4062-5824 / (51) 3346-4699.

Elipse Software created this space aiming to stimulate the exchange of information among users of our products. We reserve the right to not respond through this channel. If you want immediate support, please contact us through the e-mail suporte@elipse.com.br or through our phone numbers (+55 11) 3061-2828 / (+55 21) 2430-5912 / (+55 31) 4062-5824 / (+55 41) 4062-5824 / (+55 51) 3346-4699.

Olhando rapidamente o cógido, creio que esteja faltando definir o ID do Slave.


// ...

void setup()
{
  Serial.begin(9600);
  regBank.setId(1);
  
  // ...
}

Leandro,

Muito obrigado! Funcionou a comunicação, porém ainda assim o elipse e3 não consegue receber os dados do arduino. Apenas mantém a comunicação, estou tentando ajustar…

#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>

// Configurações do Modbus
modbusDevice regBank; // Banco de registros Modbus
modbusSlave slave; // Escravo Modbus

void setup() {
regBank.setId(1); // Define o ID do dispositivo Modbus
Serial.begin(9600); // Define a taxa de comunicação (baud rate) para 9600
regBank.add(13); // Adiciona o registro 13 no banco de registros
slave._device = &regBank; // Associa o banco de registros ao escravo Modbus
slave.setBaud(9600); // Configura o baud rate do Modbus RTU
pinMode(13, OUTPUT); // Define o pino 13 como saída (controla a lâmpada/LED)
}

void loop() {
slave.run(); // Mantém a comunicação Modbus ativa para monitoramento via Elipse E3

// Pisca o LED/lâmpada
digitalWrite(13, HIGH); // Liga o LED/lâmpada
regBank.set(13, 1); // Atualiza o valor do registro 13 para 1 (LED ligado)
delay(500); // Espera 500 milissegundos

digitalWrite(13, LOW); // Desliga o LED/lâmpada
regBank.set(13, 0); // Atualiza o valor do registro 13 para 0 (LED desligado)
delay(500); // Espera 500 milissegundos
}

Isso se dá, talvez, pela chamada do run(), que é chamado sempre no início do laço, imediatamente ao registro ser definido ao valor 0.

void loop() {
  int currentState = digitalRead(13);
  digitalWrite(13, !currentState);  // Toggle
  regBank.set(13, !currentState);   // Atualiza o valor do registro
  slave.run();                      // Mantem a comunicacao Modbus ativa 
  delay(500);
}

Leandro

Atualizei como vc sugeriu:

#include <modbus.h>

#include <modbusDevice.h>

#include <modbusRegBank.h>

#include <modbusSlave.h>

// Configurações do Modbus

modbusDevice regBank; // Banco de registros Modbus

modbusSlave slave; // Escravo Modbus

void setup() {

regBank.setId(1); // Define o ID do dispositivo Modbus

regBank.add(13); // Adiciona o registro 13 no banco de registros

slave._device = &regBank; // Associa o banco de registros ao escravo Modbus

slave.setBaud(9600); // Configura o baud rate do Modbus RTU

pinMode(13, OUTPUT); // Define o pino 13 como saída (controla a lâmpada/LED)

}

void loop() {

int currentState = digitalRead(13);

digitalWrite(13, !currentState); // Toggle

regBank.set(13, !currentState); // Atualiza o valor do registro

slave.run(); // Mantem a comunicacao Modbus ativa

delay(500);

}

Porém, o valor ele fica apenas em “1” no Elipse E3. Deveria modificar de 1 para 0 e vice versa.

Será que o arduíno nao consegue mandar o valor atualizado?

Leandro

achei o problema

Era o SCAN no elipse E3 que tinha que diminuir. O seu codigo bateu correto. Muito Obrigado!

1 Like