Introducción

Los avances en la tecnología de los autómatas programables han permitido que los PLC modernos sean herramientas sumamente versátiles y potentes en la automatización industrial. Estas mejoras se reflejan tanto en su hardware como en su software, integrando capacidades que superan ampliamente las funciones clásicas de control lógico. Entre las características más destacadas de los PLC contemporáneos se encuentran la mayor capacidad de procesamiento, una amplia conectividad, memoria ampliada y la inclusión de módulos para aplicaciones especializadas como el control de movimiento, el procesamiento de señales analógicas o la gestión de protocolos de comunicación industrial. Los PLC actuales permiten ejecutar programas complejos y gestionar enormes volúmenes de información en tiempo real, facilitando la integración con sistemas de supervisión y control (SCADA), MES y ERP.

Lenguajes de programación: norma IEC 61131-3

Un aspecto clave en la programación avanzada es la adopción de lenguajes estándar definidos por la norma IEC 61131-3. Esta norma internacional establece cinco lenguajes principales, cada uno adaptado a distintas necesidades y perfiles de usuarios:

  • Diagrama de contactos (LD, Ladder Diagram): Basado en la lógica de relés tradicional, es especialmente útil para técnicos y electricistas que migran de sistemas cableados a soluciones programadas.
  • Lista de instrucciones (IL, Instruction List): Un lenguaje similar al ensamblador, actualmente en desuso en sistemas nuevos debido a la preferencia por lenguajes más estructurados.
  • Diagrama de funciones (FBD, Function Block Diagram): Permite construir programas mediante bloques funcionales conectados entre sí, facilitando la representación de procesos continuos y operaciones aritméticas complejas.
  • Texto estructurado (ST, Structured Text): Similar a lenguajes de alto nivel como Pascal o C, es ideal para cálculos avanzados, manejo de estructuras y algoritmos sofisticados.
  • Diagrama secuencial de funciones (SFC, Sequential Function Chart): Permite describir procesos como secuencias de pasos y transiciones, facilitando la programación de ciclos y máquinas de estados.

Entornos de desarrollo (IDE)

Los entornos de desarrollo para PLC han evolucionado paralelamente a los lenguajes. Plataformas como TIA Portal de Siemens, CX-Programmer de Omron, RSLogix de Rockwell o Codesys proporcionan interfaces gráficas avanzadas, herramientas de simulación, depuración y gestión de versiones. Estas plataformas permiten trabajar de manera colaborativa, gestionar bibliotecas de funciones y reutilizar código, facilitando la escalabilidad y el mantenimiento de los proyectos de automatización.

Funcionalidades extendidas

Otra faceta esencial de la programación avanzada es el uso de funcionalidades extendidas que van más allá del simple control lógico. Entre ellas destacan:

  • Control PID (Proporcional-Integral-Derivativo): Los PLC modernos integran bloques funcionales PID que permiten regular variables continuas como temperatura, presión o caudal. La parametrización y ajuste de estos controladores se realiza desde el propio entorno de desarrollo, y pueden integrarse múltiples bucles PID en una aplicación.
  • Comunicación industrial: Los PLC actuales soportan una amplia variedad de protocolos de comunicación estándar como Modbus, Profibus, Ethernet/IP, Profinet o CANopen. Esto facilita la integración de equipos de diferentes fabricantes, la conexión a redes industriales y el intercambio de datos en tiempo real entre dispositivos de campo y sistemas de supervisión.
  • Estructuras de datos avanzadas: Los nuevos lenguajes permiten la definición y manipulación de tipos de datos complejos como estructuras (structs), arrays y user-defined types (UDT). Esto beneficia la organización del programa, la reutilización de código y la gestión eficiente de la información, especialmente en aplicaciones de gran envergadura.

Además, los PLC modernos pueden ejecutar tareas concurrentes, gestionar interrupciones, programar eventos temporizados y realizar diagnósticos avanzados de hardware y software. La integración de funciones de seguridad, redundancia y acceso remoto eleva el nivel de confiabilidad y disponibilidad de los sistemas automatizados.

3.1. Conceptos de hardware: CPU, módulos de E/S y módulos especiales

Unidad Central de Proceso (CPU)

La CPU es el cerebro del PLC. Contiene el procesador, la memoria (RAM para datos, ROM/Flash para el programa) y el sistema operativo en tiempo real. Ejecuta cíclicamente el programa de usuario, actualiza las entradas, procesa la lógica y actualiza las salidas. Las CPUs modernas pueden manejar múltiples tareas con diferentes prioridades y tiempos de ciclo.

Módulos de entradas y salidas

  • Entradas digitales (binarias): Detectan señales de tipo todo/nada (24 Vcc, 110/230 Vca, etc.) procedentes de pulsadores, finales de carrera, sensores inductivos, etc.
  • Salidas digitales: Actúan sobre relés, contactores, lámparas, etc. Pueden ser de relé (contacto seco), transistor (para corriente continua) o triac (para corriente alterna).
  • Entradas analógicas: Convierten señales continuas (0-10 V, 4-20 mA, termopar, PT100) en valores digitales para su procesamiento.
  • Salidas analógicas: Generan señales continuas (0-10 V, 4-20 mA) para controlar variadores de frecuencia, posicionadores de válvulas, etc.

Módulos especiales

  • Comunicación: Añaden interfaces de red (Ethernet, Profibus, CANopen) para conectar el PLC a otros dispositivos o sistemas SCADA.
  • Control PID: Incorporan hardware específico para ejecutar lazos de regulación de forma autónoma, liberando carga a la CPU.
  • Contador rápido: Permiten contar pulsos de alta frecuencia (provenientes de encoders, caudalímetros) sin perder eventos.
  • Display / HMI: Integran una pequeña pantalla y teclado para visualización y operación local.

La selección de los módulos adecuados depende de la aplicación: número de señales, tipo de sensores/actuadores, velocidad de respuesta y necesidades de comunicación.

PLC Siemens SIMATIC S7-1500 con varios módulos de E/S y comunicación.
Figura 1: PLC modular Siemens SIMATIC S7-1500, mostrando la CPU con pantalla táctil y varios módulos de E/S y comunicación. Fuente: Wikimedia Commons / Palatinatian (Ulli Ziegenfuss) — Licencia: CC BY 3.0

🐍 Ejemplo práctico: Simulación de estructuras de datos en Python (UDT)

Los PLC modernos permiten definir tipos de datos personalizados (UDT) para organizar la información. En Python podemos simular este concepto usando clases o diccionarios. El siguiente ejemplo define una estructura para un motor y crea una lista de motores.

from dataclasses import dataclass
from typing import List

# Definición de un tipo de dato personalizado (UDT) usando dataclass
@dataclass
class Motor:
    id: int
    nombre: str
    estado: bool  # True = encendido, False = apagado
    velocidad: float  # en rpm
    corriente: float  # en amperios

# Crear una lista de motores (simula una tabla de instancias)
motores: List[Motor] = [
    Motor(id=1, nombre="Bomba principal", estado=True, velocidad=1450.0, corriente=12.5),
    Motor(id=2, nombre="Ventilador extractor", estado=False, velocidad=0.0, corriente=0.0),
    Motor(id=3, nombre="Cinta transportadora", estado=True, velocidad=960.0, corriente=8.2),
]

# Función para buscar un motor por ID y cambiar su estado
def cambiar_estado_motor(id_motor: int, nuevo_estado: bool) -> bool:
    for motor in motores:
        if motor.id == id_motor:
            motor.estado = nuevo_estado
            print(f"Motor {motor.nombre} ahora está {'ENCENDIDO' if nuevo_estado else 'APAGADO'}")
            return True
    print(f"Motor con ID {id_motor} no encontrado.")
    return False

# Ejemplo de uso
print("Estado inicial:")
for m in motores:
    print(f"  {m}")

cambiar_estado_motor(2, True)  # Encendemos el ventilador

print("\nEstado final:")
for m in motores:
    print(f"  {m}")

Figura 2: Código Python que simula el uso de tipos de datos estructurados (UDT) para gestionar motores en un PLC. La salida muestra el cambio de estado.

💼 Caso Práctico Industrial

Contexto: Una planta de embotellado necesita controlar la temperatura de un pasteurizador mediante un lazo de regulación PID. Se dispone de un PLC con módulos de entradas analógicas (para la señal del sensor de temperatura PT100) y salidas analógicas (para la válvula de vapor). El proceso requiere una alta velocidad de respuesta y estabilidad.

Problema: ¿Qué tipo de módulo especial sería más adecuado para implementar el lazo PID sin sobrecargar la CPU principal?

Pregunta: Selecciona la opción correcta:

🍓 Caso Práctico Raspberry Pi

Contexto: Quieres simular un módulo de contador rápido de un PLC usando una Raspberry Pi. Dispones de un sensor de efecto Hall que genera pulsos al paso de una rueda dentada (encoder incremental).

Problema: ¿Qué característica de la Raspberry Pi es más importante para contar pulsos de alta frecuencia sin perder eventos?

Pregunta: Elige la opción más adecuada:

🐍 Caso Práctico Python

Contexto: En el ejemplo de código Python que simula estructuras de datos para motores, se utiliza una clase `Motor` y una lista. Queremos añadir un nuevo motor con id=4, nombre='Agitador', estado=False, velocidad=0.0, corriente=0.0.

Problema: ¿Cuál de las siguientes líneas añadiría correctamente este motor a la lista `motores`?

Pregunta: Selecciona la opción correcta:

📚 Recursos Técnicos y Normativos 2026

  • IEC 61131-3 - Norma de lenguajes de programación para PLC.
  • PLCopen - Organización para la estandarización en automatización.
  • Siemens PLC - Documentación técnica.
  • Codesys - Entorno de desarrollo independiente.