OPC UA · BACnet/IP · Modbus TCP · Kepware · UaExpert · Azure IoT · 11 min de lectura

Puerta de enlace OPC UA a BACnet y Modbus: Traducción de protocolo para integración BMS

La gran mayoría de los dispositivos BMS instalados — controladores BACnet/IP, medidores de energía Modbus TCP y dispositivos de campo Modbus RTU — no implementan un servidor OPC UA. Una puerta de enlace de protocolo cierra esta brecha: se conecta a los dispositivos heredados utilizando sus protocolos nativos y expone todos los puntos de datos descubiertos como nodos OPC UA en un único espacio de direcciones navegable. Kepware KEPServerEX es la opción estándar de la industria para este rol, respaldado por Siemens, Schneider y Rockwell Automation para implementaciones de puertas de enlace BMS multiprotocolo.

Por qué se necesita una puerta de enlace

Los dispositivos BACnet/IP y BACnet MS/TP exponen datos a través de servicios de objetos BACnet (ReadProperty, SubscribeCOV), no mediante servicios OPC UA. Los dispositivos Modbus TCP y RTU exponen datos como registros numerados sin nombres incorporados, información de tipo ni seguridad. Un cliente OPC UA no puede comunicarse de forma nativa con ninguno de los dos protocolos.

La puerta de enlace actúa como una capa de traducción. En el lado sur, consulta o se suscribe a los dispositivos utilizando sus protocolos nativos. En el lado norte, ejecuta un servidor OPC UA completo, mapeando cada punto de datos del dispositivo a un nodo de Variable OPC UA nombrado y tipado. Resultado: un sistema SCADA, un conector en la nube o una plataforma de gestión de energía ve un único endpoint OPC UA que contiene todos los datos del edificio, independientemente de si los dispositivos subyacentes hablan BACnet, Modbus, KNX o SNMP.

COV vs. sondeo en la puerta de enlace: Para dispositivos BACnet que admiten suscripciones Change of Value (COV), configure Kepware para usar SubscribeCOV en lugar del sondeo periódico ReadProperty. COV reduce el tráfico de red BACnet y garantiza que la puerta de enlace refleje los cambios de estado inmediatamente, en lugar de esperar al siguiente ciclo de sondeo. Los dispositivos Modbus siempre requieren sondeo: ajuste la tasa de escaneo según sus requisitos de actualización de datos (típicamente 1–10 segundos para HVAC, 100–500 ms para calidad de energía).

Comparación de opciones de puerta de enlace

Puerta de enlaceServidor OPC UASoporte BACnetSoporte ModbusPlataforma
Kepware KEPServerEX 6Servidor UA completo (todos los modos de seguridad)BACnet/IP + MS/TP; BBMD; COVModbus RTU/TCP/ASCII; 65535 registrosWindows Server/PC
matrikon OPC UA TunnellerServidor OPC UA + puente DA/HDASolo mediante puente OPC DASolo mediante puente OPC DAWindows
Cogent DataHub OPC UAServidor UA completoBACnet/IP; COV limitadoModbus TCPWindows
softing edgeConnector ModbusServidor OPC UANo — solo ModbusModbus TCP + RTUDocker / Linux / Windows
softing edgeConnector BACnetServidor OPC UABACnet/IP + MS/TPNoDocker / Linux / Windows
Ignition (Inductive Automation)Servidor OPC UA (integrado)BACnet/IP a través del módulo controladorControlador Modbus TCP/RTUWindows / Linux (JVM)

Kepware KEPServerEX: configuración del controlador BACnet/IP

El controlador Ethernet BACnet/IP de Kepware (con licencia separada del paquete base KEPServerEX) se conecta a dispositivos BACnet/IP en la subred local o a través de enrutadores utilizando un dispositivo de gestión de difusión BACnet (BBMD). Después de agregar el canal del controlador, Kepware descubre automáticamente todos los dispositivos BACnet visibles e importa sus listas de objetos.

Configuración del controlador Kepware BACnet/IP

Channel settings (Connectivity > BACnet/IP Ethernet):
  Network adapter: 192.168.10.5 (Kepware server OT NIC)
  UDP port: 47808 (BAC0 — standard BACnet/IP port)
  BACnet device instance: 1001 (Kepware gateway identity on BACnet network)
  BBMD address: 192.168.10.1 (router acting as BBMD for cross-subnet discovery)
  BBMD UDP port: 47808
  Foreign device registration: enabled (for devices on other subnets)

Auto-discovery:
  Tools > Device Discovery > BACnet/IP
  Scan range: all subnets registered on BBMD
  Result: discovered 47 BACnet devices with object counts
  Import: select all → creates Kepware device entries with all objects

COV subscription (preferred over polling):
  Device property > Subscriptions > Use COV: Enabled
  Lifetime: 3600 seconds (re-subscribe hourly)
  COV increment for Analog Values: 0.5 (only report if change > 0.5 units)
  Fallback poll rate (if COV not supported): 5000 ms

Cada objeto BACnet importado se convierte en una etiqueta de Kepware. Kepware asigna automáticamente la propiedad BACnet Present_Value al valor principal de la etiqueta. El nombre de la etiqueta sigue el patrón DeviceName.ObjectType_Instance.Property, por ejemplo: PXC_01.AnalogInput_1.Present_Value. Estas etiquetas se exponen inmediatamente como nodos de variable OPC UA en el endpoint OPC UA integrado de KEPServerEX.

Modbus TCP a OPC UA: importación del mapa de registros

Los dispositivos Modbus TCP requieren una configuración explícita del mapa de registros — a diferencia de BACnet, no hay descubrimiento de objetos auto-descriptivo. El controlador Modbus TCP/IP Ethernet de Kepware acepta un archivo de importación de etiquetas CSV o una configuración manual de etiquetas que especifica la dirección del registro, el tipo de datos y la conversión de ingeniería.

Configuración de etiquetas Modbus TCP de Kepware

Channel: Modbus TCP/IP Ethernet
  Network adapter: 192.168.10.5
  Port: 502 (standard Modbus TCP port)
  Request timeout: 1000 ms
  Failure count before error: 3

Device: Schneider_PM5100
  IP address: 192.168.10.21
  Unit ID (slave address): 1
  Scan rate: 1000 ms (1 second)

Tags (imported from Schneider PM5100 register map):
  Tag name            | Address        | Data type | Scaling
  ActivePower_Total   | 400593 (HR593) | Float (4B) | ×1 → kW
  ActiveEnergy_Import | 400001 (HR001) | DWord (4B) | ×0.1 → kWh
  Voltage_L1_N        | 400003 (HR003) | Float (4B) | ×1 → V
  Current_L1          | 400013 (HR013) | Float (4B) | ×1 → A
  PowerFactor_Total   | 400085 (HR085) | Float (4B) | ×1 (dimensionless)
  Frequency           | 400073 (HR073) | Float (4B) | ×1 → Hz

# Tag addressing format for Kepware Modbus driver:
# Holding Register 40001 → address "400001" or "4:1"
# Input Register 30001   → address "300001" or "3:1"
# Coil 1                 → address "000001" or "0:1"
# Discrete Input 10001   → address "100001" or "1:1"

Mapeo de objeto BACnet a nodo OPC UA

Kepware mapea cada tipo de objeto BACnet a un nodo de variable OPC UA con el tipo de datos OPC UA apropiado. La propiedad Present_Value del objeto BACnet se convierte en el valor del nodo OPC UA. Las propiedades Status_Flags y Reliability se mapean al StatusCode OPC UA de la variable.

Tipo de objeto BACnetTipo de Present_ValueTipo de datos OPC UAUso típico
Entrada analógica (AI)REAL (Float)FloatSensor de temperatura, presión, caudal
Salida analógica (AO)REAL (Float)Float (escribible)Punto de consigna de posición de válvula, velocidad del ventilador
Valor analógico (AV)REAL (Float)Float (escribible)Punto de consigna, valor calculado
Entrada binaria (BI)ENUMERADO (Activo/Inactivo)BooleanoEstado de encendido/apagado, estado de alarma
Salida binaria (BO)ENUMERADO (Activo/Inactivo)Booleano (escribible)Comando On/Off, control de relé
Valor binario (BV)ENUMERADO (Activo/Inactivo)Booleano (escribible)Indicador de modo, estado de anulación
Entrada multiestado (MI)UNSIGNED INTInt32Lectura del modo de funcionamiento (Off=0, Calor=1, Frío=2)
Salida multiestado (MO)UNSIGNED INTInt32 (grabable)Comando de modo, paso de velocidad
Valor multiestado (MV)UNSIGNED INTInt32 (grabable)Valor de enumeración configurable
AcumuladorUNSIGNED INT (32 bits)UInt32Contador de pulsos: kWh, m³, litros

Seguridad para puertas de enlace OPC UA

Una puerta de enlace OPC UA es un dispositivo frontera IT/OT. Si se ve comprometida, un atacante puede escribir en salidas BACnet escribibles (válvulas, relés) o bobinas Modbus a través del servicio de escritura OPC UA. Aplique defensa en profundidad: segmentación de red, autenticación basada en certificados y permisos de escritura mínimos.

Control de seguridadImplementación
VLAN OT dedicadaColocar el servidor Kepware en una VLAN aislada; dispositivos BACnet y Modbus en la misma VLAN; sin enrutamiento directo a la LAN de TI
Reglas de cortafuegosPermitir TCP 4840 entrante solo desde IPs de clientes OPC UA conocidas; bloquear todo otro tráfico entrante; permitir Kepware saliente hacia BACnet UDP 47808 y Modbus TCP 502
Autenticación mediante certificadoDeshabilitar Anónimo; requerir certificados de cliente X.509; importar certificados de cliente de confianza en el almacén de confianza de Kepware
Control de acceso de usuarios de KepwareCrear un rol UA de solo lectura para clientes de monitoreo; un rol UA de lectura/escritura solo para integración BMS; MFA en la consola de administración de Kepware
Protección de escritura a nivel de etiquetaEstablecer etiquetas Modbus como Solo lectura en Kepware donde no se requieran escrituras; etiquetas BACnet AO/BO/MO habilitadas para escritura solo para el rol SCADA
Registro de auditoríaHabilitar el registro de eventos de Kepware; reenviar al registro de eventos de Windows → SIEM; alertar sobre intentos de escritura no autorizados

Puerto predeterminado 4840: Kepware KEPServerEX escucha en el puerto TCP 4840 por defecto — el puerto OPC UA registrado por IANA. Este puerto debe estar abierto en el Firewall de Windows en el host de Kepware para que los clientes OPC UA puedan conectarse. No exponga el puerto 4840 a redes no confiables. Si el servidor Kepware requiere OPC UA accesible desde Internet (para conectores en la nube), use un proxy inverso con TLS mutuo en lugar de reenvío directo de puertos.

Prueba de conexiones OPC UA con UaExpert

UaExpert (de Unified Automation) es el cliente OPC UA gratuito estándar para puesta en marcha y diagnóstico. Proporciona un navegador completo del espacio de direcciones, monitoreo de datos en tiempo real, pruebas de suscripción y gestión de certificados de seguridad. Descargue desde unified-automation.com (se requiere registro gratuito).

UaExpert — pasos de conexión y verificación

1. Add server:
   Server menu > Add > Advanced > Enter URL:
   opc.tcp://192.168.10.50:4840
   Security policy: Basic256Sha256
   Message security mode: SignAndEncrypt
   Authentication: Certificate (browse to client_cert.pem + client_key.pem)

2. First connection — certificate exchange:
   UaExpert generates a self-signed client cert on first run
   Server will show certificate as "untrusted" initially
   On Kepware: OPC UA Configuration > Trusted Clients > Move cert to Trusted
   On UaExpert: OPC UA > Manage Certificates > Trust the server cert

3. Browse address space:
   Expand Root > Objects > (your channel name) > (device name)
   Locate BACnet tags: PXC_01 > AnalogInput_1 > Present_Value
   Locate Modbus tags: Schneider_PM5100 > ActivePower_Total

4. Read values:
   Double-click any Variable node to open Data Monitor
   Verify values match expected engineering units and range
   Check StatusCode column — should show "Good (0x00000000)"
   StatusCode "Bad_NoCommunication" → check BACnet/Modbus connectivity from Kepware

5. Create subscription:
   Data Access View panel (bottom): drag Variable nodes from address space
   Set PublishingInterval 1000 ms
   Watch values update in real time — confirms subscription pipeline is working

6. Test write (writable tags only):
   Right-click Variable node > Write Value
   Enter test value within EU range
   Verify change reflected on BACnet device Present_Value
   Note: writes on Kepware require the connecting client to have write permission in UA role

Integración en la nube mediante Azure IoT Hub OPC Publisher

Azure IoT Hub OPC Publisher es el cliente OPC UA de código abierto de Microsoft que se conecta a servidores OPC UA (incluyendo Kepware) y reenvía telemetría a Azure IoT Hub. Se ejecuta como un módulo de Azure IoT Edge en un host de contenedor Linux en el edificio, puenteando la capa OT OPC UA con los servicios en la nube de Azure.

OPC Publisher — publishednodes.json para Kepware

// publishednodes.json — defines which OPC UA nodes to publish to Azure IoT Hub
[
  {
    "EndpointUrl": "opc.tcp://192.168.10.50:4840",
    "UseSecurity": true,
    "OpcAuthenticationMode": "UsernamePassword",
    "OpcAuthenticationUsername": "azure-publisher",
    "OpcAuthenticationPassword": "<from keyvault>",
    "OpcNodes": [
      {
        "Id": "ns=2;s=Channel1.PXC_01.AnalogInput_1.Present_Value",
        "DisplayName": "AHU01_SupplyAirTemp",
        "OpcPublishingInterval": 10000,
        "OpcSamplingInterval": 5000,
        "HeartbeatInterval": 60
      },
      {
        "Id": "ns=2;s=Channel1.Schneider_PM5100.ActivePower_Total",
        "DisplayName": "MainMeter_ActivePower_kW",
        "OpcPublishingInterval": 5000,
        "OpcSamplingInterval": 2000
      },
      {
        "Id": "ns=2;s=Channel1.Schneider_PM5100.ActiveEnergy_Import",
        "DisplayName": "MainMeter_Energy_kWh",
        "OpcPublishingInterval": 60000,
        "OpcSamplingInterval": 30000,
        "SkipFirst": true
      }
    ]
  }
]

// Azure IoT Hub receives JSON telemetry:
// {
//   "NodeId": "ns=2;s=Channel1.Schneider_PM5100.ActivePower_Total",
//   "DisplayName": "MainMeter_ActivePower_kW",
//   "Value": { "Value": 47.3, "StatusCode": "Good", "SourceTimestamp": "2025-03-14T10:30:00Z" }
// }

Desde Azure IoT Hub, los datos de telemetría se enrutan a Azure Time Series Insights, Azure Data Explorer o un trabajo personalizado de Azure Stream Analytics para paneles de KPI energéticos en tiempo real en Power BI. El contenedor OPC Publisher gestiona la reconexión, el almacenamiento en búfer durante la pérdida de conectividad (store-and-forward configurable) y la gestión de certificados para la conexión OPC UA a Kepware.

¿Necesita una pasarela BACnet o Modbus a OPC UA para su proyecto?

Configuramos y ponemos en marcha pasarelas Kepware KEPServerEX que conectan dispositivos de edificio BACnet/IP, Modbus TCP y KNX con clientes OPC UA, plataformas SCADA y Azure IoT Hub — con endurecimiento completo de seguridad y gestión de certificados.

Solicitar presupuesto →
Cargando...
Volver arriba