Vorwarngrenzen

Mit Hilfe des EventEnrollment-Objekts erlaubt BACnet die Überwachung von Properties aus BACnet-Objekten. Ein typischer Anwendungsfall in der Gebäudeautomation sind Vorwarngrenzen, die auf einen möglicherweise später folgenden Alarm aufmerksam machen.

Das nachfolgende Beispiel zeigt, wie die Objekt-interne Alarmerkennung (Instrinsic Reporting) mit einem zusätzlichen Paar Vorwarngrenzen kombiniert wird (Algorithmic Change Reporting) und diese Zustände (Vorwarnung und Alarm) über zwei unterschiedliche Notification Class-Objekte gemeldet werden können.

Dabei dient das BACnet-Objekt fbAV, dessen Present Value aus der REAL-Variable fRealValue vorgegeben wird, als Auslöser für die Warnungen und Alarme.

Variablen

fRealValue : REAL := 50;

// Analog Value object using Intrinsic Reporting
fbAv : FB_BACnet_AV := (
            sObjectName := 'AV using Intr. Reporting',
            aEventEnable := [ TRUE, TRUE, TRUE ],
            eNotifyType := E_BACnet_NotifyType.eAlarm,
            bLowLimitEnable := TRUE,
            fLowLimit := 15.0,
            bHighLimitEnable := TRUE,
            fHighLimit := 87.0,
            fDeadband := 3,
            nTimeDelay := 2, // waits 2 seconds before TO_OFFNORMAL
            nTimeDelayNormal := 4, // wait 4 seconds before TO_NORMAL
            bEventDetectionEnable := TRUE,
            nNotificationClass := 10, // alarm class
            aEventMessageTextsConfig := [ 'Alarm', 'Fault', 'Warning' ],
            bEnPgm := TRUE,
            eUnit := E_BA_Unit.eOther_Percent
);

// Additional warning limits using Algorithmic Change Reporting
fbEE : FB_BACnet_EE := (
            sObjectName := 'Event Enrollment',
            nNotificationClass := 20,
            eNotifyType := E_BACnet_NotifyType.eNotifyEvent,
            aEventEnable := [ TRUE, TRUE, TRUE ],
            aEventMessageTextsConfig := [ 'Warning', 'Fault', 'Normal' ],
            stEventParameter := (
            eEventType := E_BACnet_EventType.eOutOfRange,
            stEventArgs := (
                stOutOfRange := (
                    nTimeDelay := 0,
                    fLowLimit := 25.0,
                    fHighLimit := 82.0,
                    fDeadband := 0.0
                    )
                )
            ),
            stObjectPropertyReference := F_BACnet_Reference(fbAv,PropPresentValue)
);

// Notification Classes 10=alarms, 20=warnings
fbNC10 : FB_BACnet_NC := (
            sObjectName := 'NC10',
            sDescription := 'Alarms',
            nObjectInstance := 10,
            nNotificationClass := 10,
            aAckRequired := [ TRUE, TRUE, TRUE ],
            aPriority := [ 10, 11, 12 ]
);
fbNC20 : FB_BACnet_NC := (
            sObjectName := 'NC20',
            sDescription := 'Warnings',
            nObjectInstance := 20,
            nNotificationClass := 20,
            aAckRequired := [ FALSE, TRUE, FALSE ],
            aPriority := [ 100, 110, 120 ]
);


Code

fbAv.fValPgm := fRealValue;
fbAv();
fbEE();
fbNC10();
fbNC20();