OPC UA · BMS · DESIGO CC · Beckhoff · asyncua · MQTT PubSub · 11 min de lectura

OPC UA en la automatización de edificios: Integración BMS, registro de datos y KPI

OPC UA se ha convertido en la columna vertebral de integración para edificios inteligentes modernos, proporcionando una interfaz única y neutral al proveedor que conecta controladores BMS, medidores de energía, equipos HVAC y plataformas de análisis en la nube. A diferencia de BACnet o Modbus, OPC UA incorpora seguridad y un modelo de información autodescriptivo, lo que significa que un sistema de gestión de energía puede descubrir todos los puntos de datos disponibles de un servidor DESIGO CC o TwinCAT sin requerir un mapa de registros o una lista de puntos separada.

Rol de OPC UA en edificios

Un edificio comercial típico integra tres o más subsistemas que históricamente utilizaban protocolos incompatibles: un sistema BMS BACnet/IP para HVAC y control de acceso, medidores de energía Modbus RTU en un bus serie y un CMMS (Sistema Computarizado de Gestión de Mantenimiento) para registros de servicio de equipos. OPC UA actúa como capa de integración horizontal, proporcionando una interfaz unificada de lectura/escritura/suscripción a través de todos los subsistemas desde una única conexión de cliente.

El servidor OPC UA se sitúa entre los protocolos de campo y la capa de TI. Consulta o se suscribe a datos de los subsistemas BACnet, Modbus y KNX utilizando controladores específicos del protocolo, luego expone todos los datos en un único espacio de direcciones navegable. Los clientes — sistemas SCADA, plataformas de gestión de energía, paneles de control y conectores en la nube — se conectan una vez al servidor OPC UA y acceden a todos los datos del edificio a través de una API estándar, independientemente del protocolo subyacente.

Topología de integración OPC UA en edificios

Field layer (field protocols)
  BACnet/IP: Siemens PXC200, Distech EC-Net controllers
  Modbus TCP: Schneider PM5xxx energy meters, Janitza UMG 96
  KNX/IP: WEINZIERL KNX IP Interface 731
  M-Bus: heat meters, gas meters (IEC 62056)

  ↓ protocol drivers (inside BMS or gateway)

OPC UA Server layer
  Siemens DESIGO CC with OPC UA server module
    └── exposes BACnet objects as OPC UA Variables
    └── exposes alarm conditions as OPC UA AlarmCondition
  Beckhoff TwinCAT OPC UA Server
    └── exposes PLC variables directly from ADS runtime
  Kepware KEPServerEX
    └── multi-protocol gateway (BACnet + Modbus → OPC UA)

  ↓ opc.tcp:// or opc.wss://

Clients (standard OPC UA)
  Energy management platform (Schneider PME, EcoStruxure)
  SCADA / MES (Ignition, WinCC OA, Aveva)
  Cloud connector (Azure IoT OPC Publisher, AWS Greengrass)
  Analytics / dashboards (Grafana OPC UA plugin, Power BI)

Opciones de implementación del servidor OPC UA

Para la automatización de edificios, dominan tres implementaciones de servidor OPC UA. Cada una es adecuada para un ecosistema BMS y una plataforma de hardware diferente.

ServidorPlataformaControladores de protocoloLicencia
Siemens DESIGO CC con OPC UAWindows Server, servidor de aplicaciones DESIGO CCBACnet/IP, BACnet MS/TP, KNX, Modbus, M-Bus a través de controladores DESIGODe pago – parte de la licencia DESIGO CC
Schneider EcoStruxure BMS OPC UAServidor EcoStruxure Building Operation (EBO)BACnet/IP, Modbus, LON, M-Bus, DALIDe pago – licencia EBO
Servidor Beckhoff TwinCAT OPC UAPC con Windows ejecutando runtime TwinCAT 3TwinCAT ADS (variables PLC), EtherCAT I/O, Modbus mediante bloques de función PLCGratuito con licencia TwinCAT
Kepware KEPServerEXPC/servidor Windows (puerta de enlace independiente)BACnet/IP, Modbus RTU/TCP, OPC DA, SNMP, EtherNet/IP, más de 150 controladoresDe pago — licencia por controlador
Pro-face Remote HMI OPC UALinux embebido en GP4000/GP4600 HMIModbus TCP, EtherNet/IP, Mitsubishi MC ProtocolIncluido con la HMI

Servidor Beckhoff TwinCAT OPC UA — gratuito para integradores: Si utiliza TwinCAT 3 como runtime PLC para un controlador de edificio, el servidor TwinCAT OPC UA está incluido sin costo adicional. Expone todas las variables PLC declaradas con el atributo {attribute 'OPC.UA.DA' := '1'} directamente como nodos OPC UA. Esta es la ruta de menor costo hacia OPC UA en nuevos controladores de edificio montados en armario.

Modelo de información OPC UA para edificios

IEC 62541-100 (OPC UA para edificios) define un modelo de información estandarizado que asigna los conceptos de ISO 16739-1 IFC (Industry Foundation Classes) a los tipos de objeto de OPC UA. Esto permite que un sistema de gestión energética navegue por el espacio de direcciones de un servidor de edificio utilizando nombres de tipo bien conocidos – SpaceType, ZoneType, HVACSystemType – en lugar de rutas de cadena específicas del proveedor.

Estructura del modelo de información del edificio según IEC 62541-100

BuildingType (ns=2;s=Building_Alpha_Tower)
├── SiteType (ns=2;s=Site_Riga_01)
│   ├── BuildingStoreyType (ns=2;s=Floor_03)
│   │   ├── SpaceType (ns=2;s=Office_3A)  ← IFC IfcSpace mapping
│   │   │   ├── AirTemperature [Variable, Float, °C]
│   │   │   ├── CO2Concentration [Variable, UInt16, ppm]
│   │   │   └── OccupancyState [Variable, Boolean]
│   │   └── SpaceType (ns=2;s=Meeting_3B)
│   └── BuildingStoreyType (ns=2;s=Floor_04)
├── HVACSystemType (ns=2;s=AHU_Main_01)  ← IFC IfcSystem mapping
│   ├── SupplyAirTemperature [Variable, Float, °C]
│   ├── ExhaustAirTemperature [Variable, Float, °C]
│   ├── HeatingCoilValve [Variable, Byte, 0–100%]
│   ├── CoolingCoilValve [Variable, Byte, 0–100%]
│   ├── FanSpeed [Variable, UInt16, RPM]
│   └── OperatingMode [Variable, Enum: Off/Auto/Heating/Cooling/Night]
└── EnergyMeterType (ns=2;s=MainMeter_kWh)  ← IEC 62056 meter
    ├── ActiveEnergyImport [Variable, Double, kWh]
    ├── ActivePower [Variable, Float, kW]
    └── Timestamp [Variable, DateTime]

Extracción de KPI energéticos mediante suscripción OPC UA

La gestión energética requiere lecturas de kWh fiables y con marca de tiempo desde los nodos de contadores. En lugar de consultar los contadores a intervalos fijos (lo que puede pasar por alto picos y genera tráfico constante), utilice suscripciones OPC UA con un PublishingInterval acorde a su granularidad de reporte, y una banda muerta (deadband) para suprimir el reporte de incrementos triviales.

KPINodo OPC UAIntervalo recomendadoBanda muerta
Consumo horario de kWhActiveEnergyImport (Double, kWh)PublishingInterval 60 000 msAbsoluto 0,01 kWh
Demanda máxima de 15 minutosActivePower (Float, kW)PublishingInterval 900 000 msAbsoluto 0,1 kW
Monitoreo de potencia en tiempo realActivePower (Float, kW)Intervalo de publicación 5 000 msPorcentaje 1%
Lectura diaria del contador de calorThermalEnergyImport (Double, kWh th)Intervalo de publicación 86 400 000 msAbsoluto 0,1 kWh
Consumo de gasGas_Volume (Double, m³)PublishingInterval 3 600 000 msAbsoluto 0,001 m³

OPC UA PubSub: enviar datos del edificio a un broker MQTT en la nube

OPC UA PubSub (IEC 62541-14) extiende el modelo cliente-servidor con un patrón de publicación-suscripción utilizando MQTT o multidifusión UDP como transporte. En lugar de que una plataforma en la nube consulte al servidor OPC UA, el servidor envía DataSetMessages a un broker MQTT en un PublishingInterval configurado en WriterGroup. Este es el patrón recomendado para la integración en la nube cuando el servidor OPC UA está detrás de un NAT o un cortafuegos que bloquea el puerto TCP 4840 entrante.

OPC UA PubSub — configuración de Kepware a broker MQTT

# Kepware IoT Gateway Plugin — OPC UA PubSub to MQTT

Agent type: MQTT Client (Publisher)
Broker URL: mqtts://iot.yourdomain.com:8883
Client ID: kepware-building-01
TLS: enabled (CA cert + client cert for mutual TLS)

Published datasets (JSON encoding, UA-JSON):
  Topic: building/01/hvac/ahu01
  Payload (DataSetMessage, JSON):
  {
    "MessageId": "uuid-xxx",
    "PublisherId": "kepware-building-01",
    "DataSetWriterId": 1001,
    "Timestamp": "2025-03-14T10:30:00Z",
    "Payload": {
      "SupplyAirTemperature": { "Value": 18.4, "StatusCode": "Good", "SourceTimestamp": "..." },
      "FanSpeed":             { "Value": 1450, "StatusCode": "Good" },
      "HeatingCoilValve":     { "Value": 72,   "StatusCode": "Good" }
    }
  }

  Topic: building/01/energy/main-meter
  PublishingInterval: 60000 ms
  QueueSize: 1 (latest value only)

Ejemplo de cliente OPC UA Python con asyncua

La asyncua biblioteca (anteriormente opcua-asyncio) es el cliente OPC UA Python recomendado para la creación de scripts de automatización de edificios. Admite async/await, todos los modos de seguridad, certificados X.509 y suscripciones. Instalar conpip install asyncua.

asyncua — conectar, navegar, leer, suscribir

import asyncio
from asyncua import Client
from asyncua.crypto.security_policies import SecurityPolicyBasic256Sha256
from asyncua.ua import MessageSecurityMode

class SubHandler:
    """Callback invoked for each subscription notification."""
    def datachange_notification(self, node, val, data):
        print(f"  DataChange: {node} = {val}  status={data.monitored_item.Value.StatusCode}")

async def main():
    url = "opc.tcp://192.168.10.50:4840/freeopcua/server/"

    async with Client(url=url) as client:
        # --- Security: Sign + Encrypt, Basic256Sha256, X.509 cert ---
        await client.set_security(
            SecurityPolicyBasic256Sha256,
            certificate="client_cert.pem",
            private_key="client_key.pem",
            server_certificate="server_cert.pem",
            mode=MessageSecurityMode.SignAndEncrypt,
        )

        print("Connected. Server namespaces:")
        for i, ns in enumerate(await client.get_namespace_array()):
            print(f"  ns={i}: {ns}")

        # --- Browse Objects root ---
        objects = client.get_objects_node()
        children = await objects.get_children()
        for child in children:
            name = await child.read_browse_name()
            print(f"  Object: {name.Name}")

        # --- Read a specific variable by NodeId ---
        temp_node = client.get_node("ns=1;s=AHU_01.SupplyAirTemperature")
        temp_value = await temp_node.read_value()
        print(f"Supply air temperature: {temp_value:.1f} °C")

        # --- Read EngineeringUnits property ---
        eu = await temp_node.read_data_value()
        print(f"StatusCode: {eu.StatusCode}")

        # --- Subscribe to multiple nodes ---
        handler = SubHandler()
        subscription = await client.create_subscription(500, handler)  # 500 ms publishing
        nodes = [
            client.get_node("ns=1;s=AHU_01.SupplyAirTemperature"),
            client.get_node("ns=1;s=AHU_01.FanSpeed"),
            client.get_node("ns=1;s=Meter.kWh"),
        ]
        await subscription.subscribe_data_change(nodes)

        print("Subscribed. Waiting 30 seconds for notifications...")
        await asyncio.sleep(30)
        await subscription.delete()

asyncio.run(main())

OPC UA para HVAC: ejemplos Siemens y Beckhoff

Dos plataformas comunes de controladores de edificios exponen servidores OPC UA de forma nativa. Siemens DESIGO está dirigido a grandes edificios comerciales con BMS centralizado; Beckhoff TwinCAT está dirigido a controladores montados en panel con E/S directa.

Servidor OPC UA Siemens DESIGO CC: Habilitado mediante la licencia adicional DESIGO CC Management Platform. El servidor expone todos los puntos de datos DESIGO (incluidos los objetos BACnet importados de los controladores PXC) como variables OPC UA en una jerarquía que coincide con la estructura de carpetas de la estación de gestión DESIGO. Endpoint predeterminado: opc.tcp://<desigo-server>:4840. Admite Sign+Encrypt con Basic256Sha256 y certificados de cliente X.509. Las condiciones de alarma y evento de DESIGO se exponen como nodos OPC UA AlarmCondition.

Servidor Beckhoff TwinCAT OPC UA (TC3 OPC UA): Gratuito con cualquier licencia de ejecución de TwinCAT 3. Las variables PLC marcadas con el atributo OPC UA en la declaración de TEXTO ESTRUCTURADO se publican automáticamente. Admite hasta 5000 elementos monitoreados con un intervalo de muestreo de 10 ms en un IPC con un procesador estándar. La serie de controladores de sala DESIGO RXB también incluye un servidor OPC UA integrado (puerto 48040 por defecto) con acceso directo a la temperatura ambiente, punto de consigna, válvula del ventilador y estado del detector de presencia.

Endurecimiento de seguridad para servidores OPC UA de edificios

Los servidores OPC UA de edificios son puntos de convergencia IT/OT y son objetivos de alto valor. Aplique los siguientes pasos de endurecimiento durante la puesta en marcha:

Paso de endurecimientoAcción de configuración
Deshabilitar autenticación anónimaEliminar AnonymousIdentityToken de la configuración del endpoint; forzar Username o X.509
Deshabilitar políticas de seguridad obsoletasEliminar endpoints Basic128Rsa15 y Basic256; habilitar solo Basic256Sha256 y Aes256Sha256RsaPss
Forzar Sign+EncryptEstablecer MessageSecurityMode mínimo = SignAndEncrypt en todos los endpoints de producción
Lista de confianza de certificadosImportar solo certificados de cliente conocidos en la lista de confianza del servidor; rechazar todos los demás
Pista de auditoríaHabilitar eventos de auditoría OPC UA (AuditActivateSessionEvent, AuditWriteUpdateEvent); reenviar a SIEM
Reglas de firewallPermitir TCP 4840 entrante solo desde direcciones IP de clientes conocidas en la VLAN OT; bloquear desde la LAN IT
Monitoreo de caducidad de certificadosConfigurar alertas cuando los certificados del servidor o del cliente se acerquen a la caducidad (aviso de 90 días)
TwinCAT: espacio de nombres de solo lecturaDeclarar variables de monitoreo como VAR_OUTPUT o usar un rol UA para restringir escrituras

Requisito IEC 62443-3-3 Nivel de seguridad 2: Para edificios sujetos a EN 50159 (ferrocarril) o al alcance BMS ISO 27001, IEC 62443-3-3 SL-2 requiere que todas las conexiones de gestión remota utilicen autenticación mutua basada en certificados X.509. Los endpoints anónimos y solo con nombre de usuario deben deshabilitarse en todos los servidores OPC UA de producción.

¿Necesita integración OPC UA BMS para su proyecto de construcción?

Integramos subsistemas BACnet, Modbus, KNX y M-Bus en una capa OPC UA unificada — conectando medidores de energía, controladores HVAC y SCADA a análisis en la nube y plataformas de gestión energética.

Solicitar presupuesto →
Loading...
Back to top