Cooking Hacks Forum
https://www.cooking-hacks.com/forum/

Duda módulo RS485/Modbus
https://www.cooking-hacks.com/forum/viewtopic.php?f=34&t=8767
Page 1 of 1

Author:  Nega [ Fri May 06, 2016 10:28 pm ]
Post subject:  Duda módulo RS485/Modbus

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!

Author:  libelium-dev [ Mon May 09, 2016 7:38 am ]
Post subject:  Re: Duda módulo RS485/Modbus

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

Author:  Nega [ Mon May 09, 2016 1:38 pm ]
Post subject:  Re: Duda módulo RS485/Modbus

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.

Author:  libelium-dev [ Tue May 10, 2016 7:51 am ]
Post subject:  Re: Duda módulo RS485/Modbus

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.

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/