3、BACnet协议基础:BACnet对象模型、服务类型、网络层功能、与Modbus的区别
BACnet(Building Automation and Control Networks)是专为楼宇自动化和控制系统设计的通信协议,由ASHRAE标准135制定。在BMS楼宇集成与报警联动调试中,BACnet是核心的“通用语言”,负责打通不同厂家的空调、照明、消防、电梯等子系统。本节将深入剖析BACnet的对象模型、服务类型、网络层功能,并与工业现场常用的Modbus协议进行对比,帮助你在调试现场快速识别协议差异并正确配置。
3.1 BACnet对象模型
BACnet采用面向对象的方法来描述楼宇设备中的物理点和逻辑点。每个设备都被抽象为一系列对象(Object),每个对象包含若干属性(Property)。调试时,你通过读写对象的属性来实现监控与控制。
3.1.1 核心对象类型
BACnet标准定义了超过60种标准对象类型,调试中最常遇到的核心对象如下表所示:
| 对象类型 | 对象标识符 | 典型用途 | 关键属性示例 |
|---|---|---|---|
| Analog Input (AI) | 0 | 模拟量输入,如温度传感器、压力变送器 | Present_Value, Units, High_Limit, Low_Limit |
| Analog Output (AO) | 1 | 模拟量输出,如阀门开度指令、变频器频率设定 | Present_Value, Units, Priority_Array |
| Analog Value (AV) | 2 | 模拟量数值,如设定点、PID参数 | Present_Value, Units, COV_Increment |
| Binary Input (BI) | 3 | 数字量输入,如风机运行状态、手自动状态 | Present_Value, Polarity, Active_Text, Inactive_Text |
| Binary Output (BO) | 4 | 数字量输出,如启停命令、开关控制 | Present_Value, Priority_Array, Inactive_Text, Active_Text |
| Binary Value (BV) | 5 | 数字量值,如报警标志、模式选择 | Present_Value, Active_Text, Inactive_Text |
| Device | 8 | 描述BACnet设备本身,每个设备只有一个 | Object_Name, Vendor_Name, Firmware_Revision, Services_Supported |
| Notification Class | 15 | 报警与事件通知的分组与路由 | Notification_Class, Priority, Recipient_List |
3.1.2 对象模型结构图
下图展示了一个典型BACnet设备(如AHU控制器)内部的对象模型结构,以及BMS工作站如何通过对象属性进行数据交互:
3.2 BACnet服务类型
BACnet服务是设备之间通信的“指令集”。BMS集成调试中,你主要使用以下五类服务:
- 报警与事件服务(Alarm & Event Services):用于监测对象值的变化并触发报警。核心服务包括:
SubscribeCOV:订阅对象值变化通知,减少轮询流量。AcknowledgeAlarm:确认报警,清除报警状态。GetAlarmSummary:获取当前未确认的报警列表。
- 对象访问服务(Object Access Services):读写对象属性的基础服务。
ReadProperty/ReadPropertyMultiple:读取单个或多个属性。WriteProperty/WritePropertyMultiple:写入单个或多个属性。
- 设备管理服务(Device Management Services):用于设备发现、时间同步、备份等。
Who-Is/I-Am:设备发现广播,调试时用于扫描网络设备。TimeSynchronization:同步所有BACnet设备的时钟,确保报警时间戳一致。DeviceCommunicationControl:远程禁用/启用设备通信,用于故障隔离。
- 文件访问服务(File Access Services):用于上传/下载固件、配置文件和趋势日志。
- 虚拟终端服务(Virtual Terminal Services):提供远程命令行访问,用于底层调试。
3.3 BACnet网络层功能
BACnet网络层负责在不同物理网络(如BACnet MS/TP、BACnet/IP、BACnet PTP)之间路由报文,实现跨网段通信。在大型厂区BMS集成中,网络层配置是调试的难点。
3.3.1 网络层核心功能
| 功能 | 说明 | 调试场景 |
|---|---|---|
| 路由(Routing) | 在不同BACnet网络之间转发NPDU(网络层协议数据单元) | 厂区AHU控制器在MS/TP网段,BMS服务器在IP网段,需配置BACnet路由器 |
| 网络号管理 | 每个BACnet网络有唯一的Network Number(1-65535) | 调试时需确认路由器的网络号配置,避免网络号冲突导致报文丢弃 |
| 报文分段与重组 | 当报文超过底层网络MTU时,网络层负责分段传输 | 传输大型配置文件或趋势日志时,需检查分段是否完整 |
| 地址发现 | 通过Who-Is/Router-Query发现远程网络中的设备 | 跨网段调试时,使用Who-Is广播无法穿透路由器,需使用点对点查询 |
| 拥塞控制 | 通过Hop Count(跳数)限制报文传播范围,防止广播风暴 | 默认跳数为4,大型网络需根据拓扑调整 |
3.3.2 网络层报文结构
BACnet网络层在APDU(应用层数据)前添加NPDU头部,典型结构如下:
NPDU头部(4-6字节):
Byte 0: 版本号(0x01)
Byte 1: 控制标志(bit0: 是否包含目标地址;bit1: 是否包含源地址;bit2: 是否分段)
Byte 2-3: 目标网络号(可选)
Byte 4-5: 目标MAC地址(可选)
Byte 6-7: 源网络号(可选)
Byte 8-9: 源MAC地址(可选)
Byte 10: Hop Count(可选,默认0x40)
APDU(应用层数据):
BACnet服务请求/响应报文
3.4 BACnet与Modbus的区别
Modbus是工业自动化领域最常用的串行通信协议,在厂务设备(如电表、变频器、PLC)中广泛存在。BMS集成调试中,经常需要同时处理BACnet和Modbus设备。下表从多个维度对比两者的核心差异:
| 对比维度 | BACnet | Modbus |
|---|---|---|
| 标准化组织 | ASHRAE(美国采暖、制冷与空调工程师学会) | Modicon(现施耐德电气),后成为工业标准 |
| 应用领域 | 楼宇自动化(HVAC、照明、消防、电梯) | 工业自动化(PLC、变频器、传感器、仪表) |
| 数据模型 | 面向对象:对象+属性,语义丰富(如温度、状态、报警) | 面向寄存器:线圈(bit)、保持寄存器(16bit)、输入寄存器(16bit) |
| 寻址方式 | 设备实例号(0-4194303)+ 对象类型 + 对象实例号 + 属性ID | 设备地址(1-247)+ 功能码 + 寄存器地址(0-65535) |
| 通信方式 | 对等通信(Peer-to-Peer),任何设备均可发起请求 | 主从通信(Master-Slave),只有主站能发起请求 |
| 服务类型 | 丰富:读/写/报警/事件/文件/设备管理/时间同步 | 简单:读线圈、写线圈、读寄存器、写寄存器 |
| 物理层 | RS-485 (MS/TP)、Ethernet (IP)、ARCnet、PTP | RS-232、RS-485、TCP/IP |
| 报文大小 | 最大可达1476字节(IP网络),支持分段 | 最大256字节(RTU模式),不支持分段 |
| 互操作性 | 强:通过BIBB(BACnet Interoperability Building Blocks)定义设备功能 | 弱:需双方约定寄存器地址映射表,无标准化语义 |
| 调试工具 | BACnet Explorer、Wireshark(BACnet解析器)、BACnet测试仪 | ModScan、Modbus Poll、串口调试助手 |
3.4.1 协议选择决策流程
在厂务设备调试中,面对不同子系统,可参考以下决策流程选择协议:
3.4.2 调试中的协议转换要点
当BMS网关需要同时对接BACnet和Modbus设备时,需注意以下转换规则:
- 地址映射:Modbus寄存器地址(如40001)需映射为BACnet对象(如AI:1)。建议在网关配置表中明确记录映射关系,避免地址偏移错误。
- 数据类型转换:Modbus的16位整数需根据BACnet对象类型转换为32位浮点或枚举值。例如,Modbus寄存器中的温度值(放大10倍)需在网关中除以10后写入BACnet的Present_Value。
- 报警联动:Modbus设备通常通过状态字(bit位)表示报警,而BACnet使用Notification Class对象。网关需将Modbus状态字解析为BACnet事件,并触发相应的报警通知。
- 通信速率:Modbus RTU通常为9600/19200 bps,BACnet MS/TP为38400/76800 bps。网关需分别配置串口参数,避免波特率不匹配导致通信失败。