Gestión de la CPU del autómata: operaciones fundamentales

El trabajo diario con autómatas programables (PLC) implica una serie de operaciones críticas para transferir, mantener y diagnosticar el programa de control. Dominar la carga, borrado, chequeo on-line y gestión de archivos asegura la continuidad del proceso productivo y facilita la detección temprana de fallos. Estas tareas están soportadas por los entornos de desarrollo específicos de cada fabricante (TIA Portal, RSLogix, GX Works, CODESYS) pero siguen principios comunes según la norma IEC 61131-3 y las buenas prácticas de ingeniería.

En esta sección se detallan los procedimientos estandarizados, precauciones de seguridad y consejos para mantener la integridad del sistema, incluyendo ejemplos reales con PLC Siemens S7-1500, Rockwell CompactLogix y modelos didácticos.

Transferencia de programas (carga/descarga)

La carga (download) consiste en transferir el programa desde el ordenador de ingeniería (PG/PC) a la CPU del PLC. Antes de iniciar, se deben cumplir requisitos previos:

  • Conexión física: mediante cable de programación (USB, Ethernet, RS232/485) o a través de red industrial (Profinet, EtherNet/IP).
  • Configuración de interfaz: asignar dirección IP (para Ethernet) o puerto COM correcto.
  • Compatibilidad: el firmware de la CPU debe ser compatible con la versión del software y las librerías utilizadas.
  • Modo de operación: la mayoría de PLC requieren estar en STOP o PROG para aceptar una nueva carga. Algunos permiten download parcial en RUN (solo modificaciones) pero con riesgos.

Ejemplo paso a paso (TIA Portal con S7-1200):

  1. Compilar el proyecto y asegurar que no hay errores.
  2. Seleccionar la CPU en el árbol y hacer clic en "Cargar en dispositivo".
  3. Elegir interfaz PG/PC (por ejemplo, PN/IE) y buscar dispositivos accesibles.
  4. Establecer la conexión y aceptar la advertencia de que la CPU pasará a STOP.
  5. Transferir los bloques (OB, FC, FB, DB).
  6. Arrancar la CPU (RUN) y comprobar funcionamiento.

Durante la transferencia, el software verifica automáticamente la consistencia de tipos de datos, direcciones y configuración de hardware. Si hay discrepancias, se muestra un mensaje de error y se interrumpe el proceso.

Borrado de memoria: total o parcial

El borrado se realiza para eliminar un programa existente, resolver conflictos de memoria o preparar el PLC para una nueva configuración. Existen varios niveles:

  • Borrado total (reset factory): elimina programa, datos y configuración. Se usa cuando se cambia el propósito de la máquina o hay corrupción grave.
  • Borrado de bloques de programa: solo se eliminan los bloques de usuario (OB, FC, FB) pero se conservan los datos de diagnóstico y configuración de hardware.
  • Borrado de memoria de datos (RAM): reinicia valores de marcas, temporizadores, contadores, pero mantiene el código.

En PLC Siemens, desde TIA Portal se puede acceder a "Poner en marcha > Borrar memoria total". En Rockwell, desde RsLogix se usa "Communications > Reset". Es fundamental tener un backup actualizado antes de cualquier borrado.

Diálogo 'Carga ampliada en dispositivo' en TIA Portal V17. Panel izquierdo: configuración de interfaz PG/PC (tipo PN/IE), campo de dirección IP 192.168.0.1 y botón 'Buscar en subred', con tabla de dispositivos accesibles (PLC_1 CPU 1214C en verde). Panel derecho: datos del dispositivo seleccionado y opciones de parada. Sección inferior: vista previa con advertencia 'La CPU pasará a STOP' y botón 'Cargar' (azul).
Figura 4: Diálogo de carga ampliada (Extended Download to Device) en TIA Portal V17 para CPU SIMATIC S7‑1200. Se muestran la selección de interfaz PG/PC, la búsqueda de dispositivos en subred, las opciones de parada y la advertencia de que la CPU pasa a STOP durante la transferencia. Fuente: Elaboración propia. / Licencia: CC BY‑NC 4.0

Copia de seguridad (backup) y restauración

Realizar backups periódicos es la mejor defensa contra pérdidas de información. El backup puede ser:

  • Completo: incluye programa, configuración de hardware, datos de marcas (opcional) y parámetros de módulos.
  • Incremental: solo cambios desde última copia (poco común en PLC).

Desde el software se puede subir (upload) el contenido de la CPU al PC, generando un archivo de proyecto. Es recomendable etiquetar con formato: PROYECTO_YYYYMMDD_vX.zip e incluir un archivo README con descripción de cambios.

Datos técnicos: los PLC modernos almacenan el programa en memoria flash (no volátil) y los datos en RAM con batería o en tarjetas de memoria extraíbles (SD, MMC). Un backup protege ante fallo de batería o corrupción accidental.

Chequeo on-line y monitoreo en tiempo real

El chequeo on-line (online monitoring) permite visualizar el estado del PLC mientras ejecuta el programa, sin detener el proceso. Es indispensable para:

  • Diagnóstico de fallos (entradas que no llegan, salidas que no actúan).
  • Verificación de lógica (seguir el flujo del programa).
  • Ajuste de parámetros (tiempos, consignas).
  • Forzado de variables para pruebas (con precaución).

Las herramientas de monitorización muestran:

  • Tablas de variables (watch tables): listado de direcciones con valor actual, posibilidad de modificar/forzar.
  • Resaltado de contactos/bobinas: en lenguajes gráficos (KOP, FBD) se colorean las líneas activas.
  • Curvas de evolución (trazas): para variables analógicas (temperatura, presión).

Ejemplo práctico: en un proceso de llenado, se monitoriza el sensor de nivel (X0) y la salida de la bomba (Y0). Al forzar X0 a TRUE se comprueba que la bomba se activa tras el tiempo programado. Esto evita tener que accionar físicamente el sensor.

Forzado de variables: riesgos y buenas prácticas

El forzado (force) permite fijar un valor a una entrada o salida independientemente de la realidad física. Es una herramienta muy poderosa pero peligrosa: un forzado olvidado puede causar accidentes. Normas básicas:

  • Solo personal autorizado y con el sistema en condiciones seguras.
  • Registrar todos los forzados en un log.
  • Utilizar indicadores visuales en el software (símbolos especiales).
  • Eliminar todos los forzados antes de poner en marcha definitiva.

En TIA Portal, los forzados se muestran con un icono de "fuego" 🔥 y se pueden retirar individualmente o mediante "eliminar todos los forzados".

🐍 Simulación de backup y monitorización estilo PLC en Python
# backup_monitor_sim.py - Simula backup de variables y monitorización online
import json
import time
from datetime import datetime

class SimulatedPLC:
    """ Representa un PLC con memoria retentiva y área de variables """
    def __init__(self, backup_file="plc_backup.json"):
        self.backup_file = backup_file
        self.vars = {
            'entradas': {'X0': False, 'X1': False},
            'salidas': {'Y0': False, 'Y1': False},
            'marcas': {'M0': False, 'M1': False},
            'timer1': {'PT': 5.0, 'ET': 0.0, 'Q': False}
        }
        self.running = True
        self.load_backup()   # restaurar al iniciar

    def load_backup(self):
        try:
            with open(self.backup_file, 'r') as f:
                datos = json.load(f)
                self.vars.update(datos)
                print(f"✅ Backup cargado desde {self.backup_file}")
        except FileNotFoundError:
            print("⚠️ No se encontró backup, se usan valores por defecto")

    def save_backup(self):
        with open(self.backup_file, 'w') as f:
            json.dump(self.vars, f, indent=2)
        print(f"💾 Backup guardado en {self.backup_file} a las {datetime.now().strftime('%H:%M:%S')}")

    def monitor_vars(self, watch_list):
        """ Simula una tabla de watch mostrando valores actuales """
        print("\n--- MONITOR ONLINE ---")
        for var in watch_list:
            # separar por tipo (simplificado)
            if var.startswith('X'):
                print(f"{var} = {self.vars['entradas'].get(var, False)}")
            elif var.startswith('Y'):
                print(f"{var} = {self.vars['salidas'].get(var, False)}")
            elif var.startswith('M'):
                print(f"{var} = {self.vars['marcas'].get(var, False)}")
            else:
                print(f"{var} = {self.vars.get(var, 'N/A')}")
        print("----------------------")

    def force_var(self, var, value):
        """ Fuerza una variable (simulado) """
        print(f"⚡ FORZADO: {var} = {value}")
        if var.startswith('X'):
            self.vars['entradas'][var] = value
        elif var.startswith('Y'):
            self.vars['salidas'][var] = value
        elif var.startswith('M'):
            self.vars['marcas'][var] = value
        else:
            print("Variable no forzable")

    def remove_all_forces(self):
        """ Elimina forzados (restablece entradas a False) """
        for k in self.vars['entradas']:
            self.vars['entradas'][k] = False
        print("🔁 Forzados eliminados")

# Simulación de uso
plc = SimulatedPLC()
# Mostramos monitor de algunas variables
plc.monitor_vars(['X0', 'Y0', 'M0', 'timer1'])

# Forzamos X0 a True
plc.force_var('X0', True)
plc.monitor_vars(['X0', 'Y0'])

# Guardamos backup después de cambios
plc.save_backup()

# Eliminamos forzados
plc.remove_all_forces()
plc.monitor_vars(['X0'])

Este script simula operaciones de backup (guardar/restaurar estado), monitorización de variables y forzado, reflejando las tareas reales con PLC. Se puede probar en Thonny y adaptar para registrar variables de un proceso real con GPIO.

Tendencias Actuales 2026

Los PLC actuales incorporan servidores web integrados que permiten el chequeo online desde cualquier navegador, sin necesidad del software de programación. Además, el backup automático en la nube (con control de versiones tipo Git) se está estandarizando. La edición 4 de la IEC 61131-3 incluirá directrices para la gestión de archivos de proyecto y firma digital de programas, mejorando la trazabilidad y seguridad (ISO 27001).

Aplicaciones con Raspberry Pi

Con software como OpenPLC o CODESYS para Raspberry Pi, podemos realizar las mismas operaciones: cargar programa vía Ethernet, monitorizar variables en tiempo real mediante dashboards web, y hacer backup del proyecto (carpeta del runtime). Además, scripts Python pueden automatizar copias de seguridad periódicas de los archivos de configuración.

Aplicaciones con Arduino

En Arduino PLC IDE, la carga se realiza por USB, y se puede monitorizar el estado de las variables mediante el propio IDE o paneles HMI. La memoria del programa se puede respaldar guardando el sketch (.ino) y los archivos de configuración en un repositorio.

💼 Caso Práctico Industrial

Contexto: Un técnico debe cargar una modificación en un PLC Siemens S7-1500 que controla una línea de embotellado. La línea está produciendo en ese momento. El técnico conecta el PC y desde TIA Portal selecciona "Cargar en dispositivo".

Pregunta: ¿Qué ocurrirá si no se detiene manualmente la CPU antes de la carga?

🍓 Raspberry Pi + Python

Contexto: En una Raspberry Pi ejecutando OpenPLC, se desea automatizar un backup diario del programa y las variables. Se escribe un script Python que cada día a las 2:00 am usa subprocess para ejecutar el comando plc backup (hipotético) y guarda el archivo con fecha.

Pregunta: ¿Qué librería de Python se usaría para programar la ejecución diaria automática?

🐍 Gestión de archivos

Contexto: Se tiene una carpeta con backups de PLC con nombres: linea1_20250228_v1.ap13, linea1_20250301_v2.ap13, linea1_20250302_v3.ap13. Se desea obtener el más reciente.

Pregunta: ¿Qué método es más fiable para ordenarlos por fecha?

Tabla 1: Comparativa de operaciones en entornos de programación comunes
OperaciónTIA Portal (Siemens)RSLogix 5000CODESYS
Carga (download)Online > Cargar dispositivoCommunications > DownloadOnline > Login con descarga
Descarga (upload)Online > Subir desde dispositivoCommunications > UploadOnline > Login sin descarga
Borrado memoriaPuesta en marcha > Borrar memoria totalCommunications > ResetOnline > Borrar programa
MonitorizaciónTabla de watch / MarcasTrends / Watch windowWatch list / Trazado
ForzadoBotón derecho > ForzarRight-click > ForceDebug > Write/Force

📚 Recursos Técnicos y Normativos 2026

Normativas y Estándares

Recursos Raspberry Pi y Python