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.

Cable USB tipo A a tipo B: conector plano USB-A (izquierda) y conector cuadrado USB-B (derecha), utilizado para conectar PC a PLC o dispositivos periféricos.
Figura 13a: Cable USB tipo A/B – interfaz de programación PC↔PLC. Fuente: Wikimedia Commons / Autor: oomlout / Licencia: CC BY-SA 2.0
Cable Ethernet Cat-5/5e con conector RJ45 (8P8C) conectado a un puerto de red, utilizado para comunicación Profinet, EtherCAT o Modbus TCP en redes industriales.
Figura 13b: Cable Ethernet con conector RJ45 – interfaz Profinet / Modbus TCP. Fuente: Wikimedia Commons / Autor: Khairil Yusof / Licencia: CC BY 2.0
Cable serie azul RS-232 con conector DB-9 macho (DE-9), utilizado para la programación de PLC y comunicación serie punto a punto entre PC y dispositivos industriales.
Figura 13c: Cable serie RS-232 con conector DB-9 – interfaz de programación serie clásica. Fuente: Wikimedia Commons / Autor: Mobius / Licencia: Dominio público
Adaptador conversor RS-232 a USB: conector DB-9 macho (RS-232) en un extremo y conector USB en el otro, permite conectar dispositivos serie RS-232/RS-485 a puertos USB modernos.
Figura 13d: Adaptador conversor RS-232 / RS-485 a USB – permite conectar dispositivos serie a PCs sin puerto COM. Fuente: Wikimedia Commons / Autor: Markus Bärlocher / Licencia: CC0 – Dominio público

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.

🐍 Comunicación con un PLC vía Modbus TCP desde Python (Raspberry Pi)
# 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.

Tendencias Actuales 2026

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.

Aplicaciones con Raspberry Pi

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.

Aplicaciones con Arduino

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.

💼 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?

Tabla 1: Comparativa de interfaces de comunicación PLC-PC
InterfazDistancia máximaVelocidad típicaTopologíaProtocolos comunesAplicación principal
USB5 m480 Mbps (2.0)Punto a puntoDrivers propietariosProgramación local, diagnóstico
Ethernet100 m (cobre), 40 km (fibra)100 Mbps – 1 GbpsEstrella, anillo, líneaModbus TCP, Profinet, EtherNet/IP, S7Redes de planta, SCADA, remoto
RS-23215 m115200 bpsPunto a puntoModbus RTU, propietariosPLC pequeños, periféricos
RS-4851200 m115200 bps – 12 MbpsMultidropModbus RTU, ProfibusRedes de campo, largas distancias

📚 Recursos Técnicos y Normativos 2026

Normativas y Estándares

Recursos Raspberry Pi y Python