2、BACnet网络层基础:网络层功能与角色、BACnet网络拓扑结构(MS/TP、IP、PTP)、BACnet设备地址与网络号

各位好,欢迎来到第二章。

上一章我们聊了BACnet的总体框架,说白了就是让大家知道BACnet是个什么玩意儿,能干什么。这一章,咱们得往深里走一步,聊聊网络层。

网络层这东西,在BACnet里扮演的角色非常关键。我个人的理解是,它就像整个楼宇自控系统的“交通调度中心”。没有它,各个设备之间就没法互相找到对方,更别提交换数据了。

2.1 网络层的核心功能与角色

BACnet的网络层,它的主要任务是什么?简单来说,就三件事:路由、寻址、报文分段与重组

  • 路由:决定数据包从源设备到目标设备应该走哪条路。这就像你开车从北京到上海,导航会给你规划路线一样。
  • 寻址:确保每个设备都有一个唯一的“门牌号”,这样数据包才能准确送达。这个门牌号就是后面要讲的设备地址网络号
  • 报文分段与重组:当数据包太大,底层网络(比如MS/TP)一次传不了时,网络层负责把它切成小块,到了目的地再拼回去。

核心要点:网络层是BACnet实现异构网络互联的基石。它屏蔽了底层物理网络(如RS-485、以太网、拨号网络)的差异,让上层应用可以透明地通信。

嗯,这里要注意一点。BACnet的网络层设计得非常巧妙。它不像TCP/IP那样复杂,但足够灵活。我记得在早期的一个项目中,我们需要把一栋老楼的MS/TP网络和新楼的IP网络打通。当时就是靠着BACnet网络层的路由功能,才让新旧两套系统无缝对接的。如果当时没有这个设计,那改造起来可就费劲了。

2.2 BACnet网络拓扑结构

BACnet支持多种物理网络,最常见的三种是:MS/TPIPPTP。这三种网络各有各的脾气,咱们一个一个来看。

2.2.1 MS/TP网络(主从/令牌传递)

MS/TP,全称是Master-Slave/Token-Passing。这是BACnet在楼宇自控领域最常用的现场总线。

它基于RS-485物理层,通信速率不高(常见的是9600bps、19200bps、38400bps、76800bps),但胜在成本低、抗干扰能力强、布线简单。

它的工作方式很有意思:

  • 主站(Master):拥有令牌的设备才能主动发起通信。令牌在主站之间轮流转。
  • 从站(Slave):只能响应主站的请求,不能主动说话。

避坑指南:我曾经在一个项目中,因为MS/TP网络上的主站数量太多(超过128个),导致令牌轮询一圈的时间过长,整个网络的响应速度变得非常慢。后来我建议客户把一些不重要的设备设为从站,才解决了问题。所以,设计MS/TP网络时,主站数量一定要控制好。

MS/TP的报文格式,我简单列一下,大家有个印象就行:

| 前导码 | 帧类型 | 目标地址 | 源地址 | 长度 | 数据 | CRC |
|--------|--------|----------|--------|------|------|-----|
| 2字节  | 1字节  | 1字节    | 1字节  | 1字节| N字节 | 2字节|

你看,地址只有1个字节,所以MS/TP网络上的设备地址范围是0-255。其中0是广播地址,1-127是主站地址,128-255是从站地址。这个设计很经典,我到现在都觉得非常合理。

2.2.2 IP网络(BACnet/IP)

BACnet/IP,就是把BACnet报文封装在UDP/IP包里,在以太网上传输。这是目前新建项目的主流选择。

为什么用UDP而不是TCP?因为BACnet应用层自己处理了可靠性和重传机制,不需要TCP那么重的协议栈。说白了,就是轻装上阵,效率更高。

BACnet/IP网络里,有几个关键概念:

  • BBMD(BACnet广播管理设备):负责在不同IP子网之间转发广播报文。没有它,跨网段的BACnet设备就找不到彼此。
  • FD(外部设备):非BACnet/IP设备,通过路由器接入IP网络。
  • NPDU(网络层协议数据单元):BACnet网络层的报文格式,它会被封装在UDP数据报里。

个人经验:我建议大家在设计BACnet/IP网络时,一定要规划好BBMD的位置。如果网络规模较大,可以考虑使用多个BBMD来分担负载。我曾经见过一个项目,因为只有一个BBMD,结果整个网络的广播风暴把交换机都搞瘫痪了。

2.2.3 PTP网络(点对点)

PTP,全称是Point-to-Point。它主要用于远程连接,比如通过调制解调器(Modem)拨号连接两个BACnet网络。

现在用得越来越少了,毕竟互联网这么发达。但在一些偏远地区或者老旧系统中,你还能见到它的身影。

PTP的工作方式很简单:两个BACnet路由器通过串口(RS-232)或Modem建立一条点对点的连接,然后在这条链路上传输BACnet报文。它的速率很低,通常只有9600bps,所以只适合传输少量数据。

三种网络的对比,我整理了一个表格,方便大家对照:

特性 MS/TP IP PTP
物理层 RS-485 以太网 RS-232 / Modem
通信速率 9.6k - 115.2k bps 10/100/1000 Mbps ≤ 56k bps
最大设备数 255(推荐≤128) 几乎无限制 2(点对点)
典型应用 现场控制器、传感器 工作站、服务器、大型控制器 远程监控、拨号连接
成本 中高 低(但通信费高)

2.3 BACnet设备地址与网络号

好了,终于到了最核心的部分——地址。BACnet的寻址体系,说白了就是两个东西:网络号MAC地址

  • 网络号(Network Number):标识一个独立的BACnet网络。它是一个16位的整数,范围是1-65535。每个BACnet网络(比如一个MS/TP网段、一个IP子网)都必须有一个唯一的网络号。
  • MAC地址(Media Access Control Address):标识一个网络内的具体设备。对于MS/TP网络,MAC地址就是那个1字节的设备地址(0-255)。对于IP网络,MAC地址就是IP地址+UDP端口号(默认是0xBAC0,即47808)。

你想想看,一个BACnet设备要唯一标识,就必须是“网络号 + MAC地址”的组合。这就像你家的地址:网络号是“北京市朝阳区”,MAC地址是“XX小区XX号楼XX单元XX室”。两者缺一不可。

重要提醒:网络号在整个BACnet互联网中必须是唯一的。如果两个不同的网络使用了相同的网络号,路由器就会发懵,不知道把报文往哪儿送。我曾经在调试一个大型园区项目时,就因为两个子系统的网络号冲突,导致数据乱窜,查了整整两天才找到原因。所以,规划阶段一定要把网络号分配好,并记录下来。

另外,BACnet还定义了一个特殊的网络号——0。网络号0表示“本地网络”,用于设备在同一个物理网段内直接通信,不需要经过路由器。这个设计很实用,简化了同一网段内的通信流程。

最后,我再说说设备对象实例号(Device Object Instance Number)。这个号虽然属于应用层,但经常和网络层地址混淆。设备实例号是一个32位的整数,在整个BACnet互联网中唯一标识一个设备。它和网络层地址的关系是:网络层地址用于路由,设备实例号用于应用层识别。你可以把网络层地址想象成快递的“配送地址”,而设备实例号就是收件人的“身份证号”。

好了,这一章的内容就到这里。网络层是BACnet的骨架,理解了它,后面的内容就会顺畅很多。下一章,我们聊聊BACnet的应用层,看看数据到底是怎么被理解和处理的。