Skip to main content

Accès à BACnet Objets et leurs propriétés

Chaque bloc fonctionnel d'un BACnet L'objet inséré comme appareil dans l'arborescence du projet est dérivé du BACnetStaticObjectBase bloc fonctionnel (bibliothèque BACnet) et donc de BACnetObjectBase.

BACnetObjectBase offre la possibilité de modifier n'importe quelle propriété BACnet pour n'importe quel bloc fonctionnel d'objet BACnet au moyen de la fonction générale SetPropertyInstance.

Les données des propriétés BACnet à définir sont transférées vers SetPropertyInstance sous la forme du IEC_BACNET_PROPERTY_CONTENTS structure. Outre une énumération décrivant le type de données, cette structure contient également un tampon doté d'un POINTER TO BYTE aux données réelles de la propriété BACnet. Cela permet de transférer n'importe quelle structure de données de propriété BACnet au sein du IEC_BACNET_PROPERTY_CONTENTS structure. Le type de données spécifié définit les structures ou les données vers lesquelles pointe le tampon.

L'énumération CmpBACnet.IEC_BACNET_DATA_TYPE propose la sélection de CODESYS BACnet Types de données; le type de données correspondant est précisé dans le commentaire.

Le bloc fonctionnel de base BACnetObjectBase fournit des fonctions auxiliaires (exemple : SetBACnetRealProperty, SetBACnetBooleanProperty) pour certains des types de données fréquemment utilisés.

Exemple 1. Exemple d'utilisation correcte de 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);

Ce code définit une propriété BACnet de type REAL à la valeur 0.0.



En conséquence, pour lire BACnet propriétés dans le cas le plus général, le BACnetObjectBase Le bloc fonctionnel fournit le GetPropertyInstance fonction. Au sein du IEC_BACNET_PROPERTY_CONTENTS structure, vous pouvez transférer soit 1) un tampon pré-initialisé avec le bon type de données, qui est ensuite rempli, soit 2) un tampon de taille 0, qui est initialisé automatiquement, mais que vous libérez à nouveau au moyen de la FreeStackAllocatedMemory fonction.

Indépendamment de ce cas général, des fonctions auxiliaires sont prévues pour les cas les plus fréquents. De plus, pour toutes les propriétés définies dans le BACnet standard, il existe une sélection de propriétés de bloc fonctionnel pour chaque bloc fonctionnel d'objet BACnet qui permet un accès direct et typé.