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.