Comunicación entre PLC y PC: la columna vertebral de la ingeniería de automatización
La capacidad de conectar un autómata programable (PLC) con un ordenador (PC) es esencial para las tareas de programación, puesta en marcha, monitorización, diagnóstico y supervisión en sistemas industriales. Desde la transferencia del programa de control hasta la visualización de procesos en tiempo real mediante SCADA, la correcta selección y configuración de la interfaz de comunicación determina la eficiencia y fiabilidad del sistema.
Existen múltiples opciones, que van desde las clásicas conexiones serie hasta las modernas redes Ethernet industriales, pasando por soluciones híbridas mediante convertidores. Cada una tiene sus propias características de distancia, velocidad, topología y compatibilidad con protocolos como Modbus RTU/TCP, PROFINET, EtherNet/IP o los protocolos propietarios de cada fabricante.
USB: programación local sencilla y rápida
El USB se ha convertido en el método preferido para la programación local de PLCs modernos. Su principal ventaja es la conectividad plug-and-play: el ordenador reconoce el dispositivo mediante drivers que normalmente se instalan junto con el software de programación (por ejemplo, el driver de Siemens para la interfaz USB de la serie S7-1200).
- Velocidad: alta (hasta 480 Mbps en USB 2.0, superior en USB 3.0).
- Distancia: limitada a unos 5 metros sin amplificadores (cable activo o hub).
- Aplicación típica: carga inicial del programa, actualizaciones de firmware, diagnóstico rápido en taller.
Ejemplo práctico: Con un cable USB A/B estándar conectamos el PC al PLC Siemens S7-1200. En el TIA Portal seleccionamos la interfaz "USB" y el software detecta automáticamente el dispositivo. No es necesario configurar direcciones IP ni parámetros serie.
Ethernet industrial: la solución para redes y supervisión remota
Ethernet es actualmente la interfaz más versátil y extendida. Permite:
- Grandes distancias: 100 m con cobre, kilómetros con fibra óptica.
- Integración en redes: varios PLCs, HMIs y PCs pueden coexistir en la misma red.
- Protocolos estándar: Modbus TCP/IP, PROFINET, EtherNet/IP, S7 (Siemens), etc.
- Supervisión remota: mediante SCADA, OPC UA, o incluso acceso web desde cualquier lugar con seguridad adecuada (VPN, cortafuegos).
La configuración típica requiere asignar una dirección IP fija al PLC y al PC dentro de la misma subred, así como configurar la máscara de red y, en ocasiones, la puerta de enlace. En redes industriales, también es habitual usar switches gestionados con calidad de servicio (QoS) para priorizar el tráfico de control.
Datos técnicos: PROFINET IRT (Isochronous Real-Time) permite tiempos de ciclo deterministas inferiores a 1 ms para aplicaciones de movimiento.
RS-232 y RS-485: clásicos robustos para entornos industriales
Aunque han perdido protagonismo frente a Ethernet, los puertos serie siguen siendo fundamentales en equipos antiguos, sistemas sencillos o largas distancias con pocos datos.
- RS-232: comunicación punto a punto, distancia máxima 15 metros. Usado en programación de PLCs pequeños (Mitsubishi, Siemens S7-200) y para conectar periféricos (lectores de códigos, impresoras).
- RS-485: permite conexión multidrop (hasta 32 dispositivos) y distancias de hasta 1200 metros. Es la base de protocolos como Modbus RTU y PROFIBUS DP.
La configuración en el PC requiere seleccionar el puerto COM correcto (p.ej., COM3), y ajustar parámetros de comunicación: baud rate (9600, 19200, 115200.), bits de datos (normalmente 8), paridad (ninguna, par, impar) y bits de parada (1 o 2). Estos parámetros deben coincidir exactamente con los configurados en el PLC.
Software de programación y sistemas SCADA/HMI
Cada fabricante proporciona su propio entorno de desarrollo: TIA Portal (Siemens), GX Works (Mitsubishi), RSLogix/Studio 5000 (Rockwell), CODESYS (multifabricante). Estos programas no solo permiten la programación, sino también la monitorización online, forzado de variables y diagnóstico.
Para la visualización y control a nivel de planta, los sistemas SCADA (WinCC, Ignition, Intouch, VTScada) se comunican con los PLCs mediante drivers específicos que traducen los protocolos del PLC a un formato comprensible para el SCADA. Estos drivers se encargan de gestionar la comunicación, reintentos y detección de fallos.
Ejemplo de comunicación SCADA-PLC: Un servidor OPC (OLE for Process Control) actúa como intermediario, ofreciendo una interfaz estándar (DA, HDA, UA) que múltiples clientes pueden utilizar. Muchos PLCs modernos incluyen un servidor OPC UA integrado.
Convertidores y gateways: uniendo el pasado con el futuro
Existen numerosos dispositivos que permiten conectar PLCs antiguos (con puertos serie) a redes Ethernet modernas. Los convertidores de protocolo (por ejemplo, RS-232/485 a Ethernet) toman los datos serie y los empaquetan en tramas TCP/IP, permitiendo que un SCADA acceda a ellos como si fueran dispositivos Ethernet. Algunos también realizan conversión entre protocolos, como Modbus RTU a Modbus TCP.
Curiosidad de ejemplo: Gracias a estos gateways, un PLC Siemens S5 de los años 80, con solo interfaz RS-232, puede seguir comunicándose con un SCADA moderno, prolongando su vida útil y evitando una costosa migración. Es una solución muy común en plantas con equipos legacy.
# plc_comm.py - Ejemplo de lectura/escritura en un PLC mediante Modbus TCP
# Requiere: pip install pymodbus
# Simula la comunicación con un PLC que soporta Modbus TCP (o con un esclavo simulado)
from pymodbus.client import ModbusTcpClient
import time
class PLCComm:
"""Clase para gestionar la comunicación con un PLC vía Modbus TCP."""
def __init__(self, ip, port=502):
self.client = ModbusTcpClient(ip, port=port)
self.connected = False
def connect(self):
"""Establece conexión con el PLC."""
self.connected = self.client.connect()
if self.connected:
print(f"✅ Conectado a PLC en {self.client.host}:{self.client.port}")
else:
print("❌ Error de conexión")
return self.connected
def disconnect(self):
self.client.close()
print("🔌 Desconectado")
def read_coil(self, address):
"""Lee una bobina (salida digital) en la dirección dada."""
result = self.client.read_coils(address, 1)
if not result.isError():
return result.bits[0]
else:
print(f"Error leyendo coil {address}: {result}")
return None
def write_coil(self, address, value):
"""Escribe una bobina (True/False)."""
result = self.client.write_coil(address, value)
if result.isError():
print(f"Error escribiendo coil {address}: {result}")
def read_holding_register(self, address):
"""Lee un registro de holding (entero 16 bits)."""
result = self.client.read_holding_registers(address, 1)
if not result.isError():
return result.registers[0]
else:
print(f"Error leyendo registro {address}: {result}")
return None
def write_holding_register(self, address, value):
"""Escribe un registro de holding."""
result = self.client.write_register(address, value)
if result.isError():
print(f"Error escribiendo registro {address}: {result}")
# --- Ejemplo de uso con un PLC real o simulado (ej. Modbus Slave) ---
if __name__ == "__main__":
plc = PLCComm("192.168.1.100") # Cambiar por la IP del PLC
if plc.connect():
# Leer bobina en dirección 0 (por ejemplo, entrada digital)
estado = plc.read_coil(0)
if estado is not None:
print(f"Bobina 0 = {estado}")
# Escribir bobina 1 a True (activar salida)
plc.write_coil(1, True)
# Leer registro holding 40001 (dirección 0)
valor = plc.read_holding_register(0)
if valor is not None:
print(f"Registro 0 = {valor}")
# Escribir un valor (por ejemplo, consigna)
plc.write_holding_register(10, 1500)
plc.disconnect()
else:
print("No se pudo conectar. Verifica IP y conectividad.")
Este código utiliza la librería pymodbus para comunicarse con un PLC (o simulador) a través de Modbus TCP. Se pueden leer/escribir bobinas y registros. Es una base excelente para integrar una Raspberry Pi como interfaz de comunicación con un PLC industrial.
La comunicación PLC-PC avanza hacia la integración nativa de OPC UA en los propios PLCs, eliminando la necesidad de drivers intermedios. También se populariza el uso de MQTT para conectar PLCs a plataformas IoT industriales. En el ámbito de la ciberseguridad, las conexiones Ethernet incorporan autenticación y cifrado (por ejemplo, PROFINET con seguridad integrada). Los convertidores actuales ya incluyen funciones de firewall y VPN para comunicaciones remotas seguras.
La Raspberry Pi puede actuar como interfaz de comunicación entre PLC y PC, o como un pequeño SCADA. Con librerías como pymodbus (para Modbus), python-snap7 (para Siemens S7), o pyprofibus, podemos leer y escribir datos del PLC y mostrarlos en una interfaz web o enviarlos a la nube. Además, puede servir como gateway entre diferentes protocolos.
Arduino puede comunicarse con un PC a través del puerto serie (USB) y actuar como un pequeño PLC esclavo Modbus RTU. Con un shield Ethernet, puede ser un esclavo Modbus TCP. Es ideal para prototipos y aprendizaje de los fundamentos de comunicación industrial.
- ✅ Comprender activamente cada línea de código generada
- ✅ Personalizar la solución según tus necesidades específicas
- ✅ Iterar y refinar el código hasta dominar la lógica
- ✅ Desarrollar habilidades de comunicación técnica con IA
📋 Instrucciones de Uso:
- Copia el prompt completo del recuadro superior.
- Personaliza los campos entre corchetes [CAMPO] con tu información específica.
- Pega el prompt en una nueva conversación con tu IA favorita.
- Itera y refina: Pide aclaraciones, modificaciones o añade requisitos adicionales.
- Prueba el código en Thonny primero, luego en tu Raspberry Pi y ajusta según resultados.
💼 Caso Práctico Industrial: PLC legacy
Contexto: En una planta de tratamiento de aguas, existe un PLC Siemens S5 con un único puerto RS-232. Se desea integrarlo en un nuevo sistema SCADA basado en PC con red Ethernet. La distancia entre el PLC y el PC es de 200 metros.
Pregunta: ¿Cuál es la solución más adecuada y económica para establecer la comunicación?
🍓 Raspberry Pi + Python
Contexto: En una Raspberry Pi se quiere leer un registro (holding register) de un PLC Modbus TCP cada segundo y mostrarlo por consola. Se decide usar la librería pymodbus.
Pregunta: ¿Qué método de la clase ModbusTcpClient se debe usar para leer un registro holding en la dirección 100?
🐍 Parámetros de comunicación serie
Contexto: Se desea configurar un puerto serie en Python para comunicarse con un PLC que utiliza Modbus RTU con los siguientes parámetros: baudrate 19200, 8 bits de datos, paridad par, 1 bit de parada.
Pregunta: ¿Cómo se crea una instancia de serial.Serial con estos parámetros?
| Interfaz | Distancia máxima | Velocidad típica | Topología | Protocolos comunes | Aplicación principal |
|---|---|---|---|---|---|
| USB | 5 m | 480 Mbps (2.0) | Punto a punto | Drivers propietarios | Programación local, diagnóstico |
| Ethernet | 100 m (cobre), 40 km (fibra) | 100 Mbps – 1 Gbps | Estrella, anillo, línea | Modbus TCP, Profinet, EtherNet/IP, S7 | Redes de planta, SCADA, remoto |
| RS-232 | 15 m | 115200 bps | Punto a punto | Modbus RTU, propietarios | PLC pequeños, periféricos |
| RS-485 | 1200 m | 115200 bps – 12 Mbps | Multidrop | Modbus RTU, Profibus | Redes de campo, largas distancias |
📚 Recursos Técnicos y Normativos 2026
Normativas y Estándares
- IEC 61131-3:2013 + enmiendas 2025 - Programmable controllers — Part 3: Programming languages
- Modbus Organization - Especificaciones Modbus RTU/TCP
- PROFIBUS & PROFINET International (PI)