一种嵌入式KNX-BACnetIP网关的实现方法.docx
0?引言
1990年,七家德国电气产品制造商组成联盟,制定了EIB(EuropeanInstallationBus)技术标准。2001年,EIBA协会吸收了其他两家欧洲智能电气安装协会Batibus和EHS,在欧洲统一了智能电气安装技术标准,也诞生了全新的标准——KNX,并成立了KNX(Konnex)协会。KNX是被正式批准的住宅和楼宇控制领域的开放式国际标准,同时KNX在2013年5月成为了中国国家推荐性标准《控制网络HBES技术规范——住宅和楼宇控制系统》。
BACnet是ADataCommunicationProtocolforBuildingAutomationandControlNetwork的简称,1995年6月,美国暖通空调工程师协会组织(ASHARE)正式通过全球首个楼宇自控行业通讯标准BACnet,同年12月成为美国国家标准,同时也是欧洲标准。BACnet是一个标准通讯和数据交换协议,定义了一系列的对象类型和服务,使不同厂家的楼宇设备能够实现交互,并能为这些设备提供统一的数据通信服务和协议操作平台。由于BACnet支持多种通信介质,并且数据定义采用基于对象的形式,BACnet在北美和欧洲使用比较广泛。
基于KNX与BACnet协议的产品已经很丰富,但对于这两种通信系统的集成网关设备在国内则并不多见,目前使用的集成网关几乎都是国外产品,价格昂贵,而且维护难度较大。
1?网关的整体设计方案
1.1网关的运行机制
当网关将KNX系统和BACnet系统集成后,其双向数据交互机制如图1所示,具体如下:
1)上行数据处理方式
当获取到KNX总线报文后由KNX通信模块对报文进行解析并放置到自身模块的缓冲队列链表中,协议转换模块获取缓冲队列,查看组地址是否在配置数据内存池中,若存在,则查看本次的新值与旧值是否一致,若有变化则由BACnet/IP协议模块进行对象和服务编码,触发COV通知,通过TCP/IP通信模块上传给BACnet系统其他设备,若无变化则不处理。
2)下行数据处理方式
(1)当BACnet系统对网关设备有写服务操作时,BACnet/IP协议模块通过UDP接收报文并对其解码,根据对象类型和对象实例号查找数据内存池,如存在,则协议转换模块根据映射关系把BACnet数据封装为KNX数据报文,通过KNX通信模块触发向KNX总线发送写组地址数据报文。
(2)当配置完毕网关正常运行中诊断出KNX总线复位时,则通过KNX通信模块触发向KNX总线发送读组地址数据报文。
(3)当网关复位重启配置正常后,则通过KNX通信模块触发向KNX总线发送读组地址数据报文。
图1数据双向交互机制
1.2总体设计和模块划分
1.2.1基础软硬件平台选择
根据楼宇自动化系统的特点,该嵌入式网关不求功能最大化,在考虑用户需求和成本的情况下选择合适的硬件平台和软件实现方式,整体设计和模块划分如图2所示。
图2网关整体设计方案
1)硬件平台的选择
Cortex-M3处理器以其较高的性价比得到了广泛应用,该嵌入式网关选用ST公司的STM32F207ZG作为硬件平台,使用KNX专用芯片进行KNX报文的接收和发送。
2)TCP/IP协议栈的选择
因为BACnet/IP协议首先需要UDP协议的支持,因此选择一种合适的TCP/IP协议栈至关重要,该协议栈只需要支持ARP、ICMP、UDP等基础协议即可,Lwip协议栈是一款轻量级的TCP/IP协议栈,开源、免费、占用内存少,有无操作系统的支持都可以运行,有大量的网络资源和较多的实际应用实例,因此该网关最终选择了Lwip作为网络协议栈,但需注意,该协议栈需要根据设备的实际需要进行修改,如ARP表项的数目,内存池Buf的大小等都需要仔细斟酌。
1.2.2应用程序的实现方案
应用程序的开发分为两个部分:
1)PC配置软件采用VisualC++6.0进行集成开发,该软件主要是实现对网关进行参数配置、组态配置、状态监视及数据监视等功能,与网关软件匹配使用,本文不做深入探讨。
2)嵌入式网关应用程序采用C语言和MDK环境进行集成开发,采用模块化设计思想,主要分为:KNX协议模块(实现KNX报文的拆包和组包);网关管理模块(对KNX系统与BACnet系统数据映射、通信进行管理);COV模块(实现针对状态或数据值变化而引起的COV数据处理);接收配置模块(接收组态配置);诊断等其他模块(网关自身运行状态、故障及总线等诊断和处理)。
本文着重讲解BACnet/IP协议模块、COV模块实现的关键技术,同时对BACnet系统和KNX系统的映射原理也进行了着重分析。
2?BACnet协议实现的关键技术
2.1BACnet/IP协议
BACnet/IP协议规定使用UDP协议进行通信,端口为47808,其所有的