Marcio Cunha

Cómo integrar PLCs Siemens S7 con SCADA usando Snap7

Aprenda a integrar PLCs Siemens S7 con sistemas SCADA abiertos utilizando la biblioteca Snap7 para lectura y escritura directa de bloques de datos.

Marcio Cunha•5 min
También disponible en:PortuguêsEnglish
Resumen
  • La comunicación directa con PLCs Siemens vía Snap7 elimina costosos softwares propietarios.
  • El protocolo ISO-on-TCP opera sobre capas de red Ethernet industrial estándar.
  • Los bloques de datos DB deben tener el acceso optimizado desactivado en TIA Portal.
  • La implementación correcta de código garantiza alta velocidad en el intercambio de variables.
  • El manejo de errores y la reconexión automática evitan bloqueos en el sistema SCADA.

El desafío de conectar la planta de producción con software abierto

En el universo de la automatización industrial, los PLCs (Controladores Lógicos Programables, que actúan como cerebros electrónicos de las máquinas) de Siemens se comunican excelentemente con el software propio de la marca. Sin embargo, cuando necesitamos integrar estos equipos con sistemas SCADA (software supervisorio que monitorea procesos industriales en tiempo real) abiertos o de código abierto, suelen surgir barreras de protocolo. En la práctica, esto significa que los fabricantes cierran sus ecosistemas para forzar la compra de licencias costosas. Para sortear este cuello de botella comercial sin violar normas de seguridad, los ingenieros recurren a bibliotecas de comunicación de código abierto.

Es exactamente en este escenario donde Snap7 destaca como una herramienta indispensable. Se trata de una biblioteca gratuita y de código abierto desarrollada específicamente para comunicarse con la línea SIMATIC S7 de Siemens. Mientras que los softwares comerciales cobran fortunas por drivers de comunicación, Snap7 permite que cualquier lenguaje de programación moderno —como Python, C++ o C#— converse directamente con la memoria del controlador. Si alguna vez necesitó extraer datos de temperatura o enviar comandos de arranque a una cinta transportadora sin gastar en licencias propietarias, conoce el valor de una alternativa robusta y gratuita.

Cómo funciona el protocolo ISO-on-TCP bajo el capó

Para entender Snap7, primero debemos mirar la red. Los PLCs Siemens S7 utilizan una pila de protocolos propietaria que corre sobre redes Ethernet industriales comunes. En la capa de transporte, emplean ISO-on-TCP, que básicamente encapsula mensajes industriales dentro de paquetes de red estándar que cualquier computadora puede enviar y recibir. En la práctica, su computadora o servidor Linux actúa como una interfaz HMI (Interfaz Hombre-Máquina) en la red, conversando directamente con el puerto de comunicación del controlador.

Al configurar la conexión, proporcionamos la dirección IP del PLC y dos parámetros cruciales: el Rack y el Slot. Estos números indican físicamente dónde se aloja el procesador en el bastidor del panel eléctrico. Con estos datos, la biblioteca establece un canal directo de comunicación TCP. Es un proceso muy similar a abrir una conexión SSH con un servidor remoto, pero en lugar de escribir comandos de terminal, está leyendo y escribiendo directamente en ubicaciones de memoria llamadas bloques de datos, los famosos DBs.

Preparando el PLC Siemens en TIA Portal

Antes de escribir cualquier línea de código para leer datos de su PLC, necesita hacer un pequeño cambio en el software de programación de Siemens, TIA Portal. Por defecto, las versiones recientes de los controladores S7-1200 y S7-1500 vienen con una función de seguridad y optimización de bloques activada, que desordena las direcciones de memoria para ganar rendimiento. Para que Snap7 pueda encontrar los datos de forma predecible, debemos desactivar esta optimización.

Abra el bloque de datos (DB) deseado en las propiedades del proyecto, desmarque la opción de acceso optimizado al bloque de datos y vuelva a compilar el proyecto antes de descargarlo al hardware. Además, en la configuración de protección de la CPU, es fundamental habilitar el permiso para acceso de comunicación PUT/GET de socios externos. Sin esta autorización explícita, el PLC rechazará cualquier intento de conexión proveniente de fuera de su propia burbuja de software propietario, generando frustrantes errores de timeout en su aplicación supervisororia.

Leyendo y escribiendo datos usando scripts de Python

Ahora que el terreno está preparado, vamos a la práctica con un ejemplo usando Python y la biblioteca python-snap7. Este enfoque es excelente para alimentar sistemas SCADA personalizados basados en web, paneles de Grafana o herramientas de monitoreo como cómo monitorizar contenedores Docker con Prometheus y Grafana. La biblioteca traduce las llamadas complejas de red en funciones simples de lectura y escritura de bloques de memoria.

El código a continuación se conecta al PLC, lee un bloque de datos completo y altera el valor de una variable booleana que controla una válvula de proceso. Recuerde instalar la biblioteca vía terminal con el comando pip antes de ejecutar el script en su estación de trabajo o servidor industrial.

import snap7
from snap7.util import *

# Inicializa el cliente y conecta al PLC
client = snap7.client.Client()
client.connect('192.168.0.1', 0, 1)  # IP, Rack, Slot

if client.get_connected():
    print('¡Conectado con éxito al PLC Siemens!')
    
    # Lee 100 bytes a partir del bloque de datos DB1, dirección 0
    db_number = 1
    start_address = 0
    size = 100
    data = client.db_read(db_number, start_address, size)
    
    # Extrae un valor booleano ubicado en el byte 0, bit 0
    current_status = get_bool(data, 0, 0)
    print(f'Estado actual de la válvula: {current_status}')
    
    # Escribe un nuevo valor booleano en la misma dirección
    set_bool(data, 0, 0, True)
    client.db_write(db_number, start_address, data)
    print('¡Nuevo comando enviado con éxito!')
    
    client.disconnect()
else:
    print('Fallo al conectar al PLC.')

Manejo de errores y buenas prácticas en entornos industriales

La planta de producción es un entorno hostil para el software. Las interferencias electromagnéticas, los cables dañados o los reinicios repentinos del panel eléctrico pueden interrumpir la conexión de red en cualquier momento. Si su aplicación SCADA se bloquea debido a una caída de red, el operador pierde visibilidad del proceso, lo cual es inaceptable. Por lo tanto, nunca confíe ciegamente en la persistencia de la conexión Snap7.

Implementar bloques de control de excepciones (try-except) y rutinas de reconexión automática es obligatorio. Siempre que una lectura falle, el código debe registrar el error en el registro, esperar unos segundos y tratar de restablecer el canal TCP sin interrumpir el bucle principal del supervisorio. En plantas que exigen alta disponibilidad y redundancia eléctrica, vale la pena revisar las mejores prácticas de infraestructura y cómo dimensionar SAI industriales para plantas críticas para asegurar que ni la computadora del SCADA ni el PLC se apaguen de imprevisto.

Consideraciones finales

La integración de PLCs Siemens S7 con sistemas SCADA abiertos a través de Snap7 abre un abanico gigantesco de posibilidades económicas y arquitectónicas para la ingeniería moderna. Al eliminar la dependencia exclusiva de costosos drivers propietarios, los ingenieros e integradores ganan total libertad para crear interfaces web personalizadas, integrar datos industriales con inteligencia artificial y construir paneles modernos en herramientas de código abierto. Aunque requiere especial atención a la seguridad de la red, la desactivación de bloques optimizados y un manejo robusto de fallas de conexión, el esfuerzo vale la pena la primera vez que ve un sistema supervisorio personalizado funcionando con total fluidez y cero costo de licencia.