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 1   [ 4 posts ]
Author Message
 Post subject: Duda módulo RS485/Modbus
PostPosted: Fri May 06, 2016 10:28 pm 

Joined: Fri May 06, 2016 10:06 pm
Posts: 8
Hola! Tengo una duda sobre el funcionamiento de éste módulo, ya que viene con un conector db9 y con un bloque para las salidas A/B. Cuando se usa la función send de la librería RS485, los datos se envían a ambos conectores (tanto al db9 como al bloque con salidas A/B)? Es que he estado mirando vuestro tutorial, pero sólo usais el bloque A/B. No usais el conector db9.


Estoy tratando de comunicar dos Arduino a través del módulo RS485 y dos cables macho-hembra con conectores db9 (usando un conversor macho-macho para unir ambos cables).

He programado el emisor para que envíe un caracter "A" y el receptor para que lo lea y lo imprima por el monitor serie pero no funciona.

Éste es el código del transmisor:
Code:
#include <Wire.h>

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

// Include always this library when you are using the RS-485 functions
#include <arduinoRS485.h>
//Include the SPI library
#include <SPI.h>
// Create an instance
RS485 myDevice = RS485();


void setup() {

  // Using the SOCKET1
  Utils.setONSocket1();
  Utils.setMUXSocket1();

  // Power on the USB for viewing data in the serial monitor
  Serial.begin(115200);
  delay(100);

  // Initializes the module and assigns the SPI
  if ( myDevice.begin() == 0) {
    Serial.println("RS-485 module started successfully");
  } else {
    Serial.println("RS-485 did not initialize correctly");
  }
  delay(100);

  // Configure the baud rate of the module
  myDevice.baudRateConfig(9600);
  // Configure the parity bit as disabled
  myDevice.parityBit(DISABLE);
  // Use one stop bit configuration
  myDevice.stopBitConfig(1);
  // Print hello message
  Serial.println("Hello this is RS-485 communication send data example.");
}



void loop() {
  myDevice.send("A");
  Serial.println("enviado");
  delay(1000);
}


Y el receptor:
Code:
#include <Wire.h>

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

// Include always this library when you are using the RS-485 functions 
#include <arduinoRS485.h>
// Include the SPI library
#include <SPI.h>
// Create an instance
RS485 myDevice = RS485();

void setup() {

   // Using the SOCKET1
  Utils.setONSocket1();
  Utils.setMUXSocket1();
  // Initializes the serial for viewing data in the serial monitor
  Serial.begin(115200);
  delay(100);

  // Initializes the module and assigns the SPI
  // Only allowed in SOCKET1
  if ( myDevice.begin() == 0) {
     Serial.println("RS-485 module started successfully");
  } else {
     Serial.println("RS-485 did not initialize correctly");
  }
  delay(100);

  // Configure the baud rate of the module
  myDevice.baudRateConfig(9600);
  // Configure the parity bit as disabled
  myDevice.parityBit(DISABLE);
  // Use one stop bit configuration
  myDevice.stopBitConfig(1); 
  // Print hello message
  Serial.println("This is RS-485 communication receive data example.");
}


void loop() {     
 
  // If data in response buffer
  if (myDevice.available())
  {
    while (myDevice.available()) {
      // Read one byte from the buffer
      char data = myDevice.read();
      // Print data received in the serial monitor
      Serial.println("leido");
      Serial.print(data);     
    }
  }     
 
  delay(1000);
}


Básicamente el problema es que sólo se cumple una vez la condición if(myDevice.available()) al principio del programa. Cuando debería de cumplirse siempre, ya que el emisor está programado para enviar continuamente cada segundo (y lo hace, ya que lo he monitorizado).

Perdón por el post tan largo y gracias de antemano.

Un saludo!


Top
 Profile  
 
 Post subject: Re: Duda módulo RS485/Modbus
PostPosted: Mon May 09, 2016 7:38 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Nega;
Si, 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 con un polímetro que tu cable es correcto.
Un saludo


Top
 Profile  
 
 Post subject: Re: Duda módulo RS485/Modbus
PostPosted: Mon May 09, 2016 1:38 pm 

Joined: Fri May 06, 2016 10:06 pm
Posts: 8
Hola libelium-dev, gracias por la respuesta.

Estoy un poco confundido, entonces según eso, dado que los cables que proporcionáis (db9 macho a hembra) no van cruzados. No puedo conectarlos directamente usando un conversor macho a macho. Pues estaría el pin 3 (tx) llegando igualmente al pin 3 (rx).

La configuración a la que me refiero es:

salida db9 (módulo) -> cable db9 macho-hembra-> conversor macho-macho-> cable db9 hembra-macho -> salida db9 (módulo).

La solución sería cablearlos manualmente, no?

Un saludo.


Top
 Profile  
 
 Post subject: Re: Duda módulo RS485/Modbus
PostPosted: Tue May 10, 2016 7:51 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Nega,
Los cables DB9 que se proporcionan son para equipos terminales como PLCCs si quieres conectar dos modulos transmisores entre si tines que utilizar un cable con las caracteísticas que te indico.
Te lo puedes hacer tu comprando el material necesario.
O puedes comprar un cable DB9 Serial Null Modem que es para conectar dos DTEs.
Un saludo.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post a new topicPost a reply Page 1 of 1   [ 4 posts ]


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:
cron


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.