Ein BACnet-Client, der analog-input 3 auf einem Raumcontroller liest, erhält 21,5, die Einheit degrees-Celsius und vier Status-Flags. Ein Modbus-Client, der Eingangsregister 30012 eines Zählers liest, erhält nur 215. Erst mit der Registertabelle des Herstellers wird daraus 21,5 °C. Dieser Unterschied bestimmt einen großen Teil der Integrationsarbeit, wenn BACnet-Controller und Modbus-Zähler an einem Standort Daten austauschen sollen.
Im Vergleich
| BACnet | Modbus | |
|---|---|---|
| Standard | ANSI/ASHRAE 135, auch ISO 16484-5 | Spezifikationen der Modbus Organization |
| Datenmodell | Objekte wie analog-input, analog-value, binary-output, multi-state-value, schedule und trend-log mit Eigenschaften | Vier Tabellen: Coils, diskrete Eingänge, Eingangs- und Halteregister; jedes Register enthält 16 Bit |
| Adressierung | Geräteinstanz (0 bis 4.194.302), im BACnet-Verbund eindeutig, dann Objekttyp und -instanz | Serveradresse (1 bis 247 auf einem seriellen Bus) oder IP-Adresse, danach Registernummer |
| Bedeutung eines Werts | Im Objekt: Name, Einheit, Status-Flags | In einer separaten Registertabelle für jedes Modell |
| Netze | BACnet/IP, MS/TP über RS-485, BACnet/SC und weitere | Modbus TCP; Modbus RTU über RS-485 oder RS-232 für ein Gerät |
| Standardport | UDP 47808 (0xBAC0) | TCP 502 |
| Geräte finden | Discovery mit Who-Is und I-Am | Keine Discovery; jedes Gerät nach Adresse konfigurieren |
| Änderungen empfangen | Abfrage oder COV-Abonnement (Change of Value) | Nur Abfrage |
| Viele Werte lesen | ReadPropertyMultiple, wenn das Gerät es unterstützt | Bis zu 125 zusammenhängende Register je Anfrage mit Funktion 03 oder 04 |
| Befehle | Priority_Array mit 16 Prioritäten bei beschreibbaren Objekten | Direktes Schreiben; der zuletzt Schreibende bestimmt den Wert |
| Alarme und Zeitpläne | Standardobjekte und -dienste | Gerätespezifische Register, sofern vorhanden |
| Sicherheit | BACnet/SC (TLS über WebSockets) | Modbus Security (TLS) auf TCP 802, selten implementiert |
| Typische Geräte | HLK-Controller, VAV-Regler, Kältemaschinen, BMS-Zentralen | Stromzähler, Wechselrichter, Antriebe, SPS |
Objekte im Vergleich zu Registern
Ein BACnet-Temperaturpunkt ist ein Objekt, zum Beispiel analog-input 3 auf Gerät 12001. Seine Eigenschaften umfassen Object_Name („Raum 2.14 Temperatur“), Present_Value (21,5), Units (degrees-Celsius) und Status_Flags. Status_Flags hat vier Bits: in-alarm, fault, overridden und out-of-service. Ein Client kann den Wert lesen und zugleich beurteilen, ob er verlässlich ist.
Units ist eine Aufzählung in Standard 135 und kann daher ohne Herstellerdokument dekodiert werden. Ob die Angabe stimmt, hängt dennoch von der Konfiguration des Controllers ab. Ein analog-value ohne Einheit oder mit falscher Einheit braucht ebenso eine Punktliste wie ein Modbus-Register. Objektnamen unterscheiden sich zwischen Herstellern und Standorten; ein Controller kann Hunderte Objekte bereitstellen. Der Leitfaden zu BACnet-Objekten zeigt den Aufbau einer brauchbaren Punktliste.
Auf einem Modbus-Gerät steht dieselbe Temperatur in Eingangsregister 30012 mit dem Rohwert 215. Die Registertabelle legt int16, Faktor 0,1 und °C fest. Zwei Konventionen verursachen besonders viele Zuordnungsfehler.
Erstens ist 30012 eine Referenznummer in der Dokumentation, nicht die Adresse auf der Leitung. Die führende 3 bezeichnet ein Eingangsregister; gezählt wird ab 30001 für Protokolladresse 0. Der Client liest daher Adresse 11 mit Funktion 04. Wer Adresse 12 einträgt, liest das nächste Register und erhält möglicherweise einen plausiblen, aber falschen Wert. Der Modbus-Adressrechner übernimmt die Umrechnung.
Zweitens belegt ein 32-Bit-Wert zwei Register. Die Modbus-Spezifikation legt das höherwertige Byte in jedem Register zuerst fest, nicht aber die Reihenfolge der beiden Register. Hersteller unterscheiden sich. Eine Gesamtenergie von 1.234,5 kWh als float32 liegt als 0x449A gefolgt von 0x5000 vor. Mit vertauschten Wörtern entsteht der Wert 8.607.918.080. Prüfen Sie jeden 32-Bit-Punkt gegen einen bekannten Wert ungleich null auf der Zähleranzeige. Der Modbus-Registerdecoder zeigt Byte- und Wortreihenfolgen für ein Registerpaar. Der Leitfaden zu Registertabellen behandelt Datentypen und Skalierung.
Netze
BACnet/IP sendet BACnet-Nachrichten als UDP-Datagramme, standardmäßig auf Port 47808. Discovery verwendet Broadcasts, die IP-Router nicht weiterleiten. Ein BACnet-Netz über mehrere IP-Subnetze benötigt deshalb in jedem Subnetz ein BACnet Broadcast Management Device (BBMD). Jedes BBMD führt eine Broadcast Distribution Table seiner Gegenstellen. Setzen Sie nicht zwei BBMDs in dasselbe Subnetz; beide würden dieselben Broadcasts weiterleiten. Ein einzelner Client in einem anderen Subnetz kann sich für eine in Sekunden angegebene Gültigkeitsdauer als Foreign Device bei einem BBMD registrieren und muss die Registrierung vor Ablauf erneuern. Der Leitfaden zu Routing und BBMD erklärt beide Verfahren.
MS/TP läuft über RS-485. Master verwenden MAC-Adressen von 0 bis 127 und reichen ein Token weiter. Nur wer das Token hält, darf eine Anfrage beginnen. Slaves können Adressen bis 254 verwenden, beantworten Anfragen und halten nie das Token. Jedes MS/TP-Gerät muss 9.600 und 38.400 Bit/s unterstützen. Der Standard nennt 19.200, 57.600, 76.800 und 115.200 Bit/s als Optionen. Setzen Sie Max_Master auf die höchste Masteradresse des Busses, damit Master keine unbesetzten Adressen abfragen und der Tokenzyklus kurz bleibt. Der Vergleich von BACnet/IP und MS/TP beschreibt die Unterschiede.
BACnet/SC überträgt BACnet über TLS-gesicherte WebSockets. Jeder Knoten verbindet sich mit einem Hub; direkte Verbindungen zwischen Knoten sind optional.
Jedes BACnet-Gerät hat eine Geräteinstanz von 0 bis 4.194.302. Die Instanz 4.194.303 ist als Wildcard reserviert. Im gesamten BACnet-Verbund, auch hinter Routern, muss die Geräteinstanz eindeutig sein. Jedes BACnet-Netz hat zusätzlich eine Netznummer von 1 bis 65.534 für die Router. Doppelte Geräteinstanzen sind ein häufiger Inbetriebnahmefehler: Zwei Controller antworten auf ein Who-Is für dieselbe Instanz, und ein nach Instanz gebundener Client kann das falsche Gerät lesen. Prüfen Sie auf Duplikate, bevor ein zweiter Client in Betrieb geht. Der Discovery-Leitfaden erklärt das Verfahren.
Modbus TCP läuft über TCP auf Port 502. Modbus RTU nutzt RS-485 oder RS-232 für ein einzelnes Gerät. Ein Client fragt auf einem seriellen Bus bis zu 247 Serveradressen ab; jeder Server antwortet nur auf Anfragen. Der Vergleich von Modbus TCP und RTU behandelt beide.
Ein MS/TP-Bus und ein Modbus-RTU-Bus können denselben Kabeltyp nutzen, aber nicht dasselbe Leiterpaar. Das Framing ist verschieden; MS/TP-Master senden Tokens ohne Anfrage und würden damit Modbus-Verkehr stören.
Befehle und Priorität
Ein beschreibbares BACnet-Objekt, etwa ein Binärausgang für einen Ventilator, besitzt ein Priority_Array mit 16 Einträgen. Jedes steuernde System schreibt in seinen eigenen Eintrag. Das Objekt folgt dem belegten Eintrag mit der niedrigsten Nummer. Standard 135 benennt fünf Prioritäten: 1 manuelle Lebenssicherheit, 2 automatische Lebenssicherheit, 5 Steuerung kritischer Anlagen, 6 Mindest-Ein-/Ausschaltzeit und 8 manuelle Bedienung. Die übrigen sind für den Standort verfügbar. Sind alle Einträge leer, gilt Relinquish_Default.
Ein Befehl bleibt belegt, bis das schreibende System den Eintrag durch NULL freigibt. Ein typischer Fehler ist ein nicht freigegebener Befehl. Schaltet ein Energiesystem einen Ventilator während eines Laststeuerungsereignisses auf Priorität 12 aus und endet ohne Freigabe, bleibt der Ventilator danach aus, obwohl der BMS-Zeitplan auf der niedrigeren Priorität 16 „ein“ vorgibt. Vereinbaren Sie Eintrag und Freigabeverfahren vor dem ersten Schreiben mit dem BMS-Verantwortlichen. Lesen Sie nach einem Schreibvorgang sowohl Priority_Array als auch Present_Value.
Ein Modbus-Schreibvorgang überschreibt das Register. Wenn BMS und Energiesystem denselben Sollwert beschreiben, gewinnt der zuletzt Schreibende; keines der Systeme weiß automatisch davon. Der Leitfaden zum BACnet Priority_Array erklärt Prioritäten, Freigabe und Vorgabewert.
Welches Protokoll verwenden?
Meist bestimmt die Anlage das Protokoll. Der Anlagenverantwortliche entscheidet über die Anbindung: Der BMS-Verantwortliche führt die BACnet-Punktliste und genehmigt jeden Schreibzugriff.
| Situation | Übliches Vorgehen |
|---|---|
| Modbus-Zähler und BMS auf BACnet | Zähler über Modbus lesen; benötigte Werte dem BMS über ein Gateway oder das Energiesystem bereitstellen, Punkt für Punkt zugeordnet |
| HLK-Anlage auf BACnet/IP, Energieanalyse gewünscht | BACnet-Objekte als zweiter Client direkt lesen; nur mit Zustimmung des BMS-Verantwortlichen schreiben |
| HLK-Controller nur auf MS/TP | Über die bereits abfragende BMS-Zentrale oder einen BACnet-Router nach BACnet/IP lesen. Ein Router bringt Ihre Abfragen auf den MS/TP-Bus, oft bei 38.400 oder 76.800 Bit/s; Abfragerate mit dem BMS-Verantwortlichen abstimmen |
| Neue Unterzähler für ein bestehendes BMS | Zähler mit einer vom BMS gut lesbaren Schnittstelle wählen oder ein Gateway hinzufügen, das BACnet-Objekte bereitstellt |
Zwischen beiden abbilden
Ein Gateway, das Messwerte eines Modbus-Zählers als BACnet-Objekte bereitstellt, braucht für jeden Punkt eine Zeile in seiner Zuordnung. Diese nennt Register und Funktionscode, Datentyp und Wortreihenfolge, Skalierung, BACnet-Objekttyp und -instanz sowie Units.
Die Zuordnung benötigt auch eine Fehlerregel für einen Zähler, der nicht mehr antwortet. Ein korrektes Gateway setzt Reliability des Objekts auf communication-failure. Dadurch wird das fault-Bit in Status_Flags gesetzt; ein BMS, das dieses Flag prüft, erkennt den veralteten Wert. Hält ein Gateway dagegen den letzten Wert ohne Fehlerflag, erscheint eine flache Linie wie ein echter Messwert. Testen Sie die Regel, indem Sie die Verbindung zum Zähler unterbrechen und auf der BACnet-Seite Reliability und Status_Flags lesen. Der Leitfaden zu Protokoll-Gateways nennt weitere Anforderungen. Der Leitfaden zu veralteten Daten erklärt die Behandlung im Zielsystem.
Sicherheit
Weder BACnet/IP noch Modbus TCP authentifizieren Clients oder verschlüsseln Daten. Jeder Host mit Zugang zu UDP 47808 kann Objekte beschreiben, für die der Controller Schreibzugriff zulässt. Jeder Host mit Zugang zu TCP 502 kann Halteregister beschreiben. Setzen Sie Gebäudesteuerungstechnik in ein eigenes VLAN. Erlauben Sie UDP 47808 nur BACnet-Clients und BBMD-Gegenstellen, TCP 502 nur dem Gateway oder BMS, das die Zähler abfragt. Leiten Sie keinen der beiden Ports aus dem Internet weiter. Prüfen Sie die Broadcast Distribution Table jedes BBMD: Ein falscher Eintrag sendet jeden lokalen Broadcast an diese Adresse. BACnet/SC und Modbus Security ergänzen TLS, doch beide Enden müssen das unterstützen; die meisten installierten Geräte tun es nicht.
BACnet und Modbus mit Edge
Edge auf dem ZGW-20 Gateway liest beide Protokolle. Als BACnet/IP-Client fragt es Present_Value von Analog-, Binär- und Multi-State-Eingangs-, Ausgangs- und Wertobjekten ab. Eine Netzkonfiguration umfasst bis zu 16 Controller mit jeweils bis zu 64 Punkten. Edge fragt jede Minute oder in einem auf Minuten ausgerichteten Intervall wie 300 Sekunden ab. Als Modbus-Client liest es Modbus-TCP- und -RTU-Geräte; Datentyp sowie Byte- und Wortreihenfolge werden für jeden Punkt eingestellt. Werte von EpiSensor Zigbee-Zählern und -Sensoren stehen neben diesen Punkten, jeweils mit eigener Exportkennung, und gehen an dieselben Ziele.
Edge kann einem BMS Werte auch als Modbus-TCP-Register bereitstellen. Sein Modbus Server lauscht auf TCP 10502 und bildet jeden Messwert auf einen Coil oder auf ein beziehungsweise zwei Register als int16, uint16, int32, uint32 oder float32 ab. Wenn eine Quelle keine Werte mehr meldet, bleibt der letzte Registerwert stehen. Das BMS benötigt deshalb eine eigene Prüfung auf veraltete Werte, beispielsweise einen Alarm, wenn ein Energiezählwerk nicht mehr steigt.
Der BACnet-Client hat Grenzen. Er fragt ab und abonniert kein COV. Der COV-Leitfaden vergleicht beides. Edge verbindet sich nicht direkt mit einem MS/TP-Bus; lesen Sie MS/TP-Controller über einen BACnet-Router. Die Einstellungen bieten keine Foreign-Device-Registrierung. Platzieren Sie das Gateway daher im Subnetz der Controller oder stimmen Sie Routing mit dem BMS-Verantwortlichen ab. Schreiben auf Ausgangs- und Wertobjekte ist nur bei Punkten möglich, die ein Administrator für die Steuerung freigegeben hat. Jeder Schreibvorgang verwendet eine Priorität von 1 bis 16, ohne Angabe 16. Edge kann keinen Befehl freigeben, weil seine Schreibfunktion NULL ablehnt. Vereinbaren Sie vor jedem Schreiben mit dem Anlagenverantwortlichen ein Freigabeverfahren. Die Anwendung zur Zählerintegration für BMS und SCADA zeigt eine vollständige Architektur.
Häufige Fragen
Was ist der wichtigste Unterschied zwischen BACnet und Modbus?
BACnet liefert die Bedeutung mit den Daten: Jeder Punkt ist ein Objekt mit Name, Present_Value, Einheit und Status-Flags; Geräte können entdeckt werden. Modbus liefert Zahlen in Registern. Bedeutung, Einheit und Skalierung stehen in einer separaten Registertabelle für jedes Gerätemodell.
Wann braucht ein Projekt BACnet statt Modbus?
Wenn das empfangende System COV-Meldungen, standardisierte Alarm-, Zeitplan- oder Trendobjekte oder Befehle mit Rücksicht auf Prioritäten anderer Systeme benötigt. Für die regelmäßige Abfrage von Energiewerten genügt Modbus; es ist die Schnittstelle der meisten Stromzähler.
Welchen Port verwendet BACnet/IP?
Standardmäßig UDP-Port 47808 (0xBAC0). Ein Standort kann andere UDP-Ports verwenden, um BACnet/IP-Netze zu trennen. Modbus TCP nutzt TCP-Port 502.
Können BACnet- und Modbus-Geräte zusammenarbeiten?
Ja, über ein Gateway oder einen Controller, der beide Protokolle beherrscht. Jeder Punkt braucht eine Zuordnung zwischen Modbus-Register und BACnet-Objekt mit Datentyp, Wortreihenfolge, Skalierung und Einheit. Ebenso nötig ist eine Fehlerregel: Antwortet das Modbus-Gerät nicht mehr, sollte das BACnet-Objekt Reliability communication-failure melden, statt den letzten Wert ohne Fehlerkennzeichnung als aktuell zu zeigen.