Protokolle und Daten

BACnet-Prioritäten und die Freigabe von Befehlen

BACnet Priority_Array mit 16 Prioritäten: Befehle mit NULL freigeben, Relinquish_Default und Schreibtests ohne bleibende Übersteuerung.

Ein beschreibbares BACnet-Objekt, etwa ein Binärausgang zum Starten eines Ventilators oder ein Analogwert für einen Sollwert, übernimmt nicht einfach den zuletzt geschriebenen Wert. Ein Sicherheitssystem, ein Bediener und ein Zeitplan können denselben Ventilator ansteuern, weil jedes System in seinen eigenen Eintrag des Priority_Array schreibt.

Dieser Leitfaden gehört zur Reihe über BACnet und Gebäudeprotokolle.

Wie das Priority_Array entscheidet

Jeder der 16 Einträge enthält entweder einen Wert oder NULL (leer). Der Present_Value des Objekts stammt aus dem ersten Eintrag, von Priorität 1 aus gezählt, der nicht NULL ist. Priorität 1 ist die höchste. Sind alle Einträge NULL, gilt der Relinquish_Default des Objekts.

Der Standard benennt fünf Prioritäten. Die übrigen können am Standort zugewiesen werden:

PrioritätStandardmäßige Verwendung
1Manuelle Lebenssicherheit
2Automatische Lebenssicherheit
3, 4Frei verfügbar
5Steuerung kritischer Anlagen
6Mindest-Ein-/Ausschaltzeit
7Frei verfügbar
8Manuelle Bedienung
9 bis 16Frei verfügbar; Zeitpläne und reguläre Steuerung nutzen häufig die niedrigste Priorität

Ein üblicher Plan legt Zeitpläne auf 16, Energiemanagement oder Laststeuerung auf eine Priorität zwischen 9 und 15 und manuelle Eingriffe auf 8. Halten Sie die Zuordnung in der Punktliste fest.

Ein durchgerechnetes Beispiel

Ein Zuluftventilator (binary-output 4) hat den Relinquish_Default „inactive“ (aus):

SchrittPriority_ArrayPresent_Value
Anfang: alle Einträge NULLAus (Relinquish_Default)
Der Zeitplan schreibt „ein“ auf 1616 = einEin
Ein Laststeuerungssystem schreibt „aus“ auf 1212 = aus, 16 = einAus
Ein Bediener schreibt „ein“ auf 88 = ein, 12 = aus, 16 = einEin
Das Ereignis endet; das Laststeuerungssystem schreibt NULL auf 128 = ein, 16 = einEin
Der Bediener gibt Priorität 8 frei16 = einEin
Der Zeitplan gibt Priorität 16 nachts freiAus (Relinquish_Default)

Daraus folgen zwei Punkte. Der Befehl des Laststeuerungssystems wurde angenommen, hatte aber keine Wirkung, solange der Bediener Priorität 8 belegte. Hätte das Laststeuerungssystem Priorität 12 nicht freigegeben, wäre der Ventilator auch nach dem erneuten Einschalten durch den Zeitplan am nächsten Morgen ausgeschaltet geblieben.

Freigeben statt überschreiben

Zum Beenden eines Befehls schreiben Sie NULL auf dieselbe Priorität. Den Gegenwert zu schreiben ist keine Freigabe: Der Eintrag bleibt belegt und blockiert weiterhin jede niedrigere Priorität. Vergessene Befehle auf mittleren Prioritäten sind eine häufige Ursache dafür, dass eine Anlage noch Wochen nach einem Test ihren Zeitplan ignoriert.

Manche Clients können NULL nicht senden oder verbergen die Funktion hinter einem anderen Verfahren. Die Beckhoff-Dokumentation beschreibt beispielsweise, wie ihre BACnet-Bibliothek mit einem Sonderwert NULL schreibt. Prüfen Sie vor jedem Schreibvorgang, wie der eingesetzte Client einen Befehl freigibt.

Prüfen Sie auch die Mindest-Ein-/Ausschaltzeit auf Priorität 6. Ein Binärausgang mit Mindestlauf- und Mindeststillstandszeit schreibt nach jedem Wechsel für die Mindestdauer seinen eigenen Wert auf Priorität 6. Ein Befehl mit niedrigerer Priorität kann dadurch verzögert werden.

Einen Schreibvorgang sicher testen

  1. Stimmen Sie Objekt, Priorität, Wert, Dauer und Freigabe mit dem Anlagenverantwortlichen ab.
  2. Lesen und protokollieren Sie vor dem Test das vollständige Priority_Array und den Present_Value.
  3. Schreiben Sie den Befehl. Lesen Sie das Priority_Array erneut: Steht Ihr Wert in Ihrem Eintrag?
  4. Prüfen Sie Present_Value und den physischen Anlagenzustand. Ist ein höher priorisierter Eintrag belegt, bleibt Ihr Befehl wirkungslos.
  5. Geben Sie mit NULL auf derselben Priorität frei und lesen Sie das Array erneut.
  6. Bestätigen Sie, dass die Anlage in den erwarteten Zustand zurückgekehrt ist.

Ein Zeitüberschreiten beim Schreiben bedeutet ein unbekanntes Ergebnis, nicht zwingend einen Fehlschlag. Lesen Sie das Array, bevor Sie den Versuch wiederholen.

Priorität und Modbus

Modbus hat kein Priority_Array. Ein Schreibvorgang ändert das Register; der zuletzt Schreibende bestimmt den Wert. Wenn sich ein Gebäudeleitsystem und ein Energiesystem ein Modbus-Gerät teilen, legen Sie fest, welches davon schreiben darf, oder nutzen Sie einen Controller zur Konfliktauflösung. Der Vergleich von BACnet und Modbus erklärt den Unterschied.

Schreiben mit Edge

Edge auf dem ZGW-20 Gateway kann BACnet-Ausgangs- und Wertobjekte beschreiben, die ein Administrator für die Steuerung freigegeben hat. Jeder Schreibvorgang verwendet eine ausgewählte Priorität von 1 bis 16; ohne Angabe gilt 16. Edge kann einen Befehl nicht mit NULL freigeben. Vereinbaren Sie deshalb vor einem Test, wie der Befehl freigegeben wird, üblicherweise mit den Werkzeugen des Gebäudeleitsystems. Behandeln Sie jeden Schreibvorgang als den oben beschriebenen genehmigten Steuerungstest. Der Leitfaden zur lokalen Steuerung beschreibt die zu planenden Ausfallfälle.

Häufige Fragen

Was ist das BACnet Priority_Array?

Eine Eigenschaft beschreibbarer Objekte, etwa von Binär- und Analogausgängen, mit 16 Einträgen. Jeder kann einen Befehlswert oder NULL enthalten. Der Present_Value stammt aus dem belegten Eintrag mit der höchsten Priorität (niedrigsten Nummer) oder aus Relinquish_Default, wenn alle Einträge NULL sind.

Welche BACnet-Prioritäten sind standardmäßig benannt?

Fünf Prioritäten haben Standardnamen: 1 manuelle Lebenssicherheit, 2 automatische Lebenssicherheit, 5 Steuerung kritischer Anlagen, 6 Mindest-Ein-/Ausschaltzeit und 8 manuelle Bedienung. Die übrigen stehen Anwendungen zur Verfügung. Viele Standorte nutzen etwa 16 für Zeitpläne und eine mittlere Priorität für Energiemanagement.

Was bedeutet „Relinquish“ in BACnet?

Einen Befehl freigeben, indem NULL auf die Priorität geschrieben wird, die ihn enthält. Danach folgt das Objekt dem nächsten belegten Eintrag mit niedrigerer Priorität oder seinem Relinquish_Default.

Was ist Relinquish_Default?

Der Wert, den ein beschreibbares Objekt annimmt, wenn kein Eintrag im Priority_Array einen Befehl enthält, beispielsweise „aus“ für einen Ventilator oder ein vorgegebener Ventilsollwert.