RS485 es un estándar de comunicación serie que define las características eléctricas de los transmisores y receptores para su uso en sistemas digitales multipunto balanceados. Permite que varios dispositivos (hasta 32 nodos) se comuniquen a través de un solo par trenzado y se usa mucho en entornos industriales por su robustez y su capacidad de comunicación a larga distancia.
Los PLC de Industrial Shields basados en Arduino incorporan comunicación RS485 mediante un transceptor RS485 (el MAX485) y un puerto serie del Arduino del PLC. Por eso, el uso de RS485 es muy parecido al de los puertos Serial TTL habituales.
Hardware
RS485 usa señalización diferencial sobre par trenzado, por lo que se necesitan 2 cables para una comunicación half-duplex. Para full-duplex se necesitan 4 cables. Las gamas de PLC Ardbox y M-Duino admiten tanto half-duplex como full-duplex; según el modo usado, se emplean los siguientes pines para RS485:
- Half-duplex (HD) con A+ y B-.
- Full-duplex (FD) con A+, B-, Y+ y Z-.
Normalmente, las conexiones entre dispositivos son:
Half-duplex
Full-duplex
Además, los dos dispositivos deben tener una referencia GND común. Si no la tienen, añade una conexión adicional entre los nodos GND.
Los pasos para configurar RS485 varían según el PLC. Sigue el procedimiento correspondiente a tu modelo de PLC:
Interruptores DIP
Localiza los interruptores situados en la zona izquierda del PLC y configúralos así:
- 1 (inferior): elige entre half-duplex (HD) y full-duplex (FD) para la comunicación RS485.

Interruptores DIP
Para esta familia, configura los interruptores así:
- Interruptor izquierdo:
- 3: set to OFF to enable the RS-485 RE pin.
- 4: ponlo en ON para habilitar el pin RE de RS-485.
- 5: ponlo en OFF para habilitar el pin DE de RS-485.
- 6: ponlo en ON para habilitar el pin DE de RS-485.
- Interruptor superior:
- 1: set to OFF to enable RS-485.
- 2: ponlo en ON para habilitar RS-485.
- 3: ponlo en OFF para habilitar RS-485.
- 4: ponlo en ON para habilitar RS-485.
- Interruptor derecho:
- 1 (inferior): elige entre half-duplex (HD) y full-duplex (FD) para la comunicación RS485.
Interruptor izquierdo
Interruptor superior
Interruptor derecho
Interruptores DIP
Configura los interruptores de la siguiente manera:
- Interruptor superior:
- 1: set to ON to enable RS-485.
- 2: ponlo en OFF para habilitar RS-485.
- 3: ponlo en ON para habilitar RS-485.
- 4: ponlo en OFF para habilitar RS-485.
- Interruptor derecho:
- 1 (superior): elige entre half-duplex (HD) y full-duplex (FD) para la comunicación RS485.
- 1 (inferior): ponlo en ON para habilitar el pin RE de RS-485.
- 2 (inferior): ponlo en OFF para habilitar el pin RE de RS-485.
- 3 (inferior): ponlo en ON para habilitar el pin DE de RS-485.
- 4 (inferior): ponlo en OFF para habilitar el pin DE de RS-485.
- 1 (superior): elige entre half-duplex (HD) y full-duplex (FD) para la comunicación RS485.
Interruptor superior
Interruptor derecho
Recuerda alimentar correctamente el PLC con una fuente de alimentación de 12-24V.
Software
El paquete de placas industrialshields incluye una librería RS485 que facilita la programación. Esta librería se usa igual que la librería Serial de Arduino, con métodos como available(), read(), write(), etc.
El siguiente ejemplo establece una comunicación half-duplex y te permite leer o enviar mensajes desde el terminal del PC:
#include <RS485.h> void setup() { // Begin Serial port Serial.begin(9600); // Begin RS485 port RS485.begin(9600, HALFDUPLEX); // Define HALFDUPLEX or FULLDUPLEX } void loop() { //Send one byte for the serial, receive this byte by rs485 if (Serial.available()){ read_from_serial(); } if (RS485.available()){ read_from_rs485(); } } static void read_from_serial(void){ char tx = Serial.read(); //Read byte if (tx != '\n') Serial.println(tx); //Print the byte RS485.write(tx); //Transmit by rs485 } static void read_from_rs485(void){ char rx = RS485.read(); //Receive the same byte if (rx != '\n') { Serial.println(rx); //Print the byte } }
#include <RS485.h> void setup() { // Begin Serial port Serial.begin(9600); // Begin RS485 port RS485.begin(9600, HALFDUPLEX); // Define HALFDUPLEX or FULLDUPLEX } void loop() { //Send one byte for the serial, receive this byte by rs485 if (Serial.available()){ read_from_serial(); } if (RS485.available()){ read_from_rs485(); } } static void read_from_serial(void){ char tx = Serial.read(); //Read byte if (tx != '\n') Serial.println(tx); //Print the byte RS485.write(tx); //Transmit by rs485 } static void read_from_rs485(void){ char rx = RS485.read(); //Receive the same byte if (rx != '\n') { Serial.println(rx); //Print the byte } }
Referencia de la API
Descripción:
Comprueba si hay bytes disponibles para leer en el buffer RS485.
Sintaxis:
RS485.available();
Parámetros:
- RS485: el objeto RS485.
Devuelve:
Devuelve el número de bytes disponibles para leer.
Descripción:
Lee un byte del buffer RS485.
Sintaxis:
RS485.read();
Parámetros:
- RS485: el objeto RS485.
Devuelve:
Devuelve el byte leído del buffer RS485, o -1 si no hay datos disponibles.
Descripción:
Escribe un byte o un buffer de bytes en el bus RS485.
Sintaxis:
RS485.write(value);
RS485.write(buff, len);
Parámetros:
- RS485: el objeto RS485.
- value: el byte que se transmite por RS485.
- buff: un puntero al buffer de bytes que se transmiten.
- len: el número de bytes del buffer que se transmiten.
Devuelve:
Devuelve el número de bytes escritos.
No hay comentarios por ahora.