BACnet网络讲义(DOC)

更新时间:2024-04-26 17:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 BACnet协议概述

本章介绍BACnet协议的产生及协议模型,讨论BACnet网络的体系结构、拓扑结构、协议栈以及数据流。

§1.1 BACnet协议模型

1.1.1 BACnet简介

BACnet(AData Communication Protocol for Building Automation and Control Network)是一种为楼宇自动控制网络所制定的数据通信协议,它由美国冷暖空调工程师协会组织的标准项目委员会135P(Standard Project Committee: SPC 135P)于1995年6月制定。BACnet标准产生的背景是用户对楼宇自动控制设备互操作性(Interoperability)的广泛要求,即将不同厂家的设备组成一个一致的自控系统。BACnet实现楼宇自控设备的互操作性的思想是这样的,一般楼宇自控设备从功能上讲分为两部分,一部分专门处理设备的控制功能,另一部分专门处理设备的数据通信功能,不同厂商生产的设备使用各自专门的数据通信的方式,所以不同厂商的设备之间没有很好的互操作性。BACnet就是要建立一种统一的数据通信的标准,用于设 备的 通 信 部 分,从而使得按这种标准生产的设备,都可以进行通信,实现互操作性。BACnet标准只是规定了楼宇自控设备之间要进行?对话?所必须遵守的规则,并不涉及如何实现这些规则,各厂商可以用不断进步的技术来开发,从而使得整个领域的技术不断进步。

1.1.2 BACnet协议模型

SPC征集了各方面的意见,同时参考了国际上各种现已成文的或是事实上的数据通信标准,讨论得出了一个具有以下特性的网络协议模型:

(1)所有的网络设备,除了主从/令牌传递式从属机(MS/TP slaves : master-slave/token-passing slaves)以外,都是对等的(Peer)。当然某些同等设备可能比其他具有更多的特权(Privilege)和职责(Responsibility)。

(2)每一个网络设备都称之为是一个?对象?(Object)的实体(entity),这是一个具有网络访问特征的集合模型。每个对象又用一些?属性?(Property)来描述,这些属性

表示了设备的硬件、软件以及操作的各个方面。在不需要了解设备内部设计或配置细节的情况下,对象提供了识别和访问设备信息的方法。尽管该标准规定了广泛的应用对象的类型以及它们的属性,但是一旦需要,利用开发工具仍可以自由地增加新的对象类型。

(3)通信功能是通过读写某些对象的属性,以及利用其他协议提供的?服务?(Service)来完成的。尽管该标准规定了一套详尽的服务,但是一旦需要,该标准的机制也同样允许利用开发工具增加新的服务。

(4)设备的完善性(Sophistication),即实现特定服务请求或理解特定对象类型种类的能力,是由设备的?一致性类别?(Conformance Class)所反映的。每一种类别定义了一个包括服务、对象、属性的最小集合,声明为某一类别的设备必须支持其相应的集合。

(5)由于该标准遵循了ISO的?分层?通信体系结构的概念,因此使用不同的网络访问方法和物理介质可以交换相同的报文。这样可以根据传输速度和吞吐量的要求,采用相宜的开销来配置BACnet网络。

(6)该标准是为暖气、通风、空调、制冷控制设备所设计的,同时它也为其他楼宇控制系统的集成提供了基本原则,例如照明、保安、消防系统等。虽然这些扩展超出了该标准的范围,但实现起来却简单明了。并且,标准中定义的许多对象和服务也可以不加修改地被应用。当然,一旦这些其他类型的楼宇控制功能需要,也可以简单方便地定义新的对象和服务。

(7)该标准的目的是为暖气、通风、空调、制冷控制设备和其它楼宇自控设备的监控定义数据通信的服务和协议。除此之外,标准还定义了抽象的、面向对象的表示法,用来描述这些设备间的信息通信,以便于在楼宇中使用数字控制技术。所有的通信协议都是一个解决各种信息交换问题的方案的集合,并且随着时间的推移和技术的进步而不断改变,BACnet网络同样也不例外。

§1.2 BACnet协议的体系结构

国际标准化组织在制定计算机网络通讯协议标准时定义了一个模型,称为开放式系统互联参考模型(OSI模型),模型的目的是解决计算机与计算机之间普遍的通信问题,并将这个复杂的问题分解成7个小的、易解决的子问题,每个子问题只与某些通信功能相关联,如图1-1所示。这样每个子问题便形成了协议体系结构中的一?层?。任何两个遵循该模型及有关标准的设备或系统,都可以实现互连和互操作。

SPC制定BACnet标准时,确定BACnet作为一种开放性计算机局域网协议,它仍然采用OSI模型的?分层?通信体系结构的概念。在确定分层的层数时,考虑了下列两个因素:

第一,OSI模型的实现需要很高的费用,实际上在绝大部分楼宇自控系统应用中也并不需要这么多的层次。但是从OSI的功能性方面考虑,经过简化后,OSI模型仍然是设计楼宇自控协议的一个很好参考,如果只包含OSI模型中被选择的层次,其它各层则去掉,这样减少了报文长度,降低了通信处理开销,同时也会节约楼宇自控工业的生产成本。

第二,如果能够充分利用现有的、易用的、广泛使用的局域网技术,如Ethernet、ARCNET和LonTalk,不但可以降低成本,同时也有利于性能的提高。由此,SPC确定BACnet标准协议体系结构为一个包含四个层次的分层体系结构,这四个层次相对于OSI模型中的物理层、数据链路层、网络层和应用层,如图1-2所示。BACnet标准定义了自己的应用层和网络层,对于其数据链路层和物理层,提供了以下五种选择方案:

第一种选择是ISO 8802-2类型1定义的逻辑链路控制(LLC)协议,加上ISO 8802-3介质访问控制(MAC)协议和物理层协议。ISO 8802-2类型1提供了无连接不确认的服务,ISO 8802-3则是著名的以太网协议的国际标准。

第二种选择是ISO 8802-2类型1定义的逻辑链路控制(LLC)协议,加上ARCNET(ATA/ANSI 878.1)。

第三种选择是主从/令牌传递(MS/TP)协议加上EIA-485协议。MS/TP协议是专门针对楼宇自控设备设计的,它通过控制EIA-485的物理层,向网络层提供接口。

第四种选择是点对点(PTP)协议加上EIA-232协议,为拨号串行异步通信提供了通信机制。 第五种选择是LonTalk协议。

这些选择都支持主/从MAC、确定性令牌传递MAC、高速争用MAC以及拨号访问。拓扑结构上,支持星型和总线型拓扑;物理介质上,支持双绞线、同轴电缆、光缆。

以下详细讨论BACnet选择一个四层体系结构的原因。首先仔细考虑BACnet网络的独特特征。BACnet的特征主要有以下两点:

(1) BACnet网络是一种局域网。即使在某些应用中,楼宇中设备间远距离的通信必不可少时,这一点仍然是不变的。这种远距离的通信功能,是由电信网来实现。通信过程中要解决的路由、中继、可靠传输等问题,都由电信网来处理。在此电信网可看成是BACnet网络外部的部分。

(2) BACnet设备是静态的,即在空间上,它们不会经常被移来移去。在要完成的功能上,从某种意义上说也是不变的,即不会今天生产的设备的功能是这样,明天就完全不同了。

在充分了解BACnet网络的特征后,就可讨论OSI模型的各层在BACnet网络中的适用性了。

OSI模型的物理层提供了设备间的物理连接,以及传输载波信号的方式。显然在BACnet协议中,物理层是必不可少的。

OSI模型的数据链路层,负责将数据组织成帧(Frame)或分组(Packet)、管理通讯介质的访问、寻址(Address),以及完成一些错误校正(Error Recovery)和流量控制。这些都是BACnet协议所需要的,因此数据链路层也是必不可少的。

OSI网络层的功能,包括将全局地址解析为局部地址,在一个或多个网络中进行报文的路由,协调不同类型网络的差异(如不同网络所允许的最大报文长度),序列控制,流量控制,差错控制,以及多路复用。由于BACnet网络的拓扑特点,在各个设备之间只存在一条逻辑通路(参见图3),这样便不需要最优路由的算法。其次,BACnet网络是由中继器或网桥互联起来的一个或多个网段所组成的网络,它具有单一的局部地址空间。在这样一种单一网络中,许多OSI网络层的功能也变得多余,或者与数据链路层相重复。当然在某些BACnet网络系统中,网络层也可能是必不可少的。例如,在一个BACnet的网际网(internet)中,当两个或多个网络使用了不同的MAC层时,便需要区别局部地址和全局地址,这样才能将报文路由到正确的网络上去。在BACnet

协议中,通过定义了一个包含必要的寻径和控制信息的网络层头部,来完成这种简化了的网络层功能。

传输层主要是负责提供可靠的端到端的报文传输、报文分段、序列控制、流量控制,以及差错校正。传输层的许多功能与数据链路层相似,只是在作用范围上有所不同。传输层提供的是端到端的服务,而数据链路层则提供的是单一网络上点到点的服务。由于BACnet支持多种网络的配置,因此协议必须提供传输层端到端的服务。在BACnet网络中要提供三个方面的传输层的功能,第一是可靠的端到端传输和差错校正功能,第二是报文分段和端到端的流量控制,第三是实现报文的正确重组,序列控制。由于BACnet是建立在无连接的通信模型基础上的,因此所需的服务大大减少,并且可以被高层来实现,所以,传输层的这些功能可以通过BACnet应用层来实现,这样,在BACnet协议体系中不单独设置传输层,相应的功能放在应用层中完成,从而节省了通信开销。

会话层的功能是在通信双方之间建立和管理长时间对话。包括建立同步标志点,用来在出错时回复到前一个标志点,以避免对话重新开始。但在一个BACnet网络中,绝大部分的通信都是很简短的,比如读写一个或一些值,通知某个设备某个警报或事件,或者更改某个设定值。当然长时间的信息交换偶然也会发生的,比如上载或下载某个设备。由于绝大部分事务处理都是简短的,会话层的服务极少用到,再考虑到带来的开销,因此BACnet标准中不包括这层。

表示层为通信双方提供了屏蔽下层传送语法的服务。这种传送语法是用来将应用层中抽象的用户数据表示,变成适合下层传输的字节序列。但当只存在一种传送语法时,表示层的功能便减少到对应用程序的数据进行编码。由于在BACnet在应用层中定义了一个固定的编码方案,因此一个独立的表示层也变得不再需要。

协议的应用层为应用程序提供了完成各自功能所需的通信服务。在此基础上,应用程序可以监控HVAC&R和其它楼宇自控系统。显然应用层是本协议所必需的。 从以上讨论中,可以得到以下几点:

1. 实现一个完全的OSI七层体系结构需要大量的资源和开销,因此它对于目前的楼宇自控系统是不适用的。

2. 根据OSI模型,采用现有的计算机网络技术将会带来以下好处:节约成本,便于与其它计算机网络系统集成。

3. 根据楼宇自控系统的环境及要求,可以通过去除OSI某些层的功能来简化OSI模型。

4. 由物理层、数据链路层、网络层和应用层组成的一个简化体系结构,是当今楼宇自控系统的最佳解决方案。

§1.3 BAC网络的拓扑结构

为了应用的灵活性,BACnet并没有严格规定网络的拓扑结构。BACnet设备可以通过专线或拨号异步串行线,与四种局域网之一进行物理相连。而这些网络可以通过BACnet路由器或一对半路由器进一步互联。

在BACnet网络中,定义了如下这样一些拓扑结构:

1. 物理网段(Physical Segment):直接连接一些BACnet设备的一段物理介质。 2. 网段(Segment):多个物理网段通过?中继器?在物理层连接,所形成的网络段。 3. 网络(Network):多个BACnet网段通过?网桥?互连而成,每个BACnet网络都形成一个单一的MAC地址域。这些在物理层和数据链路层上连接各个网段的设备,可以利用MAC地址实现报文的过滤。

4. 网际网(Internetwork):将使用不同LAN技术的多个网络,用BACnet?路由器?互联起来,便形成了一个BACnet?网际网?。在一个BACnet网际网中,任意两个节点之间恰好存在着一条报文通路。这些概念如图1-3所示。

§1.4 BACnet的协议栈和数据流

在BACnet中,两个对等应用进程间的信息交换,依然按照OSI技术报告中关于ISO的服务惯例(ISO TR 8509),被表示成抽象的服务原语的交换。BACnet定义了四种服务原语:请求、指示、响应和证实原语,用来传递某些特定的服务参数。而包含这些原语的信息,又是由BACnet标准中定义的各种协议数据单元(PDU:Protocol Data Unit)来传递的。 当应用程序需要同远地的应用进程通讯时,它通过调用API访问本地的BACnet用户单元(应用层中为用户应用程序提供服务的访问点)。API的某些参数,如接收服务请求的设备的标志号(或地址)、协议控制信息等,将直接下传到网络层或数据链路层。而其余参数将组成一个应用层服务原语,通过BACnet的用户单元传到BACnet的应用服务单元(应用层中利用下层服务完成应用层服务的部分)。 从概念上来讲,由应用层服务原语产生的应用层协议数据单元(APDU),构成了网络层服务原语的数据部分,并通过网络层服务访问点下传到网络层。同样,这个请求将进一步下传到本地设备协议栈的以下各层。整个过程如图1-4所示(见下

一页)。 于是,报文就这样被传送到远地的设备,并在远地设备协议栈中逐级上传,最后指示原语看起来似乎是直接从远地的BACnet应用服务单元上传到远地的BACnet用户单元。任何从远地设备发回的响应,也是以该方式回传给请求设备的。

BACnet协议采用的分层思想,来源与一个简单的科学原理——分层原理(Layering Principle)。即?在目标计算机上的第N层软件必须恰好接收由在发送计算机上的第N层软件所发送的数据?。换句话说,在数据发送前,协议进行的任何转换在接收时必须被完全地逆转换。如果在发送计算机上的一个特定层将一个头部放入帧中,在接收计算机的相应层必须除去该头部。分层思想简化了协议的设计和测试,避免了一层协议软件引入其它层可见的改变。这样,每一层的发送和接收软件可独立于其它层进行设计、实现、测试。

第2章 BACnet应用层规范

本章介绍BACnet的应用层规范的原理和运行机制,概要介绍BACnet应用层的模型、主要的服务原语以及应用层报文的结构,并讨论BACnet各种报文的传输过程以及与报文传输相关的其它问题。

§2.1 BACnet协议的应用层规范

BACnet网络的应用层协议要解决三个问题,向应用程序提供通信服务的规范,与下层协议进行信息交换的规范,和与对等的远程应用层实体交互的规范。首先对一些相关的概念进行说明。

应用进程是指,为了实现某个特定的应用(例如,节点设备向一个远端的温度传感器设备请求当前温度值)所需要的进行信息处理的一组方法。一般来说,这是一组计算机软件。

应用进程分为两部分,一部分专门进行信息处理,不涉及通信功能,这部分称为应用程序。另一部分处理BACnet通信事务,称为应用实体。应用程序与应用实体之间通过应用编程接口(API)进行交互。BACnet应用层协议只对应用实体进行规范,不涉及应用程序和应用编程接口。但在具体实现过程中,应用编程接口一定是某个函数、过程或子程序的调用。

图2-1示出了这些概念,图中阴影部分是应用进程位于BACnet应用层中的部分。

应用实体本身又由两部分组成,分别是BACnet用户单元和BACnet应用服务单元(ASE)。应用服务单元是一组特定内容的应用服务,这些应用服务包括:报警与事件服务,文件访问服务,对象访问服务,远程设备管理服务,虚拟终端服务,和网络安全性。用户单元的功能是支持本地API,负责保存事务处理的上下文信息,产生请求标志符(ID),记录标志符所对应的应用服务响应,维护超时重传机制所需的超时计数器,以及将设备的行为要求映射成为BACnet的对象。我们将在后续的文章中介绍这些应用服务和对象的内容。 ?BACnet设备?是指任何一种支持用BACnet协议进行数字通信的真实的或者虚拟的设备。一个BACnet设备有且只有一个?设备对象?,而且被一个网络号和一个MAC地址唯一确定。在大多数情况下,一个物理设备就是一个BACnet设备,例如一个支持BACnet协议通信的温度传感器就是一个BACnet设备。但是也可能有一个物理设备具有多个?虚拟的? BACnet设备的功能,在BACnet标准的附件H中对此进行了详细规范。

当一个BACnet设备中的应用程序需要与网络中其它BACnet设备中的应用程序进行通信时,应用程序只需通过调用API访问本地的BACnet用户单元来实现。例如,一个BACnet 设备的应用程序要向一个远地设备的应用程序发送一个请求服务信息,它调用API,并将相应的参数填入API中。API中的某些参数,如服务请求接收设备的标志号(或地址)、协议控制信息等,将直接下传到网络层或数据链路层;其余参数则

组成一个应用层服务原语,通过BACnet用户单元传到BACnet应用服务单元(ASE),形成应用层协议数据单元(APDU)。APDU则通过网络层的服务访问点(NSAP)下传到网络层,成为网络层服务原语的数据部分。这个请求将进一步下传到本地设备协议栈中的下层,最终由物理层传送到远地设备,并通过远地设备协议栈逐级上传到远地用户单元。从远地设备看起来,指示原语似乎是直接从它自己的BACnet应用服务单元传到其BACnet用户单元的。同样,任何从远地设备发回的响应,也是以相同方式回传给请求设备。

BACnet应用层协议包含了OSI模型中的应用层到传输层中的相应内容,所以除了应用层服务的功能外,还要有端到端可靠传输的功能。因此,BACnet应用层规范就是为了保证BACnet设备的应用程序能够与网络中远地BACnet设备的应用程序进行端到端可靠通信而制定的一组规则,其主要内容包括:BACnet应用层提供的服务类型,上下层之间交换的接口控制信息,和对等层协议数据单元的传输机制。

§2.2 BACnet应用层服务类型

BACnet的应用层提供两种类型的服务,分别是?证实服务?和?非证实服务?。 在BACnet中,两个对等应用进程间的信息交换,根据ISO的服务惯例,被表示成抽象的服务原语的交换。BACnet定义了四种服务原语:请求(Request)、指示(Indication)、响应(Response)以及证实(Confirm)原语,可以用来传递某些特定的服务参数。而包含这些原语的信息,又是由标准中定义的各种协议数据单元(PDU)来传递的。下面列出各种服务原语:

CONF_SERV. response CONF_SERV. Confirm CONF_SERV. Request CONF_SERV. indication

UNCONF_SERV. request UNCONF_SERV. indication SEGMENT_ACK. request SEGMENT_ACK. request ERROR. request ERROR. indication REJECT. request REJECT. indication ABORT. request

ABORT. indication

CONF_SERV的标识表明使用的是BACnet证实服务PDU。UNCONF_SERV、SEGMENT_ACK、ERROR、REJECT和ABOUT,分别表明使用的是非证实服务PDU、分段回应PDU、出错PDU、拒绝PDU和放弃PDU,后面这些都是非证实服务类型。

证实服务是建立在客户/服务器通信模型的基础上的,客户端通过某个服务请求实例,向服务器请求服务,而服务器则通过响应请求来为客户端提供服务,如图2-2所示。在交互过程中,担当客户角色的BACnet用户,称为请求方BACnet用户;担当服务器角色的BACnet用户,称为响应方BACnet用户。

证实服务的具体过程如下:由请求方BACnet用户发出的一个CONF_SERV. request原语,形成请求PDU发送给响应方BACnet用户。当该请求PDU到达响应方BACnet用户时,响应方BACnet用户则收到一个CONF_SERV. indication原语。同样,由响应方BACnet用户发出的一个CONF_SERV. response原语,形成响应PDU回传给请求方BACnet用户。当响应PDU到达请求方BACnet用户时,请求方BACnet用户则收到一个CONF_SERV. CONF_SERV. confirm原语。因此,整个过程中请求方BACnet用户和响应方BACnet用户都要接收和发送PDU。

在非证实服务中,不存在上述客户/服务器模型、?请求方BACnet用户?和?响应方BACnet用户?等概念,只有?发送方BACnet用户?和?接收方BACnet用户?。前者指的是发送PDU的BACnet用户,后者指的是当一个PDU到达时,接收到一个指示(indication)或证实(confirm)的BACnet用户。图2-3为正常的证实服务报文传递的示意图,图2-4为正常的非证实服务报文传递的示意图。

§2.3 BACnet应用层报文分析

2.3.1 应用层接口控制信息

除了服务原语和服务参数外,应用实体还通过API与应用程序交换各种接口控制信息(ICI)参数,其具体内容取决于服务原语的类型。应用实体接收到的ICI参数将

下传到下面各层,以便于各层PDU的构建。而应用实体回传给应用程序的ICI参数,则包含了其以下各层从各自的PDU中得到的信息。

通过API与各种服务原语交换信息的ICI参数包括:

1. ?目的地址?(DA:):将要接收服务原语设备的地址。其格式(如设备名称、网络地址等)只与本地有关。这个地址也可以是多播地址、本地广播地址或全局广播地址类型。

2. ?源地址?(SA):发送服务原语的设备的地址。其格式只与本地有关。 3. ?网络优先权?(NP):表示网络优先权的参数。

4. ?需回复数据?(DER):一个逻辑值参数,用来指明某个服务是否需要一个回复

服务原语来确认。

2.3.2 应用层协议数据单元的编码

在BACnet中,使用应用层协议数据单元(APDU)来传递包含在应用服务原语和相应的参数中的信息。BACnet选择ISO Standard 8824规范中的方法来表征BACnet服务的数据内容。并且,BACnet规定了APDU的编码内容,这些编码内容在BACnet标准中的有关章节中进行了详细的描述。

BACnet的APDU由协议控制信息(PCI)和用户数据两部分组成。PCI中包含进行应用层协议操作所需要的数据,这些数据包括:APDU的类型,匹配服务请求和服务响应的信息,执行分段报文重组的信息。这些信息包含在报文的头部,也称为APDU的固定部分。用户数据中包含每种服务请求和服务响应的具体信息,这部分也称为APDU的可变部分。

2.3.3 BACnet报文的分段

为了实现长报文(长度大于通信网络、收/发设备所支持的长度)的传输,有必要对报文进行分段。在BACnet体系结构中,不存在单独的传输层,因此报文分段不是由

传输层实现,而是由应用层来完成。并且,在BACnet中只有Confirmed-Request和Complex-ACK报文可能需要分段,因此分段还是BACnet的一个可选特性。

1.报文分段的原则

每个由BACnet报文编码而成的数据流序列,按下面规则进行分段,然后再在网上传输。

① 一个完整的报文尽可能作为一个APDU发送。

② 当一个完整的报文不可能作为一个APDU发送时,则应分段成最少个数的多个APDU发送。

③ 一个报文分段的长度(以bit为单位)应是8的整数倍,即对报文进行分段时,字节是最小的分割单位。

2.BACnet APDU最大长度的确定

在BACnet中,APDU的长度也是没有固定的,而是定义了一个确定APDU最大长度的原则,即APDU最大长度应是以下长度值中的最小值:

① 设备所能发送的APDU的最大长度。一般与本地设备的缓冲区大小等本地因素有关。

② BACnet网际网所能传输到远地设备的APDU的最大长度。一般由本地、远地,以及中间传输网络的数据链路所决定。

③ 远地设备所能接收的APDU的最大长度,其值不能小于50个字节。 3.与分段有关的协议控制信息(PCI)

为了支持报文分段,BACnet 协议在BACnet-Confirmed-Request-PDU和BACnet-ComplexACK-PDU的头部,定义了四个与分段有关的协议控制信息参数。其中两个是布尔型参数,另两个是八位二进制无符号整数。这些参数可以使接收方对到达的分段进行正确的重组,从而保证端到端的可靠传输。

§2.4 BACnet APDU的传输

BACnet的APDU收发协议的详细细节,包含在BACnet复杂的事务状态机制(TSM:Transaction State Machine)中,以下的讨论旨在对几种主要APDU的传输过程有整体的认识。

2.4.1证实请求报文的传输

客户端设备在传输了一个完整未分段的证实请求报文(Confirmed-Request Message)后,或在等待接收分段证实请求报文最后一个分段所对应的确认信息时,将启动一个计时器。该计时器用来计量对请求报文回应的时间。一旦收到了针对该请求报文所发的出错APDU、拒绝APDU、放弃APDU、简单回应APDU或复杂回应APDU,则停止计时,同时通知客户应用程序。如果计时器的时间值超出了客户设备对象的APDU_TimeOut属性值,则整个报文重新发送,计时器重新计时。所有报文的超时重传均按此过程进行,直至重传次数超出了客户端设备对象?APDU重传次数?属性所规定的次数。若超出规定值仍未收到响应,该报文将被丢弃,同时通知客户应用程序。

2.4.2分段证实请求报文的传输

客户端设备在发送分段证实请求(Segmented Confirmed-Request Message)PDU的第一个分段之前,首先选择一个预设窗口值,以表示它在收到一个分段回应之前,一次准备发送的报文分段最大个数。它通常由报文分段的?建议窗口尺寸?参数表示,取值范围为1至127,在该处其具体取值只与客户端有关。在传输完第一个分段后,客户端设备将启动一个计时器,用来计量对报文分段回应的时间。一旦收到了针对该报文分段所发的拒绝APDU、放弃APDU或分组回应APDU,则停止计时,同时通知客户应用程序。如果计时器的时间值超出了客户设备对象的APDU_Segment_TimeOut属性值,则这个分段将重新发送,计时器重新计时。所有报文分段的超时重传均按此过程进行,直至重传次数超出了客户端设备对象中?APDU重传次数?属性所规定的次数。若超出规定值仍未收到响应,该报文将被丢弃,同时通知客户应用程序。

当服务端设备收到分段证实请求PDU的第一个分段后,将会选择一个实际窗口值,以表示它在发送一个分段回应前,一次准备接收的报文分段最大个数。同样,该值的取值范围也规定在1至127之间,同时它还不能大于证实请求PDU中的预设窗口值,在该处其具体取值只与服务器端有关。

在收到第一个分组回应APDU后,客户端设备从中得到服务器端设备的实际窗口值,并将该值设置成它的实际窗口值。这样,客户端设备和服务器端设备的实际窗口值大小一致。客户端便可以在收到一个分段回应APDU之前,一次发送多个分段;服务器端也可以在发送一个分段回应APDU之前,一次接收多个分段。客户端发送完整个报文或发送了窗口值个数的多个分段后,将启动一个计时器,用来计量对这些报文分段回应的时间。一旦收到了针对这些报文分段所发的拒绝APDU、放弃APDU或分组回应APDU,则停止计时。如果计时器的时间值超出了客户设备对象的APDU_Segment_TimeOut属性值,则这些分段将重新发送,计时器重新计时。所有报文分段的超时重传均按此过程进行,直至重传次数超出了客户端设备对象中?APDU重传次数?属性所规定的次数。若超出规定值仍未收到响应,该报文将被丢弃,同时通知客户应用程序。

客户端在发送分段的过程中,可能会收到拒绝APDU、放弃APDU或分段回应APDU。在这种情况下,收到拒绝APDU或放弃APDU将会中止请求的传输;收到分段回应APDU,将会作为序号等于或小于该APDU中分段数参数值的所有分段的确认,而那些没有被确认的分段将按上述过程重传。

2.4.3分段复杂回应报文的传输

分段复杂回应报文(Segmented ComplexACK Message)的传输过程与分段证实请求报文的传输过程相类似,主要不同之处在于:

① 在分段复杂回应报文的传输过程中,由服务器端设备发送复杂回应报文的分段,由客户端设备接收并发分段回应APDU

② 在分段复杂回应报文的传输过程中,客户端设备只能回应放弃APDU或分段回

APDU,而不能回应拒绝APDU。 2.4.4分段回应APDU的传输

分段回应APDU是分段接收方设备用来回应发送方的信息。在以下四种情况下,设备需传输一个SegmentACK。

① 设备收到报文的第一个分段。

② 设备收到未确认的、有序的、数量为实际窗口值的多个报文分段构成的序列。 ③ 设备收到一个乱序分段报文(可能表明丢失了某个分段)。 ④ 设备收到报文的最后一个分段。

§2.5 与传输有关的其它问题 2.5.1事务状态机制的中止

在一个证实请求的服务过程中,客户端与服务器端都将创立各自的事务状态机制,以便针对各种情况分别进行处理。该事务状态机制的终止由一些条件所决定。

对于客户端,当出现以下几种情况时,事务处理终止,同时结束该事务状态机制。 ① 当收到服务器端设备发来的简单回应、不分段复杂回应、出错、拒绝或放弃APDU时。

② 收到服务器发来的分段复杂回应APDU的最后一个分段,并发送了相应的分段回应APDU后。

③ 当超时重传次数用尽后。

④ 在向服务器发送了包含该事务处理过程标志符的放弃APDU后。 对于服务器端当出现以下几种情况时,将终止事务处理,同时结束该事务状态机制。 ① 当向客户端设备发送完简单回应、不分段复杂回应、出错、拒绝或放弃APDU后。 ② 当收到客户端设备发来的针对分段复杂回应APDU的最后一个分段的回应APDU后。

③ 当接收到客户端发来的包含该事务处理过程标志符的放弃APDU后。 ④ 在传输一个分段复杂回应APDU的过程中,超时重传次数达到规定值仍未成功时。

2.5.2重复报文的处理

在一个事务处理过程中,由于使用了BACnet的出错重传机制,设备不可避免的会接收到重复的报文或报文分段。对此,BACnet协议中是按以下各种可能出现的情况分别处理的。

① 服务器接收到一个重复的证实请求报文。这时,如果服务器具有识别重复证实请求报文的能力,则该重复报文将被服务器丢弃。否则,服务器仍会响应这个重复的证实请求报文。这样的话,客户端应当根据响应中的标志符不与任何一个当前的事务状态机制绑定,来忽略该重复响应。

② 服务器接收到一个重复的证实请求报文分段,即已经收到该分段并发送了分段确认。在这种情况下,服务器应忽略该重复分段并回传一个适当的分段回应APDU。判断分段是否重复的依据是:任何一个分段都可以由其对等方地址、标志符以及分段序号唯一确定。

③ 客户端接收到一个重复的复杂回应分段,即该分段已经收到并确认了。客户端应忽略该重复分段并回传一个适当的分段回应APDU。

④ 设备接收到一个重复的分段确认APDU。这时,该设备应忽略重复的分段确认APDU。

2.5.3资源的回收

上述BACnet的出错重传过程,其具体实现需要客户和服务器两端提供一定的资源。这些资源通常是事务处理的各个细节,包括事务状态机制(TSM)、计时器以及APDU或APDU分段缓冲区等。当出错重传过程失败时,这些相关的资源也变得失效,应被释放掉。资源释放的具体细节取决于系统的具体设计。作为建议,BACnet协议给出了资

源失效而应释放的依据:

① 客户端收到对一个证实请求APDU的完整响应后。

② 在客户端,当一个证实请求APDU被重发了?APDU重发次数?属性所规定的次数,但仍未成功时。

③ 在客户端,当一个证实请求APDU分段被重发了?APDU重发次数?属性所规定的次数,但仍未成功时。

④ 在服务器端,当发送了对某个证实请求APDU的响应并收到相应的分段回应后。

第3章 BACnet网络层规范

本章介绍BACnet协议网络层的原理和运行机制,包括BACnet网络层的功能、主要的服务原语以及网络层报文的结构,并简要介绍BACnet路由器的运行规程。

§3.1 BACnet网络层规范的内容

BACnet网络层的目的是提供一种方法,使用这种方法,不用考虑网络所使用的BACnet数据链路技术,可以将报文从一个BACnet网络传递到另一个BACnet网络。数据链路层提供将报文在本局域网内传递到某个设备或者广播到所有设备的能力,而网络层则提供将报文直接传递到一个远程的BACnet设备、广播到一个远程BACnet网络、或者广播到所有的BACnet网络中的所有BACnet设备的能力。一个BACnet设备被一个网络号码和一个MAC地址唯一确定。

我们将那些使用不同的数据链路层技术的局域网称为异类网络,例如,以太网、ARCNET网络和Lonworks网络等就是异类网络。网络层的功能就是实现连接两个异类的BACnet局域网。实现异类网络连接的设备称为?BACnet路由器?。从协议的观点看,网络层的功能是向应用层提供统一的网络服务平台,屏蔽异类网络的差异。同时,BACnet网络层协议也建立路由器建立和维护它们的路由表的方法,这将使得路由器自动配置和报文在路由器之间的流动成为可能。

3.1.1 BACnet网络层的服务原语

BACnet网络层向应用层提供的服务是不确认的无连接形式的数据单元传送服务。与这种交互相关的原语是N-UNITDATA请求和指示,其参数如下:

N-UNITDATA.request(destination_address,data,network_priority,data_expecting_reply)

N-UNITDATA.indication(source_address,destination_address,data,network_priority, data_expecting_reply)

?目标地址?和?源地址?参数提供下列事物的逻辑连续配置:1)一个可选择的网络号码,2)适合于下层LAN技术的MAC地址,3)链路服务接入点。网络号码X‘FFFF’表示此报文广播到目前能够到达的所有网络的所有设备。目前能够到达的网络是指那些在BACnet互联网中已经具有一条有效连接的网络。?数据?参数是从应用层传递过来的网络服务数据单元(NSDU),其中包含一个完全编码的BACnet APDU。?网络优先级?参数是一个数字值,由BACnet路由器中的网络层用来确定任何可能的优先于先进先出排队等待规则的情况。?data_expecting_reply?参数指出对于正在传送的数据单元是否期待有一个应答的数据单元。

当网络层从应用层收到一个N-UNITDATA.request请求原语后,就用网络层规范所表述的方式发送一个网络层服务数据单元NSDU。当一个网络实体收到从一个对等网络实体发来的NSDU后,它作如下处理:1)通过一个直接连接的网络将NSDU发送到目的地,2)将NSDU发送到下一个BACnet路由器后再路由到目的地,3)如果NSDU的地址与它自己的应用层中的某个实体的地址匹配,则向这个实体发送一个N-UNITDATA.indication原语,通知有一个NSDU到达。

3.1.2 BACnet网络层PDU结构

图3-1给出了BACnet网络层协议数据单元的分组格式。下面对相应的域进行说明:

1.协议版本号

每个NPDU的第一个字节是一个8比特的无符号整数,标识BACnet协议的版本号。目前的BACnet协议的版本号是(1)。 2.网络层协议控制信息

NPDU的第二个字节是控制字节,表示后面的某个特殊NPCI域的存在。控制字节中每个比特的作用如下:

3.特殊域的内容

DNET:最终目标网络号,2个字节。

DLEN:最终目标的MAC层地址的长度,1个字节,0表示对目标网络的广播。 DADR:最终目标的MAC层地址。 SNET:初始源网络号,2个字节。

SLEN:初始源的MAC层地址的长度,1个字节。 SADR:初始源的MAC层地址。 Hop Count:递减计数器值,用来防止报文不被循环路由。1个字节,初始化为X‘FF’。当报文通过每个路由器时,其值被至少减一。如果路由器发现该值已为0,则丢弃此报文。 4.网络层报文类型

如果控制域中的比特7为1,这表示此报文是一个网络层报文,其报文类型域存在。这是个1字节的域,其内容表示报文携带的各种网络层的控制信息。 5.生产商专有网络层报文

如果控制域的比特7为1和报文类型域的值为X‘80’至X‘FF’时,Vendor ID域存在,生产商可以有2个字节来编码自己的专有网络层报文类型。

3.1.3 多播报文和广播报文

BACnet使用多播地址和广播地址来支持多个目标的报文传输。多播是指一个报文被传送给一组目标设备,而广播是指一个报文被传送给某个局域网中的所有设备、一个远程网络中的所有设备、或者所有BACnet网络中的所有设备。BACnet网络层处理两种报文,一种是包含有APDU的数据报文,另一种是关于网络层本身控制信息的网络层协议报文。对于数据报文,只有BACnet非证实请求协议数据单元(BACnet-Unconfirmed-Request-PDU)的报文可以被多播或广播。而网络层协议报文都可以被多播或广播,使用多播地址或者广播地址进行。

3.1.4 网络层协议报文

在BACnet中,有十种网络层协议报文,它们的作用是进行路由器自动配置,路由表的维护,和网络层拥塞控制。下面介绍这十种报文。

1. Who-Is-Router-To-Network报文

格式为:网络报文类型域是X‘00’,后面有2个字节的网络号。作用是:①节点用来确定通达某目标网络的下一个路由器;②帮助路由器更新路由表。当省略2字节的网络号时,接收此报文的路由器要返回其所有可通达的目标网络的列表。

2. I-Am-Router-To-Network报文

格式为:网络报文类型域是X‘01’,后面有2个字节的网络号。作用是列出通过发送此报文的路由器可以到达的网络号。

3. I-Could-Be-Router-To-Network报文

格式为:网络报文类型域是X‘02’,后面有2个字节的网络号和1个字节的性能指标。作用是响应包含有特定网络号的Who-Is-Router-To-Network报文,由能够建立到达特定目标网络的点到点连接的半路由器使用,其网络号就是所响应的报文中包含的特定网络的网络号。性能指标表明这种连接的质量。

4. Reject-Message-To-Network报文

格式为:网络报文类型域是X‘03’,后面有1个字节的原因说明和2个字节的网络号。作用是一个拒绝报文,直接发给生成被拒绝的报文的节点,网络号就是被拒绝报文中的网络号。在拒绝原因字节中是一个无符号的整数,其值所表示的意义如下:

(0):其它差错。

(1):本路由器不能直接连接到所指示的目标网络以及不能发现任何一个能够连接到所指示的目标网络。

(2):本路由器忙,目前不能接收关于所指示目标网络的报文。 (3):这是一个不可识别的网络层报文类型。 (4):报文太长,不能路由到所指示的目标网络。 5. Router-Busy-To-Network报文

格式为:网络报文类型域是X‘04’,后面是可选择的2个字节的网络号。作用是

被路由器用来通知停止接收通过本路由器向某特定目标网络或者所有网络发送的报文。此报文通常用广播MAC地址发向相应的网络。如果没有可选择的2个字节的网络号,则表示到所有网络的报文都不接收。

6. Router-Available-To-Network报文

格式为:网络报文类型域是X‘05’,后面是可选择的2个字节的网络号。作用是被路由器用来通知开始或者重新开始接收通过本路由器向某特定目标网络或者所有网络发送的报文。此报文通常用广播MAC地址发向相应的网络。如果没有可选择的2个字节的网络号,则表示到所有网络的报文都可接收。

7. Initialize-Router-Table报文

格式为:网络报文类型域是X‘06’。作用是初始化一个路由器的路由表或者查询当前路由表的内容。此报文有一个数据段,包含有初始化路由表的信息。

8. Initialize-Router-Table-Ack报文

格式为:网络报文类型域是X‘07’。作用是对初始化路由表报文的应答,表示路由器的路由表已经改变,或者已被查询。此报文的数据段具有与它应答的初始化路由表报文相同的格式。

9. Establish-Connection-To-Network报文

格式为:网络报文类型域是X‘08’, 后面有2个字节的网络号和1个字节的?中止时间值?。作用是命令一个半路由器创建一个通达指定网络的点到点连接。2个字节的网络号指出要半路由器连接的目标网络。1个字节的?中止时间值?规定了在没有NPDU到达的情况下,连接保留的时间。当此值为0时,表示连接永久保留。

10. Disconnect-Connection-To-Network报文

格式为:网络报文类型域是X‘09’, 后面有2个字节的网络号。作用是命令一个路由器释放所建立的点到点连接。

3.1.5网络层协议运行规程

本节介绍BACnet路由器和节点进行本地和远程数据传输所遵循的网络层协议运行规程。所谓?本地?是指源设备和目标设备都在同一个BACnet网络中,而所谓?远程?是指源设备和目标设备分处不同的BACnet网络之中。

1. 本地数据发送的网络层协议规程

当网络层实体收到来自应用层的一个N-UNITDATA.request原语时,它先检查?目标地址?参数中的DNET字段。如果不存在此字段,表明目标设备与本身源设备位于同一个BACnet网络中。在NPCI控制字节中应该包含有?网络优先级?参数的值和指明不存在DNET、DADR、Hop Count、SNET和SADR的字节。NPCI加在N-UNITDATA.request原语中的?数据?参数(就是NSDU)的前面,形成NPDU,传送给数据链路层,作为数据链路层原语中的?数据?参数。同时向数据链路层发送一个DL-UNITDATA数据链路请求原语。

2. 接收本地数据的网络层协议规程

当网络层实体收到来自数据链路层的一个NPDU时,它先检查第二个字节,这是控制NPCI。如果此字节的比特7为值?0?,表示此报文中包含有APDU。否则,比特7的值为?1?时,这表明此报文是网络层报文。对于两种类型的报文,其处理方式不同。①对于APDU报文,当不存在DNET域或者存在DNET域而同时包含有全球广播地址X‘FFFF’时,网络实体查找BACnet应用层实体。如果网络实体找到相应的应用层实体,就将来自于数据链路层的报文中的NPCI部分去掉,将其后的作为?数据?参数的部分作为一个N-UNITDATA.indication原语传送给应用层实体。如果网络层实体不能找到相应的应用层实体并且网络层实体本身位于非路由器节点,则丢弃此报文。当存在DNET域且不是全球广播地址X‘FFFF’时,非路由器节点中的网络层实体丢弃此报文,路由器中的网络层实体的行为在后面介绍。②对于本地网络层报文,当不存在DNET域或者存在DNET域而同时包含有全球广播地址X‘FFFF’时,网络层实体解读此报文。如果报文不可解读,就向源设备发送一个Reject-Message-To-Network报文。当存在DNET

域且不是全球广播地址X‘FFFF’时,非路由器节点中的网络层实体丢弃此报文,路由器中的网络层实体的行为在后面介绍。

3. 远程数据发送的网络层协议规程

当网络层实体收到来自应用层的一个N-UNITDATA.request原语时,它先检查?目标地址?参数中的DNET字段。如果存在此字段,表明目标设备位于与本身源设备不同的BACnet网络中。在NPCI控制字节中指明存在DNET、DADR、Hop Count域,但是不存在SNET和SADR域。在?网络优先级?域中,网络层实体填入提供的参数。接着填写相应的地址域。NPCI加在N-UNITDATA.request原语中的?数据?参数(就是NSDU)的前面,形成NPDU,传送给数据链路层,作为数据链路层原语中的?数据?参数。同时向数据链路层发送一个DL-UNITDATA数据链路请求原语。传递到数据链路层的?目标地址?参数的DA段应该是对应DNET参数的BACnet路由器的MAC地址,或者如果不知道路由器MAC地址,此段就是一个广播地址。当然,如果DNET是全球广播网络号,DA也是广播地址。

对于某个特定的DNET,有四种建立相应BACnet路由器地址的方法。分别是:①在配置设备时人工设定。②通过发送一个Who-Is请求报文,并且读取应答的I-Am报文中的?源地址?SA段而得到。③使用网络层报文Who-Is-Router-To-Network来获得。④向一个远程DNET上的设备发送具有本地广播MAC地址的报文,然后读取远程设备的响应报文中的SA而获得。

4. 接收远程数据的网络层协议规程

当网络层实体收到来自数据链路层的一个NPDU时,它先检查第二个字节,这是控制NPCI。对于非路由器的BACnet设备中的网络层实体,如果发现此字节表示存在DNET域且其值不为X‘FFFF’,则丢弃此报文。对于路由器中的网络层实体,如果发现此字节表示存在DNET域,则根据其优先级将此报文置于它的报文队列中。在相同优先级时,报文按先进先出的顺序排队。如果NPCI的控制字节表示NPDU包含一个网络层报文,

则网络层实体还需进一步查看?报文类型?域。如果此域表示存在一个Reject-Message-To-Network报文,则网络层实体要执行专门的针对此报文的规程。如果存在SNET和SADR域,表示报文来自一个对等的路由器;而如果不存在SNET和SADR域,表示报文来自于与路由器直接连接的网络。对于后一种情况,路由器根据路由表所示的报文来自网络的网络号,将SNET和SADR添加到NPCI中。SADR域设置成等于到达报文的SA。

存在三种可能性:①收到报文的路由器直接与DNET所指示的网络相连接,则网络层实体去掉NPCI中的DNET、DADR和Hop Count域,将DA设置为等于DADR,然后将报文直接发送给目标设备。②收到报文的路由器不直接与DNET所指示的网络相连接,网络层实体先将报文的Hop Count域的值减1,如果此值仍然大于0,就将报文沿着目标网络方向传给下一站路由器。如果不知道下一站路由器的位置,就发送一个Who-Is-Router-To-Network报文来确定其位置。如果Hop Count域值为0,则丢弃此报文。③DNET表示的是全球广播网络号并且Hop Count域的值大于0,收到报文的路由器使用适合于每种数据链路的广播地址,向除了报文来自于的网络以外的所有连接的网络广播此报文。如果Hop Count域的值为0,则丢弃此报文。

§3.2 BACnet路由器

我们将连接两个或者多个BACnet网络从而形成BACnet互联网的设备称为BACnet路由器。在BACnet路由器中可以有BACnet应用层功能,也可以没有此功能。BACnet路由器使用BACnet网络层协议报文来维护路由表。以下介绍BACnet路由器运行规程。

1.路由表

路由器是连接至少两个BACnet网络的设备,在路由器中将每个连接处称为一个?端口?。路由表中包含端口的下列项目:①此端口所连接的网络的MAC地址;②2个字节的关于所连接网络的网络号;③通过此端口可通达网络的网络号列表每个这些网络的

可通达的状态。

2.启动规程

路由器在启动时,向每个端口广播一个I-Am-Router-To-Network报文,其中包含有每个可通达网络的网络号。这使其它路由器可以根据报文内容建立或者更新其路由表中的条目。

3.路由器的运行

图3-2给出了路由器运行的流程图。

4. 路由器流量控制

在路由器接收报文时,如果流量大于它的处理速度,其缓存器可能会溢出,这将

造成数据的丢失。路由器要有一种功能,当它的缓存器将要溢出时,它能够通知源设备暂停发送数据或者放慢发送的速度。在BACnet网络中,路由器使用Router-Busy-To-Network报文和Router-Available-To-Network报文来实现流量控制的功能。

§3.3 点到点半路由器

在BACnet网络中,将两个网络通过广域网(例如公共电话网络)进行连接的设备是半路由器。半路由器创建路由和同步路由的规程与路由器的不相同。点到点连接总是需要在两个半路由器之间建立连接从而形成一个完整的路由器,图3表示了点到点连接的示意图。

在BACnet的标志规范中,定义了5个网络层报文,用于点到点半路由器建立链路、中止链路和路由学习功能等。I-Could-Be-Router-To-Network报文是半路由器用来通知网络该设备能够建立到所请求的网络的连接,但是目前还没有建立此连接。Establish-Connection-To-Network报文用来请求半路由器建立一个连接。Disconnect-Connection-To-Network

报文请求中止一个连接。

Initialize-Router-Table和Initialize-Router-Table-ACK报文用来进行路由器的初始化工作,然后,不论是否有活动的点到点连接存在,半路由器都使用与其它活动路由器相同的规程来维护其路由表。

总之,BACnet网络层向应用层实体提供了进行网络之间互相通信的同一的平台。BACnet使用路由器作为连接异类网络的设备,并且对于路由器的运行规程进行了详细的规范,从而保证了BACnet网络的成功运行。随着因特网的普及,因特网的网络层规范IP协议也成为事实上的标准。ASHRAE不失时机地制定了BACnet标准附件Annex J,BACnet/IP,将使用TCP/IP协议进行通信的设备纳入到BACnet网络之中,使得BACnet网络可以进行因特网上的全球通信。我们将在后续章节中对BACnet/IP予以介绍。

第4章 BACnet数据链路/物理层规范

层的功能、主要服务原语以及帧结构。

§4.1 数据链路/物理层协议的内容

本章介绍BACnet的五种数据链路/物理层的规范,并介绍BACnet数据链路/物理

为了保证由通信链路连接的两个计算机设备之间能够可靠和有效地传递数据,已经发展起来多种技术,计算机网络中的数据链路层和物理层的协议就是对于如何使用这些技术建立网络的通信链路进行规范。用同一种技术建立起来的通信链路连接的一组计算机设备就称为一个类型的计算机网络。例如,用载波侦听多路访问/冲突检测技术建立的网络称为以太网;而用LonTalk协议技术建立的网络称为LonWork网络。不同技术所建立的网络在数据传输速率、传输的数据帧格式、设备使用介质的方式等等方面都不相同。这些网络之间一般不能直接连接通信。这些技术各有特长,分别适应不同的应用环境。

BACnet标准目前将五种类型的数据链路/物理层技术作为自己所支持的数据链路/物理层技术进行规范,形成其协议。这五种类型的网络分别是:Ethernet(ISO8802-3)局域网,ARCNET局域网,主从/令牌传递(MS/TP)局域网,点到点(PTP)连接,和LonTalk局域网。BACnet选择这些局域网技术的原因是从实现协议的硬件的可用性、数据传输速率、与传统楼宇自控系统的兼容性和设计的复杂性等几个方面考虑的。本文分别讨论这些协议规范。

4.1.1 BACnet的以太网规范

以太网是目前在计算机网络中使用的最普遍的局域网技术,其协议包括逻辑链路控制协议(LLC),载波侦听多路访问/冲突检测 (CSMA/CD) 协议和相应的物理介质协议等。BACnet将ISO 8802-2中的Class I LLC和类型1不确认的无连接模式服务以及ISO 8802-3的所有规范,包括将来的扩展,作为自己的标准。

1.BACnet网络对ISO 8802-2逻辑链路控制协议(LLC)的使用

BACnet网络使用LLC的数据链路服务来传送BACnet链路服务数据单元(LSDU)。一个LSDU包含一个NPDU。使用ISO 8802-3局域网技术的BACnet设备遵守LLC Class I的要求,提供不确认的无连接服务。同时,使用DL-UNITDATA原语传送LLC参数。

2.LLC原语所要求的参数

DL-UNITDATA原语中的参数是源地址、目标地址、数据和优先级。源地址和目标地址各自分别是一个6字节由网络接口硬件确定的介质访问控制(MAC)地址和1字节的链路服务访问点(LSAP)参数组成。LSAP的值都为X‘82’,表示本LSDU内包含有BACnet数据。数据参数就是来自网络层的NPDU。因为ISO 8802-3 MAC层运行在只有一个服务类别的单优先级模式下,所以在此标准中没有优先级参数的规范。

3.MAC原语所要求的参数

ISO 8802-3 MAC层原语是MA-DATA.request和MA-DATA.indication。这些是用源节点和目标节点的MAC地址封装的LLC数据的帧结构,图1是这种帧的数据结构图。其中,APDU是应用层协议数据单元,NPCI是网络层协议控制信息。DSAP和SSAP分别是目标节点和源节点的链路服务访问点参数,在此情况下,其值都为X‘82’,表示帧内包含有BACnet数据。整个帧由物理介质传送到目标节点设备。

4.物理介质

完全采用ISO 8802-3标准及其附件中对物理介质的规范。

4.1.2 BACnet的ARCNET局域网规范

ARCNET目前是美国国家标准(ATA/ANSI 878.1)。这是一种很成熟的局域网技术,数据传输率为2.5Mbps。这种网络的特点是使用令牌传递协议作为设备访问介质的方式,因此每个设备可以设置等待发送报文时间的最大值,这对有些应用非常有用。BACnet将ATA/ANSI 878.1 ARCNET局域网标准,包括将来的扩展,作为自己的标准。同时,仍然使用ISO 8802-2中的Class I LLC和类型1不确认的无连接模式服务作为逻辑链路控制协议。

1.LLC原语所要求的参数

BACnet网络仍然使用LLC的数据链路服务来传送BACnet链路服务数据单元(LSDU)。同时,使用DL-UNITDATA原语传送LLC参数。DL-UNITDATA原语中的参数是源地址、目标地址、数据和优先级。源地址和目标地址各自分别是一个1字节的由网络接口硬件确定的介质访问控制地址,1字节的链路服务访问点和1字节的系统代码(SC)参数组成。LSAP的值都为X‘82’,表示本LSDU内包含有BACnet数据。SC的值为X‘CD’,表示此数据结构是一个BACnet帧。数据参数就是来自网络层的NPDU。因为

ARCNET MAC层运行在只有一个服务类别的单优先级模式下,所以在此标准中没有优先级参数的规范。

2.将LLC原语映射到ARCNET的MAC层

类型1不确认的无连接LLC服务直接映射成ARCNET的MAC原语MA-DATA.request。没有指示原语传递给LLC子层,但是从目标MAC子层有一个确认返回。ARCNET不允许其MSDU的长度为253、254或者255字节。长度为0-252字节的BACnet LPDU作为ARCNET MPDU帧的整个MSDU,其中MPDU中具有1个字节的信息长度(IL)域。长度为253-504字节的BACnet LPDU作为ARCNET MPDU的MSDU的前部分,后面加上3个不确定数值的字节,长度达到256-507字节,其中MPDU中具有2个字节的信息长度域。在接收方,如果检测到ARCNET的MPDU的信息长度域有2个字节,则要去掉MSDU中的最后3个字节。ARCNET中不能传输长度超过504字节的LPDU。

3.MAC原语所要求的参数

ARCNET的MAC层原语是MA-DATA.request、MA-DATA.indication和MA-DATA.confirmation。这些是用源节点和目标节点的MAC地址封装的LLC数据的帧结构,图2是这种帧的数据结构图。其中,APDU是应用层协议数据单元,NPCI是网络层协议控制信息。DSAP和SSAP分别是目标节点和源节点的链路服务访问点参数,在此情况下,其值都为X‘82’,表示帧内包含有BACnet数据。整个帧由物理介质传送到目标节点设备。

4.物理介质

完全采用ARCNET标准及其附件中对物理介质的规范。 4.1.3 BACnet的主从/令牌传递(MS/TP)局域网规范

BACnet的主从/令牌传递局域网技术的基础是使用EIA-485标准。EIA-485标准是电子工业协会开发的物理层的数据通信标准,广泛应用在楼宇设备控制系统中。由于EIA-485标准只是一个物理层标准,不能解决设备访问传输介质的问题,BACnet定义了主从/令牌传递(MS/TP)协议,提供数据链路层功能。

在MS/TP网络中有一个或者多个主节点,主节点在逻辑令牌环路中是对等的。每个主节点可以有一些从节点,从节点只有在主节点的请求下才能传送报文。如果网络全部是由主节点组成,就形成一个对等网络。如果网络是由单主节点和所有其它从节点组成,就形成一个纯主从网络。

1.MS/TP网络工作原理

MS/TP网络使用一个令牌来控制设备对网络总线的访问。当主节点掌握令牌时,它可以发送数据帧。凡是收到主节点请求报文的主节点和从节点都可以发送响应报文。

一个主节点在发送完报文之后,就将令牌传递给下一个主节点。但是,如果主节点有许多报文要发送,当它一次掌握令牌期间最多只能发送Nmax_info_frames个数据帧,就必须将令牌传递给下一个主节点,其它数据帧只能在它再一次掌握令牌时,才能发送。传递令牌帧不需确认,但是,发送令牌的节点侦听接收令牌的节点是否开始使用令牌。侦听的方法是在发送完令牌帧的最后一个字节之后的Tusage_timeout时间内收到Nmin_octets字节。大多数令牌总线型网络都不区分请求帧和响应帧,它们都以相同的方式访问总线,只有掌握令牌的节点可以发送。

由于MS/TP网络定义了从节点不能掌握令牌,因此规定所有节点,不论是否握有令牌,都必须对请求报文作出响应。发出请求报文的主节点在收到应答之前不释放令牌。收到请求报文的从节点要立即发回应答报文,而收到请求报文的主节点可以选择发回应答报文或者发送一个?延迟应答?报文,告知它将延迟应答到它自己掌握令牌时再发送。

2.服务规范

MS/TP网络提供两个数据链路层服务原语,向网络层提供服务,这两个服务原语分别是DL-UNITDATA.request和DL-UNITDATA.indication。前者由网络层传递给MS/TP实体,请求使用不确认的无连接方式向一个或者多个远程节点的网络层实体发送一个网络层协议数据单元(NPDU)。后者由MS/TP实体传递给网络层,通知有一个来自远程实体的NPDU的到达。

3.物理层介质

MS/TP EIA-485网络使用屏蔽双绞线作为信号传输介质,特征阻抗为100-130欧姆。EIA-485节点有三种类型,分别是:具有网络偏置电阻的节点,具有本地偏置电阻的节点和无偏置电阻的节点。

4.帧格式

MS/TP网络的帧格式如图3所示。帧类型域用来区别不同类型的MAC帧。目标地址

和源地址都是1字节,目标地址域值为255(X‘FF’)表示此帧为广播帧,而源地址域的值不允许为255。地址值0-127可用来表示主节点和从节点,而地址值128-254只能用来表示从节点。长度域以字节表示数据域的长度。如果长度域的值为0,即两个字节都为0,则不存在数据域和数据校验域。数据域的长度为0-501字节。

帧类型域值表示的帧类型如下: 00:令牌

01:主节点轮询帧 02:响应主节点轮询帧 03:测试请求帧 04:测试响应帧 05:BACnet数据期待响应帧 06:BACnet数据不期待响应帧 07:响应延迟帧 8-127:保留为ASHRAE所用帧 128-255:生产商定义的专用帧

§4.2 BACnet的点到点(PTP)通信规范

为了使两个BACnet设备能够使用各种点到点通信机制进行通信,BACnet定义了一种数据链路层协议,称为BACnet点到点通信规范。这个协议的功能是:使两个BACnet网络层实体建立点到点数据链路连接,可靠地交换BACnet PDU,和使用已建立的物理连接执行BACnet点到点连接的有序终止。对应的物理连接方式有:EIA-232连接调制解调器,线路驱动器,或者其它数据通信设备。

4.2.1 BACnet点到点通信工作原理

BACnet点到点通信协议只适用于半路由器设备之间的通信,具有全双工通信、通信的断续性和通信速率慢的特点。当呼叫设备和被叫设备之间建立起物理连接之后,两个BACnet设备之间交换一系列的信息帧,以建立一个BACnet连接。一旦这种连接成功建立之后,两个设备就可以透明地交换BACnet PDU。不论呼叫设备还是被叫设备都可以启动释放连接过程,而只有每个设备都发送了终止请求之后,连接才会终止。点到点协议是面向连接的协议,这与其它的BACnet数据链路层协议不同。点到点协议还充分利用了物理连接的全双工特征,使两个设备可以同时发送报文。

4.2.2服务规范

BACnet点到点通信协议向网络层提供了八个数据链路层服务原语,这些原语的形式和功能如表4-1所示。

4.2.3 帧格式

PTP的数据链路帧格式如图4所示。其中前导码域、帧类型域、长度域和帧头校验域组成帧的?头段?;数据域和数据校验域组成帧的?数据段?。

帧类型域值表示的帧类型如下: X‘00’:心跳帧,不含数据段,通知对等设备数据链路仍有效,但本地设备还不能接收数据帧。

X‘01’:心跳帧,不含数据段,通知对等设备数据链路有效并可以接收数据帧。 X‘02’:数据帧,包含数据NPDU,数据域长度为0-501字节,对应传输序列号0。

X‘03’:数据帧,包含数据NPDU,数据域长度为0-501字节,对应传输序列号1。

X‘04’:肯定确认帧,不包含数据段,确认已接收序列号0的数据帧,不能接收后续帧。

X‘05’:肯定确认帧,不包含数据段,确认已接收序列号1的数据帧,不能接收后续帧。

X‘06’:肯定确认帧,不包含数据段,确认已接收序列号0的数据帧,可以接收后续帧。

X‘07’:肯定确认帧,不包含数据段,确认已接收序列号1的数据帧,可以接收后续帧。

X‘08’:否定确认帧,不包含数据段,确认不能接收序列号0的数据帧,不能接收后续帧。

X‘09’:否定确认帧,不包含数据段,确认不能接收序列号1的数据帧,不能接

收后续帧。

X‘0A’:否定确认帧,不包含数据段,确认不能接收序列号0的数据帧,可以接收后续帧。

X‘0B’:否定确认帧,不包含数据段,确认不能接收序列号1的数据帧,可以接收后续帧。

X‘0C’:连接请求帧,不包含数据段,由被叫设备发送,请求建立一个BACnet连接。

X‘0D’:连接响应帧,数据域中为一个密码,由响应连接请求帧的设备发送。 X‘0E’:释放连接请求帧,PTP通信中的任何设备都可发送,其数据域中的数据表示释放连接的原因,长度为1个字节,分别是:X‘00’表示已经没有要传输的数据了,X‘01’表示对等进程正在运行,X‘02’表示收到的密码无效,X‘03’表示其它原因。

X‘0F’:释放连接响应帧,不包含数据段,确认已经收到释放连接请求帧,并且表示接收释放连接的请求。

X‘14’:测试请求帧,启动PTP传输路径的环路测试,其数据域长度为0-501字节。

X‘15’:测试响应帧,对测试请求帧的响应,其数据域长度为0-501字节。

§4.3 BACnet的LonTalk局域网规范

LonTalk是由美国Echelon公司开发的数据通信协议,较为广泛地应用于控制网络的数据通信中。BACnet支持使用LonTalk协议的服务来传输BACnet报文的功能,为此制定本规范。BACnet将LonTalk协议规范,包括将来的扩展,作为自己的标准。同时,仍然使用ISO 8802-2中的Class I LLC和类型1不确认的无连接模式服务作为逻辑链路控制协议。在产品实现中,要将BACnet的DL-UNITDATA原语映射为LonTalk应用层接口。

1.LLC原语所要求的参数

BACnet网络仍然使用LLC的数据链路服务来传送BACnet链路服务数据单元(LSDU)。同时,使用DL-UNITDATA原语传送LLC参数。DL-UNITDATA原语中的参数是源地址、目标地址、数据和优先级。每个源地址和目标地址由LonTalk地址、链路服务访问点(LSAP)和报文代码(MC)组成。LonTalk地址的长度可变,由BACnet设备的构造确定。MC为1个字节,其值为X‘4E’,表示此数据结构是一个BACnet帧。由于LonTalk报文代码识别BACnet网络层,所以不用LSAP。数据参数就是来自网络层的NPDU。

2.将LLC原语映射到LonTalk的应用层

类型1不确认的无连接LLC服务原语DL-UNITDATA.request映射为LonTalk的msg_send请求原语,DL-UNITDATA.indication映射为LonTalk的msg_receive请求原语。LonTalk网络中不能传输长度超过228字节的LPDU。

3.LonTalk应用层原语所要求的参数

LonTalk应用层原语是msg_send和msg_receive。这些是用目标节点的LonTalk地址和BACnet报文代码封装的LLC数据的帧结构,图5是这种帧的数据结构图。整个帧由物理介质传送到目标节点设备。

4.物理介质

完全采用Lontalk标准及其附件中对物理介质的规范。

第5章 BACnet的对象模型

本章介绍BACnet定义的对象模型及模型中的18个对象类型,并对每一类对象的内容进行介绍。对象模型构建了网络设备之间通信的?共同语言?,这些对象具有广泛性,楼宇自控系统中的每个单元设备都可以由一个或者几个对象来描述。

§5.1 BACnet的对象模型及其属性

在楼宇自控网络中,各种设备之间要进行数据交换,为了能够实现设备的互操作,所交换的数据必须使用一种所有设备都能够理解的?共同语言?。BACnet的最成功之处就在于采用了面向对象的技术,定义了一组具有属性的对象(Object)来表示任意的楼宇自控设备的功能,从而提供了一种标准的表示楼宇自控设备的方式。在BACnet中,所谓对象就是在网络设备之间传输的一组数据结构,对象的属性就是数据结构中的信息,设备可以从数据结构中读取信息,可以向数据结构写入信息,这些就是对对象属性的操作。BACnet网络中的设备之间的通信,实际上就是设备的应用程序将相应的对象数据结构装入设备的应用层协议数据单元(APDU)中,按照前面几篇文章中所叙述的规范传输给相应的设备。对象数据结构中携带的信息就是对象的属性值,接收设备中的应用程序对这些属性进行操作,从而完成信息通信的目的。

5.1.1 BACnet的对象定义

BACnet目前定义了18个对象,表5-1给出了这些对象的名称和应用举例。

每个对象都有一组属性,属性的值描述对象的特征和功能。在BACnet中,对于每个对象来说,属性分为必需的和可选的两种。用三个字母表示属性的类型,其意义分别是:O表示此属性是可选的,R表示此属性是必需的且是用BACnet服务可读的,W表示此属性是必需的且是用BACnet服务可读和可写的。

5.1.2 BACnet对象的属性

BACnet要求每个BACnet设备都要有一个?设备对象?,?设备对象?包含此设备和其功能的信息。当一个BACnet设备要与另一个BACnet设备进行通信时,它必须要获得该设备的?设备对象?中所包含的某些信息。表2给出?设备对象?的属性描述。

从表5-2中可以看到,虽然?设备对象?的属性很多,但是大部分是在出厂时就写定了的,且是只读属性。另一点要注意的是,?设备对象?的?对象标识符?属性中的设备实例标号必须是在整个BACnet互联网中唯一的,这样才能在安装系统时标识设备。

表中的前三项属性,即?对象标识符?,?对象名称?和?对象类型?是BACnet设备中的每个对象必须具有的属性。?对象标识符?是一个32位的编码,用来标识对象的类型和其实例标号,这两者一起可以唯一地标识对象;?对象名称?是一个字符串,BACnet设备可以通过广播某个?对象名称?而建立与包含有此对象的设备的联系,这将使整个系统的设置大为简化;?设备对象?的属性向BACnet网络表述了设备的全部信息。例如,?对象列表?属性提供了设备中包含的每个对象的列表。

下面分类介绍BACnet标准中定义的18个对象和它们的属性。

§5.2 BACnet对象的分类介绍

5.2.1 输入输出值对象类型及其属性

在楼宇自动控制系统中,设备的输入输出值是一类基本的参数。BACnet定义了6个输入输出值对象,分别是:模拟输入对象,数字输入对象,模拟输出对象,数字输出对象,模拟值对象和数字值对象。这些对象全面地定义了BACnet设备之间交换关于与控制单元有关的信息时所采用的?共同语言?。模拟输入和数字输入是物理设备或者硬件的输入信号参数,模拟输出和数字输出是物理设备或者硬件的输出信号参数,模拟值和数字值是存储在BACnet设备中的控制系统参数。表3给出了这些对象的属性描述。

图5-1是一个模拟输入对象的举例,它描述一个气体温度传感器的模拟传感输入信号。这个对象可能驻留在连接传感器的节点设备中,也可能驻留在作为BACnet设备的智能传感器中。如何实现这些是各生产厂家自己解决的问题。图1表示网络设备可以通过5个属性访问该对象,其中描述、设备类型和单位属性值是在设备安装时设定的,而当前值和脱离服务属性值表示设备的当前状态。还有一些属性(模拟输入对象最多可以有25个属性)没有在此图中显示出来,它们的值可能是在设备出厂时设定的。图中还表示通过网络有一个询问此对象当前值的请求和此设备的应答,这些就是对属性的操作。

5.2.2 命令对象类型

命令对象根据其Present_Value属性中的?操作代码?向一组对象的属性写入一组值。命令对象的Action属性是一个数组,其中包含有一个操作列表,对应着一系列的操作值。当Present_Value属性被写入新值时,命令对象就根据此值所对应的Action属性中的列表内容,向某个BACnet设备的某个对象的某个属性写入某个特定值。

5.2.3时序表和时间表对象类型

时序表对象用来表示一个日期列表,可以包含一些有特定事件发生的日期,例如节假日等。

时间表对象用来表示一个周期性的时间表,在每个时间表内,都进行相同的操作。此对象也可用作周期性地向某个对象的某个属性写入某特定值。

5.2.4事件登记对象类型

将任何一个对象的任何一个属性的值发生偏离预设值的变化称为事件。事件登记对象包含在BACnet系统中管理事件所要求的信息。这些信息包括事件的定义和当该事件发生时将要通知的设备以及通知报文的内容等。

5.2.5文件、组和环对象类型

文件对象表示用BACnet文件服务可以访问的数据文件的性质,它的一个重要的属

性是文件访问方式属性,其值有记录访问,流访问,记录与流访问。

组对象用来简化BACnet设备之间信息交换的处理过程,其方法是使用一种简记的方式来标识一个组中的所有成员。一组中可以包含各种对象类型。

环对象表示任何形式的反馈控制环路。 5.2.6多态输入输出对象类型

多态输入对象表示对象所驻留的BACnet设备中的一个运算程序的结果。例如,多态输入对象的状态(用它的当前值属性表示)可以是多个二进制输入值的逻辑和,或者是一个或多个模拟输入的阈值,或者是一个数学计算的结果。

多态输出对象表示对象所驻留的BACnet设备中一个或者多个物理输出或处理程序的期望的状态。当前值属性是一个无符号整数,表示对象的状态。例如,某个状态可以代表某些物理输出的活动/非活动情况,或者某个模拟输出的值。

5.2.7通知类对象类型

通知类对象包含在BACnet系统中分发事件通知所需要的信息。对于那些事件激励对象来说,这个对象特别有用,它提供了如何处理通知、怎样规划通知目标、以及怎样获得确认的方式。

5.2.8程序对象类型

程序对象表示在BACnet设备中运行的应用程序的外部可见特征。程序对象的属性向网络提供了一个应用程序的一些参数的表征。在程序对象的属性中有两个属性特别重要,它们是程序状态(Program_State)属性和程序改变(Program_Change)属性。程序状态属性反映该对象所表示的应用程序执行过程的逻辑状态。程序状态属性有六个属性值,分别是:IDLE(程序没有执行),LOADING(正在装载应用程序),RUNNING(正在执行应用程序),WAITING(运行的程序正在等待某个外部事件),HALTED(由于某个错误导致运行程序中止)和UNLOADING(运行程序按要求被终止)。程序改变属性用来请求改变该对象所表示的程序的运行状态。程序改变属性有六个属性值,分别是:

本文来源:https://www.bwwdw.com/article/ksup.html

Top