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.
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 Pi Ver >>
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:
Hardware
Software
Una vez realizada la configuración del hardware, vamos a configurar el software. El PLC industrial Raspberry Pi está configurado por defecto para trabajar con la comunicación RS485. Si estás utilizando una imagen diferente a la predeterminada, sigue las instrucciones de este enlace.
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 #will be used to send data
stty 115200 -F /dev/ttySC1 #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-.
// Include Industrial Shields libraries
#include <RS485.h>
//// IMPORTANT: check switches configuration
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
// Begin serial port
Serial.begin(9600);
// Begin RS485 port
RS485.begin(38400);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////// 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); } } ////////////////////////////////////////////////////////////////////////////////////////////////////
#!/bin/bash stty 115200 -F /dev/ttySC0 #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
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 #will be used to send data echo "Hello World!" > /dev/ttySC0