Skip to main content

Wann Bibliothek BACnet oder CmpBACnet verwenden?

Anmerkung

Die Beschreibungen gelten immer auch für die entsprechende Bibliothek von CODESYS BACnet2 SL ("major revision 2").

Die IEC-Bibliothek BACnet ist als Schicht über der IEC-Bibliothek CmpBACnet vorgesehen. Dabei verdeckt sie diese jedoch nicht, weil dies in der Bibliothek BACnet „Fassaden-Funktionen“ für Funktionen von CmpBACnet erfordern würde. Solche „Fassaden-Funktionen“ würden zu größerem Applikationscode und erhöhtem Laufzeitbedarf führen. Dies ist für die SPS schwer tolerierbar. Aus diesem Grund ist es notwendig zu wissen, wann Elemente aus der Bibliothek BACnet beziehungsweise CmpBACnet einzusetzen sind.

. Generelle Regeln:
  • Starten/Stoppen des BACnet-Stacks

    Verwenden Sie dafür stets BACnetServer.StartBACnetStack und BACnetServer.StopBACnetStack oder AutoStart. Verwenden Sie dafür nie direkt die entsprechenden Funktionen der Bibliothek CmpBACnet wie beispielsweise CmpBACnet.BACnetServerInit.

  • Verwenden von BACnet-Server-Objekten und deren Propertys

    Verwenden Sie dafür stets die spezifischen Functionsbausteine in IEC-lib-BACnet, wie beispielsweise BACnetAnalogValue. Verwenden Sie dafür nie direkt die entsprechenden Funktionen der Bibliothek BACnet wie beispielsweise CmpBACnet.BACnetStorePropertyInstance).

  • Auslösen von asynchronen Requests

    Verwenden Sie dafür stets die spezifischen Client-Funktionsbausteine der Bibliothek BACnet wie beispielsweise BACnetClientReadProperty. Verwenden Sie dafür nie direkt die entsprechenden Funktionen der Bibliothek CmpBACnet wie beispielsweise CmpBACnet.BACnetReadProperty). Alle Funktionen der Bibliothek CmpBACnet, die ein BACnetAsyncTransactionToken erfordern, gehören zu dieser Kategorie und sollten nie direkt verwendet werden.

  • Verarbeiten von „callbacks“ des BACnet-Stacks und Verteilen der „callbacks“ auf mehrere Empfänger in der Applikation

    Verwenden Sie dafür stets IBACnetEventConsumer und BACnetServer.RegisterHook/UnregisterHook/RegisterCallback/UnregisterCallback. Verwenden Sie dafür nie direkt die entsprechenden Funktionen der Bibliothek CmpBACnet (CmpBACnet.BACnetSetHook, CmpBACnet.BACnetSetCallback).

Für weitere Informationen siehe: Architektur, Bestandteile und deren Aufgaben

Wann ist es angemessen/sicher, Funktionen der Bibliothek CmpBACnet direkt aufzurufen?

Grundsätzlich ist es nur nötig, Funktionen von CmpBACnet direkt aufzurufen, wenn keine entsprechende Funktionalität in der Bibliothek BACnet bereitgestellt ist. Bitte prüfen Sie daher zuerst die Bibliothek BACnet, bevor Sie versuchen CmpBACnet direkt zu verwenden. „Blockierende“ Funktionen in CmpBACnet können verwendet werden, beispielsweise BACnet*CbCompletion, BACnetIam(Ex), BACnetIHave(Ex), BACnetUnconf*.

Am häufigsten werden Sie BACnet*CbCompletion verwenden, um Ihre spezifischen IBACnetEventConsumer.BACnetEventCallbacks zu realisieren. Aber prüfen Sie vorab, ob die Bibliothek BACnetDefaultImpl bereits eine geeignete Standardimplementierung beinhaltet.