嵌入式系统中BACnet.docx
嵌入式系统中BACnet简称ASHRAE于1995年度制定。其最根本的目的是要提供应建筑自动控制系统实现互操作的方法。所谓互操作是指一种才能,可以使得分布的控制系统设备通过相关信息的数字交换,可以协调地工作,进而完成一个共同的目的。BACnet解决了建筑自控系统中存在的多厂商系统和设备不兼容而难以集成的问题,提供了不同建筑自动控制系统实现互操作的方法,有望成为控制网络中的TCP/IP协议。2003年度1月,BACnet成为正式的国际标准ISO16484标准。BACnet有以下特点:开放性:是美国现行的国家标准和ISO国际标准。面向对象:BACnet协议采用面向对象的技术,因此具有可扩展性和可复用性。互操作性:ASHRAE的BACnet委员会提出了一种新的描绘自动控制系统功能性的方法,称为互操作域InteroperabilityAreas,其中规定了5个互操作域,分别是:数据分享、报警和事件管理、时序安排、趋势记录、设备与网络管理。2.1BACnet体系构造BACnet以OSI模型为参考,结合建筑自动控制领域的实际需求,形成了一个简化模型。BACnet充分利用现有成熟的网络技术,在底层兼容5种网络构造,降低了开发本钱,同时也利于系统集成。2.2应用层应用层协议数据单元APDU传送包含在应用效劳原语和相关参数中的信息。因为BACnet采用简化的OSI体系构造,不包含任何表示层的功能,必须预先定义好通信设备一致遵守的编码规那么。BACnet的编码规那么设计考虑到了楼宇自动控制体系对简单化、紧凑化的要求。因此,这个编码规那么在一些方面与ISO8825有所不同。但是仍然允许使用ASN.1对BACnet的APDU进展编码。2.3网络层网络层提供网络路由功能,使得报文可以被直接传递到一个远程设备、一个远程网络上的所有设备、或所有网络上的所有设备。一个BACnet设备由一个网络号码和一个MAC地址唯一确定。由于BACnet协议规定两个BACnet设备之间只能有一条有效途径,这个限制大大降低了网络层的复杂性,简化了路由算法。2.4数据链路层MS/TP数据链路层负责将报文从一个设备传送到另一个单独设备,或所有本地网设备。在本文中,只讨论MS/TP网络。MS/TP使用主/从令牌来控制对总线网络的访问。MS/TP协议向上为网络层提供与ISO8802-2逻辑链路控制协议一样的效劳;向下使用EIA-485物理层提供的效劳。3程序实现3.1协议栈软件构造在高端机器如工作站上,我们可以很好地利用C+语言的面向对象特性,完好实现整个BACnet协议栈。但在低端MCU上,程序空间和数据空间非常有限,因此需要尽可能简化协议栈软件的体系构造。同时根据不同型号的DDC,对协议栈软件进展剪裁配置。图2略表示了协议栈软件中各个模块之间的接口关系。在整个构造中最复杂的是应用层模块,包含BACnet对象模块,根本数据类型模块,APDU解析/分发模块和APDU组装模块。3.2应用层模块BACnet协议为了简化其层次构造,使得BACnet应用层涵盖了开放系统互联参考模型OSI中会话层、表示层和应用层的功能。BACnet应用层模块是BACnet应用软件的根底,它实现BACnet协议应用层内容,负责提供工作站的各功能模块与物理设备直接的通信效劳。根据应用层的功能分析,可以将应用层划分为如下几个模块:对象模块、效劳模块、根本数据类型模块。对象模块定义了BACnet对象。BACnet对象按其功能可分为两类:一类是收集数据的对象,如模拟输入/输出对象,这类对象需要访问设备硬件;另一类对象是在收集的数据根底上完成复杂功能,如环对象和其他实现报警事件功能的对象,这类对象不需访问硬件。另外,某些对象的属性如趋势登录对象的缓存器大小属性需要设备厂商根据DDC型号进展初始配置,协议栈提供对这些属性的配置函数接口。效劳模块用于处理报文的分发、解析和组装。对于从网络层上来的APDU,效劳模块根据APDU的类型和效劳选择参数,调用相应的效劳解析模块。效劳解析模块对APDU的信息进展解码,并根据需要与DDC中的BACnet对象进展交互。另一方面,DDC会发出响应报文如读属性响应,或主动发出某些报文如事件与报警效劳,因此效劳模块还提供效劳报文组装的函数接口。根本数据类型模块是一个工具类库,包含对根本数据类型的定义及其编、解码函数。BACnet包含13种应用数据类型和其他根本数据类型。BACnet应用数据类型可以直接进展编、解码。BACnet根本数据类型对应着ASN.1中的复合数据类型,它是由BACnet应用数据类型配合标记按照一定的构造组合而成。因此,根本数据类型的编/解码实际上是按一定的规那么调用应用数据类型和标记的编/解码方法来实现的。3.3网络层模块对于DDC来讲,网络层向应用层提供一个不确认的无连接数据单元传输效劳。网络层与应用层交互的效劳原语是网络层数据单元恳求N-UNITDATA.request和网络层数据单元指示N-UNITDATA.indication。其原语参数如下:N-UNITDATA.requestdestination_address,data,network_priority,data_expecting_replyN-UNITDATA.indicationsource_address,destination_address,data,network_priority,data_expecting_reply当DDC收到来自链路层数据,解析出相应的地址信息,并把地址信息和APDU绑定起来存放到一个构造中传送给应用层,这样当应用层需要回复报文时可以得到目的地址。3.4数据链路层MS/TP模块MS/TP是一个主从/令牌传递的数据链路协议,物理层采用RS-485半双工通信标准。MS/TP层包含两个状态机,分别是主节点状态机和接收帧状态机;接收帧状态机负责帧的接收,如是数据帧那么调用与网络层接口上传给网络层,主节点状态机负责帧包括数据帧和控制帧的发送。两个状态机分时实现,根据两者之间的关系,接收帧状态机可放在主节点状态机中统一调度。图3略BACnet数据链路层模块构造图,图3显示了BACnet数据链路层的子模块:其中,接收模块实现接收帧状态机;发送模块实现主节点状态机;串口控制模块实现串口驱动与收发控制,串口读写采用中断方式;网络层接口模块定义接口及接口函数调用模块,使用效劳原语DL_UNITDATA.request和DL_UNITDATA.indication来实现。4完毕语本文提出了BACnet-MS/TP协议在MCU中的软件实现方案,解决了BACnet控制器的通讯功能。假如进一步采用实现多任务处理,配合数据收集、控制和组态模块,就可以开发出实用的BACnet控制器。