Cómo trabajar con RS485 en un Raspberry PLC

Aprende a trabajar con la comunicación RS485 del PLC Raspberry Pi
8 de marzo de 2021 por
Cómo trabajar con RS485 en un Raspberry PLC
Boot & Work Corp. S.L., Marti Guillem Cura

Introducción

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

Nuestros PLCs para la automatización industrial llevan en su interior el circuito integrado SC16IS752. Se trata de un transceptor de bajo consumo utilizado para la comunicación RS-485 que funciona con una sola fuente de alimentación de 5V y la corriente media es de 300μA. Utilizando la comunicación half-duplex para convertir el nivel TTL en nivel RS-485, puede alcanzar la máxima velocidad de transmisión de 2,5Mbps.

Odoo text and image block

En este post, aprenderás cómo hacer lo básico para trabajar con el RS485 de los controladores lógicos programables Industrial Shields Raspberry Pi. Al finalizar el post, serás capaz de entender cómo conectar y configurar tu controlador PLC basado en Raspberry Pi industrial.

Lecturas previas

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

  • Cómo acceder al PLC de la Raspberry PiVer >>
  • Cómo cambiar la IP en Windows y LinuxVer >>
  • Conceptos básicos sobre entradas digitales del PLC Raspberry Ver >>

Requisitos

Para seguir el blog y hacer todas las pruebas correspondientes necesitarás los siguientes dispositivos:

  • Fuente de alimentación de 12/24 Vdc Ver >>
  • Cualquier dispositivo de la familia Raspberry PLC Ver >>
  • Cualquier dispositivo de la familia M-Duino / Ardbox Ver >>
  • Some wires
   

Hardware

Un PLC industrial Raspberry incluye dos puertos RS485 half-duplex . Para que funcione como una comunicación full-duplex, debes utilizar ambos al mismo tiempo, uno para enviar datos y el otro para recibir. 

En primer lugar, asegúrese de que el PLC está alimentado con una tensión de 12-24 Vdc. Para trabajar con el RS48 debemos conectar los pines A+ y B- con los correspondientes A+ y B-. 





Software

NOTE: For RPI PLC Version 4 you must use ttySC2 instead of ttySC0 and ttySC3 instead of ttySC1. 

Una vez la configuración del hardware está hecha, vamos a proceder con la de software. El PLC Industrial Raspberry está configurado de serie para trabajar con la comunicación RS485. Si utilizas una imagen distinta de la de serie, por favor, sigue las instrucciones de la Sección 15.2 (32-bit version) o la 15.3 (64-bit version) de la 

 

El PLC industrial Raspberry Pi utiliza los puertos serie ttySC0 y ttySC1 para comunicarse. En este post, verás cómo comunicarte con un PLC de la familia M-Duino para enviar y recibir datos. En primer lugar, harás una prueba inicial para comprobar el RS485 en tu Controlador Lógico Programable.


Prueba de verificación

En la siguiente prueba vas a utilizar los dos canales RS485 para comunicarte entre ellos, conectando el pin A+ con el otro A+ y el B- al pin B- del mismo PLC. Después de conectar los cables, crearás un nuevo script bash.

nano Test_RS485.sh 


En primer lugar, inicializarás ambos puertos serie a la misma tasa de baudios de 38400. 

#!/bin/bash

stty 115200 -F /dev/ttySC0 raw -echo #will be used to send data
stty 115200 -F /dev/ttySC1 raw -echo #will be used to receive data


Todos los datos recibidos desde el /dev/ttySC1 serán almacenados en el archivo temporal rs485.txt. Se enviará un mensaje "OK" desde el /dev/ttySC0, si todo está conectado correctamente, se enviará al serial /dev/ttySC1 y se escribirá en rs485.txt. El mensaje resultante se almacenará en la variable RESULTADO para una futura verificación. Asegúrese de matar el proceso cat, de lo contrario se ejecutará en segundo plano.

cat /dev/ttySC1 > /tmp/rs485.txt &
sleep 1
echo "OK" > /dev/ttySC0
RESULT=$(cat /tmp/rs485.txt)
sudo killall cat > /dev/null


Por último, comprobarás si hay datos en la variable RESULTADO. Si la comunicación ha sido exitosa, imprimirá en el terminal el mensaje recibido "OK". En caso contrario, se mostrará un mensaje de error.

if [ -n "${RESULT}" ] ; then
        echo rs485 true "${RESULT}"
else
        echo rs485 false "RS-485 cannot read from /dev/ttySC1"
fi


Prueba de conexión de M-Duino

Después de comprobar que ambos puertos RS485 funcionan correctamente, conectarás tu PLC Raspberry a uno de los PLCs M-Duino. En este caso, estamos utilizando un M-Duino 54 ARA+. Programarás tus PLCs para que envíen información de uno a otro y devuelvan un mensaje de confirmación. Para la conexión del hardware debes cablear el pin A+ del PLC Arduino con el pin A+ del PLC Raspberry y también el B- con el B-.

En ambos programas Arduino hará la misma configuración:

// Include Industrial Shields libraries
#include <RS485.h>
//// IMPORTANT: check switches configuration
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  // Begin serial port
  Serial.begin(9600);
  // Begin RS485 port
  RS485.begin(115200);
}
////////////////////////////////////////////////////////////////////////////////////////////////////

El primer programa enviará datos desde el PLC Arduino al PLC Raspberry. Estará esperando los datos desde el puerto serie y, cuando los reciba, los enviará por RS485. Mientras tanto, el PLC Raspberry estará esperando la información durante 5 segundos y, una vez recibida, la mostrará en el terminal.  Debes configurar el siguiente código en la función de bucle del PLC Arduino:

////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
  // Wait bytes in the serial port
  if (Serial.available()) {
    byte tx = Serial.read();

    // Echo the byte to the serial port again
    Serial.write(tx);

    // And send it to the RS-485 port
    RS485.write(tx);
  }
}
////////////////////////////////////////////////////////////////////////////////////////////////////

En cuanto al lado de la Raspberry, tendrás que crear un nuevo script bash y pegar el siguiente código:

#!/bin/bash

stty 115200 -F /dev/ttySC0 raw -echo #will be used to send data
end=$((SECONDS+5))

while [ $SECONDS -lt $end ]; do
	cat /dev/ttySC0 > /tmp/rs485.txt &
	sleep 1
	RESULT=$(cat /tmp/rs485.txt)
	if [ -n "${RESULT}" ] ; then
		echo "${RESULT}"
		break
	fi
done

sudo killall cat > /dev/null

El segundo programa enviará datos desde el PLC Raspberry al PLC Arduino. Enviarás un mensaje "¡Hola Mundo!" desde el puerto serie ttySC0 del PLC Raspberry y, cuando lo recibas, lo mostrarás en el monitor serie del IDE Arduino.

Añade las siguientes líneas antes de la configuración:
  int Period = 1000; //Periode d'enviament de dades en ms
  int unsigned long Time;
  String rcv_message;

Debes configurar el siguiente código en la función de bucle del PLC Arduino:

////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
  //Print received byte when available
  if (RS485.available()) {
    rcv_message = RS485.readString();
    Serial.println(rcv_message);
  }
}
////////////////////////////////////////////////////////////////////////////////////////////////////

En cuanto al Raspberry, tendrás que crear un nuevo script bash y pegar el siguiente código:

#!/bin/bash

stty 115200 -F /dev/ttySC0 raw -echo #will be used to send data
echo "Hello World!" > /dev/ttySC0

¿Quieres saber más sobre el Raspberry PLC de Industrial Shields?

Descubre las características de este controlador basado en código abierto.


Buscar en nuestro blog

Cómo trabajar con RS485 en un Raspberry PLC
Boot & Work Corp. S.L., Marti Guillem Cura 8 de marzo de 2021
Compartir

¿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.


Industrial PLC comparison >>>