BACnet/IP智能终端的模型研究与设计
图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℃,和实际情况相吻合。
IPv4 ARM9 BACnet 智能终端 CC1101 相关文章:
- 基于SOCKS地IPv4向IPv6过渡技术(01-08)
- IPv6的网络安全改进与新问题(01-16)
- IPv4/IPv6双栈方法(01-16)
- 移动IPv6关键路由技术分析(01-25)
- IPV6技术白皮书(四)(01-28)
- 浅谈IPv6协议中的地址配置(01-01)