Asesoría Agenda una llamada de descubrimiento técnico hoy mismo »

· IIoT  · 3 min de lectura

Conectando PLC Siemens S7-1500 a la Nube: Guía Definitiva (Sin Bloquear el Ciclo)

Deja de usar S7comm y Snap7. Aprende a exponer datos de forma segura, robusta y performante usando el servidor OPC UA nativo del S7-1500 hacia un Gateway IIoT.

Deja de usar S7comm y Snap7. Aprende a exponer datos de forma segura, robusta y performante usando el servidor OPC UA nativo del S7-1500 hacia un Gateway IIoT.

Ya no estamos en el 2010. Hackear la memoria del PLC con librerías Snap7 o drivers S7comm ingeniería inversa es de “croto”. Es inestable, inseguro y si Siemens cambia el firmware, tu sistema se cae.

El S7-1500 es una bestia moderna. Úsalo como tal. Su servidor OPC UA nativo es la única forma profesional de sacar datos hacia sistemas IT/Cloud sin comprometer la integridad del control.

1. ¿Por qué OPC UA y no S7comm (PUT/GET)?

CaracterísticaS7comm (Put/Get)OPC UA Nativo
SeguridadNula. Cualquiera en la red lee todo.Encriptación TLS, Certificados X.509, User/Pass.
SimbolismoNo. Accedes a direcciones crudas (DB10.DBW4).Sí. Navegas por nombres (Machine.Sts.Temp).
RendimientoAlto (pero peligroso).Ajustable. Priorizado por el SO del PLC.
MantenibilidadPésima. Si re-compilas el DB, rompes todo.Excelente. El NodeID se mantiene aunque cambies la memoria.

Conclusión: Si valoras tu sueño por la noche, desactivá PUT/GET y configurá el servidor OPC UA.

2. Configuración Robusta en TIA Portal

No es solo “activar el check”. Hacelo bien:

  1. Hardware Config: Activa el OP UA Server.
  2. Runtime Licenses: Sí, necesitas una licencia (o el PLC te va a spammear el buffer de diagnóstico).
  3. Security:
    • Desactiva “Guest Authentication” (No seas irresponsable).
    • Crea un usuario específico para el Gateway (ej: user_iot).
    • Desactiva la escritura si solo vas a monitorear.
  4. Performance: Ajusta el “Minimum Sampling Interval”. No pidas datos cada 10ms si tu proceso térmico cambia cada 10 minutos. Saturas la CPU al cuete.

3. El Cliente IIoT: Python + AsyncIO

Para el gateway (Raspberry Pi, Industrial PC, Docker), usamos Python. Pero ojo: el script de “Hola Mundo” no sirve para producción. Necesitas Reconexión Automática y manejo de errores.

Usaremos opcua-asyncio (el reemplazo moderno de freeopcua).

Código de Producción (Snippet)

import asyncio
import logging
from asyncua import Client, ua

# Configuración "No seas croto"
URL = "opc.tcp://192.168.1.10:4840"
NAMESPACE_IDX = 3  # Chequeá tu TIA Portal
NODES_TO_READ = [
    f"ns={NAMESPACE_IDX};s=\"Data_Block\".\"Temperature\"",
    f"ns={NAMESPACE_IDX};s=\"Data_Block\".\"MachineState\""
]

async def main():
    while True:
        try:
            async with Client(url=URL) as client:
                # Seguridad: Cargar certificados (No usar en texto plano en prod)
                client.set_user("user_iot")
                client.set_password("SuperSecurePwd123!")
                
                print(f"Conectado a {URL}")
                
                while True:
                    # Lectura eficiente en Bulk (una sola request a la red)
                    values = await client.read_values([client.get_node(n) for n in NODES_TO_READ])
                    
                    # Acá enviarías a MQTT / InfluxDB
                    print(f"Datos: {dict(zip(NODES_TO_READ, values))}")
                    
                    await asyncio.sleep(1) # Respetá el ciclo de scan
                    
        except (OSError, asyncio.TimeoutError) as e:
            logging.error(f"Caída de red: {e}. Reintentando en 5s...")
            await asyncio.sleep(5)
        except ua.UaError as e:
            logging.error(f"Error de protocolo OPC UA: {e}")
            await asyncio.sleep(5)

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO)
    asyncio.run(main())

4. Consideraciones de Seguridad (Certificados)

El PLC viene con un certificado autofirmado por defecto.

  • Modo Croto: Aceptar cualquier certificado server (client.application_uri = ... sin validación).
  • Modo Pro: Descargar el certificado del PLC (desde TIA o web server), instalarlo en el Gateway, y generar un certificado para tu script Python que TIA Portal confíe.

Si no gestionas confianza mutua (Mutual Trust), un atacante puede hacer un “Man in the Middle” y leer tus datos de producción.

Resumen

Conectar un S7-1500 a la nube no requiere hardware exótico de 5000 dólares. Requiere disciplina:

  1. Usar protocolos estándar (OPC UA).
  2. Gestionar la seguridad (Usuarios y Certificados).
  3. Escribir código defensivo que sobreviva a un corte de cable de red.
Volver al blog

Related Posts

View All Posts »