Un gemelo digital de aerogenerador es un modelo vivo de una turbina que combina las mediciones SCADA con el conocimiento de cómo debería comportarse la máquina, para que los operadores puedan ver la producción perdida, las cargas acumuladas y los fallos incipientes. Este artículo explica los principales casos de uso del gemelo, cómo llevar los datos SCADA a MQTT y cómo calcular una sencilla desviación respecto a la curva de potencia que puedes ejecutar tú mismo.
Por qué los aerogeneradores son candidatos ideales para un gemelo digital
Los aerogeneradores están en lugares remotos, el acceso es caro y funcionan en condiciones que cambian constantemente. En parques eólicos de Oaxaca, La Guajira o Navarra, una visita técnica puede exigir un largo trayecto por carretera o en barco, además de un tiempo adecuado para subir. Cada decisión que se puede tomar con datos en lugar de con una visita ahorra dinero y riesgos.
Las turbinas también están bien instrumentadas. El controlador de la turbina y el SCADA del parque ya registran la velocidad y la dirección del viento, la velocidad del rotor y del generador, los ángulos de pitch, la posición de yaw, la potencia activa, temperaturas a lo largo de todo el tren de potencia y una larga lista de códigos de estado. La materia prima para un gemelo existe; el reto es hacerla accesible y ponerla en contexto. Para el concepto general, consulta la guía de tecnología de gemelo digital.
Tres casos de uso principales
Producción: rendimiento frente a la curva de potencia
Cada modelo de turbina tiene una curva de potencia de referencia: la producción esperada a cada velocidad del viento. El gemelo compara la producción real con la esperada para la velocidad medida, filtrando las condiciones de operación válidas. Un rendimiento inferior persistente en un rango de velocidades concreto puede indicar desalineación del pitch, error de yaw, suciedad o hielo en las palas, o un ajuste del controlador.
Cargas: seguimiento del consumo de vida a fatiga
Los componentes estructurales como las palas, la torre y el eje principal acumulan fatiga por las cargas cíclicas. Algunas turbinas tienen sensores de carga; en otras, las cargas se estiman a partir de datos de operación mediante modelos. Un gemelo que registra el histórico de cargas estimadas de cada turbina ayuda a los operadores a comparar unidades del mismo parque y a fundamentar decisiones de extensión de vida. Los modelos de estimación de cargas son trabajo especializado, normalmente aportado por el fabricante o por consultoras de ingeniería, pero el gemelo proporciona la ruta de datos que necesitan.
Mantenimiento: salud de los componentes
Las temperaturas del tren de potencia, la vibración de los sistemas de monitorización de condición y el recuento de partículas en el aceite revelan fallos en desarrollo en multiplicadoras, rodamientos y generadores. Un gemelo que compara las temperaturas de cada turbina con las de sus vecinas bajo una carga similar es una alerta temprana sencilla y eficaz. El enfoque general se trata en gemelo digital para mantenimiento predictivo.
| Caso de uso | Señales clave | Frecuencia de actualización típica | Usuarios principales |
|---|---|---|---|
| Producción | Velocidad del viento, potencia activa, pitch, yaw, estado | De 1 s a promedios de 10 min | Ingenieros de rendimiento |
| Cargas | Velocidad del rotor, pitch, potencia, sensores de carga si los hay | Alta frecuencia en el edge, resumida | Gestores de activos, ingeniería |
| Mantenimiento | Temperaturas de multiplicadora, rodamientos y generador, vibración, datos del aceite | De segundos a minutos | Planificadores de mantenimiento |
| Operación | Códigos de estado, alarmas, disponibilidad | Al cambiar | Sala de control |
Llevar los datos SCADA a MQTT
Los sistemas SCADA de los parques eólicos suelen exponer los datos mediante OPC UA, Modbus, interfaces basadas en IEC 61400-25 o bases de datos del fabricante. El patrón habitual es un gateway de edge en la subestación o en el edificio de control:
- El gateway lee los datos de las turbinas del servidor SCADA o directamente de los controladores.
- Publica las mediciones en topics MQTT sobre TLS a través de la conexión saliente a internet del emplazamiento.
- Los servicios en la nube o centrales se suscriben a los topics, calculan las salidas del gemelo y almacenan el histórico.
MQTT encaja en los emplazamientos energéticos remotos por razones bien conocidas: es ligero en enlaces limitados, la conexión es saliente desde el emplazamiento, por lo que no hace falta abrir puertos entrantes en el firewall, y las sesiones persistentes con QoS 1 ayudan a superar interrupciones breves del enlace. Usar un broker MQTT en la nube permite que parques de distintas regiones publiquen en un único endpoint, sin que el equipo de operaciones tenga que mantener servidores de broker en cada ubicación.
Importante: el gateway solo debe leer del SCADA. Los comandos de control a las turbinas corresponden a los sistemas de control certificados y a sus redes protegidas.
Diseño de topics y payloads
Organiza los topics por parque y turbina, y después por tipo de dato:
connectmq/<farm>/<turbine>/<data-type>
connectmq/northridge/wtg07/operation
connectmq/northridge/wtg07/drivetrain
connectmq/northridge/wtg07/status
connectmq/northridge/met-mast1/weather
Un payload operativo cada diez segundos:
{
"windSpeedMs": 9.4,
"windDirDeg": 251,
"yawDeg": 248,
"rotorRpm": 13.8,
"pitchDeg": 0.5,
"activePowerKw": 1985,
"ts": "2026-10-16T09:41:20Z"
}
Publica los cambios de estado (en marcha, limitada, en fallo, en mantenimiento) como retained messages para que un visor del gemelo digital 3D conozca siempre el modo actual de cada turbina. Usa la caducidad de mensajes de MQTT 5 en los valores operativos para que una turbina cuyo gateway se desconecta no parezca estar produciendo con datos obsoletos.
Práctica: desviación de la curva de potencia en Python
El ejemplo siguiente se ejecuta contra el servidor MQTT público gratuito broker.connectmq.com con datos de turbina simulados. Incluye una pequeña curva de potencia de referencia, un simulador que rinde ligeramente por debajo a velocidades medias y un servicio del gemelo que publica un ratio de rendimiento móvil. Usa solo valores simulados, porque el servidor público es legible por todos y está pensado para pruebas y prototipos, no para datos de producción.
import json
import random
import time
import uuid
from collections import deque
import paho.mqtt.client as mqtt
RUN = "wtg-91be" # cámbialo por tu propio id único
BASE = f"connectmq/demo/{RUN}/northridge/wtg07"
# Curva de potencia de referencia ilustrativa: velocidad del viento (m/s) -> potencia (kW)
CURVE = [(3, 0), (4, 80), (5, 200), (6, 380), (7, 620), (8, 950), (9, 1350),
(10, 1750), (11, 2050), (12, 2200), (25, 2200)]
def expected_kw(ws):
if ws < CURVE[0][0] or ws > CURVE[-1][0]:
return 0.0
for (x0, y0), (x1, y1) in zip(CURVE, CURVE[1:]):
if x0 <= ws <= x1:
return y0 + (y1 - y0) * (ws - x0) / (x1 - x0)
return 0.0
window = deque(maxlen=60)
def on_connect(client, userdata, flags, reason_code, properties):
client.subscribe(f"{BASE}/operation", qos=1)
def on_message(client, userdata, msg):
d = json.loads(msg.payload)
exp = expected_kw(d["windSpeedMs"])
if exp > 100: # ignora el viento muy bajo, donde el ratio es ruidoso
window.append((d["activePowerKw"], exp))
if len(window) >= 10:
actual = sum(a for a, _ in window)
expected = sum(e for _, e in window)
ratio = round(actual / expected, 3)
client.publish(f"{BASE}/twin/performance",
json.dumps({"performanceRatio": ratio, "samples": len(window)}),
qos=1, retain=True)
print("performance ratio", ratio)
twin = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"wtg-twin-{uuid.uuid4().hex[:6]}")
twin.on_connect = on_connect
twin.on_message = on_message
twin.connect("broker.connectmq.com", 1883, keepalive=30)
twin.loop_start()
sim = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"wtg-sim-{uuid.uuid4().hex[:6]}")
sim.connect("broker.connectmq.com", 1883, keepalive=30)
sim.loop_start()
try:
while True:
ws = max(0.0, random.gauss(9, 2))
loss = 0.92 if 7 <= ws <= 10 else 1.0 # rendimiento inferior simulado
power = expected_kw(ws) * loss * random.uniform(0.97, 1.02)
sim.publish(f"{BASE}/operation",
json.dumps({"windSpeedMs": round(ws, 2), "activePowerKw": round(power, 1), "ts": time.time()}),
qos=1)
time.sleep(2)
except KeyboardInterrupt:
pass
El ratio se estabiliza por debajo de 1,0 y revela la pérdida simulada. Un análisis real añade filtros de limitación de potencia, fallos, corrección por densidad del aire y sector de viento, pero el flujo de datos es idéntico: valores SCADA de entrada y salidas del gemelo publicadas de vuelta en MQTT para visores y alertas.
Lista de comprobación para el despliegue
- Acuerda con el fabricante de la turbina y el operador del emplazamiento un acceso de solo lectura a los datos SCADA.
- Sitúa el gateway en una red segregada con TLS solo saliente en el puerto 8883.
- Usa una credencial y un client ID por gateway de emplazamiento; ConnectMQ vincula los client IDs a las credenciales emitidas.
- Activa las sesiones persistentes y QoS 1 en los topics de estado y alarmas para que los cortes breves del enlace no hagan perder eventos.
- Publica valores promediados para el análisis a largo plazo y valores de mayor frecuencia solo donde un caso de uso los necesite.
- Almacena el histórico con un suscriptor independiente en una base de datos de series temporales.
- Añade alertas para condiciones evidentes, como una temperatura de multiplicadora por encima de un límite, con las reglas de umbral del portal o con tu propio servicio.
- Valida las salidas del gemelo con los informes existentes del operador antes de confiar en ellas.
Errores habituales
- Usar sin más los datos del anemómetro de la góndola. El rotor perturba la medición; los operadores suelen aplicar una función de transferencia de góndola. Compara situaciones equivalentes entre turbinas.
- No filtrar las limitaciones de potencia. Los periodos limitados parecen un rendimiento muy bajo si no se excluyen mediante los códigos de estado.
- Desajustes de zona horaria y marcas de tiempo entre los servidores SCADA y los gateways.
- Mezclar control y monitorización. Mantén el gemelo en solo lectura salvo que la arquitectura de control admita explícitamente comandos remotos.
Los mismos patrones se aplican a otros activos industriales en los artículos sobre gemelo digital de fábrica y gemelo digital energético.
Conecta tu parque eólico a ConnectMQ
ConnectMQ es un broker MQTT gestionado con TLS, MQTT 5 y opciones Dedicated o BYOC para los operadores que necesitan aislamiento. Empieza gratis en app.connectmq.com con el plan Serverless, sin tarjeta de crédito, y transmite los datos de tu primera turbina en minutos.
Preguntas frecuentes
¿Qué datos usa un gemelo digital de aerogenerador?
Principalmente datos SCADA: velocidad y dirección del viento, velocidad del rotor, pitch, yaw, potencia activa, temperaturas del tren de potencia y códigos de estado, además de datos de monitorización de condición y de cargas cuando están disponibles.
¿Puede MQTT gestionar datos de parques eólicos remotos?
Sí. MQTT es ligero, funciona con conexiones solo salientes y admite QoS 1 con sesiones persistentes, lo que encaja con emplazamientos remotos con enlaces limitados o inestables.
¿Debe un gemelo digital enviar comandos a las turbinas?
En general, no. La mayoría de los gemelos son herramientas de monitorización y análisis de solo lectura; el control de la turbina permanece en los sistemas de control certificados.
¿Cómo se mide el rendimiento frente a la curva de potencia?
Se compara la producción real con la esperada según una curva de potencia de referencia a la velocidad del viento medida, tras filtrar limitaciones de potencia, fallos y condiciones anómalas.



