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ät | Standardmäßige Verwendung |
|---|---|
| 1 | Manuelle Lebenssicherheit |
| 2 | Automatische Lebenssicherheit |
| 3, 4 | Frei verfügbar |
| 5 | Steuerung kritischer Anlagen |
| 6 | Mindest-Ein-/Ausschaltzeit |
| 7 | Frei verfügbar |
| 8 | Manuelle Bedienung |
| 9 bis 16 | Frei 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):
| Schritt | Priority_Array | Present_Value |
|---|---|---|
| Anfang: alle Einträge NULL | Aus (Relinquish_Default) | |
| Der Zeitplan schreibt „ein“ auf 16 | 16 = ein | Ein |
| Ein Laststeuerungssystem schreibt „aus“ auf 12 | 12 = aus, 16 = ein | Aus |
| Ein Bediener schreibt „ein“ auf 8 | 8 = ein, 12 = aus, 16 = ein | Ein |
| Das Ereignis endet; das Laststeuerungssystem schreibt NULL auf 12 | 8 = ein, 16 = ein | Ein |
| Der Bediener gibt Priorität 8 frei | 16 = ein | Ein |
| Der Zeitplan gibt Priorität 16 nachts frei | Aus (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
- Stimmen Sie Objekt, Priorität, Wert, Dauer und Freigabe mit dem Anlagenverantwortlichen ab.
- Lesen und protokollieren Sie vor dem Test das vollständige Priority_Array und den Present_Value.
- Schreiben Sie den Befehl. Lesen Sie das Priority_Array erneut: Steht Ihr Wert in Ihrem Eintrag?
- Prüfen Sie Present_Value und den physischen Anlagenzustand. Ist ein höher priorisierter Eintrag belegt, bleibt Ihr Befehl wirkungslos.
- Geben Sie mit NULL auf derselben Priorität frei und lesen Sie das Array erneut.
- 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.