文章目录
- 前言
- 18个对象
- BACnet 对象的属性
- 设备对象(Device)的属性
- 输入输出值对象类型及其属性
- 在代码中的表达
- Device对象的属性
- 模拟输入对象的属性
- 小结
前言
在楼宇自控网络中,各种设备之间要进行数据交换,为了能够实现设备的互操作,所
交换的数据必须使用一种所有设备都能够理解的“共同语言”。BACnet 的最成功之处就在
于采用了面向对象的技术,定义了一组具有属性的对象(Object)来表示任意的楼宇自控设备
的功能,从而提供了一种标准的表示楼宇自控设备的方式。*在BACnet 中,所谓对象就是
在网络设备之间传输的一组数据结构,对象的属性就是数据结构中的信息,设备可以从数
据结构中读取信息,可以向数据结构写入信息,这些就是对对象属性的操作。*BACnet 网
络中的设备之间的通信,实际上就是设备的应用程序将相应的对象数据结构装入设备的应
用层协议数据单元(APDU)中。对象数据结构中携带的信息就是对象的属性值,接收设备中的应用程序对这些属性进行操作,从而完成信息通信的目的。
18个对象
BACnet 目前定义了18 个对象:
对象名称 | 应用实例 |
模拟输入 Analog Input | 传感器输入 |
模拟输出 Analog Output | 控制输出 |
模拟值入 Analog Value | 设置的阈值或其它模拟控制系统参数 |
数字输入 Binary Input | 开关输入 |
数字输出 Binary Output | 继电器输出 |
数字值 Binary Value | 数字控制系统参数 |
模拟输入 Analog Input | 传感器输入 |
时序表 Calendar | 为按事件执行程序定义的日期列表 |
命令 Command | 为完成诸如日期设置等待特点操作而向多设备的多对象写多值 |
设备 Device | 其属性表示设备支持的对象和服务以及设备商和固件版本 |
事件登记 Event Enrollment | 描述可能处于错误状态的事件(例如“输入超出范围”),或者其它设备 需要的报警。该对象可直接通知一个设备,也可用通知类(Notification Class)对象通知多对象 |
文件 File | 允许读写访问设备支持的数据文件 |
组 Group | 提供在一个读单一操作下访问多对象的多属性 |
环 Loop | 提供标准化地访问一个“控制环” |
多态输入 Multi-state Input | 表述一个多状态处理程序的状况,如冰箱的开、关和除霜循环等 |
多态输出 Multi-state Output | 表述一个多状态处理程序的期望状态,如冰箱的开始冷却时间、开始除 霜时间等 |
通知类 Notification Class | 包含一个设备列表,其中包括如果一个事件登记对象确定有一个警告或 报警报文需要发送则将要送给的那些设备 |
程序 Program | 允许设备中的一个程序开始,停止,装载,卸载,以及报告程序当前状 态等 |
时间表 Schedule | 定义一个按周期的操作时间表 |
每个对象都有一组属性,属性的值描述对象的特征和功能。在BACnet 中,对于每个
对象来说,属性分为必需的和可选的两种。用三个字母表示属性的类型,其意义分别是:
O 表示此属性是可选的,R 表示此属性是必需的且是用BACnet 服务可读的,W 表示此属
性是必需的且是用BACnet 服务可读和可写的。
BACnet 对象的属性
BACnet 要求每个BACnet 设备都要有一个“设备对象”,“设备对象”包含此设备和其
功能的信息。当一个BACnet 设备要与另一个BACnet 设备进行通信时,它必须要获得该
设备的“设备对象”中所包含的某些信息。表2 给出“设备对象”的属性描述。
设备对象(Device)的属性
“设备对象”的“对象标识符”属性中的设备实例标号必须是在整个BACnet 互联网中唯一的,这样才能在安装系统时标识设备。
表中的前三项属性,即对象标识符
,对象名称
和对象类型
是BACnet 设备中的每个对象必须具有的属性。
“对象标识符”
是一个32 位的编码,用来标识对象的类型和其实例标号
,这两者一起可以唯一地标识对象;
“对象名称”
是一个字符串,BACnet 设备可以通过广播某个“对象名称”而建立与包含有此对象的设备的联系,这将使整个系统的设置大为简化;
“设备对象”
的属性向BACnet 网络表述了设备的全部信息。例如,“对象列表”属性提供了设备中包含的每个对象的列表。
输入输出值对象类型及其属性
BACnet 定义了6 个输入输出值对象,分别是:模拟输入对象,数字输入对象,模拟输出对象,数字输出对象,模拟值对象和数字值对象。
在代码中的表达
现在我们看看这些对象和属性在代码中是如何表达(或描述)的。在Bacnet.Room.Simulator
中我们可以找到一个名为DeviceStorage.xml
的文件,里面就记录一个BACnet设备包含的一些对象和对象的属性。具体代码如下:
<?xml version="1.0"?>
<DeviceStorage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Objects>
<Object Type="OBJECT_DEVICE" Instance="64237">
<Properties>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_DEVICE:64237</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>RoomController.Simulator</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>8</Value>
</Property>
<Property Id="PROP_SYSTEM_STATUS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_VENDOR_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>F. Chaxel, Thanks to Morten Kvistgaard, MIT licence, 2015</Value>
</Property>
<Property Id="PROP_VENDOR_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>61440</Value>
</Property>
<Property Id="PROP_MODEL_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Room_FC_2014</Value>
</Property>
<Property Id="PROP_FIRMWARE_REVISION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>0.1.0</Value>
</Property>
<Property Id="PROP_APPLICATION_SOFTWARE_VERSION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>0.1.0</Value>
</Property>
<Property Id="PROP_PROTOCOL_VERSION" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>1</Value>
</Property>
<Property Id="PROP_PROTOCOL_REVISION" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>14</Value>
</Property>
<Property Id="PROP_PROTOCOL_SERVICES_SUPPORTED" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>01111111101111000011101110000000011010101</Value>
</Property>
<Property Id="PROP_PROTOCOL_OBJECT_TYPES_SUPPORTED" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000000010101010000000000000000100000000111110111111111</Value>
</Property>
<Property Id="PROP_OBJECT_LIST" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
</Property>
<Property Id="PROP_MAX_APDU_LENGTH_ACCEPTED" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>1476</Value>
</Property>
<Property Id="PROP_SEGMENTATION_SUPPORTED" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>3</Value>
</Property>
<Property Id="PROP_APDU_TIMEOUT" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>3000</Value>
</Property>
<Property Id="PROP_NUMBER_OF_APDU_RETRIES" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>3</Value>
</Property>
<Property Id="PROP_DEVICE_ADDRESS_BINDING" Tag="BACNET_APPLICATION_TAG_NULL" />
<Property Id="PROP_DATABASE_REVISION" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>0</Value>
</Property>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Free RoomController Simulator, F. Chaxel 2015</Value>
</Property>
<Property Id="PROP_LOCATION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>FR</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_ANALOG_INPUT" Instance="0">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature Interieure</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_INPUT:0</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature.Interieure</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_REAL">
<Value>0</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_UNITS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>62</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_ANALOG_INPUT" Instance="1">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature eau glicolee</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_INPUT:1</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature.Eau</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_REAL">
<Value>0</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_UNITS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>62</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_ANALOG_INPUT" Instance="2">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature exterieure</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_INPUT:2</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature.Exterieure</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_REAL">
<Value>12</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_UNITS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>62</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_ANALOG_VALUE" Instance="0">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Consigne Effective</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_VALUE:0</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Consigne.Effective</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>2</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_REAL">
<Value>21</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_UNITS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>62</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_ANALOG_VALUE" Instance="1">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Consigne 1</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_VALUE:1</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Consigne.1</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>2</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_REAL">
<Value>21</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_UNITS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>62</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_ANALOG_VALUE" Instance="2">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Consigne 2</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_VALUE:2</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Consigne.2</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>2</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_REAL">
<Value>19</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_UNITS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>62</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_ANALOG_VALUE" Instance="3">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Consigne 3</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_VALUE:3</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Consigne.3</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>2</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_REAL">
<Value>17</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_UNITS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>62</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_CHARACTERSTRING_VALUE" Instance="1">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Textes Consignes Concatenés CSV</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_CHARACTERSTRING_VALUE:1</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>TextesConsignesCSV</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>40</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Mode Confort;Mode Eco+;Mode Absence</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_BINARY_VALUE" Instance="0">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Fonctionnement du chauffage</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_BINARY_VALUE:0</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Fonctionnement.Chauffage</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>5</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_POLARITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_INACTIVE_TEXT" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Off</Value>
</Property>
<Property Id="PROP_ACTIVE_TEXT" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>On</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_BINARY_VALUE" Instance="1">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Fonctionnement climatisation</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_BINARY_VALUE:1</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Fonctionnement.Clim</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>5</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>0</Value>
</Property>
<Property Id="PROP_POLARITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_INACTIVE_TEXT" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Off</Value>
</Property>
<Property Id="PROP_ACTIVE_TEXT" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>On</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_MULTI_STATE_VALUE" Instance="0">
<Properties>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_MULTI_STATE_VALUE:0</Value>
</Property>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Mode de fonctionnement</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Mode.Fonctionnement</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>19</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>2</Value>
</Property>
<Property Id="PROP_PRIORITY_ARRAY" Tag="BACNET_APPLICATION_TAG_NULL">
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
<Value></Value>
</Property>
<Property Id="PROP_RELINQUISH_DEFAULT" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>2</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_NUMBER_OF_STATES" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>3</Value>
</Property>
<Property Id="PROP_STATE_TEXT" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Arret</Value>
<Value>Chauffage</Value>
<Value>Climatisation</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_MULTI_STATE_VALUE" Instance="1">
<Properties>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_MULTI_STATE_VALUE:1</Value>
</Property>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Niveau de Soufflage</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Niveau.soufflage</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>19</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>1</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_NUMBER_OF_STATES" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>4</Value>
</Property>
<Property Id="PROP_STATE_TEXT" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Arret</Value>
<Value>Niveau 1</Value>
<Value>Niveau 2</Value>
<Value>Maxi</Value>
</Property>
</Properties>
</Object>
</Objects>
</DeviceStorage>
代码量看着很多哈,实际上有很多都是重复的,用编辑器将代码折叠一下,结构会更清晰易懂。
可以看出来这个BACnet设备有13个对象,我们用Yabe扫描这个BACnet设备的所有对象,发现也是13个,和文件上写的保持一致。
下面我们拿其中一两个Object分析一下对象的属性。
Device对象的属性
<Object Type="OBJECT_DEVICE" Instance="64237">
<Properties>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_DEVICE:64237</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>RoomController.Simulator</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>8</Value>
</Property>
<Property Id="PROP_SYSTEM_STATUS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_VENDOR_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>F. Chaxel, Thanks to Morten Kvistgaard, MIT licence, 2015</Value>
</Property>
<Property Id="PROP_VENDOR_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>61440</Value>
</Property>
<Property Id="PROP_MODEL_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Room_FC_2014</Value>
</Property>
<Property Id="PROP_FIRMWARE_REVISION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>0.1.0</Value>
</Property>
<Property Id="PROP_APPLICATION_SOFTWARE_VERSION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>0.1.0</Value>
</Property>
<Property Id="PROP_PROTOCOL_VERSION" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>1</Value>
</Property>
<Property Id="PROP_PROTOCOL_REVISION" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>14</Value>
</Property>
<Property Id="PROP_PROTOCOL_SERVICES_SUPPORTED" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>01111111101111000011101110000000011010101</Value>
</Property>
<Property Id="PROP_PROTOCOL_OBJECT_TYPES_SUPPORTED" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000000010101010000000000000000100000000111110111111111</Value>
</Property>
<Property Id="PROP_OBJECT_LIST" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
</Property>
<Property Id="PROP_MAX_APDU_LENGTH_ACCEPTED" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>1476</Value>
</Property>
<Property Id="PROP_SEGMENTATION_SUPPORTED" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>3</Value>
</Property>
<Property Id="PROP_APDU_TIMEOUT" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>3000</Value>
</Property>
<Property Id="PROP_NUMBER_OF_APDU_RETRIES" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>3</Value>
</Property>
<Property Id="PROP_DEVICE_ADDRESS_BINDING" Tag="BACNET_APPLICATION_TAG_NULL" />
<Property Id="PROP_DATABASE_REVISION" Tag="BACNET_APPLICATION_TAG_UNSIGNED_INT">
<Value>0</Value>
</Property>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Free RoomController Simulator, F. Chaxel 2015</Value>
</Property>
<Property Id="PROP_LOCATION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>FR</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_DEVICE" Instance="64237">
这一句表明了这是一个设备对象,对象标识符的实例标号是 64237.
设备对象之间的Property就是该对象的属性。下表列举了设备对象拥有的属性,以及属性类型和相对应的属性值。
属性 | 数据类型 | 值 |
PROP_OBJECT_IDENTIFIER (标识符) | BACNET_APPLICATION_TAG_OBJECT_ID (对象ID) | OBJECT_DEVICE:64237 |
PROP_OBJECT_NAME 对象名称 | BACNET_APPLICATION_TAG_CHARACTER_STRING 字符串类型 | RoomController.Simulator |
PROP_OBJECT_TYPE 对象类型 | BACNET_APPLICATION_TAG_ENUMERATED 枚举 | 8 (代表 object_device) |
PROP_SYSTEM_STATUS 系统状态 | BACNET_APPLICATION_TAG_ENUMERATED 枚举 | 0 (Normal) |
PROP_VENDOR_NAME 设备商名 | BACNET_APPLICATION_TAG_CHARACTER_STRING 字符串 | F. Chaxel, Thanks to Morten Kvistgaard, MIT licence, 2015 |
PROP_VENDOR_IDENTIFIER 设备商标识符 | BACNET_APPLICATION_TAG_UNSIGNED_INT 无符号整数 | 61440 |
PROP_MODEL_NAME 型号名称 | BACNET_APPLICATION_TAG_CHARACTER_STRING 字符串 | Room_FC_2014 |
PROP_FIRMWARE_REVISION 固件版本 | BACNET_APPLICATION_TAG_CHARACTER_STRING 字符串 | 0.1.0 |
PROP_APPLICATION_SOFTWARE_VERSION 应用软件版本 | BACNET_APPLICATION_TAG_CHARACTER_STRING 字符串 | 0.1.0 |
PROP_PROTOCOL_VERSION 协议版本 | BACNET_APPLICATION_TAG_UNSIGNED_INT 无符号整数 | 1 |
PROP_PROTOCOL_REVISION 协议修订版本 | BACNET_APPLICATION_TAG_UNSIGNED_INT 无符号整数 | 14 |
属性太多了,这里就不一一列举完全了,一些枚举类型可以在源码BacnetBase.cs
中看到具体代表的意思.这是Yabe中扫描“设备对象”获得的属性,和xml中写的是一样的,我们后续的读写操作都是基于此。
模拟输入对象的属性
<Object Type="OBJECT_ANALOG_INPUT" Instance="0">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature Interieure</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_INPUT:0</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature.Interieure</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_REAL">
<Value>0</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_UNITS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>62</Value>
</Property>
</Properties>
</Object>
<Object Type="OBJECT_ANALOG_INPUT" Instance="0">
这一句表明了这是一个模拟输入对象,对象实例号是0. 由对象类型和实例号,可以确定一个对象。
下表列举了模拟输入对象拥有的属性,以及属性类型和相对应的属性值。
属性 | 数据类型 | 值 |
PROP_DESCRIPTION(描述) | BACNET_APPLICATION_TAG_CHARACTER_STRING (字符串) | Temperature Interieure |
PROP_EVENT_STATE 事件状态 | BACNET_APPLICATION_TAG_ENUMERATED 枚举 | 0 (normal) |
PROP_OBJECT_IDENTIFIER 对象标识符 | BACNET_APPLICATION_TAG_OBJECT_ID 对象ID | OBJECT_ANALOG_INPUT:0 |
PROP_OBJECT_NAME 对象名称 | BACNET_APPLICATION_TAG_CHARACTER_STRING 字符串 | Temperature.Interieur |
PROP_OBJECT_TYPE 对象类型 | BACNET_APPLICATION_TAG_ENUMERATED 枚举 | 0 |
PROP_OUT_OF_SERVICE 脱离服务 | BACNET_APPLICATION_TAG_BOOLEAN 布尔 | False |
PROP_PRESENT_VALUE 当前值 | BACNET_APPLICATION_TAG_REAL 浮点数 | 0 |
PROP_RELIABILITY 可靠性 | BACNET_APPLICATION_TAG_ENUMERATED 枚举 | 0 (RELIABILITY_NO_FAULT_DETECTED) |
PROP_STATUS_FLAGS 状态标志 | BACNET_APPLICATION_TAG_BIT_STRING 位字符串 | 0000 |
PROP_UNITS 单位 | BACNET_APPLICATION_TAG_ENUMERATED 枚举 | 62 (UNITS_DEGREES_CELSIUS ℃) |
小结
1 了解BACnet设备定义的18个对象,每个对象都有其特定的一组属性。
2 BACnet要求每个BACnet设备都要有一个“设备对象”,“设备对象”包含次设备和其功能信息
3 “对象标识符”,“对象名称”和“对象类型”是BACnet 设备中的每个对象必须具有的属性。