OPC UA · BACnet/IP · Modbus TCP · Kepware · UaExpert · Azure IoT · 11 Min. Lesezeit

OPC UA zu BACnet und Modbus Gateway: Protokollübersetzung für BMS-Integration

Die überwiegende Mehrheit der installierten BMS-Geräte – BACnet/IP-Controller, Modbus TCP-Energiezähler und Modbus RTU-Feldgeräte – implementiert keinen OPC UA-Server. Ein Protokoll-Gateway schließt diese Lücke: Es verbindet sich mit Altsystemen über deren native Protokolle und stellt alle erfassten Datenpunkte als OPC UA-Knoten in einem einzigen durchsuchbaren Adressraum bereit. Kepware KEPServerEX ist die branchenübliche Wahl für diese Rolle, unterstützt von Siemens, Schneider und Rockwell Automation für Multi-Protokoll-BMS-Gateway-Bereitstellungen.

Warum ein Gateway benötigt wird

BACnet/IP- und BACnet MS/TP-Geräte stellen Daten über BACnet-Objekt-Dienste (ReadProperty, SubscribeCOV) bereit – nicht über OPC UA-Dienste. Modbus TCP- und RTU-Geräte stellen Daten als nummerierte Register ohne integrierte Benennung, Typinformationen oder Sicherheit bereit. Ein OPC UA-Client kann mit keinem der beiden Protokolle nativ kommunizieren.

Das Gateway fungiert als Übersetzungsschicht. Auf der Südseite fragt es Geräte mit ihren nativen Protokollen ab oder abonniert sie. Auf der Nordseite betreibt es einen vollständigen OPC UA-Server und ordnet jeden Gerätedatenpunkt einem benannten, typisierten OPC UA-Variable-Knoten zu. Das Ergebnis: Ein SCADA-System, Cloud-Connector oder Energiemanagement-Plattform sieht einen einzigen OPC UA-Endpunkt mit allen Gebäudedaten, unabhängig davon, ob die zugrunde liegenden Geräte BACnet, Modbus, KNX oder SNMP sprechen.

COV vs. Polling im Gateway: Konfigurieren Sie für BACnet-Geräte, die Change of Value (COV)-Abonnements unterstützen, Kepware so, dass SubscribeCOV anstelle von periodischem ReadProperty-Polling verwendet wird. COV reduziert den BACnet-Netzwerkverkehr und stellt sicher, dass das Gateway Zustandsänderungen sofort widerspiegelt, anstatt auf den nächsten Polling-Zyklus zu warten. Modbus-Geräte erfordern immer Polling – stellen Sie die Abtastrate so ein, dass sie Ihren Datenaktualitätsanforderungen entspricht (typischerweise 1–10 Sekunden für HLK, 100–500 ms für Stromqualität).

Vergleich der Gateway-Optionen

GatewayOPC UA-ServerBACnet-UnterstützungModbus-UnterstützungPlattform
Kepware KEPServerEX 6Vollständiger UA-Server (alle Sicherheitsmodi)BACnet/IP + MS/TP; BBMD; COVModbus RTU/TCP/ASCII; 65535 RegisterWindows Server/PC
matrikon OPC UA TunnellerOPC UA-Server + DA/HDA-BridgeNur über OPC DA-BrückeNur über OPC DA-BrückeWindows
Cogent DataHub OPC UAVollständiger UA-ServerBACnet/IP; eingeschränktes COVModbus TCPWindows
softing edgeConnector ModbusOPC UA-ServerNein — nur ModbusModbus TCP + RTUDocker / Linux / Windows
softing edgeConnector BACnetOPC UA-ServerBACnet/IP + MS/TPNeinDocker / Linux / Windows
Ignition (Inductive Automation)OPC-UA-Server (integriert)BACnet/IP über TreibermodulModbus TCP/RTU-TreiberWindows / Linux (JVM)

Kepware KEPServerEX: BACnet/IP-Treibereinrichtung

Der BACnet/IP-Ethernet-Treiber von Kepware (separat vom Basis-KEPServerEX-Paket lizenziert) verbindet sich mit BACnet/IP-Geräten im lokalen Subnetz oder über Router mithilfe eines BACnet Broadcast Management Device (BBMD). Nach dem Hinzufügen des Treiberkanals erkennt Kepware automatisch alle sichtbaren BACnet-Geräte und importiert deren Objektlisten.

Kepware BACnet/IP-Treiberkonfiguration

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

Jedes importierte BACnet-Objekt wird zu einem Kepware-Tag. Kepware ordnet die BACnet Present_Value-Eigenschaft automatisch dem primären Wert des Tags zu. Der Tag-Name folgt dem Muster DeviceName.ObjectType_Instance.Property, zum Beispiel: PXC_01.AnalogInput_1.Present_Value. Diese Tags werden sofort als OPC UA-Variable-Knoten auf dem integrierten OPC UA-Endpunkt von KEPServerEX bereitgestellt.

Modbus TCP zu OPC UA: Registerkartenimport

Modbus TCP-Geräte erfordern eine explizite Registerkartenkonfiguration – im Gegensatz zu BACnet gibt es keine selbstbeschreibende Objekterkennung. Der Modbus TCP/IP-Ethernet-Treiber von Kepware akzeptiert eine CSV-Tag-Importdatei oder eine manuelle Tag-Konfiguration, die Registeradresse, Datentyp und technische Umrechnung angibt.

Kepware Modbus TCP-Tag-Konfiguration

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"

BACnet-Objekt-zu-OPC-UA-Knotenzuordnung

Kepware ordnet jeden BACnet-Objekttyp einem OPC UA-Variable-Knoten mit dem entsprechenden OPC UA-Datentyp zu. Die Present_Value-Eigenschaft des BACnet-Objekts wird zum OPC UA-Knotenwert. Status_Flags- und Reliability-Eigenschaften werden dem OPC UA-StatusCode der Variable zugeordnet.

BACnet-ObjekttypPresent_Value-TypOPC UA-DatentypTypische Verwendung
Analogeingang (AI)REAL (Float)FloatTemperatursensor, Druck, Durchfluss
Analogausgang (AO)REAL (Float)Float (beschreibbar)Ventilstellung Sollwert, Lüfterdrehzahl
Analogwert (AV)REAL (Float)Float (beschreibbar)Sollwert, berechneter Wert
Binäreingang (BI)AUFGEZÄHLT (Aktiv/Inaktiv)BooleschEin/Aus-Status, Alarmzustand
Binärausgang (BO)AUFGEZÄHLT (Aktiv/Inaktiv)Boolesch (beschreibbar)Ein/Aus-Befehl, Relaissteuerung
Binärwert (BV)AUFGEZÄHLT (Aktiv/Inaktiv)Boolesch (beschreibbar)Modus-Flag, Übersteuerungszustand
Mehrzustandseingang (MI)UNSIGNED INTInt32Betriebsart-Rückmeldung (Aus=0, Heizen=1, Kühlen=2)
Mehrzustandsausgang (MO)UNSIGNED INTInt32 (beschreibbar)Modusbefehl, Geschwindigkeitsstufe
Mehrzustandswert (MV)UNSIGNED INTInt32 (beschreibbar)Konfigurierbarer Enum-Wert
AkkumulatorUNSIGNED INT (32-Bit)UInt32Impulszähler: kWh, m³, Liter

Sicherheit für OPC UA-Gateways

Ein OPC UA-Gateway ist ein IT/OT-Grenzgerät. Bei Kompromittierung kann ein Angreifer über den OPC UA-Schreibdienst auf beschreibbare BACnet-Ausgänge (Ventile, Relais) oder Modbus-Coils schreiben. Wenden Sie Defence-in-Depth an: Netzwerksegmentierung, zertifikatsbasierte Authentifizierung und minimale Schreibberechtigungen.

SicherheitsmaßnahmeImplementierung
Dediziertes OT-VLANKepware-Server in isoliertem VLAN platzieren; BACnet- und Modbus-Geräte im selben VLAN; keine direkte IT-LAN-Routing
Firewall-RegelnEingehende TCP 4840 nur von bekannten OPC-UA-Client-IPs zulassen; alle anderen eingehenden Verbindungen blockieren; ausgehende Kepware-Verbindungen zu BACnet UDP 47808 und Modbus TCP 502 erlauben
ZertifikatsauthentifizierungAnonym deaktivieren; X.509-Clientzertifikate anfordern; vertrauenswürdige Clientzertifikate in den Kepware-Vertrauensspeicher importieren
Kepware-BenutzerzugriffskontrolleSchreibgeschützte UA-Rolle für Überwachungsclients erstellen; Lese-/Schreib-UA-Rolle nur für BMS-Integration; MFA für Kepware-Admin-Konsole
Tag-Ebene SchreibschutzModbus-Tags in Kepware auf Schreibgeschützt setzen, wo Schreibvorgänge nicht erforderlich sind; BACnet-AO/BO/MO-Tags nur für SCADA-Rolle schreibaktiviert
PrüfprotokollierungKepware-Ereignisprotokoll aktivieren; an Windows-Ereignisprotokoll → SIEM weiterleiten; bei unbefugten Schreibversuchen alarmieren

Standardport 4840: Kepware KEPServerEX hört standardmäßig auf TCP-Port 4840 – dem IANA-registrierten OPC-UA-Port. Dieser Port muss in der Windows-Firewall auf dem Kepware-Host geöffnet sein, damit OPC-UA-Clients eine Verbindung herstellen können. Setzen Sie Port 4840 keinen unsicheren Netzwerken aus. Wenn der Kepware-Server internetzugängliches OPC-UA (für Cloud-Connectoren) benötigt, verwenden Sie einen Reverse-Proxy mit gegenseitigem TLS anstelle direkter Portweiterleitung.

Testen von OPC-UA-Verbindungen mit UaExpert

UaExpert (von Unified Automation) ist der standardmäßige kostenlose OPC-UA-Client für Inbetriebnahme und Diagnose. Er bietet einen vollständigen Adressraumbrowser, Echtzeit-Datenüberwachung, Abonnementtests und Sicherheitszertifikatsverwaltung. Download von unified-automation.com (kostenlose Registrierung erforderlich).

UaExpert – Verbindungs- und Überprüfungsschritte

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

Cloud-Integration über Azure IoT Hub OPC Publisher

Azure IoT Hub OPC Publisher ist Microsofts Open-Source-OPC-UA-Client, der eine Verbindung zu OPC-UA-Servern (einschließlich Kepware) herstellt und Telemetriedaten an Azure IoT Hub weiterleitet. Er wird als Azure IoT Edge-Modul auf einem Linux-Container-Host im Gebäude ausgeführt und verbindet die OT-OPC-UA-Ebene mit Azure-Cloud-Diensten.

OPC Publisher — publishednodes.json für 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" }
// }

Vom Azure IoT Hub leiten Telemetriedaten an Azure Time Series Insights, Azure Data Explorer oder einen benutzerdefinierten Azure Stream Analytics-Job für Echtzeit-Energie-KPI-Dashboards in Power BI weiter. Der OPC Publisher-Container verwaltet die Wiederverbindung, die Pufferung bei Verbindungsverlust (konfigurierbares Store-and-Forward) und das Zertifikatsmanagement für die OPC UA-Verbindung zu Kepware.

Benötigen Sie ein BACnet- oder Modbus-zu-OPC-UA-Gateway für Ihr Projekt?

Wir konfigurieren und nehmen Kepware KEPServerEX-Gateways in Betrieb, die BACnet/IP-, Modbus TCP- und KNX-Gebäudegeräte mit OPC UA-Clients, SCADA-Plattformen und Azure IoT Hub verbinden – mit vollständiger Sicherheitshärtung und Zertifikatsmanagement.

Angebot anfordern →
Lade ...
Zum Seitenanfang