Ir al contenido

Conceptos básicos de RS-485 en un PLC industrial

Señal diferencial, distancia y velocidad, reglas de cableado y el puerto RS-485 de los PLC M-Duino, Ardbox y ESP32
6 de marzo de 2020 por
Conceptos básicos de RS-485 en un PLC industrial
Andrei Postolache

RS-485 (TIA/EIA-485) es un estándar eléctrico para la comunicación serie por un par trenzado. Envía cada bit como la diferencia de tensión entre dos hilos, A y B, así que rechaza el ruido y llega hasta 1200 m a 100 kbit/s o menos, con hasta 32 equipos estándar en un bus. Las velocidades más altas, de unos 10 Mbit/s, solo funcionan en unos 12 m.

Esta guía explica cómo funciona RS-485, los límites de distancia y velocidad, las reglas de cableado (topología, terminación, polarización y masa) y cómo usar el puerto RS-485 de los PLC M-Duino, Ardbox y ESP32 PLC de Industrial Shields, con código probado para half y full duplex. Si necesitas un autómata programable con RS-485 y Ethernet, el ESP32 PLC 21 los lleva de serie.

¿Qué es RS-485 y cómo funciona?

RS-485, también conocido como EIA-485, es un bus multipunto diferencial. El transmisor mueve los dos hilos en sentidos opuestos y el receptor solo lee la diferencia entre ellos. Una diferencia por encima de +200 mV es un estado lógico y por debajo de -200 mV es el otro. El ruido inducido en el cable afecta igual a los dos hilos, así que la diferencia no cambia. Por eso un par trenzado lleva RS-485 por armarios industriales, junto a motores y variadores.

Muchos receptores y transmisores pueden compartir el mismo par en línea (un bus multipunto). RS-485 solo define la capa eléctrica: los bytes, las direcciones y quién habla en cada momento vienen de un protocolo por encima, normalmente Modbus RTU.

CaracterísticaRS-485
EstándarTIA/EIA-485-A
SeñalDiferencial, entre A y B
Umbral del receptor±200 mV
Rango de modo común-7 V a +12 V
Equipos por segmento32 cargas unitarias (más con transceptores de 1/4 o 1/8 de carga unitaria)
Longitud máximaUnos 1200 m a 100 kbit/s o menos
Velocidad máximaUnos 10 Mbit/s, en unos 12 m
Hilos1 par trenzado (half duplex) o 2 pares (full duplex), más una referencia de señal
TopologíaLínea (daisy chain) con una terminación de 120 Ω en cada extremo

Distancia y velocidad de RS-485: ¿1200 m o 12 m?

Las dos cifras son correctas, a velocidades distintas. La resistencia y la capacidad del cable limitan lo rápido que puede cambiar la señal, así que cuanto más largo es el cable, menor es la velocidad. Una regla práctica habitual es que la velocidad en bit/s multiplicada por la longitud en metros no supere unos 108.

VelocidadLongitud máxima aproximadaUso típico
9600 a 100000 bit/s1200 mModbus RTU a 9600 o 19200 baudios, analizadores, variadores, sensores
1 Mbit/sUnos 100 mEnlaces rápidos dentro de una máquina
10 Mbit/sUnos 12 mEnlaces cortos entre placas o armarios

Una versión anterior de este post decía que RS-485 llega "hasta 12 m". Ese es el límite a la velocidad máxima del estándar, no el alcance de RS-485: a las velocidades de Modbus RTU, un bus bien terminado llega a unos 1200 m con un buen par trenzado.

RS-485, RS-232 y TTL comparados

RS-485RS-232Serie TTL
SeñalDiferencialAsimétrica, ±3 a ±15 VAsimétrica, 0 a 5 V o 3,3 V
EquiposHasta 32 cargas unitarias por segmento2 (punto a punto)2 (punto a punto)
DistanciaHasta unos 1200 mUnos 15 mDentro de la placa o del armario
Inmunidad al ruidoAltaMediaBaja
Uso típico en un PLCBus de campo Modbus RTUUn solo instrumento, un HMI antiguo, un módemMódulos junto al PLC

Reglas de cableado de RS-485

  • Una línea, sin estrella. Conecta los equipos uno detrás de otro con derivaciones cortas. Una estrella o las derivaciones largas provocan reflexiones.
  • 120 Ω en los dos extremos. Pon una terminación entre A y B en cada extremo de la línea, y solo ahí. En un cable corto de banco de pruebas a baja velocidad no hace falta.
  • Polarización en reposo. Cuando nadie transmite, el bus necesita un nivel definido: pull-up en un hilo y pull-down en el otro, normalmente en el maestro o en un equipo del bus.
  • Una referencia común. RS-485 tolera de -7 V a +12 V de modo común, no más. Une la masa de señal (GND o COM) de los equipos con un tercer hilo cuando no tienen una referencia común.
  • Cable de par trenzado. Usa cable para RS-485, con una impedancia característica cercana a 120 Ω, apantallado en lugares con ruido y con la pantalla a tierra en un solo punto.

Si un bus que funcionaba empieza a fallar, sigue la lista de diagnóstico de RS-485: topología, la prueba de terminación de 60 Ω, polarización, masa, cable y configuración del protocolo.

RS-485 en los PLC de Industrial Shields

Los PLC M-Duino y Ardbox usan un transceptor RS-485 MAX481CSA. En half duplex un transceptor envía y recibe por A+ y B-. En full duplex se usa un segundo transceptor, así que un par recibe y el otro transmite a la vez.

Familia de PLCBornes RS-485ModosConfiguración
M-DuinoA+, B-, Y+, Z-Half y full duplexSiempre activo. Elige HD o FD con el interruptor FD/HD
Ardbox Analog HF+ y Relay HF+A+, B-, Y+, Z-Half y full duplexRS-485 o RS-232 se elige al pedir el PLC. HD o FD con el interruptor superior derecho 1 (Analog) o 2 (Relay)
ESP32 PLCA+, B-Half duplexInterruptor de comunicación 3 en OFF

La configuración detallada de interruptores de cada modelo, también del ESP32 PLC 14, está en RS-485 con PLC basados en Arduino y ESP32.

RS-485 en la familia M-Duino

En la familia M-Duino el puerto RS-485 siempre está activo, así que no hace falta ningún interruptor para habilitarlo. Solo eliges half duplex o full duplex con el interruptor FD/HD:

Banco de interruptores del M-Duino con el interruptor FD RS485 HD resaltado junto a los bornes Pin 2 y Pin 3

Estos son los bornes del PLC para la comunicación RS-485:

Lista de pines del transceptor RS-485: DI (Tx), RO (Rx), RE (lógica invertida) y DE

RS-485 en la familia Ardbox

La familia Ardbox tiene dos subfamilias con RS-485 por hardware, el Ardbox Analog HF+ y el Ardbox Relay HF+. Comparten un puerto serie entre RS-485 y RS-232. La opción se elige al pedir el PLC, y los interruptores y los jumpers vienen configurados. Estas imágenes muestran la configuración:

Ardbox Analog HF+

Configuración de interruptores y jumpers del RS-485 serie por hardware por zonas, con las zonas marcadas en el esquema de la placa del PLC
Bornes RS-485 A+, B-, Y+ y Z-: A+ y B- para half duplex, los cuatro para full duplex

Ardbox Relay HF+

Configuración de interruptores y jumpers del RS-485 serie por hardware en una placa de PLC con salidas analógicas A0.0 y A0.1, por zonas
Bornes RS-485 A+, B-, Z- / A0.1 y Y+ / A0.0, con los pares de half duplex y full duplex marcados

Cómo programar el puerto RS-485 del PLC

Alimenta el PLC con 12 a 24 Vdc e instala las placas de Industrial Shields en el Arduino IDE. La librería RS485 viene con las placas. Abre el puerto en setup() con la misma velocidad, el mismo modo duplex y el mismo formato serie que los demás equipos del bus:

#include <RS485.h>

RS485.begin(38400, HALFDUPLEX, SERIAL_8N1);   // baud rate, HALFDUPLEX or FULLDUPLEX, format

Si omites los dos últimos parámetros, la librería usa half duplex y 8N1. Comprueba la velocidad dos veces: el monitor serie (USB, Serial) y el bus RS-485 (RS485) son puertos distintos, y cada uno tiene su velocidad. Todos los ejemplos siguientes compilan sin avisos para un M-Duino 21+ con las placas AVR de Industrial Shields 1.2.1.

Escribir en el puerto RS-485

// Send to the RS-485 port every byte typed in the serial monitor
#include <RS485.h>

void setup() {
  Serial.begin(9600);                        // serial monitor (USB)
  RS485.begin(38400, HALFDUPLEX, SERIAL_8N1); // RS-485 port: same settings on all devices
}

void loop() {
  if (Serial.available()) {
    byte tx = Serial.read();
    Serial.write(tx);                        // echo to the serial monitor
    RS485.write(tx);                         // and send it to the RS-485 bus
  }
}

Leer del puerto RS-485

// Print every byte received on the RS-485 port, in hexadecimal and decimal
#include <RS485.h>

void setup() {
  Serial.begin(9600);
  RS485.begin(38400, HALFDUPLEX, SERIAL_8N1);
}

void loop() {
  if (RS485.available()) {
    byte rx = RS485.read();
    Serial.print("HEX: ");
    Serial.print(rx, HEX);
    Serial.print(", DEC: ");
    Serial.println(rx, DEC);
  }
}

Prueba de full duplex

Full duplex necesita dos pares y solo está disponible en el M-Duino y el Ardbox. Para probarlo en un solo PLC, une A+ con Y+ y B- con Z-, pon el interruptor FD/HD en FD y ejecuta este bucle de prueba:

// Full duplex loopback test (M-Duino and Ardbox only):
// connect A+ to Y+ and B- to Z- on the same PLC, and set the HD/FD switch to FD
#include <RS485.h>

const byte TEST_BYTE = 5;

void setup() {
  Serial.begin(9600);
  RS485.begin(38400, FULLDUPLEX, SERIAL_8N1);
  Serial.println("Full duplex test");
}

void loop() {
  RS485.write(TEST_BYTE);                    // the transmitter (Y+, Z-) sends
  delay(1000);
  while (RS485.available()) {                // the receiver (A+, B-) gets it back
    Serial.print("Received: ");
    Serial.println(RS485.read());
  }
}

Para hablar con analizadores, variadores u otros PLC, usarás un protocolo sobre estos bytes. Continúa con Modbus RTU con PLC basados en Arduino y ESP32.

Mira lo que viaja por un bus RS-485. En el simulador de red Modbus, un M-Duino 21 interroga a cuatro esclavos Modbus RTU por RS-485. Cambia la velocidad o apaga un esclavo, y lee las tramas, el CRC y los timeouts.

Abrir el simulador de red ModbusConsulta a un ingeniero sobre tu bus RS-485

Preguntas frecuentes sobre RS-485

¿RS-485 es un protocolo?

No. RS-485 define las señales eléctricas, no el contenido de los mensajes. Modbus RTU, BACnet MS/TP y muchos protocolos propietarios funcionan sobre RS-485.

¿Cuál es la longitud máxima de un cable RS-485?

Unos 1200 m a 100 kbit/s o menos, con un par trenzado y terminación en los dos extremos. A más velocidad la longitud baja, hasta unos 12 m a 10 Mbit/s. Los repetidores alargan un bus más allá de estos límites.

¿Cuántos equipos puedo conectar a un bus RS-485?

32 cargas unitarias por segmento. Un transceptor estándar es una carga unitaria, así que la respuesta habitual es un maestro y 31 esclavos. Los transceptores de 1/4 o 1/8 de carga unitaria permiten 128 o 256 equipos.

¿Puede funcionar RS-485 con solo dos hilos?

Los datos viajan por dos hilos, A y B. Aun así, los receptores necesitan una referencia común dentro de -7 V a +12 V, así que cuando los equipos no tienen una masa común, añade un tercer hilo para GND.

¿Qué diferencia hay entre RS-485 y RS-422?

RS-422 también usa señales diferenciales, pero tiene un transmisor y hasta 10 receptores por par. RS-485 permite varios transmisores en el mismo par, que es lo que necesita un bus multipunto.

¿Necesito una resistencia de 120 Ω?

En cada extremo de una línea larga, sí, y solo en los extremos. Sin alimentación, la resistencia entre A y B en un bus bien terminado es de unos 60 Ω (dos de 120 Ω en paralelo).

Buscar en nuestro blog

Conceptos básicos de RS-485 en un PLC industrial
Andrei Postolache 6 de marzo de 2020
Compartir esta publicación

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs