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:
- Instalación del OS: Instala Raspberry Pi OS en tu tarjeta SD siguiendo este tutorial
- Inicia y Accede: Usa las credenciales predeterminadas (usuario: "pi", contraseña: "raspberry").
- Configura el puerto serial: Abre un terminal y ejecuta sudo raspi-config. Navega a "Interface" > "Serial Port".
- ¿Te gustaría que el "shell" de inicio de sesión fuera accesible a través de serial? Selecciona "No""
- ¿Te gustaría que el hardware del puerto serial se habilitara?" Selecciona "Yes"
- Sal de la herramienta "raspi-config" usando la tecla escape.
- 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.


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:

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.

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