Kommando-Priorität

Damit Konflikte zwischen zwei BACnet Clients, die das gleiche Property "kommandieren", möglichst vermieden werden, wurde von BACnet ein systemweites Prioritätenschema mit unterschiedlichen Prioritätsebenen für Schreibkommandos realisiert, welches vom BACnet Treiber unterstützt wird.

Jedes Objekt, welches ein kommandierbares Property besitzt, ist dafür zuständig, dass die eingehenden, priorisierten Kommandos entsprechend ihres Prioritätsgewicht abgearbeitet werden. Die Kommando-Priorität kann für jedes BACnet Gerät über das entsprechende interne Datenpunktelement Command.CmdPriority definiert werden.

Schalt- und Stellkommandos müssen priorisierbar ein, um den "Durchgriff“ der unterschiedlichen Anwendungs- oder Bedienprogramme zu organisieren, d.h., Schreibaufträge für die hier aufgeführten Objekte enthalten die nachfolgend beschriebenen Parameter. Der BACnet-Standard legt fest, dass der Aktualwert (Present_Value) für folgende Objekte mit Prioritätensteuerung kommandierbar (schreibbar) sein muss:

Objekttyp Property
Analog Output (Analogausgabe) Present_Value
Binary Output (Binärausgabe) Present_Value
Multistate Output (Mehrstufige Ausgabe) Present_Value
Multistate Value (Mehrstufiger Wert) Present_Value
Analog Value (Analogwert) Present_Value
Binary Value (Binärwert) Present_Value
BitString Value Present_Value
CharacterString Value Present_Value
Date Value Present_Value
DatePattern Value Present_Value
DateTime Value Present_Value
DateTimePattern Value Present_Value
Integer Value Present_Value
LargeAnalog Value Present_Value
OctetString Value Present_Value
PositiveInteger Value Present_Value
Time Value Present_Value
Time Pattern Value Present_Value

Priorisierungsmechanismus

Für BACnet-Objekte werden Ausgabe-Kommandos priorisiert, in dem jedem Kommando eine Priorität zugewiesen wird. Ein Kommando kann mit den Diensten WriteProperty (DS-WP-A) oder WritePropertyMultiple (DS-WPM-A) ausgeführt werden.

Der Priorisierungsmechanismus für das Schreiben der kommandierbaren Properties besteht aus zwei Komponenten:

Priority Array

Dieses stellt ein Datenfeld (Array) von priorisierten Kommandos oder den Wert "NULL" dar. Das Feld kann nur gelesen werden. Das Feld wird in abfallender Priorität dargestellt. Es wird das Kommando ausgeführt, das die höchste Priorität (niedrigster Array Index) mit einem nicht-NULL-Wert enthält.

Relinquish Default

Dieses Property ist vom gleichen Datentyp (inklusiv der zugehörigen Einheit) wie das "Commandable Property". Sobald alle Einträge im "Priority_Array“ den Wert "NULL“ haben, bekommt der Wert vom "Commandable Property" den Wert aus dem Property "Relinquish_Default“ (Grundeinstellung).

Ein Eintrag im "Priority_Array“ kann den Wert des Kommandos oder den Wert "NULL“ annehmen. Dabei bedeutet der Wert "NULL“, dass kein Kommando für die entsprechende Priorität erteilt wurde. Ein Objekt überwacht kontinuierlich die Einträge in der Prioritätentabelle, erkennt sofort den höchsten Prioritäteneintrag und übernimmt dessen Wert.

Ein Kommando (vom Anwendungsprogramm, Bediener usw.) würde entweder einen neuen Wert in das kommandierbare Property eintragen, oder ein vorher gegebenes Kommando zurücknehmen. Um das Kommando zurückzunehmen, ist es zwingend erforderlich den Wert "NULL“ einzutragen.

Da in WinCC OA der Wert "NULL" einem Wert nicht zugeordnet werden kann, wird das Versenden dieses Wertes über ein Userbit gesteuert. Dieses Userbit muss mit dem Config-Eintrag connUserbitPrio definiert werden. Wenn das definierte Userbit beim Schreiben des Wertes 1 ist, so wird der Wert gesetzt und somit ins Priority Array geschrieben. Ist der Wert vom Userbit 0, dann wird der Wert aus dem Priority Array gelöscht.