Die IEC-Bibliothek CmpBACnet
stellt die Integration des BACnet-Stacks in eine CODESYS IEC-Umgebung dar und stellt die BACnet-Datentypen sowie die BACstack
Methoden zur Verfügung. Die alleinige Verwendung der IEC-Bibliothek CmpBACnet
(ohne die Bibliotheken BACnet
und BACnetDefaultImpl
) würde zu einem komplexen und langwierigen IEC-Anwendungscode führen.
Die Bibliothek BACnet
vereinfacht die Entwicklung von BACnet-Anwendungen im Vergleich zur alleinigen Verwendung
von CmpBACnet
erheblich, insbesondere in folgenden Bereichen
-
Starten und Stoppen des BACnet-Stacks
-
Verwendung von BACnet Server Objekten und deren Eigenschaften
-
Auslösen von asynchronen Anfragen (hauptsächlich Client-Service-Anfragen) und Verarbeitung der Anfrage-Transaktion
-
Verarbeitung von Rückrufen aus dem BACnet-Stack (siehe
IBACnetEventConsumer
) und Verteilung der Rückrufe an mehrere Empfänger in der Anwendung
Darüber hinaus bietet die Bibliothek BACnet
einen Plug-in-Mechanismus (BACnetServerPlugin
) zur Erweiterung bestimmter Aspekte der Bibliothek BACnet
. BACnetServerPlugin
ist die Grundlage für die Bibliothek BACnetDefaultImpl
.
Die Bibliothek BACnetDefaultImpl
dient der zusätzlichen Vereinfachung der Entwicklung von BACnet-Anwendungen. Die
BACnet-Norm ASHRAE 135 lässt einige Aspekte der praktischen Anwendung von BACnet offen.
Zu den bemerkenswertesten Beispielen gehören die folgenden:
-
Persistenz von Serverobjekten
-
Speicherung und Aufbewahrung der Einträge
Trend Log
,Trend Log Multiple
undEvent Log
-
Aktualisierung der Datums-/Zeitinformationen des Geräteobjekts
Die IEC-Bibliothek BACnet
ist als eine Schicht über der IEC-Bibliothek CmpBACnet
gedacht. Die Ebene blendet die Bibliothek jedoch nicht aus, da dies voraussetzen
würde, dass die Bibliothek BACnet
über "Fassaden"-Funktionen für die Funktionen CmpBACnet
verfügt. Diese Fassadenfunktionen würden zu einem größeren Anwendungscode und höheren
Laufzeitanforderungen führen. Dies ist für die SPS schwer zu akzeptieren. Aus diesem
Grund ist es notwendig zu wissen, wann Elemente aus der Bibliothek BACnet
oder CmpBACnet
verwendet werden sollen.
Allgemeine Regeln:
-
Starten und Stoppen des BACnet-Stacks
Verwenden Sie immer
BACnetServer.StartBACnetStack
undBACnetServer.StopBACnetStack
oderAutoStart
. Verwenden Sie niemals direkt die entsprechenden Funktionen der BibliothekCmpBACnet
, wie z. B.CmpBACnet.BACnetServerInit
. -
Verwendung von BACnet Server Objekten und deren Eigenschaften
Verwenden Sie immer die in der IEC-lib-BACnet spezifizierten Funktionsbaustein, wie z.B.
BACnetAnalogValue
. Verwenden Sie niemals direkt die entsprechenden Funktionen der BibliothekBACnet
, wie z. B.CmpBACnet.BACnetStorePropertyInstance
. -
Auslösung von asynchronen Aufträgen
Verwenden Sie immer die angegebenen Client-Funktionsbausteine der Bibliothek
BACnet
, z. B.BACnetClientReadProperty
. Verwenden Sie niemals direkt die entsprechenden Funktionen der BibliothekCmpBACnet
, wie z. B.CmpBACnet.BACnetReadProperty
. Alle Funktionen der BibliothekCmpBACnet
, die eineBACnetAsyncTransactionToken
benötigen, gehören zu dieser Kategorie und sollten niemals direkt verwendet werden. -
Verarbeitung von Rückrufen aus dem BACnet-Stack und Verteilung der Rückrufe an mehrere Empfänger in der Anwendung
Verwenden Sie immer
IBACnetEventConsumer
undBACnetServer.RegisterHook
/UnregisterHook/RegisterCallback
/UnregisterCallback
. Verwenden Sie niemals direkt die entsprechenden Funktionen der BibliothekCmpBACnet
, wieCmpBACnet.BACnetSetHook
oderCmpBACnet.BACnetSetCallback
.
Wann ist es sinnvoll und sicher, die Funktionen der Bibliothek CmpBACnet
direkt aufzurufen?
Grundsätzlich ist es nur dann notwendig, Funktionen von CmpBACnet
direkt aufzurufen, wenn eine entsprechende Funktionalität in der Bibliothek BACnet
nicht vorhanden ist. Prüfen Sie zunächst die Bibliothek BACnet
, bevor Sie versuchen, CmpBACnet
direkt zu verwenden. Es ist möglich, blockierende Funktionen in CmpBACnet
zu verwenden, wie z.B. BACnet*CbCompletion
, BACnetIam(Ex)
oder BACnetIHave(Ex), BACnetUnconf*
.
In den meisten Fällen werden Sie BACnet*CbCompletion
verwenden, um Ihre spezifischen IBACnetEventConsumer.BACnetEventCallback
s zu implementieren. Prüfen Sie jedoch zunächst, ob die Bibliothek BACnetDefaultImpl
bereits eine geeignete Standardimplementierung enthält.
Die offene BACnetDefaultImpl.library
wird im Beispielordner zur Verfügung gestellt und kann zur Anpassung an den Benutzer
verwendet werden.