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
| Gateway | OPC UA-Server | BACnet-Unterstützung | Modbus-Unterstützung | Plattform |
|---|---|---|---|---|
| Kepware KEPServerEX 6 | Vollständiger UA-Server (alle Sicherheitsmodi) | BACnet/IP + MS/TP; BBMD; COV | Modbus RTU/TCP/ASCII; 65535 Register | Windows Server/PC |
| matrikon OPC UA Tunneller | OPC UA-Server + DA/HDA-Bridge | Nur über OPC DA-Brücke | Nur über OPC DA-Brücke | Windows |
| Cogent DataHub OPC UA | Vollständiger UA-Server | BACnet/IP; eingeschränktes COV | Modbus TCP | Windows |
| softing edgeConnector Modbus | OPC UA-Server | Nein — nur Modbus | Modbus TCP + RTU | Docker / Linux / Windows |
| softing edgeConnector BACnet | OPC UA-Server | BACnet/IP + MS/TP | Nein | Docker / Linux / Windows |
| Ignition (Inductive Automation) | OPC-UA-Server (integriert) | BACnet/IP über Treibermodul | Modbus TCP/RTU-Treiber | Windows / 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-Objekttyp | Present_Value-Typ | OPC UA-Datentyp | Typische Verwendung |
|---|---|---|---|
| Analogeingang (AI) | REAL (Float) | Float | Temperatursensor, 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) | Boolesch | Ein/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 INT | Int32 | Betriebsart-Rückmeldung (Aus=0, Heizen=1, Kühlen=2) |
| Mehrzustandsausgang (MO) | UNSIGNED INT | Int32 (beschreibbar) | Modusbefehl, Geschwindigkeitsstufe |
| Mehrzustandswert (MV) | UNSIGNED INT | Int32 (beschreibbar) | Konfigurierbarer Enum-Wert |
| Akkumulator | UNSIGNED INT (32-Bit) | UInt32 | Impulszä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ßnahme | Implementierung |
|---|---|
| Dediziertes OT-VLAN | Kepware-Server in isoliertem VLAN platzieren; BACnet- und Modbus-Geräte im selben VLAN; keine direkte IT-LAN-Routing |
| Firewall-Regeln | Eingehende 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 |
| Zertifikatsauthentifizierung | Anonym deaktivieren; X.509-Clientzertifikate anfordern; vertrauenswürdige Clientzertifikate in den Kepware-Vertrauensspeicher importieren |
| Kepware-Benutzerzugriffskontrolle | Schreibgeschützte UA-Rolle für Überwachungsclients erstellen; Lese-/Schreib-UA-Rolle nur für BMS-Integration; MFA für Kepware-Admin-Konsole |
| Tag-Ebene Schreibschutz | Modbus-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üfprotokollierung | Kepware-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 →