1. 引言
智能家居起源于国外,在国内已有十几年的发展时间了。目前智能家居行业尚无统一的国际国内标准,生产智能家居产品的厂商各自为政,执行着各异的协议端口[1] ,主要研究方向有基于ZigBee、WiFi、RF、CAN总线等组网方式的智能家居系统,然而,即使采用基于相同的组网技术的智能家居系统也不能实现互连互通,因此滞后了智能家居的进一步普及。KNX总线技术具有良好的开放性、交互性在有线智能家居设备组网中得到广泛应用。然而,由KNX总线组成的智能家居网络不能直接与以太网和各种无线网络互联互通,不能充分纳入众多无线终端设备和以太网终端设备,以构成基于互联网的智能家居控制网络。设计一种基于KNX总线的智能家居网关很有必要。该智能家居网关是外部接入网络与智能家居网络连接的关键设备,它可以进行TCP/IP协议到KNX协议的转换,从而实现KNX网络与以太网和各种无线网络的互联互通,达到智能家居设备网络化控制的目的。
2. 智能家居网关总体设计方案
2.1. KNX总线技术
KNX是家居和楼宇控制领域唯一的开放式国际标准[2] ,有良好的互操作性和开放性。KNX总线协议是简化了的OSI模型协议规范,采用五层结构,由物理层、数据链接层、网络层、传输层和应用层组成。KNX支持双绞线、电力线、射频等多种通信介质,其中双绞线应用最广泛。所设计的系统智能家居采用双绞线组网。KNX采用CSMA/CA技术检测和避免当两个或两个以上的网络设备需要同时进行数据传输时网络上的冲突。
2.2. 智能家居网关组成
现场总线技术的引入促使智能家居控制系统向网络化方向快速发展,智能信息处理与智能控制也成为构建智能家居网络系统的关键技术[3] 。嵌入式系统因集成度高、可靠性强、使用灵活,在智能家居控制设备以及通信网络中得到了广泛应用[4] ,基于KNX总线的智能家居网关由ARM9微处理器S3C2440 (主控制器)、KNX模块TP-UART-IC、以太网接口、无线通信模块等组成。系统组成如图1所示。其中,KNX总线与KNX执行器、KNX传感器以及相应的智能家居设备组成KNX智能家居网络系统。KNX模块负责将KNX智能家居网络与主控制器连接起来,接收并处理来自KNX智能家居网络设备的各种信息,通过以太网接口传输至PC机乃至互联网进行处理;智能终端设备的请求通过无线通信模块传输至主控制器。传感器将家庭环境信息上传到主控制器,执行器接受总线信息并根据主控制器的控制信息使相应的智能家居设备处于相应的工作状态。
3. 智能家居网关硬件设计
智能家居网关是家庭内部网络与外部以太网和各种无线网络交换信息的中转站,网关硬件平台主要由ARM9S3C2440主控制器、以太网接口、KNX模块和无线网通信模块组成。

Figure 1. The composition of smart home gateway based on KNX bus
图1. 基于KNX总线的智能家居网关组成示意图
3.1. 主控制器
主控制器是智能家居网关的核心,其主要功能是与KNX模块进行通信,管理KNX网络终端家居设备,完成家庭网络和KNX家居网络之间的信息交互等。所设计的系统选择三星公司的S3C2440微处理器(ARM9系列),S3C2440可扩展LCD显示器、USB接口、触摸屏以及多个UART,为智能家居网关硬件设计提供了很好的硬件支持。智能家居网关硬件设计主要就是利用S3C2440微处理器的扩展功能,设计KNX模块接口电路、以太网接口电路、无线通信接口电路等。
3.2. 以太网接口
以太网接口的功能是将主控制器连接到以太网上,以方便用户的远程控制管理。DM9000与S3C2440的连接如图2所示。该模块不仅要实现KNX智能家居网关主控制器与以太网的数据通信,而且要能支持高速的突发数据转移和突发的访问量。由于S3C2440已集成了一个10/100 Mb自适应的以太网MAC控制器,大大简化了以太网模块的设计[5] 。因此系统选择了10/100 Mbps兼容的自适应以太网控制芯片DM9000。DM9000的工作频率最高能达200 MHZ,总线位宽高达32位,完全能满足100 Mbps的以太网数据传输。
3.3. KNX模块
KNX模块的功能是将KNX智能家居网络与主控制器相连实现主控制器与KNX智能家居网络的通信。所设计的系统KNX模块选用西门子公司的TP-UART-IC,TP-UART-IC是针对双绞线设计的通用异步收发器,TP-UART-IC为UART提供多种服务完成主控制器与KNX智能家居网络的通信,通过TP-UART-IC传感器、执行器、微处理制器等连接到KNX总线上实现数据收发。TP-UART-IC与KNX总线、S3C2440连接如图3所示。TP-UART-IC主要特性:TP-UART-IC由UATR数字接口和模拟电路接口组成;通过设置引脚TSTIN,可以配置9600 bps或者19,200 bps的传输波特率;掉电时SAVE引脚通知微处理器进行处理;TP-UART-IC提供的服务主要有:复位服务、请求通信状态服务、应答服务、数据服务。

Figure 2. The connection between DM9000 and S3C2440
图2. DM9000与S3C2440的连接示意图

Figure 3. The connection of the TP-UART-IC, KNX bus and the S3C2440
图3. TP-UART-IC与KNX总线、S3C2440连接示意图
3.4. 无线网通信模块
无线网模块不仅要实现KNX智能家居网关主控制器与无线网络的数据通信,而且要能支持并发访问。无线通信模块选用TP-LINK公司的USB无线网卡TL-WN721N。利用主控制器S32440和TL-WN721N搭建无线AP,无线AP的覆盖范围广,支持多用户接入,同时具有很强的信号收发能力,家庭环境中的各种智能终端通过无线AP与KNX智能家居网络通信,这样即能够避免布线的麻烦,同时既节省成本,又能迅速的搭建起无线控制网络。
4. 智能家居网关软件设计
4.1. 软件系统层次架构
网关主控制器S3C2440支持Linux,winCE等多种嵌入式操作系统[6] 。所设计的智能家居网关选择嵌入式Linux,构建软件平台,通过裁剪得到适合该系统的嵌入式Linux内核[7] ,从而在其上完成主控制器软件设计(软件架构如图4所示)。应用程序层完成网络通信、数据存储、串行通信等功能,实现TCP/IP协议到KNX协议的转换,从而完成以太网、无线网控制智能家居设备的目的,并且存储智能家居网络中的各种信息,便于查询和控制;硬件驱动层完成以太网驱动、无线网驱动、串口驱动、SD卡驱动等为Linux操作系统运行建立合适的环境,按照应用程序的设计与Linux内核交互操作相应的硬件设备实现KNX智能家居网络与以太网等网络的数据交互。
4.2. 应用软件主程序设计
主控制器软件流程如图5所示。主控制器启动之后,首先完成软硬件的初始化,同时打开串口和开启网络服务,程序分为两个分支,第一个分支处理串口数据,也就是从KNX家居网络传来的数据,KNX家居网络传来的数据存储至SD卡和NandFlash中的本地数据库;第二个分支处理网络数据,网络数据包括控制、设置、查询请求,根据相应的请求进行相应的处理。
4.3. TP-UART-IC通信程序
TP-UART-IC通信程序步骤如下:
1) 打开串口,判断串口是否打开正常。
2) 上行模块的主要功能是接收并处理来自KNX家居网络的数据信息,对KNX报文数据进行正确性分析,而后交由S3C2440处理。
3) 下行模块在接收到S3C2440要传送到KNX智能家居网络的后,首先验证报文数据包的正确性,验证正确后,KNX报文数据包经串口发送给TP-UART-IC。
4.4. 以太网通信程序
主控制器与以太网通信步骤如下:
1) 创建socket通信套接字。

Figure 4. The level architecture of main control
图4. 主控制软件层次架构

Figure 5. The main controller software flow chart
图5. 主控制器软件流程图
2) 调用connect系统调用向服务器发出通信连接请求。
3) 服务器端和客服端的通信连接成功建立后,调用send和recv系统调用交互接收和发送服务器端、客服端数据。
4) 数据处理分为两部分,一部分接收以太网数据,将来自以太网的数据送S3C2440,一部分是发送以太网数据,将来自S3C2440的数据发送到以太网上。
4.5. 无线通信程序
主控制器与无线网络之间的通信步骤如下:主控制器与无线网络通信连接建立后,通过socket系统调用建立TCP/IP通信连接,通信过程这里不再详述。在客户端与服务器端通信过程中利用线程池技术解决大量智能终端并发访问,服务器资源有限的问题[8] ,使只有经服务器授权过的用户才能与服务器进行通信。
5. 结束语
智能家居是目前国内外的研究热点,具有广阔的应用前景,而智能家居网关作为智能家居网络与外部有线、无线网络通信的桥梁,在整个智能家居系统中起着重要作用。基于KNX总线的智能家居网关以S3C2440微处理器为核心、利用嵌入式Linux技术,采用KNX模块TP-UART-IC、以太网适配器DM9000设计完成,实现KNX智能家居网络与以太网和多种无线网络的数据通信,从而实现智能家居设备的远程控制、信息查询等。