· Industrial Connectivity · 2 min de lectura
Conectando PLCs Siemens S7-1500 a la Nube: Guía de OPC UA y Latencia
Olvida el polling ineficiente. Aprende a usar OPC UA Subscriptions, certificados de seguridad y Python asíncrono para enviar datos de planta a la nube con robustez.

Enviar datos de un PLC Siemens S7-1200 o S7-1500 a la nube (AWS, Azure o un SCADA remoto) es una de las tareas más comunes hoy en día. Pero hacerlo “a lo croto” con polling constante satura el ciclo de scan del PLC y genera latencias impredecibles.
La industria moderna usa OPC UA (Unified Architecture). En esta guía, te muestro cómo construir un Gateway profesional usando Python asíncrono y por qué deberías usar Subscriptions en lugar de Reads.
1. El Error del Polling: ¿Por qué mi PLC se cuelga?
El polling tradicional (preguntar “tienes el dato?” cada 100ms) consume CPU del PLC incluso si el valor no cambió. Si tenés 1000 tags, tu red colapsa.
La Solución: OPC UA Subscriptions. Con las subscripciones, el cliente (tu gateway) le dice al servidor (el PLC): “Avisame solo cuando el valor cambie más de un 1% (Deadband) o cuando cambie de estado”. El PLC gestiona esto internamente y empuja el dato al gateway solo cuando es necesario.
2. Configuración en TIA Portal
Para que esto funcione, primero tenés que habilitar el servidor en el PLC:
- Propiedades del CPU: General -> OPC UA -> Server -> [x] Habilitar Servidor.
- Seguridad: Habilitar autenticación por certificados. No expongas tu PLC sin contraseña, es suicidio industrial.
- Tags: Asegurate de que los DBs (Data Blocks) tengan marcada la casilla “Accessible from OPC UA”.
3. Gateway Asíncrono con Python
He desarrollado una plantilla de producción que podés usar como base. Utiliza opcua-asyncio para manejar cientos de tags sin bloquear el hilo principal.
👉 Repositoy: siemens-cloud-gateway
Ejemplo de Lógica de Subscripción
async with Client(url="opc.tcp://192.168.0.1:4840") as client:
handler = MySubscriptionHandler()
sub = await client.create_subscription(500, handler)
# Subscribirse a un tag en un DB específico
node = await client.get_node("ns=3;s=\"DB_Global\".\"MotorSpeed\"")
await sub.subscribe_data_change(node)4. Latencia y Jitter: ¿Qué esperar?
En una red local industrial (Profinet/Ethernet), podés esperar:
- PLC to Gateway: 5-20ms.
- Gateway to Cloud: 50-200ms (dependiendo de la región).
Si necesitas latencia ultra-baja ( <10ms) para control de lazo cerrado, OPC UA no es para enviar a la nube; es para comunicación entre celdas o a un Edge Gateway local.
Conclusión
Conectar una S7-1500 a la nube de forma segura requiere entender los certificados de OPC UA y optimizar el tráfico con subscripciones. Usar una arquitectura basada en contenedores Docker (como la de mi repo) te permite escalar la solución a múltiples líneas de producción en minutos.
Fuentes Técnicas:
- Siemens Support: Configuring OPC UA on S7-1500
- OPC Foundation: OPC UA Specifications Overview
- GitHub: opcua-asyncio Library Docs



