Cómo comunicar un UPSafePi con M-Duino PLC usando el protocolo RS485

Guía paso a paso para integrar UPSafePi con un PLC M-Duino basado en Arduino a través de RS485
29 de abril de 2024 por
Cómo comunicar un UPSafePi con M-Duino PLC usando el protocolo RS485
Boot & Work Corp. S.L, Ricard Franch Argullol


En automatización industrial, la comunicación efectiva entre dispositivos es crucial. Este post profundiza en la integración de UPSafePi con M-Duino PLC utilizando el protocolo RS485. Se cubren todos los pasos necesarios, desde las conexiones de hardware hasta la programación, para asegurar una comunicación fluida entre el UPSafePi y el M-Duino a través de RS485. Esta guía te ayudará a comprender las funcionalidades de cada dispositivo y cómo hacer que funcionen juntos de manera eficiente.


Requisitos esenciales para integrar UPSafePi con M-Duino PLC a través de RS485

Antes de comenzar el proceso de integración, asegúrate de tener los siguientes componentes:



Tener estos elementos listos es crucial para configurar las conexiones de hardware y la programación necesaria para una comunicación efectiva entre el UPSafePi y M-Duino PLC utilizando el protocolo RS485. Asegúrate de que cada componente esté correctamente configurado para facilitar un proceso de integración fluido.

Estableciendo conexiones RS485 entre UPSafePi y PLC M-Duino

Para hacer posible la comunicación entre el UPSafePi y el PLC M-Duino, utilizando el protocolo RS485, necesitas establecer las siguientes conexiones:

  • A+ (M-Duino) -> A (UPSafePi)
  • B- (M-Duino) -> B (UPSafePi)

Además, asegúrate de que ambos dispositivos estén alimentados con una fuente de energía adecuada, que varíe entre 12 y 24 VDC. Un suministro de energía adecuado es esencial para mantener una comunicación estable y confiable entre los dispositivos.


Configuración de UPSafePi para comunicación RS485

El UPSafePi cuenta con un puerto RS485 que soporta comunicación "half-duplex". Para utilizar RS485 con UPSafePi, considera lo siguiente:

  • Puerto Serial: Los datos se envían y reciben a través del puerto serial de la Raspberry Pi, identificado como "/dev/ttyS0", que debe configurarse correctamente para acceder a él.
  • Pin DE/RE (GPIO 27): Este pin define la dirección de la comunicación en "half-duplex" RS485 (en "full-duplex" serían dos pines separados, DE y RE). Para enviar o recibir datos, este pin debe alternarse apropiadamente:
    • Para transmitir, establece el pin en ALTO.
    • Para recibir, establece el pin en BAJO. 

       

Configuración del Sistema Operativo (OS) para UPSafePi

Comencemos con la configuración del UPSafePi para utilizar la comunicación RS485. Te recomendamos seguir estos pasos:

  1. Instalación del OS: Instala Raspberry Pi OS en tu tarjeta SD siguiendo este tutorial​ 
  2. Inicia y Accede: Usa las credenciales predeterminadas (usuario: "pi", contraseña: "raspberry"). 
  3. Configura el puerto serial: Abre un terminal y ejecuta sudo raspi-config. Navega a "Interface" > "Serial Port". ​ 
    1. ¿Te gustaría que el "shell" de inicio de sesión fuera accesible a través de serial? Selecciona "No"" 
    2. ¿Te gustaría que el hardware del puerto serial se habilitara?" Selecciona "Yes"
  4. Sal de la herramienta "raspi-config" usando la tecla escape.  
  5. sudo nano /boot/config.txtEn el archivo "/boot/config.txt", después de la declaración "[all]", introduce la siguiente línea: enable_uart=1. Puedes hacerlo editando el archivo con tu editor de texto favorito. Por ejemplo, con nano: sudo nano /boot/config.txt.

Después de seguir estos pasos, el RS485 estará disponible para su uso en el UPSafePi.  

Raspberry Pi configuration tool interface options highlighted

Raspberry Pi serial port login shell configuration prompt

Programación de UPSafePi para comunicación RS485 usando Python

Veamos cómo programar el UPSafePi para usar RS485 con Python. Para esta prueba usaremos las siguientes librerías:

  • Python Serial: Esta librería proporciona una forma de interactuar con los puertos seriales en tu sistema. En este caso, se utilizará para interactuar con el puerto serial /dev/ttyS0
  • RPi.GPIO: Esta librería se usa para operaciones de Entrada/salida de Propósito General (GPIO), en una Raspberry Pi. En este ejemplo se empleará para controlar el pin DE/RE (GPIO 27).
  • Time: La función de esta librería se usará para introducir tiempos de espera en el programa.

Primero, las librerías deben importarse de esta manera:

import serial
import RPi.GPIO as GPIO
import time

Usando la librería serial, necesitamos inicializar el puerto serial con parámetros como la tasa de baudios. El pin DE/RE también debe ser inicializado:

GPIO.setwarnings(False)

# Setup the GPIO pin used as DE/RE
GPIO.setmode(GPIO.BCM)
gpio_pin = 27
GPIO.setup(gpio_pin, GPIO.OUT)

# Set the GPIO pin to low
GPIO.output(gpio_pin, GPIO.LOW)

# Define RS485 parameters
ser = serial.Serial(
    port='/dev/ttyS0',
    baudrate=38400,
    timeout=1
)

Después de esto, se pueden usar las funciones de lectura y escritura de la librería serial. Sin embargo, debemos recordar alternar correctamente el pin DE/RE. Una buena estrategia es mantenerlo siempre en BAJO, excepto cuando queremos transmitir, como se hace en las siguientes funciones. También, es importante mantener el pin DE/RE en estado ALTO, durante un tiempo, después de enviar datos. Para asegurarnos de que se haya mandado correctamente.

def send_data(data):
    GPIO.output(gpio_pin, GPIO.HIGH)
    ser.write(data.encode('utf-8'))
    time.sleep(0.1) # Sleep to wait while data is sent
    GPIO.output(gpio_pin, GPIO.LOW)

def receive_data():
        GPIO.output(gpio_pin, GPIO.LOW)
        data = ser.readline().decode('utf-8')
        if data:
            print(f"Received data: {data.strip()}")

Con estas partes, podemos crear un programa que transmita y reciba mensajes a un M-Duino. Revisa el código completo:

import serial
import RPi.GPIO as GPIO
import time

# Function to send data
def send_data(data):
    GPIO.output(gpio_pin, GPIO.HIGH)
    ser.write(data.encode('utf-8'))
    time.sleep(0.1) # Sleep to wait while data is sent
    GPIO.output(gpio_pin, GPIO.LOW)

# Function to receive data
def receive_data():
        GPIO.output(gpio_pin, GPIO.LOW)
        data = ser.readline().decode('utf-8')
        if data:
            print(f"Received data: {data.strip()}")

if __name__ == "__main__":

    GPIO.setwarnings(False)

    # Setup the GPIO pin used as DE/RE
    GPIO.setmode(GPIO.BCM)
    gpio_pin = 27
    GPIO.setup(gpio_pin, GPIO.OUT)

    # Set the GPIO pin to low
    GPIO.output(gpio_pin, GPIO.LOW)

    # Define RS485 parameters
    ser = serial.Serial(
        port='/dev/ttyS0',
        baudrate=38400,
        timeout=1
    )
               
    i = 0
    while True:
​ # Send data
        send_data("Message " + str(i) +"\r\n")
        i +=1

# Receive data
        receive_data()

ser.close()


Configuración de M-Duino para comunicación RS485 en half-duplex

El M-Duino cuenta con dos puertos RS485 y soporta comunicación en "full" y "half-duplex". En este ejemplo, estamos comunicándonos con un UPSafePi usando comunicación "half-duplex", por lo que el interruptor DIP RS485 en el PLC debe estar configurado en HD (encendido). Para más información sobre los interruptores DIP, consulta la sección de hardware, en la página de características técnicas

Después de configurar correctamente el interruptor, la librería RS485, incluida en nuestro  paquete de placas, puede usarse para enviar y recibir datos, similar a la librería Serial de Arduino. Revisa el siguiente ejemplo, diseñado para funcionar con el programa UPSafePi en esta página, que recibe mensajes y los reenvía.

No olvides seleccionar correctamente tu modelo de placa en el IDE de Arduino.

#include<RS485.h>

int i = 0;
char buffer[256];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  RS485.begin(38400, HALFDUPLEX, SERIAL_8N1);
}

void loop() {
  uint8_t i = 0;
  if (RS485.available()) {
    while (RS485.available()) {
      buffer[i] = RS485.read();
      Serial.print(buffer[i++]);
    }
    buffer[i] = '\0';
 
    delay(1000);
    RS485.write(buffer);
  }
}


Demostración de la comunicación RS485 entre UPSafePi y M-Duino

Demostración de la comunicación RS485 entre UPSafePi y M-Duino Usando el programa anterior, podemos interconectar el UPSafePi y el M-Duino. La salida generada de ambos dispositivos serán los mensajes recibidos:

RS485 communication test output showing received messages on UPSafePi and M-Duino


Conclusiones sobre la comunicación RS485 entre UPSafePi y M-Duino PLC

En conclusión, establecer comunicación entre UPSafePi y M-Duino PLC usando RS485 es una tarea bastante simple. Y puede ser muy útil para integrar estos dispositivos en varios escenarios. 

La principal dificultad reside en la gestión del pin DE/RE, al asegurar que todos los datos se envíen correctamente. Sin embargo, después de entender su funcionamiento, el RS485 se convertirá en un protocolo de comunicación realmente versátil y práctico.

Buscar en nuestro blog

Cómo comunicar un UPSafePi con M-Duino PLC usando el protocolo RS485
Boot & Work Corp. S.L, Ricard Franch Argullol 29 de abril de 2024
Compartir esta publicación
Etiquetas

¿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