Alarmempfänger einrichten
BACnet ermöglicht Alarmempfängern (z. B. der MBE) sich in ein oder mehrere Notification Class Objekte in die Empfängerliste (Recipientlist) einzutragen.
Stehen zum Zeitpunkt der SPS-Programmierung die Empfänger bereits fest, können diese auch seitens des SPS-Programms vorgegeben werden.
Als Referenz auf den Empfänger kann entweder die Device-Instanznummer verwendet werden. In diesem Fall löst TwinCAT die tatsächliche Adresse mit einem Who-Is Telegramm auf (die Antwort I-Am des Empfängers enthält die tatsächliche Adresse).
Alternativ kann diese Adresse direkt in der Empfängerliste angegeben werden, jedoch wird diese Möglichkeit in der Praxis eher selten verwendet.
Das nachfolgende Beispiel zeigt eine Notification Class NC1 ohne Empfängervorgaben (d. h. die Empfänger tragen sich über BACnet ein). Die Notification Class 2 enthält ein Beispiel für einen Empfänger, der mit der Device-Instanznummer referenziert wird, als auch einen Empfänger, der über die IP-Adresse, den UDP-Port und die BACnet-Netzwerknummer referenziert wird.
Die Reihenfolge der Alarmarten in den Arrays aEventEnable
und aEventMessageTextsConfig
sowie aAckRequired
und aPriority
entspricht der Reihenfolge im BACnet-Standard:
TO_OFFNORMAL: Kommender Alarm / Ereignis
TO_FAULT: Sensorfehler, Geberstörung
TO_NORMAL: Rückkehr in den Normalbereich
Variablen
// simple Notification class object with empty recipient list
fbBV1 : FB_BACnet_BV := (
nNotificationClass := 1,
aEventEnable := [TRUE,TRUE,TRUE],
bAlarmValue := TRUE,
aEventMessageTextsConfig := [ 'ALARM', 'FAULT', 'NORMAL' ]
);
fbNC01_Standard : FB_BACnet_NC := (
nObjectInstance := 1,
nNotificationClass := 1,
sDescription := 'NC01 Standard',
aAckRequired := [ TRUE, TRUE, FALSE ],
aPriority := [ 10, 11, 12 ]
);
// Notification class object with pre-defined recipient (Notification Sink module)
fbBV2 : FB_BACnet_BV := (
nNotificationClass := 2,
aEventEnable := [TRUE,TRUE,TRUE],
bAlarmValue := TRUE
);
fbNC02_Recipient : FB_BACnet_NC := (
nObjectInstance := 2,
nNotificationClass := 2,
sDescription := 'NC02 RecipientTest',
aAckRequired := [ TRUE, TRUE, TRUE ],
aPriority := [ 224, 223, 222 ],
aRecipientList := [
(
stValidDays := (bMonday:=TRUE, bTuesday:=TRUE, bWednesday:=TRUE, bThursday:=TRUE, bFriday:=TRUE),
stFromTime := F_BA_ToSTTime(T#0H),
stToTime := F_BA_ToSTTime(T#23H59M59S),
stRecipient := F_BACnet_DeviceRecipient(nDeviceInstance:=42),
nProcessId := 10000, // Notification Sink module
bIssueConfirmed := FALSE,
stEventTransitions := (bToOffNormal:=TRUE, bToFault:=TRUE, bToNormal:=TRUE )
),
(
stValidDays := (bSunday:=TRUE, bSaturday:=TRUE),
stFromTime := F_BA_ToSTTime(T#7H),
stToTime := F_BA_ToSTTime(T#15H30M),
stRecipient := F_BACnet_EthernetRecipient(
nIPAddress1:=192,168,10,200,
nPort:=47808,
nNetworkNr:=444
),
nProcessId := 30100,
bIssueConfirmed := TRUE,
stEventTransitions := (bToOffNormal:=TRUE)
)
]
);
Code
fbBV1();
fbNC01_Standard();
fbBV2();
fbNC02_Recipient();