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 MultipleundEvent 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.StartBACnetStackundBACnetServer.StopBACnetStackoderAutoStart. 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 eineBACnetAsyncTransactionTokenbenö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
IBACnetEventConsumerundBACnetServer.RegisterHook/UnregisterHook/RegisterCallback/UnregisterCallback. Verwenden Sie niemals direkt die entsprechenden Funktionen der BibliothekCmpBACnet, wieCmpBACnet.BACnetSetHookoderCmpBACnet.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.BACnetEventCallbacks 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.