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.
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é.