基于面向对象技术的楼宇自控网络协议的实现【摘要】本文通过介绍BACnet标准协议中使用的通信语言三大要素对象、属性和服务.说明面向对象技术在BACnet标准中的具体实现,并采用面向对象的设计思想对BACnet协议的类库进行开发、设计和类结构的定义。控制系统中的面向对象设计主要分为两部分面向对象编程和面向对象的协议。协议是控制系统相互之间通信的基础在控制系统中仅有属于管理层的面向对象编程语言是不够的。面向对象设计必须由面向对象的协议来完善.只有包括现场层的面向对象通信协议才能构成完整的面向对象控制系统。BACnet协议是针对楼宇自动化系统设计的,采用了面向对象酌技术.用“对象’.“属性”和”服务“等要素定义信息格式,定义了一种具有属性的对象来表示任意的楼宇系统设备的功能.从而提供了一种标准的表示楼宇自控设备的方式。一.可行性研究1.1面向对象技术面向对象技术中最重要的就是“对象”的概念,“对象”具有一定的属性和方法。一个具体的对象可以有许多的属性和方法,面向对象技术的重要特点就是对象的封装性。对于外界而言.并不需要知道对象有哪些属性,也不需要知道对象本身的方法是如何实现的,而只需要调用对象所提供的方法来完成特定的功能。一个面向对象的控制程序由若干相互关联的一组对象组成,并通过对象之闻的相互联系完成所有的功能。对象之间的联系方式即是消息、激励机制,消息是用来请求对象执行某个处理或回答某些信息的要求。在面向对象系统中,对象之间的联系是通过消息的传递完成的,对象只有接收到消息之后才能做出响应,而对捎息进行响应的是对象中的成员函数,即所谓的“方法”,方法是实现消息具体功能的手段。1.2BACnet协议通信协议是楼宇自动化系统(BAS)的重要组成部分。由于功能不同,不同的设备具有不同存储信息的数据结构。为了实现设备间的信息交换,必须定义一种标准的、“网络可见”的信息描述方式。楼宇自动控制网络数据通信协议(ADataCommunicationProtocolforBuildingAutomationandControlNetwork,BACnet)采用了面向对象的技术,定义了一组具有属性的对象(Object)来表示任意的楼宇自控设备的功能,从而提供了一种标准的表示楼宇自控设备的方式。BACnet是一个ISO国际协议,定义了包括空调控制系统、消防等楼宇设备控制系统之间的数据通信方式。本协议遵循OSI开放性网络协议,将数据组合成对象在网络之间传播。BACnet协议是一个面向对象的协议。在BACnet应用层,通过定义标准的对象和服务,对应用提供了完整的实现手段,同时又可以使得开发商按照不同的应用进行具体的开发,实现了异构BACnet设备的互操作性以及良好的可重用性和扩展性。1.3BACnet中的面向对象的要素工业界长期使用“点(Points)”来表示传感器输入、控制输出或控制值。BACnet采用了面向对象技术。在BACnet协议中定义了一组标准的对象类型,给出了一种抽象的数据结构,作为建立BACnet协议中应用层服务的一种框架。大部分应用层服务设计成对这些标准对象类型的属性进行访问与操作,网络中的每个设备用对象进行描述。因此,对象(Object)、属性(Property)和服务(Service)构成了BACnet要素。在BACnet中,对象是在网络设备之间传输的一组数据结构,对象的属性就是数据结构中的信息。设备可以从数据结构中读取信息,可以向数据结构写入信息,这些就是对对象属性的操作。BACnet网络中的设备之间的通信,就是设备的应用程序将相应的对象数据结构装入设备的应用层协议数据单元(APDU)中,按照一定的规范传输给相应的设备。对象数据结构中携带的信息就是对象的属性值,接收设备中的应用程序对这些属性进行操作,从而完成信息通信的目的。BACnet定义了一个“对象”的标准集,任何一个实际控制设备均可由不同的标准对象实衡集合来表示。其中每个对象都有一个“属性”标准集,对象的属性用于向BACnet互联网上的其它设备描述该对象及其当前状态。正是通过这些属性,该对象才能被其它BACnet设备操作和控制。不过值得注意的是,BACnet标准对象只是一些与控制信息和寻址信息有关的“属性(Property)”集合,没有定义对这些属性操作的方法(method)。因此BACnet定义的对象与面向对象程序设计语言中定义的对象是不同的概念,前者相当于结构化程序设计语言中的数据结构。在BACnet中,如果说对象和属性提供了通信的共同语言,那么服务则提供了信息、传递的手段或方法。通过这些方法,一个BACnet设备可从另一个设备中获取信息,可命令另一设备执行某动作或向一个或多个设备发布某种事件已发生的通知。每个发出的服务请求和返回的服务应答都是一个报文分组,该报文分组通过网络从发送端传输到接收端。BACnet定义了32种服务,划分为5类:报警和事件、文件访问、对象访问、远程设备管理和虚拟终端服务。二、方案设计下面以实现对模拟输入对象当前值属性的查询为例,来实现楼宇自控网络协议。图1表示一个BACnet读属性服务:图1BACnet读属性服务示意图在面向对象方法中,功能是通过与对象的通信获得的。对象被定义为一个封装了数据结构(或属性)和操作的实体。属性是为执行操作而存在于刘象之巾的数据、信息。消息是对象通信的方式,因而也是获得功能的方式。对象受到发给他的消息后,或者执行一个内部操作(有时成为方法或过程),或者再去调用其他对象的操作,从而完成一定的功能。同样,一个客户端的BACnet用户需要知道BACnet网络中指定DDC中的温度计的当前输入值,并不需要知道温度值的存储方式,只需发出一份读属性服务请求(ReadPropertyservice),即面向对象技术中对对象的操作。该服务报文通过网络发送给指定的BACnet设备,该设备通过解析所接收到的报文,得知该报文为读取其所属的模拟输入对象的当前值属性。此时温度计在BACnet网络中不再是传统控制模式下的一个控制点了,而是BACnet设备所属的一个模拟输入对象。BACnet设备通过访问模拟输入对象的当前值属性,获得此时的室内空气温度为25.0℃最后,通过封装的报文做出服务应答。当脱离服务为true时,当前值属性是可写的,从而丰富了控制的内容。所以采用了面向对象的BACnet协议很容易实现节点闯的对等通信,使系统设计大大简化,可靠性大大提高。2.1对象结构的实现模拟输入对象是BACnet标准对象之一,其属性表示一个模拟输入的外部可见一致性代码,代表一种模拟传感器输入。BACnet协议中对于模拟输入对象类型结构形式描述,见图2。其中,“Object—identifier、Object—name、Object—type、present—value、out—of—service”分别表示模拟对象的对象标识符、对象名称、对象类型、当前值、脱离服务等属性,“[75]”为该属性编号,“BACnetObjectIdentifier”是属性数据类型。根据协议中有关模拟输入对象的描述,可以生成一个模拟输入对象的实例:空调控制器中的混合空气温度模拟输入对象。以下是该对象的参数:Property:Object_Identifier=(Analoglnput,Instance1)Property:Object_Name=‘hermometer’Property:Object_type=ANALOG—INPUTProperty:Present_Value=25Property:Out—Of-Service=FALSE2.2服务的实现为了从BACnet网络中获取另外设备的信息,需要实现相关服务。在本例中,需要获取温度计的输入值,因此必须定义读属性服务(ReadPropertyservice):boolReadProperty(unsignedintdeviceObjID,BACnetObjectlden—tifierObjID,intpropertylD,BACnetRealpropertyValue,BACnetUnsignedpropertyArraylndex=0);对象标识符与具有全局唯一性质的BACnet设备对象标识符结合使用,从而就能够提供一种在整个控制网络中引用每个对象的机制。因此在读对象的服务中,需要提供所选择对象所在设备的BACnet设备对象标识符、对象标识符以及属性标识符,通过这三个参数就能够在BACnet网络中唯一确定一个属性。deviceObjlD、ObjID、propertylD分别表示BACnet设备对象标识符、对象标识符以及属性标识符,propertyValue为该服务的返回值。PropertyArrayindex表示属性数组索引,如果属性是一个数据类型的数组,并且存请求中规定了一个“属性数组索引”参数,则可以使用这个无符号整型参数;指明被本服务引用的属性的元素的数组索引。否则,省略这个参数。ReadProperty0的返回值类型为bool型,当读取成功返回true,当读取失败返回false。2.3通信的实现BACnet建立在包含四个层次的简化分层体系结构上,这四层相当干OSI模型中的物理层、数据链路层、网络层和应用层。BACnet标准定义了自己的应用层和简单的网络层,对于其数据链路层和物理层,提供了五种选择方案。BACnet协议栈报文的封装实现如下:APDU——NPDU——数据链路层——,物理层对于数据链路层和物理层的数据格式可以根据具体的网络类型来分别构造。任何一种支持用BACnet协议进行数字通信的真实或虚拟的设备都是BACnet设备,每个BACnet设备必须且只能包含一个“设备对象”(DeviceObject),由BACnet网络号和设备对象标示符组成的BACnet设备标识符,在整个BACnet互联网中是唯一的,因此可以确定BACnet互联网中每一个BACnet设备。三、结论BACnet协议使面向对象编程变得更为简单和安全。用户只需要在程序中简单地调用对象的属性就可以获得大量的功能,使控制程序变得短小精悍,从而适用于控制系统。同时用户可以将士要精力集中在控制算法的编制上,编制程序由原来繁重和复杂的工作变成了轻松快乐的过程,节省了编程人员的时问和费用。