Libelium is offering new technical support channels, to contact with de Technical Support team to solve any issue our doubt please contact with your sales agent or visit our contact site



Post a new topicPost a reply Page 1 of 2   [ 17 posts ]
Go to page 1, 2  Next
Author Message
 Post subject: Modbus/RS485 communication error
PostPosted: Mon May 16, 2016 12:57 pm 

Joined: Fri May 06, 2016 10:06 pm
Posts: 8
Hola, tras probar con éxito la librería RS485 con vuestro módulo RS485/Modbus sobre dos Arduino uno mi objetivo es comunicar un Arduino maestro con otro esclavo. Estoy probando el ejemplo 4 y 8 de vuestra librería pero siempre obtengo el mensaje "communication error". El cableado es este: https://www.dropbox.com/s/xkiw50bplq0yw ... 1.jpg?dl=0

Y el código es prácticamente el mismo que vuestros ejemplos, sólo he cambiado el baudrate a 9600 en los dos arduino, la dirección del esclavo=1 y la dirección de lectura address=0. He borrado los registros en el esclavo dejando sólo uno. Y he cambiado el valor del registro uno para que sea el valor de un digitalread del pin4 que está conectado a gnd. El código es este.

Maestro:
Code:


#include <Wire.h>

// Cooking API libraries
#include <arduinoUtils.h>

// Include these libraries for using the RS-485 and Modbus functions
#include <arduinoRS485.h>
#include <ModbusMaster485.h>
#include <SPI.h>

// Instantiate ModbusMaster object as slave ID 1
ModbusMaster485 node(1);

// Define one addres for reading
#define address 0

// Define the number of bytes to read
#define bytesQty 2

void setup()
{
 
  // Power on the USB for viewing data in the serial monitor
  Serial.begin(115200);
  delay(100);
  // Initialize Modbus communication baud rate
  // Only allowed in SOCKET1
  node.begin(9600);

  // Print hello message
  Serial.println("Modbus communication over RS-485");
  delay(100);
}


void loop()
{
  // This variable will store the result of the communication
  // result = 0 : no errors
  // result = 1 : error occurred
  int result =  node.readHoldingRegisters(address, bytesQty);

  if (result != 0) {
    // If no response from the slave, print an error message
    Serial.println("Communication error");
    delay(1000);
  }
  else {

    // If all OK
    Serial.print("Read value : ");

    // Print the read data from the slave
    Serial.print(node.getResponseBuffer(0));
    delay(1000);
  }

  Serial.print("\n");
  delay(2000);

  // Clear the response buffer
  node.clearResponseBuffer();

}



Esclavo:

Code:

#include <Wire.h>

// Cooking API libraries
#include <arduinoUtils.h>

// Include these libraries for using the RS-485 and Modbus functions
#include <arduinoRS485.h>
#include <ModbusSlave485.h>
#include <SPI.h>

// Create new mbs instance
ModbusSlave485 mbs;

// Slave registers
enum {
  MB_0,   // Register 0
  MB_REGS // Dummy register. using 0 offset to keep size of array
};

int regs[MB_REGS];

void setup() {

 
  pinMode(4,INPUT);
  // Power on the USB for viewing data in the serial monitor
  Serial.begin(115200);

  // Modbus slave configuration parameters
  // SlaveId
  const unsigned char SLAVE = 1;
  // Baud rate
  const long BAUD = 9600;

  // Configure msb with config settings
  // Only allowed in SOCKET1
  mbs.configure(SLAVE, BAUD);
}

void loop()
{
  // Pass current register values to mbs
  mbs.update(regs, MB_REGS);

  // Read all the analog Inputs, and store the values in
  // the Modbus registers.
  regs[MB_0] = digitalRead(4);  // Read input dig pin4

  delay(10);
}


Agradezco me den alguna pista para intentar depurar posibles errores porque ahora mismo no sé qué hacer...

Muchas gracias!


Top
 Profile  
 
 Post subject: Re: Modbus/RS485 communication error
PostPosted: Tue May 17, 2016 7:34 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Nega,

La ficha marcada como A, B está conectada directamente al DB9 de esta manera:
A -> Pin 3 (TX)
B -> Pin 4 (RX)
Pin 9 (Vcc)
Pin 8 (GND)
Si conectas directamente 2 módulos RS485, debes cruzar los pines Pin3(emisor)->Pin4(receptor) y Pin4(emisor)->Pin3(receptor).
Comprueba esto y nos dices :)


Un saludo


Top
 Profile  
 
 Post subject: Re: Modbus/RS485 communication error
PostPosted: Tue May 17, 2016 10:40 am 

Joined: Fri May 06, 2016 10:06 pm
Posts: 8
Pero no estoy usando la conexión db9 en este caso. Los arduino están conectados con dos hilos, de una ficha A, B a la otra. Así: https://www.dropbox.com/s/xkiw50bplq0yw ... 1.jpg?dl=0

De esta forma he conseguido que funcione con la librería Rs485 (send y receive) pero no con modbus.


Top
 Profile  
 
 Post subject: Re: Modbus/RS485 communication error
PostPosted: Wed May 18, 2016 2:34 am 

Joined: Fri May 06, 2016 10:06 pm
Posts: 8
Hola, por si a alguien le pasa lo mismo . No sé por qué pero a 74880 baudios sí funciona.


Top
 Profile  
 
 Post subject: Re: Modbus/RS485 communication error
PostPosted: Wed May 18, 2016 8:29 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Nega,
hemos probado los ejemplos que comentas y a nosotros nos funcionan. Porfavor, prueba a instalar las librerías de este tutorial:
https://www.cooking-hacks.com/documenta ... l-galileo/
Un saludo.


Top
 Profile  
 
 Post subject: Re: Modbus/RS485 communication error
PostPosted: Wed May 18, 2016 10:38 am 

Joined: Fri May 06, 2016 10:06 pm
Posts: 8
Sí claro, de esa librería son los ejemplos a los que me refiero.

Gracias.


Top
 Profile  
 
 Post subject: Re: Modbus/RS485 communication error
PostPosted: Thu May 19, 2016 7:36 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Nega,
buena suerte con tu proyecto.
Saludos.


Top
 Profile  
 
 Post subject: Re: Modbus/RS485 communication error
PostPosted: Thu May 26, 2016 8:24 am 

Joined: Thu May 12, 2016 8:57 am
Posts: 8
Buenos d'ias, tengo el mismo problema y no consigo solventarlo, estoy utilizando las mismas librer'ias que en el tutorial de RS-485/Modbus y me sigue saliendo "Communication Error", pero en mi caso no es con dos arduinos sino con una raspberry Pi 3 y un equipo Modbus. Mi address = 31006 y mi esclavo = 1, con baud rate = 9600. El c'odigo es tan sencillo como el del tutorial cambiando dichos valores, ya no se que mas puedo hacer para intentar arreglarlo y he probado a cambiar el Baud rate como dice nuestro amigo Nega. Mi codigo es el siguiente:

Code:

#include "ModbusMaster485.h"
#include "arduPi.h"




// Instantiate ModbusMaster object as slave ID 1
ModbusMaster485 node(254);

// Define one addres for reading, desde 0 hasta 65535
#define address 31006

// Define the number of bytes to read
#define bytesQty 2

void setup()
{
  pinMode(5, OUTPUT);
  digitalWrite(5, LOW);
 
  // Power on the USB for viewing data in the serial monitor
  Serial.begin(115200);
  delay(100);
  // Initialize Modbus communication baud rate
  node.begin(9600);

  // Print hello message
  printf("Modbus communication over RS-485\n");
  delay(100);
}


void loop()
{
  // This variable will store the result of the communication
  // result = 0 : no errors
  // result = 1 : error occurred
  int result =  node.readInputRegisters(address, bytesQty);

  if (result != 0) {
    // If no response from the slave, print an error message
    printf("Communication error\n");
    delay(1000);
  }
  else {

    // If all OK
    printf("Read value : \n");

    // Print the read data from the slave
    Serial.print(node.getResponseBuffer(0));
    delay(1000);
  }

  printf("\n");
  delay(2000);

  // Clear the response buffer
  node.clearResponseBuffer();

}

int main (){
  setup();
  while(1){
    loop();
  }
  return (0);
}




Muchas gracias de antemano.


Top
 Profile  
 
 Post subject: Re: Modbus/RS485 communication error
PostPosted: Thu May 26, 2016 8:51 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Adri_manco,
Pon algunas fotos de tu configuración hardware para inspeccionarla visualmente.
¿Has probado los ejemplos básicos con raspberry Pi 3?.
Antes de probar con tu equipo Modbus prueba los ejemplos básicos entre dos arduinos dos RPi para que te hagas una idea de cómo funciona la librería. La comunicación con un equipo Modbus puede variar y puede que tengas que tocar algún parámetro. Depende del equipo Modbus que tengas (estudia el Datasheet de tu equipo).
En tu ejemplo estás inicializando el esclavo como nodo 254 no 1.
Saludos


Top
 Profile  
 
 Post subject: Re: Modbus/RS485 communication error
PostPosted: Thu May 26, 2016 9:14 am 

Joined: Thu May 12, 2016 8:57 am
Posts: 8
Aqui est'a la foto del cableado, bastante sencillo ya que solo utilizo dos hilos para conectarlos a A y B. positivo con positivo y negativo con negativo. He estudiado el datasheet varias veces y esos son los valores que aparecen en el, address = 31006, Bd = 9600, ID = 1. Ya he cambiado lo del esclavo que estaba a 254 pero sigue sin funcionar, y he probado con los ejemplos normales de RPi y si funcionan correctamente pero no puedo probarlos entre dos RPi o dos Arduinos ya que no dispongo de dicho material.

https://www.dropbox.com/s/ukhitk48y3t11vl/20160526_095927.jpg?dl=0


Top
 Profile  
 
Display posts from previous:  Sort by  
Post a new topicPost a reply Page 1 of 2   [ 17 posts ]
Go to page 1, 2  Next


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Libelium theme based on 610nm Style by Daniel St. Jules of http://www.gamexe.net


© Libelium Comunicaciones Distribuidas S.L. | Terms of use.