Librerie BACnetPermalink

La libreria IEC ‎CmpBACnet‎ rappresenta l'integrazione dello stack BACnet in un ambiente IEC CODESYS e fornisce i tipi di dati BACnet e i metodi ‎BACstack‎. L'uso esclusivo della libreria IEC ‎CmpBACnet‎ (senza le librerie ‎BACnet‎ e ‎BACnetDefaultImpl‎ ) comporterebbe un codice applicativo IEC complesso e lungo.

La libreria ‎BACnet‎ semplifica notevolmente lo sviluppo di applicazioni BACnet rispetto all'utilizzo esclusivo di ‎CmpBACnet‎, soprattutto nelle seguenti aree:

  • Avvio e arresto dello stack BACnet

  • Utilizzo degli oggetti del server BACnet e delle loro proprietà

  • Triggering di richieste asincrone (principalmente richieste di servizi client) ed elaborazione della transazione di richiesta

  • Elaborazione di callback dallo stack BACnet (vedere ‎IBACnetEventConsumer‎) e distribuzione dei callback a più ricevitori nell'applicazione.

Inoltre, la libreria ‎BACnet‎ fornisce un meccanismo di plug-in (‎BACnetServerPlugin‎) per estendere alcuni aspetti della libreria ‎BACnet‎. ‎BACnetServerPlugin‎ è la base per la libreria ‎BACnetDefaultImpl‎.

La libreria ‎BACnetDefaultImpl‎ è utilizzata per semplificare ulteriormente lo sviluppo di applicazioni BACnet. Lo standard BACnet ASHRAE 135 lascia aperti alcuni aspetti dell'uso pratico di BACnet. Gli esempi più significativi sono i seguenti:

  • Persistenza degli oggetti del server

  • Memorizzazione e persistenza delle voci ‎Trend Log‎, ‎Trend Log Multiple‎ e ‎Event Log‎

  • Aggiornamento delle informazioni sulla data/ora dell'oggetto dispositivo

La libreria IEC ‎BACnet‎ è intesa come un livello sopra la libreria IEC ‎CmpBACnet‎. Tuttavia, il livello non nasconde la libreria, perché ciò richiederebbe che la libreria ‎BACnet‎ abbia delle funzioni di "facciata" per le funzioni di ‎CmpBACnet‎. Queste funzioni di facciata comporterebbero un aumento del codice dell'applicazione e dei requisiti di runtime. Questo è difficile da accettare per il PLC. Per questo motivo, è necessario sapere quando devono essere utilizzati gli elementi della libreria ‎BACnet‎ o della libreria ‎CmpBACnet‎.

Regole generali:

  • Avvio e arresto dello stack BACnet

    Utilizzare sempre ‎BACnetServer.StartBACnetStack‎ e ‎BACnetServer.StopBACnetStack‎ o ‎AutoStart‎. Non utilizzare mai direttamente le funzioni corrispondenti della libreria ‎CmpBACnet‎, come ad esempio ‎CmpBACnet.BACnetServerInit‎.

  • Utilizzo degli oggetti del server BACnet e delle loro proprietà

    Utilizzare sempre i blocchi funzione specificati in IEC-lib-BACnet, come ad esempio ‎BACnetAnalogValue‎. Non utilizzare mai direttamente le funzioni corrispondenti della libreria ‎BACnet‎, come ad esempio ‎CmpBACnet.BACnetStorePropertyInstance‎.

  • Attivazione di richieste asincrone

    Utilizzare sempre i blocchi funzione client specificati della libreria ‎BACnet‎, come ad esempio ‎BACnetClientReadProperty‎. Non utilizzare mai direttamente le funzioni corrispondenti della libreria ‎CmpBACnet‎, come ad esempio ‎CmpBACnet.BACnetReadProperty‎. Tutte le funzioni della libreria ‎CmpBACnet‎ che richiedono un ‎BACnetAsyncTransactionToken‎ appartengono a questa categoria e non devono mai essere utilizzate direttamente.

  • Elaborazione di callback dallo stack BACnet e distribuzione dei callback a più ricevitori nell'applicazione

    Utilizzare sempre ‎IBACnetEventConsumer‎ e ‎BACnetServer.RegisterHook‎/‎UnregisterHook/RegisterCallback‎/‎UnregisterCallback‎. Non utilizzare mai direttamente le funzioni corrispondenti della libreria ‎CmpBACnet‎, come ‎CmpBACnet.BACnetSetHook‎ o ‎CmpBACnet.BACnetSetCallback‎.

Quando è opportuno e sicuro chiamare direttamente le funzioni della libreria ‎CmpBACnet‎?

Fondamentalmente, è necessario chiamare direttamente le funzioni di ‎CmpBACnet‎ solo quando la funzionalità corrispondente non è presente nella libreria ‎BACnet‎. Controllare la libreria ‎BACnet‎ prima di provare a usare direttamente ‎CmpBACnet‎. È possibile utilizzare funzioni bloccanti in ‎CmpBACnet‎, come ‎BACnet*CbCompletion‎, ‎BACnetIam(Ex)‎, o ‎BACnetIHave(Ex), BACnetUnconf*‎.

Il più delle volte si utilizza ‎BACnet*CbCompletion‎ per implementare il proprio ‎IBACnetEventConsumer.BACnetEventCallback‎s specifico. Ma prima controllate se la libreria ‎BACnetDefaultImpl‎ contiene già un'implementazione standard appropriata.

Il sito ‎BACnetDefaultImpl.library‎ aperto è fornito nella cartella degli esempi e può essere utilizzato per la personalizzazione da parte dell'utente.