BACnet/IP是BACnet协议与IPV4互联网互连的协议。本文提出了一种将BACnet/IP与无线通信相结合的终端模型,同时将BACnet Protocol Stack开源工程移植应用于此种模型之上。硬件平台是ARM9处理器和CC1101无线通信模块,经测试此控制器符合BACnet/IP的通信协议规程。重点完成了ARM9嵌入式平台的软硬件搭建、BACnet Protocol Stack在此平台的移植与改进,以及无线模块与BACnet协议栈的互操作和终端提供的web服务。
引言
BACnet(Building Automation and Control network)是一种为楼宇自动控制网络所制定的数据通信协议,其产生的背景是用户对楼宇自动控制设备互操作性的广泛要求,即将不同厂家的设备组成一个一致的自控系统,它是智能建筑楼宇自控领域中唯一的国际标准。目前全球跨国楼宇自控厂商均支持和生产BACnet自控设备和产品,而国内对于BACnet方面的研究与应用仅限于少量的论文及会议,这对于我国智能建筑自控领域的发展显然是十分不利的。本文在研究国外BACnet发展的基础上提出了一种BACnet/IP楼宇控制器的模型,并在实验室环境中实现和测试。
1 BACnet协议简介
BACnet最成功之处就在于采用了面向对象的技术,定义了一组具有属性的对象(Object)来表示任意的楼宇自控设备的功能,从而提供了一种标准的表示楼宇自控设备的方式。BACnet标准中定义的标准对象有模拟输入(Analog Input)、模拟输出(Analog Output)、设备(Device)等,其中“设备对象”是每个BACnet必须拥有的对象,这是一个具有网络访问特征的集合模型。举例来说,一个标准的BACnet测温设备就可以用设备对象(Device)加一个模拟输入对象(Analog Input)来表示。
当一个BACnet设备要与另一个BACnet设备进行通信时,它必须要获得该设备的设备对象中所包含的某些信息,这些信息在BACnet中就称为BACnet设备对象的属性,“对象标识符”是BACnet设备中的每个对象必须具有的属性,它是一个32位的编码,可以唯一地标识一个BACnet设备。对象标识符由对象的类型和其实例标号组成,第一部分为对象类型标识域,占10位,可以表示1024个对象类型。协议规定0~127为BACnet保留类型,例如Analog Input对象类型为0,Analog Output对象类型为1,Device对象类型为8等;第二部分为对象实例编码域,共22位,可以表示4T个对象实例,也就是说Device对象在整个BACnet网络中只能有4T个实例,而其他对象在一个BACnet设备中就可以有4T个实例。类比于IPV4协议来说,Device对象所对应的实例号就相当于IP地址,除Device对象外的其他对象在每个BACnet设备中可以多达4T个,每个对象都可以提供不同的服务,如BACnet测温设备中的Analog Input对象可以提供读取温度服务,这就相当于IP通信进程中的“PORT”,每个PORT可以提供不同的服务,BACnet设备的通信过程与IPV4协议中通过IP + PORT在IP网络中确立一个服务进程的思想是一致的。
BACnet/IP作为BACnet协议的扩展于1999年加入至BACnet标准中,BACnet/IP提出了使用IPV4网络作为BACnet的底层网络,从而可以极其方便地利用IP网络组建大型的BACnet网络。
2 BACnet/IP智能终端的模型建立
2.1传统BACnet/IP终端模型
传统的BACnet/IP终端在实现上基本上遵循这样的模型:终端控制器一方面实现BACnet/IP协议栈的功能,另一方面还要和底层控制器,如空调控制、照明控制器等各种DDC(直接数字控制系统),进行通信。每个BACnet设备由一个Device对象和一个其他的服务对象组成,这个服务对象就和特定的DDC进行通信,从而完成特定的工作。
传统的BACnet/IP终端设备模型如图1所示,往往是每个控制器负责一样具体的工作,如每个控制器只能单一的控制空调设备,暖通设备或者照明设备等,这种做法可以降低BACnet/IP控制器的工作负荷,每个控制器只用维护很少量的资源,节约控制器的制造成本,甚至可以用单片机实现。但是,缺点是显而易见的:这种做法必将占用大量的Device实例号,不易于BACnet的大规模组网与实现。
图1传统BACnet/IP终端设备模型
2.2改进的BACnet/IP终端模型
鉴于前述的传统BACnet/IP终端模型的缺点,提出了一种改进的终端模型:一个BACnet设备由一个Device对象和多个其他对象组成,相同的对象类型则由对象实例域进行区分,比如温度对象和湿度对象在BACnet标准中都是用Analog Input对象来表示,但是相同对象可进一步用不同的对象实例号来区分。若远端试图访问本BACnet终端的湿度对象,则需要在BACnet/IP网络上通过Device对象实例号与湿度对象对应的Analog Input对象实例号来访问。
相比与传统的BACnet/IP终端模型,改进后的终端中每个BACnet/IP控制器可以负责不同的工作,拥有多种不同的对象及属性,可以提供更多的服务,同时大大减少Device对象的使用量,适合BACnet网络的大规模实现。
传统与改进后的BACnet/IP终端模型如图2所示。
图2传统与改进后的BACnet/IP终端模型
2.3基于无线的BACnet/IP终端
在改进的BACnet/IP终端模型中,BACnet控制器与底层控制器间仍然是以有线的方式进行通信,有线通信对于BACnet/IP通信环境的搭建以及以后的扩展维护都是一个极大的阻碍。所以本文采用无线通信的方案进行BACnet/IP终端的实现,其模型如图3所示。当BACnet/IP终端收到经由IPv4网络发送而来的BACnet服务原语,会经过其内部的BACnet协议栈确认为对象访问类服务,控制器需要操作无线模块对特定的无线采集DDC节点进行访问,如读取当前温度值、调节照明亮度等。
图3基于无线的BACnet/IP终端
将无线通信的方法应用于BACnet,可以使得BACnet组织更加灵活,更加方便地增加和移除设备。
3 BACnet/IP终端的硬件设计
基于上述模型,终端需要同时提供多个对象的服务、IP网络服务,以及和无线模块之间通信,这对于硬件资源的要求较高,所以终端在硬件微处理器的选择芯片为三星公司的S3C2440A处理器,而在无线模块上选择是CC1101无线芯片。图4是终端控制器的硬件结构图,各部分的功能如下:
①S3C2440A控制核心板,负责嵌入式Linux操作系统及BACnet协议栈的运行。
②USB模块,主要是外接无线网卡,可以通过WLAN将终端接入IP互联网中,接无线网卡的好处是进一步省去了IP网络布线的麻烦。
③UART模块,使终端可以通过RS232接口和PC机进行通信,主要是为了调试。
④无线模块,终端侧的无线节点,和底层无线采集节点进行通信。
⑤LCD触摸屏,用于和用户交互,平时工作时可以将背光关掉以节能。
图4 BACnet/IP终端硬件设计
4 BACnet/IP终端的软件设计
基于前面的BACnet/IP终端模型与硬件平台,软件平台上选择嵌入式Linux作为平台,ARM9和Linux的配置也是当前较为先进和流行的嵌入式平台。软件设计部分主要涉及嵌入式Linux系统的搭建与裁剪、BACnet/IP协议栈的移植,以及BACnet/IP协议栈和无线模块之间的交互。
4.1嵌入式Linux系统构建
在ARM9处理器上移植与构建嵌入式Linux系统目前已经有比较成熟的方案,在移植Linux系统时不要裁剪网络功能,需要将IPV4与IPV6网络功能保证完全,因为BACnet/IP协议正是基于TCP/IP协议栈的UDP层,而保留IPV6协议栈是考虑到BACnet也可以架构与IPV6网络之上,这是需要注意的。
4.2 BACnet/IP协议栈的移植
BACnet/IP协议栈的实现上,本文采用移植BACnet Stack Protocol工程。BACnet Stack Protocol是Steve Karg在2005年于着名的开源网站sourceforge上维护的一个BACnet协议栈开源工程,它完整地实现了BACnet协议标准,并且可以方便地移植应用于多种平台上,如WIN32、Linux、PIC单片机、ARM7处理器等,目前最新的版本是bacnetstack0.8.0.
由于BACnet Stack Protocol工程采用C语言开发,所以可以很方便地移植于嵌入式Linux系统中,具体来说只要在编译的时候选择相应处理器对应的编译器即可。BACnet Stack Protocol之所以具有高度的可移植性,归功于其模块化的编程方法和BACnet协议栈的分层设计。在将BACnet Stack Protocol移植于不同硬件平台时,只需要修改对应数据链路层部分,而网络层和应用层代码无需修改,这和IP协议栈能应用于不同硬件场合的思想也是一致的。
4.3无线模块与BACnet/IP通信
由于无线模块只负责控制着底层的DDC,相应于BACnet协议中的应用服务,也就是说无线模块只需要负责和BACnet协议栈中的应用层进行通信,当应用层协议数据单元(APDU)需要获取DDC的数据时,即调用无线模块进程与之进行通信。整个系统的软件设计如图5所示。
图5 BACnet/IP终端软件设计
系统的软件由以下几部分模块组成:
①Linux内核模块,主要用于IP网络协议栈以及各种底层驱动(如LCD屏幕,无线模块驱动)的实现。
②BACnet协议栈模块,主要用于移植BACnet Protocol Stack开源工程。
③无线模块,用户态的无线模块进程用于和底层的各个无线采集节点进行通信,而通信的上层进程为BACnet协议栈。
④Web模块,提供Web服务,使得用户可以通过IP网络的http服务远程访问和控制终端。
5系统性能测试
为了验证BACnet/IP终端的实际运行情况,采用了VTS软件进行测试,VTS是验证应用在BACnet楼宇系统中的有力工具。在BACnet/IP网络中,远端控制器发送BACnetReadProperty服务原语,其对象设置为AnalogInput,对象的实例号为0(AnalogInput/0在本测试环境下代表的是远程的BACnet/IP温度采集器),图6展示的是本端终端控制器的响应数据,可以看出其PropetyVlaue:Real子类中的值为28.4,也就是说当前的温度为28.4℃,和实际情况相吻合。
图6系统测试结果
结语
本文就BACnet/IP终端的模型建立进行了简单研究和设计,提出了一种改进的BACnet/IP终端模型,同时对底层控制器和BACnet控制器采取了无线通信的方式,对于BACnet终端的设计具有一定的参考价值。BACnet协议作为智能楼宇互操作通信的国际标准,其应用在我国还处于起步阶段,随着中国对于智能楼宇市场需求的慢慢扩大,相信BACnet将会有更好的发展前景。
参考文献
[1]魏峰,付东翔,王亚刚。BACnet/ZigBee协议转换器的研究与实现[J].自动化仪表, 2012,33(9): 3538.
[2]董春桥。智能建筑自控网络[M] .北京:清华大学出版社,2011.
[3]汪谢丹。基于ARM9和嵌入式Linux的BACnet楼宇控制器的研究[D].武汉:武汉理工大学,2010.
[4] American Society of Heating, Refrigeration, and AirConditioning Engineers Inc. ANSI/ASHARE BACnet Standard BACnet:A data communication protocol for building automation and control networks,2004.