BACnet 楼宇自控协议科普
依据 ANSI/ASHRAE Standard 135(ISO 16484-5)公开标准整理,具体型号支持以厂商手册为准。
从一次”空调点位对不上”说起
新馆调试到最后,弱电班组把楼宇空调、新风、照明全说好接进你的中控大屏统一看。设备清单交上来一堆,你按厂商给的点表往中控里填,结果一半点位读出来是空的、另一半读到的温度值明显不对——20 度的会议室屏上显示 2 度。你先怀疑传感器坏了,让人爬上去查,白折腾。真正的病根往往是三件事:设备的 BACnet/IP 端口没跟你对齐,跨网段的广播被路由器拦在门外,或者你读的对象实例号跟对方设备手册里的编号根本不是一码事。BACnet 这协议本身不难,难在它把”设备-对象-属性”分了三层,每一层对不上都读不出数。这篇把它讲透,让你下次对空调点位能一次对齐。
BACnet 是什么
BACnet(Building Automation and Control networks)是一种面向楼宇自动化与控制网络的数据通信协议,由美国采暖、制冷与空调工程师学会(ASHRAE)制定,标准号为 ANSI/ASHRAE Standard 135,并被采纳为国际标准 ISO 16484-5。它解决的是一个很实际的痛点:一栋楼里空调是一家的、照明是另一家的、门禁又是第三家的,各说各话,谁也管不了谁。BACnet 定了一套公共语言,让暖通空调(HVAC)、照明、门禁、消防等不同厂商的设备能互通互操作,上层用一个平台就能统一监控。它遵循 OSI 参考模型分层设计,在展厅运维里的角色,就是把空调机组、新风、照明、配电这些”楼宇底座”设备纳进统一监控与联动,让你不用为每家设备单独学一套私有协议。
关键参数
| 项目 | 值 |
|---|---|
| 标准号 | ANSI/ASHRAE Standard 135 / ISO 16484-5 |
| BACnet/IP 传输 | UDP(不使用 TCP) |
| 默认端口 | UDP 47808(十六进制 0xBAC0) |
| 可配端口范围 | 47808–47823、49152–65535 |
| 链路封装 | BVLL(BACnet 虚拟链路层)over UDP/IP |
| 数据模型 | 对象(Object)+ 属性(Property)+ 服务(Service) |
| 标准对象类型 | 60+ 种(135-2016 为 60 种,135-2020 为 62 种) |
| 设备寻址 | Device Object 的实例号(Instance Number),全网唯一 |
| 数据链路层 | BACnet/IP、MS/TP(RS-485 令牌总线)、Ethernet、ARCNET、PTP(RS-232)等 |
| 跨网段 | BBMD(BACnet 广播管理设备)转发广播 |
工作原理:设备-对象-属性三层怎么套
BACnet 的核心是一套三层抽象,理解了这三层,读点位就不再是玄学。
- 对象(Object):一台设备内部被拆成若干对象,每个对象代表一个可被监控的”东西”。常见的有模拟输入(Analog Input,比如一个温度传感器)、模拟输出(Analog Output,比如阀门开度)、二进制输入 / 输出(Binary Input/Output,比如开关状态、启停命令)、还有一个特殊的**设备对象(Device Object)**代表设备本身、承载它的实例号和身份信息。每个对象有类型和实例号,比如”Analog Input 3”就是这台设备第 3 个模拟输入。
- 属性(Property):对象里的具体字段。最常读的是
Present_Value(当前值,温度点上就是当前温度),此外还有Units(单位,摄氏度还是华氏度)、Status_Flags(状态标志,是否报警 / 故障 / 越限)、Object_Name(对象名)等。你要读一个温度,本质是读”某设备 → Analog Input X → Present_Value”这一条路径。 - 服务(Service):对对象属性做操作的动作。
ReadProperty读一个属性,ReadPropertyMultiple一次读多个(省交互);WriteProperty写一个属性(比如给阀门写开度);COV(Change of Value,值变化订阅)让设备在值变了才主动推给你,不用你一直轮询。
广播范围分三档:本地广播(同一 BACnet/IP 子网内)、远程广播(指定网络号的其他网段)、全局广播(所有网络)。设备发现(Who-Is / I-Am)就靠广播完成——你喊一声 Who-Is,网内设备各自回 I-Am 报上自己的实例号。这也埋下一个大坑:广播默认不跨路由,跨网段的设备你喊了也听不见,得靠 BBMD 帮你把广播转过去。
展厅实战对接:BACnet 怎么进中控
展厅里 BACnet 很少单独存在,它是被上层中控系统收编的一层。典型链路是:楼宇设备(空调 / 新风 / 照明配电)→ BACnet/IP 网络 → 中控主机(作为 BACnet 客户端去读写点位)→ 大屏统一呈现与联动。落地时几个抓手:
- 暖通监控:把空调机组、新风、各区域温湿度的
Present_Value读进中控,在大屏上集中查看,讲解员或值班室远程调温、启停机组。展厅人流大、温湿度直接影响观展体验,这块最有价值。 - 照明与配电管理:楼宇公共照明、配电回路接进 BACnet 后,中控可做状态监控与定时控制——早上按开馆时间自动开、晚上闭馆自动关,跟展项灯光场景配合。
- 变化订阅(COV)省带宽:几百个点位若全靠中控每秒轮询一遍,网络和设备都吃不消。对关键点位改用 COV 订阅,值一变才上报,既及时又省流量。稳态下点位不动,就基本没流量。
- 与展项中控分工:楼宇设备(冷暖、公共照明)交给 BACnet 这条线,展项多媒体(大屏、播放、灯光秀)走各自的控制协议,两条线在 SoftControl 展厅中控 里汇成一张总览图。空调故障和展项异常在同一块屏上告警,值班一眼看全。
这套”把底层设备封装成可读写点位、再由中控统一编排”的思路,跟 Modbus 设备控制 那边控窗帘门禁是一脉相承的——中控帮你把各家协议的差异屏蔽掉,对外只暴露”点位”和”场景”这两层。
与 Modbus 怎么选:楼宇语义是分水岭
现场经常纠结楼宇设备该走 BACnet 还是 Modbus,判断标准其实很清楚。
Modbus 是一个极简的寄存器读写协议:地址加值,轻量、好实现、几乎所有工控设备都支持,但它语义贫乏——一个寄存器里存的是温度还是报警状态、单位是什么、越没越限,协议本身不告诉你,全靠人拿点表去对。适合点位不多、逻辑简单的场合。
BACnet 用对象-属性-服务模型,自带一整套楼宇语义:报警、调度(Schedule 对象做定时)、趋势记录(Trend Log 对象存历史曲线)、COV 订阅,都是标准里定义好的。你读到一个点,连带知道它的单位、状态、是否报警。设备一多、逻辑一复杂,这套语义省下的对接功夫非常可观。所以经验法则是:几个简单点位、图省事,Modbus 够用;整栋楼几百上千点位要成体系管,BACnet 更值。 两者也常并存,中控这层把它们统一收口就行。
故障排查表
| 现象 | 可能原因 | 排查 / 解决 |
|---|---|---|
| 中控完全发现不到设备 | UDP 47808 端口不通 / 被防火墙拦 / 设备未启 BACnet/IP | 确认设备端口(默认 0xBAC0),放行 UDP 47808,抓包看 Who-Is 有没有回 I-Am |
| 同网段能发现、跨网段发现不到 | 广播不跨路由,缺 BBMD | 在各网段部署 / 配置 BBMD 转发广播,或改用外部设备表 |
| 读得到设备但点位是空值 | 对象类型 / 实例号跟厂商点表对不上 | 拿厂商 BACnet 点表核对 Object 类型与 Instance,别猜编号 |
| 温度等数值明显不对(如显示 2 度) | 单位 / 量程换算错,或读错了对象 | 核对 Units 属性与工程量程,确认读的是目标 Analog Input |
| 点位刷新慢、网络很卡 | 全靠高频轮询几百个点 | 关键点改 COV 订阅,非关键点降低轮询频率 |
| 同一子网多组设备端口冲突 | 都占默认 47808 | 部分设备改到 47808–47823 或 49152–65535 内其他端口 |
| 写命令不生效 | 属性只读 / 优先级数组被更高优先级占用 | 确认属性可写,检查 BACnet 优先级数组(Priority Array)占用情况 |
排查口诀:先看端口通不通,再看跨不跨网段,然后核对象实例号,最后才怀疑设备本身。 大半的 BACnet 现场毛病都死在前三步。
进阶边界:MS/TP、BBMD 与安全
BACnet 不是只能走以太网。 除 BACnet/IP 外,常见还有 MS/TP(Master-Slave/Token-Passing,基于 RS-485 的令牌总线,一根双绞线串一圈设备,适合布线成本敏感、点位分散的现场)、Ethernet、以及 RS-232 点对点(PTP)。老改造项目里 MS/TP 很常见,它跟 BACnet/IP 之间靠**路由器(Router)**互通,规划时要留意 MS/TP 段的波特率和 MAC 地址不能冲突。
BBMD 是跨网段的关键。 大型场馆楼宇设备往往分在多个 VLAN,BACnet 的发现和部分服务依赖广播,而广播默认不跨路由。这时在每个网段部署一个 BBMD(BACnet Broadcast Management Device),它们之间用一张 BDT(广播分发表)互相登记,把本网段的广播打包成单播转到对端再展开,广播才能穿透网段。跨网段发现不到设备,八成就是 BBMD 没配或配错。
安全是短板,别裸奔。 传统 BACnet/IP 设计年代早,报文基本明文、缺乏强身份认证,直接暴露在办公 / 公网上风险不小。工程上的通行做法是把楼宇自控网划成独立 VLAN、跟办公网和互联网物理或逻辑隔离,中控主机作为唯一出入口。新标准(BACnet/SC,Secure Connect,走 WebSocket + TLS)补上了传输加密,新项目条件允许可优先选支持 SC 的设备。
动手检查清单
对接一段 BACnet 设备前后,对着过一遍:
- 确认设备 BACnet/IP 端口(默认 UDP 47808 / 0xBAC0),防火墙已放行
- 跨网段场景已部署 BBMD 并配好广播分发表
- 拿到厂商 BACnet 点表,对象类型与实例号逐一核对、别猜
- 数值点位的
Units与工程量程已换算校验(避免 2 度这种错值) - 关键高频点位改用 COV 订阅,非关键点降低轮询频率
- 同网段多设备端口无冲突,MS/TP 段波特率 / MAC 无冲突
- 楼宇自控网已划独立 VLAN 隔离,中控主机为唯一出入口
小结
BACnet 本身的骨架很清楚:设备-对象-属性三层抽象、BACnet/IP 走 UDP 47808、对象带 Present_Value 等属性、服务里 ReadProperty 和 COV 是主力、跨网段靠 BBMD 转广播。真正决定现场顺不顺的从来不是协议条文,而是那几条纪律——端口对齐、跨网段配 BBMD、实例号照点表核、量程别算错、安全网段隔离。把楼宇设备读成一个个规范点位,再由中控封装成监控与场景,冷暖照明才真正跟展厅运营连成一体。
延伸阅读:了解设备控制常用的 Modbus 协议、MS/TP 底层依赖的 RS-232/RS-485 串口,或查看全部设备协议速查。
需要把楼宇设备监控与展项中控统一管理?了解 SoftControl 展厅中控,查看解决方案与落地案例,或直接联系我们聊聊你的定制需求。