BACnet通讯协议是楼宇自动控制技术应用的数据通讯网络标准。楼宇自动控制领域在BACnet协议出现之前很长的一段时间都是各个楼宇自动控制厂商使用各自公司自行设计的私有协议。私有协议的使用使各个公司生产的产品之间无法互联。这给产品的维护和扩展带来很大的障碍。
BACnet协议是为了针对以上出现的问题,根据开放系统互联模型(OSI)(ISO7498)而提出的。开放系统互联模型采用分层结构,具有7层,解决了异构网络的互联通信。由于OSI模型所具有的功能是非常全面的,而在楼宇自控领域,我们只需要一些特定的功能,因此我们不需要完整的七层结构。因此,针对不同应用的网络协议都会在这七层的基础上进行剪裁。BACnet协议具有四层结构,而现在应用广泛的TCP/IP通讯协议也是一种具有四层结构的网络。
可见,针对不同应用的网络,对七层的OSI模型进行简化是极其必要的。因为完整的OSI模型将需要大量的软件和硬件成本,提供了大量在应用环境内不需要的功能。
BACnet协议具有四层结构,分别为:物理层,数据链路层,网络层,应用层。BACnet协议与标准OSI模型的各层对应关系如下:
放系统互联模型(OSI) |
BACnet通讯协议 |
|
应用层 |
BACnet应用层 |
|
表示层 |
||
会话层 |
||
传输层 |
||
网络层 |
BACnet网络层 |
|
数据链路层 |
LLC |
BACnet数据链路层 |
MAC |
||
物理层 |
BACnet物理层 |
BACnet协议四层结构的每层功能如下:
BACnet物理层:物理层提供了连接设备和传输数据的比特流的方式。物理层对于通讯协议来说是必不可少的。它是上层所有数据封装后产生可传输信号的层。是信号具体的产生层。
BACnet数据链路层:负责将数据组织成帧(frame)或者分组(packet),管理通信介质的访问、寻址,以及完成一些差错校正和流量控制的任务,这些都是BACnet所需要的,因此数据链路层是必不可少的。
BACnet网络层:在一个或多个网络中进行报文的路由、全局地址解析为局部地址、协调异构网络、流量控制、序列控制、差错控制以及信道复用。
BACnet应用层:应用层为应用程序提供API接口,也就是提供通信服务。BACnet应用层还包括了OSI模型里表示层、会话层和传输层中BACnet所需要的功能。BACnet协议只需要上面三层中的很少一部分功能,因此为了减少成本,将这些功能放在应用层。
一个BACnet网络示意图如下:
其中可以看到一个BACnet网络的示意图,有一些基本的概念:
1、 BACnet设备:任何可以使用BACnet协议进行通信的真实或者虚拟的设备叫BACnet设备。
2、 物理网段:BACnet设备与物理介质相连,物理介质称为物理网段。
3、 网段:一个或多个物理网段通过中继器在物理层相连,形成一个BACnet网段
4、 中继器(Repeater):工作在物理层,用于连接物理网段。因此中继器工作在物理层。
5、 网桥(Bridge):网桥用于连接两个局域网络,从而扩大局域网络的规模。由网桥连接起来的具有相同网络地址的网段集合称为网络。网桥是用于连接两个网络的,而现在普遍使用的交换机,是用于连接多个网络进行数据交换的,相当于一个扩展的网桥。网桥工作在数据链路层。
6、 路由器(Router):网桥连接起来相同地址的网段形成网络后,路由器负责将网络连接起来。路由器的特色是可以连接两个异构网络。例如有些路由器可以实现BACnet网络和TCP/IP网络的互联。路由器工作在网络层。
7、网关(Gateway):用于连接BACnet网络与非BACnet网络,网关工作在传输层以上。
其中几个主要设备工作的层如下:
中继器 Repeater |
物理层 |
网桥Bridge |
数据链路层MAC子层 |
路由器 Router |
网络层 |
网关 Gateway |
传输层以上 |
BACnet应用层
BACnet应用层的主要功能:
1、 定义“非证实服务”和“证实服务”;
2、 “分组和重组”功能(七层结构中传输层实现);
3、 检错和纠错功能(七层结构中传输层实现)。
一个应用进程包括:应用程序和应用实体,应用实体位于应用层内,属于通信协议的部分,应用程序不属于协议部分。应用程序和应用实体之间通过API进行通信。
应用层有四种原语,分别为:请求(request)、指示(indication)、响应(response)和证实(confirm)。
上面说的应用层提供两种服务:有证实服务(CONF_SERV)和无证实服务(UNCONF_SERV)。两种服务将产生两种不同的PDU。还有一些其他通信中需要的服务:分段确认服务(SEGMENT_ACK)、差错服务(ERROR)、终止服务(ABORT)。
每个设备都只有一个Dvice对象,每个设备由一个包含了一个网络编号和一个MAC地址的NASP唯一定位。NASP(Network Service Access Point)是网络层服务访问点的意思。应用层的信息形成APDU(Application Protocol Data Unit)之后,通过NASP发送出去。
下面示意图是一个有证实服务的过程:
如果发送的是请求,可以用who-is指令,可以得到I-am,它包含APDU的最大长度。然后可以根据APDU的最大长度进行分段。
关于分段
APDU包括APCI和数据块。APCI包括8位的序号(标示分段在整个报文序列中的位置)和8位的最大报文分段数(预设窗口尺寸)和一些其他信息。分段的APDU中第一个包要有确认,第一个包确认代表接收端获取到预设窗口尺寸,返回的包带有实际窗口尺寸。预设窗口尺寸是发送设备准备收到确认前准备发送的最大报文数。但并不是每一次都会传到预设窗口尺寸才会得到确认信息,接收方会在以下四种情况下发送确认报文:
1、 收到第一个分段;
2、 未确认的、有序的、数量为实际窗口尺寸的分段;
3、 乱序报文;
4、 最后一个分段。
以上讲的是APDU的产生和传输部分,而BACnet的数据部分是通过API函数产生的对象进行填充的。BACnet网络协议使用先进的面向对象技术,通过封装在APDU内的对象数据进行通讯。BACnet拥有23个对象,每个对象拥有三个属性值:Object_Identifier 、Object_Name、Object_Type。其中“设备对象”对于每个设备都是必须的,并且只能有一个。这23个对象是:
序号 |
对象名称 |
应用举例 |
01 |
Analog Input |
模拟传感器输入 |
02 |
Analog Output |
模拟控制量输出 |
03 |
Analog Value |
模拟控制设备参数 |
04 |
Binary Input |
数字传感器输入 |
05 |
Binary Output |
继电器输入 |
06 |
Binary Value |
数字控制系统参数 |
07 |
Command |
向多设备多对象写多值 |
08 |
Calendar |
事件执行日期列表 |
09 |
Schedule |
周期操作时间表 |
10 |
Event Enrollment |
描述错误状态事件 |
11 |
File |
允许访问设备的数据文件 |
12 |
Group |
提供单一操作下 |
13 |
Loop |
访问“控制环“标准化操作 |
14 |
Multi-state Input |
多状态处理程序的状态 |
15 |
Multi-state Output |
多状态处理程序的期望状态 |
16 |
Notification Class |
包含一个设备列表 |
17 |
Program |
允许设备应用程序开始和停止、装载及卸载 |
18 |
Device |
设备支持的对象和服务以及设备商和固件版本等信息 |
19 |
Life Safety Point |
生面安全监测点的信息检测 |
20 |
Life Safety Zone |
生面安全区域的信息检测 |
21 |
Multi-state Value |
模拟的多态值 |
22 |
Schedule |
语气时间的操作运行 |
23 |
Trend Log |
记录单个运行数据 |
BACnet具有35种服务,服务是操作对象的方法。这35种服务分为6类,分别为:报警与事件服务,文件访问服务,对象访问服务,远程设备管理服务、虚拟终端服务和网络安全服务。由于不是所有设备都具有所有服务,为了统一标准,把服务分为5个通用的一致性等级。每一个等级都有一个最少要实现的服务数量。
BACnet网络层的作用是检查网络拓扑结构,决定最佳路由。
与TCP/IP协议对比,TCP/IP模型被广泛的应用在各种规模的网络中。TCP/IP是一种协议簇,其中TCP协议和IP协议是协议簇中比较重要的两种协议。协议分为四层:应用层、传输层、网络层和网络接口层。
BACnet网络层原语是:N-UNITDATA.request和N-UNITDATA.indication。网络层原语中包含了APDU,也就是说应用层原语相当于一个函数的功能,将应用层给过来的数据和一些必要的参数,使用原语给到应用层,应用层将会进行封装成NPDU。
因此应用层原语是用于应用层之间的沟通,应用层原语将会把通过API传过来的信息中的对象数据封装成APDU。网络层接到APDU之后,将通过原语将APDU封装成NPDU,继续向下传输。
NPDU内的控制字段用于表示NPDU的不同类型,其中第七位用于表示NPDU是一个包含BACnet APDU的报文还是一个网络层协议报文。网络层协议报文用于网络层的控制和管理,带有报文类型域,用于标示不同的网络层协议报文类型,如Who-Is-Router-To-Network等10种报文,用于路由器的管理、维护、网络层拥塞控制、PTP链路控制和管理等作用。
整个BACnet网络的传输示意图如下:
BACnet/IP协议
BACnet网络和IP网络之间是无法通信的。因为BACnet和TCP/IP协议都是一种四层的网络结构,而BACnet的网络层和应用层与TCP/IP的应用层、传输层和网络层结构和功能都不相同,因此他们的数据帧也不同。因此不仅BACnet设备节点和TCP/IP设备节点之间无法互相识别通信包,而且广域网中的路由是无法识别BACnet数据帧的。然而TCP/IP是现在应用的极其广泛的协议,用于构建几乎所有规模的网络。而且BACnet应用系统的现场控制层,也就是服务器端一般使用TCP/IP协议,因此BACnet协议如果可以使用IP协议将会更容易设计和减少成本。并且,由于BACnet网络是一种局域网,因此在连接两个远程BACnet网络的时候,使用TCP/IP将是最佳的解决办法。
然后如果实现BACnet可以在TCP/IP网络中的传输主要解决的就是IP设备和IP路由可以识别带有BACnet数据的包,主要有两种技术:
1、 B/IP PAD技术,也叫“隧道”技术。
2、 BACnet/IP技术
隧道技术的原理为:B/IP PAD节点既具有BACnet网络地址,又有IP地址,既具有BACnet路由功能又具有解析、执行和实现用户UDP数据报的功能。因此它将BACnet数据封装进UDP包的数据部分进行传输,相当于在TCP/IP网络中为BACnet开辟了一条隧道。UDP端口号:X’BAC0。
PAD技术示意图:
BACnet/IP
BACnet/IP路由直接把BACnet数据帧封装进IP帧进行传输。定义了一个新的微协议层BVLL。层次结构如下:
由上图可以看出,BACnet/IP协议相当于只用了BACnet的应用层和网络层,将NPDU传输给BVLL(新加的层),然后BVLL的数据向下都是TCP/IP协议。传输层使用的是UDP协议,UDP协议相对TCP协议更适合此处的应用。
BVLL层的作用主要是进行BACnet广播管理,并提供想其他通讯协议的扩展机制。由于IP协议为了防止网络拥塞,不支持广播,BVLL使IP协议可以实现BACnet所需要的广播功能。
还引入了一种广播管理的新设备,用来进行广播管理,这种设备叫做BBMD。BBMD是BVLL协议的关键设备,每个IP子网中只有一个BBMD设备。用于进行外部设备的注册和广播管理,使网络内的所有BACnet设备都可以进行广播。
BBMD:1、当其他网络向本网络广播时,用于接收报文并向本网络内设备进行广播。
2、用于本网络内设备对外网络内广播时,先传输到本网的BBMD,再由BBMD发送出去。
对远程设备进行广播的时候,有两种方法,主要取决于远程路由是否具有广播功能,如果具有广播功能,使用一跳法,即直接广播方法,将数据直接发送到远程路由,由路由进行广播。第二种是二跳法,远程路由不支持广播,将报文发送到远程网络中的BBMD,由BBMD在IP子网内进行广播。
数据链路层和物理层
以上讨论的BACnet应用层和网络层,还有TCP/IP的结构都是指在数据链路层和网络层以上。TCP/IP的数据链路层和物理层包含在网络接口层(也叫链路层)里面。BACnet数据链路层和物理层有多种标准进行实现。如以太网标准、ARRCnet网络标准等,他们都定义了信号的具体传输方式,接口标准等。这里不进行讨论。
举例
通过wireshark抓包工具可以抓取网络上的数据包,我们拿出一个bacnet数据包进行举例分析:
可以从图中看到,下面部分为实际传输的数字形式的数据,而数据的不同部分代表不同的数据包,上面可以看到,整个数据包由下到上(从上层到下层)分别包括APDU、NPDU、BACnet Virtual Link Control、UDP、IP、Ethernet II。与上面分析的刚好吻合。这五层对象下面数字的五个区域,形成BACnet数据包
总结
综上所述,BACnet协议主要是定义了应用层和网络层,下面两层可以使用现有的技术实现。BACnet协议已经定义了四层中的每一层,通过这些技术就可以构建一个BACnet网络。但是,由于远程通信的要求,纯BACnet网络与服务器等沟通时会存在一些通信上的问题,因此引入了BACnet/IP网络通信技术,使BACnet数据包可以使用成熟的、应用极广的IP网络进行传输。这样不仅解决了远程通信的问题,也解决了与服务器端沟通的问题。