BACnet Alarming


 

Die Konfiguration von Alarming ist komplex. Damit Alarming funktioniert, müssen entsprechende Notification Classes angelegt werden, und bei Objekten die erforderlichen Properties definiert sein.

Bei allen Properties kann auch mittels angehängtem „||WP“ spezifiziert werden, dass die Properties über BACnet-Mechansmen mit geeigneten Tools (z. B. BACeye) beschrieben werden können.

Die folgenden Properties sind unabhängig vom Objekt:

# Verzögerung bei Wechsel des Alarm-Zustands in Sekunden
# hiermit können ggf. nur kurzzeitig anliegende Meldungen unterdrückt werden
bac_time_delay = 0
# Bei welchen Übergängen melden (to-offnormal, to-fault, to-normal)
bac_event_enable = (1,0,1)
# Typ der Notification (event, alarm)
bac_notify_type = event
# Melden über welche Notification-Class?
bac_notification_class = 1

Analoge Datenpunkte:

# Welches Limit ist aktiv (low-limit, high-limit)
bac_limit_enable = (0,1)
# Grenzwerte High- und Low-Limit
bac_low_limit = -100
bac_high_limit = 100
# wie weit innterhalb der Limit muss der Wert sein, damit der Zustand wieder normal ist?
bac_deadband = 0

Binäre Datenpunkte:

# Welcher Zustand löst einen Alarm aus?
bac_alarm_value = 1

Multistate Datenpunkte:

# Welche Multistate-Werte werden alas "alarm" (off-normal) betrachtet?
# Diese Listen können auch leer sein
bac_alarm_values = (1,2)
# welche Multistate-Werte werden als "fault" betrachtet?
bac_fault_values = ()

Life-Safety Datenpunkte:

# Welche Werte werden als "life-safety-alarm" gemeldet?
bac_life_safety_alarm_values = (1,2)
# siehe Multistates
bac_alarm_values = (3,5)
bac_fault_values = (4,6)

Die unter „bac_notification_class“ angegebene Klasse muss vorhanden sein. Das Gateway definiert per Default die Notification-Class 1, diese kann aber durch explizite Angabe in der bac1.txt überschrieben werden.

Die Festlegung der Prioritäten und der Quittierpflicht bei Alarmen ist eine bauseitige Vorgabe, hierzu gibt es keine allgemeingültige Definition.

Pro Objekt ist nur eine Notification-Class möglich, mehrere Grenzwerte bei analogen Datenpunkten erfordern die Abbildung auf mehrere Objekte.

Manuelle Definition einer recipient_list

Im Normalfall sollte die Eintragung in die Empfängerliste (recipient_list) einer Notification-Class automatisch durch den BACnet-Client erfolgen. Ist dies nicht möglich, hat man die Möglichkeit, die Eintragung manuell vorzunehmen. Diese sieht dann folgendermassen aus:

 bac_recipient_list = (((1,1,1,1,1,1,1),00:00:00.00,23:59:59.99,[1] (1001,0x0afa141ebac2),3,1,(1,1,1))) ||WP

Es ist dabei wichtig, dass die Klammern exakt eingehalten werden, ansonsten wird die Definition nicht übernommen. Es ist angeraten, diese Einstellung ggf. mit einem entsprechenden Tool zu kontrollieren.

bac_recipient_list = ((def)[,(def)]) => mehrere Empfänger werden durch Kommata getrennt
def = (weekdays,timespan,empfänger,pid,confirmed,ack)
empfänger = [1] (netzwerk,adresse)
empfänger = [0] (netzwerk,device)
weekdays = (mo,di,mi,do,fr,sa,so) => 1=an diesem Tag aktiv, 0=nicht aktiv
timespam = hh:mm:ss.HH-hh:mm:ss.HH => Uhrzeiten müssen angegeben werden
netzwerk = 0..65535 => Ziel-Netzwerk, in dem der Recipient sich befindet
adresse = 0xaabbccddeeffgg => 0x = konstantes Präfix, aabbccddee = IP-Adresse hexadezimal, ffgg = Port-Nummer
hexadezimal
device = 0..2^22<-1 => Device-Instanznummer des Ziels
pid = prozess-id, wir in den meisten Fällen nicht benötigt, häufig 3
confirmed = issue confirmed notifications (sind Bestätigungen erforderlich)
ack = (to-offnormal,to-fault,to-normal)

Beispiel für die Umrechnung IP-Adresse und Port:

IP = 10.250.20.30 => 0a.fa.14.1e
Port = 47810 => bac2 

ergibt zusammengesetzt:

0afa141ebac2