Skip to main content

Accesso a BACnet Oggetti e loro proprietà

Ogni blocco funzione di un BACnet l'oggetto inserito come dispositivo nell'albero del progetto è derivato da BACnetStaticObjectBase blocco funzione (libreria BACnet) e quindi da BACnetObjectBase.

BACnetObjectBase fornisce la possibilità di modificare qualsiasi proprietà BACnet per qualsiasi blocco funzione di oggetto BACnet mediante la funzione generale SetPropertyInstance.

Vengono trasferiti i dati per le proprietà BACnet da impostare SetPropertyInstance sotto forma di IEC_BACNET_PROPERTY_CONTENTS struttura. Oltre a un'enumerazione che descrive il tipo di dati, questa struttura contiene anche un buffer che ha un file POINTER TO BYTE ai dati effettivi delle proprietà BACnet. Ciò rende possibile trasferire qualsiasi struttura dati di proprietà BACnet all'interno del file IEC_BACNET_PROPERTY_CONTENTS struttura. Il tipo di dati specificato definisce le strutture o i dati a cui punta il buffer.

L'enumerazione CmpBACnet.IEC_BACNET_DATA_TYPE fornisce la selezione di CODESYS BACnet tipi di dati; il tipo di dati corrispondente è specificato nel commento.

Il blocco funzione di base BACnetObjectBase fornisce funzioni ausiliarie (esempio: SetBACnetRealProperty, SetBACnetBooleanProperty) per alcuni dei tipi di dati utilizzati di frequente.

Esempio 1. Esempio del corretto utilizzo di IEC_BACNET_PROPERTY_CONTENTS
METHOD SetBACnetRealProperty
VAR_INPUT
    propID: CmpBACnet.IEC_BACNET_PROPERTY_ID;
    rVal : REAL;
END_VAR
VAR
    BACreal : CmpBACnet.IEC_BACNET_REAL := 0.0;
    conts : CmpBACnet.IEC_BACNET_PROPERTY_CONTENTS := ( tag := CmpBACnet.IEC_BACNET_DATA_TYPE.DATA_TYPE_REAL,
        nElements := 1,
        buffer := ( nBufferSize := SIZEOF(REAL), pBuffer := ADR(BACreal) ),
        rawBuffer := ( nBufferSize := 0, pBuffer :=0) );
END_VAR
BACreal := rVal;
SetPropertyInstance(propID, -1, conts);

Questo codice imposta una proprietà BACnet di tipo REAL al valore 0.0.



Di conseguenza, per leggere BACnet proprietà nel caso più generale, the BACnetObjectBase il blocco funzione fornisce il file GetPropertyInstance funzione. All'interno del IEC_BACNET_PROPERTY_CONTENTS struttura è possibile trasferire 1) un buffer preinizializzato con il tipo di dati corretto, che poi viene riempito, oppure 2) un buffer di dimensione 0, che viene inizializzato automaticamente, ma che viene rilasciato nuovamente tramite il comando FreeStackAllocatedMemory funzione.

Indipendentemente da questo caso generale, per i casi più frequenti sono previste funzioni ausiliarie. Inoltre, per tutte le proprietà definite nel BACnet standard, esiste una selezione di proprietà del blocco funzione per ciascun blocco funzione dell'oggetto BACnet che consente l'accesso diretto e digitato.