进入 BACnet 对象及其属性
每个功能块 BACnet 作为项目树中的设备插入的对象源自 BACnetStaticObjectBase 功能块(库 BACnet)因此从 BACnetObjectBase。
BACnetObjectBase 提供通过通用功能更改任何 BACnet 对象功能块的任何 BACnet 属性的能力 SetPropertyInstance。
要设置的 BACnet 属性的数据被传输到 SetPropertyInstance 的形式 IEC_BACNET_PROPERTY_CONTENTS 结构。除了描述数据类型的枚举之外,该结构还包含一个缓冲区,该缓冲区具有 POINTER TO BYTE 实际的 BACnet 属性数据。这使得在 BACnet 内传输任何 BACnet 属性数据结构成为可能。 IEC_BACNET_PROPERTY_CONTENTS 结构。指定的数据类型定义缓冲区指向的结构或数据。
枚举 CmpBACnet.IEC_BACNET_DATA_TYPE 提供选择 CODESYS BACnet 数据类型;注释中指定了相应的数据类型。
基本功能块 BACnetObjectBase 提供辅助功能(例如: SetBACnetRealProperty, SetBACnetBooleanProperty) 对于一些常用的数据类型。
IEC_BACNET_PROPERTY_CONTENTSMETHOD 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);此代码设置类型为 BACnet 的属性 REAL 到值 0.0。
因此,为了阅读 BACnet 在最一般的情况下,属性 BACnetObjectBase 功能块提供 GetPropertyInstance 功能。内 IEC_BACNET_PROPERTY_CONTENTS 结构体中,您可以传输 1) 使用正确数据类型预先初始化的缓冲区,然后将其填充,或 2) 大小为 0 的缓冲区,该缓冲区会自动初始化,但您可以通过以下方式再次释放它: FreeStackAllocatedMemory 功能。
不管这种一般情况如何,都为最常见的情况提供了辅助功能。此外,对于定义在 BACnet 标准中,每个 BACnet 对象功能块都可以选择功能块属性,从而允许直接类型化访问。