Busca en nuestro Blog. Encontrarás múltiples aplicaciones, soluciones, ejemplos de código. Navega utilizando la nube de etiquetas o busca utilizando criterios específicos

Cómo conectar dos PLCs industriales a través de RS-485

Introducción

El RS-485, también conocido como EIA-485, se define como un sistema de bus diferencial multipunto; es perfecto para transmitir datos con alta velocidad a alcances de hasta 12 m. Una de sus características más importantes es que su par trenzado de cables reduce el ruido inducido en la línea de transmisión. Se pueden conectar múltiples receptores a dicha red en un bus lineal multipunto. Estas características hacen que el RS-485 sea útil en sistemas de control industrial y aplicaciones similares.

Lecturas previas

Te recomendamos que leas las siguientes entradas para entender el programa de este blog. Usamos las siguientes entradas del blog para hacer este ejemplo:

Requisitos

Para trabajar con comunicación TTL en serie, necesitará cualquiera de nuestros controladores lógicos programables para la automatización industrial:

Controladores Industrial Shields controllers: Familia Wifi & Bluetooth ControllerFamilia Ethernet Controller FamilyFamilia GPRS / GSM Controller.

Hardware

Para hacer la conexión entre los dispositivos seguimos el siguiente esquema.

Esquema para realizar la conexión entre los dispositivos.

Software

El siguiente código tiene la función de comunicar al Maestro y al Esclavo enviando la instrucción de activar el relé para encender la bomba de agua.

Un ejemplo de la comunicación de Simplecomm Master:

#include <RS485.h>
#include <SimpleComm.h>

// Create SimplePacket for sending and receiving data
SimplePacket packet;

// Define master address
uint8_t masterAddress = 0;

// Define slave address to communicate with
uint8_t slaveAddress = 1;

// Value to send as packet data
int value = 5;

////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
	Serial.begin(9600L);

  // Start RS485
  RS485.begin(19200L);
  RS485.setTimeout(20);

  // Start SimpleComm
  SimpleComm.begin(masterAddress);
}

////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
  static unsigned long lastSent = millis();

  // Send packet periodically: once per second
  if (millis() - lastSent >= 10000) {
    // Set request packet data
    packet.setData(value);

    // Send request to slave
    if (SimpleComm.send(RS485, packet, slaveAddress)) {
      lastSent = millis();

      Serial.print("Sent value: ");
      Serial.println(value);
    }
  }

  // Get responses
  if (SimpleComm.receive(RS485, packet)) {
    // Update value from the response
    value = packet.getInt();

    Serial.print("Received value: ");
    Serial.println(value);
  }
}

Un ejemplo de la comunicación de Simplecomm Slave:

#include <RS485.h>
#include <SimpleComm.h>

// Create SimplePacket for sending and receiving data
SimplePacket request;
SimplePacket response;

// Define slave address to communicate with
uint8_t slaveAddress = 1;

////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
	Serial.begin(9600L);

  // Start RS485
  RS485.begin(19200L);
  RS485.setTimeout(20);

  // Start SimpleComm
  SimpleComm.begin(slaveAddress);
}

////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
  // Get requests
  if (SimpleComm.receive(RS485, request)) {
    int value = request.getInt();

    Serial.print("Received value: ");
    Serial.println(value);
if ( value==5){
  digitalWrite(R0_8,HIGH);
  delay(5000);
  digitalWrite(R0_8,LOW);
  
}
    // Process value
    //value++;

    // Send response to the request packet source
    response.setData(value);
    if (SimpleComm.send(RS485, response, request.getSource())) {
      Serial.print("Sent value: ");
      Serial.println(value);
    }
  }
}

 
 

Suscríbete a nuestro  canal de YouTube  si quieres estar al día de nuestos tutoriales.


¿Quieres más información? 

¡Solo llena el formulario! 

¡Quiero saber más!  Por favor, llene el formulario correctamente.