支持Android智能手机控制的DALI智能照明系统设计

2013-12-04 03:26佘咸宁许锦标
照明工程学报 2013年2期
关键词:服务器端控件命令

佘咸宁 许锦标

(广东工业大学自动化学院,广东广州 510006)

1 引言[1]

智能照明系统应用在智能建筑中,不仅能营造出舒适的生活工作环境,引入现代化的管理方式,而且还能够节约能源。传统的智能家居系统,大多采用PC做控制终端,并基于 Internet的远程控制,受到Internet地域的限制,使用不是很方便。网络技术的迅猛发展为智能家居提供了强大动力,智能手机作为控制终端已成必然趋势。本文设计一种将Android操作系统的智能手机作为控制终端的DALI智能照明系统。

2 DALI 协议简介[2]

数字可寻址照明接口 (DALI,Digital Addressing Lighting Interface)协议是目前照明领域的国际标准协议,也是国际电工委员会的标准(IEC60929)。DALI系统采用主从式结构,系统最多可以连接64个从控模块,每个从控模块都拥有一个特定的地址,该地址在系统初始化时设定,使用过程中根据需求可修改从控模块的地址。从控模块最多可分为16组 (以组地址区分),每个模块可以设定16个场景,组地址和场景都可以根据需要设定。主控模块与从控模块之间使用两条信号线通信,数据采集用曼彻斯特编码方式编码,信号上升沿表示“1”,下降沿表示“0”,通信速率为1200baud/s。通信的过程中主控模块使用两种不同的数据帧格式:发送帧 (主机发送从机)和接收帧 (从机发送到主机)。主控模块发送信息包括一个起始位,16个数据位 (8位地址和8位指令)以及2个停止位;从控模块的返回帧包括一个起始位8个数据位以及两个停止位。

3 系统总体设计

本文设计了一种客户端/服务器 (C/S)架构的照明控制系统。手机客户端软件是在目前比较流行的Android操作系统下开发的。服务器端软件是Windows系统下的VB6.0开发的。客户端和服务器端是通过套接字 (Socket)来建立连接。Android系统下应用程序的编程语言是Java,而Java提供了Socket以及 ServerSocket 来实现 Socket[3]通信。Windows系统也提供了Winsock控件[4]来支持Socket通信。同时,VB6.0提供MSComm控件来开发串口通信程序。

整个系统的的设计简图如图1所示。服务器端接收到客户端发过来控制命令后解析这些命令并调用相应处理程序,然后将控制命令从串口发送出去。RS232-DALI网关接收到从服务器串口发送过来的控制命令后,就会响应从控模块,整个过程完成了电平的转换以及控制命令的解析。

图1 系统整体设计简图Fig.1 The overall design of system diagram

4 客户端软件设计

4.1 设计简介

客户端软件的开发环境是实时最新版本的Eclipse,JDK以及Android SDK也都是实时最新的版本。软件设计了六个主要控制界面 (如图2所示)以及一些其他与软件相关的界面。主界面 (图2(a))对应一个主Activity,其他五个界面分别对应四个Activity分别实现从控模块查询与控制、场景控制与设置、组地址设置、直接命令等功能。这四个Activity都继承自主Activity。数据的发送和接收函数继承自主Activity。

4.2 主Activity的设计

主Activity是软件的主界面如图2(a)所示,两个滑动条分别完成直接功率调光和淡光时间设置,滑动条的每一次滑动将触发一次数据发送的命令,服务器端监听到控制命令后对发送过来的控制命令进行解析,完成对应地址的从控模块直接功率调光以及淡光时间的设置。两个地址选择框用来设置地址的模式,某个选择框的选中代表选择相应地址模式,两者均未选中表示地址为短地址。地址的选定是通过从文本框手动输入,最后两个按钮实现开灯和关灯的功能。

主界面是进入其他界面的门户,Android提供专门的菜单键,进行菜单设计。软件设计了两层菜单,第一层包括软件设置、工具、高级、帮助四个菜单。设置菜单包含软件设置、从控模块设置、退出三个子菜单;工具菜单包含灯光亮度、场景、组;高级只包含直接命令一个子菜单;帮助部分包含软件的相关信息。Android提供OnCreateOptionMenu进行菜单设计,同时提供了OnOptionItemSelected处理菜单事件。整个软件的流程如图3所示。

客户端与服务器端是通过Socket建立连接,既有数据从客户端发送到服务器端,也有数据从服务器端返回至客户端,即DALI协议中的发送帧与接收帧。前面已经提到过Android应用程序采用的编程语言是Java。Java提供了许多关于Socket通信的类和函数,文中客户端使用了客户端类Socket以及BufferedWriter和DataInputStream输入输出类实现Socket通信。客户端设计了两个函数,SendCmd(String cmd)和SendRead(String cmd)。SendCmd的发送单向数据没有返回帧,SendRead既发送数据同时接收服务器端返回的数据。分别设计两个函数的原因是因为DataInputStream的readLine方法在没有数据返回时会造成Socket阻塞。

Java的数据类型与Vb的数据类型存在一定的差异,数据类型的转换比较复杂。本文统一使用字符串实现客户端与服务器端的数据交换。将各种发送数据通过特定的符号组合成字符串,经客户端发送给服务器端,服务器端软件通个分隔函数将字符串分隔成组合前的信息。因此,数据发送和接收函数不需要因为数据类型的不同而采取不同的函数,同时也省去Java与Vb数据类型不一致的处理过程。

图2 客户端软件界面Fig.2 The interface of client software

图3 客户端软件流程图Fig.3 The flow chart of client software

4.3 各个功能模块的设计

实现各模块的类都是主Activity的子类,它们都使用了主Activity的数据发送和接收函数。各功能模块的设计简介如下:

1)从控单元设置 (图2(b))该模块能完成从控模块的最大亮度、最小亮度、故障亮度、上电亮度、淡光时间、淡光速率的设置和查询。完成版本号、设备类型、最小功率以及当前亮度的查询。

2)组控制 (图2(f))该模块设计了16个选择框 (Checkbox),分别代表十六个组。通过选择框的选择以及设置和查询,能够实现组地址的统一设置和查询。

3)场景控制 (图2(c)、(d))该模块包括场景的选择、设置、查询功能。场景的设置和查询部分设计了一个对话框,这样设计的原因是可以在一个Activity内完成所有的功能。

4)直接命令 (图2(e))这个模块主要为了方便调试而设计的。可以通过对应的文本框发送自定义的命令,同时可以回显从服务器端返回的数据,它发送的命令非常直观,可以用来调试RS232-DALI网关以及从控模块。

5 服务器端软件设计

5.1 设计简介

服务器端软件是使用VB6.0开发的,软件使用了Windows提供的Winsock和MSComm控件。Winsock控件提供了访问TCP和UDP网络服务的方便途径。编写客户或服务器应用程序,不必了解TCP的细节或调用低级的Winsock API。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。服务器端支持多个客户端,基本服务器只能接受一个连接请求。通过创建Winsock控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不需要关闭连接,而只需创建新的控件实例 (通过设置其索引属性),然后在新的实例上调用Accept方法。软件启动后开始监听来自客户端的Socket请求。当监听到从客户端发送过来的数据以后,然后判断发送过来的数据,再调用相应的数据处理函数。在软件启动的同时也开启了定时器,循环检测标志位,检测到以后进入对应的命令处理函数。软件的流程如图4所示。

5.2 数据的分析和处理

当服务器端接收到从客户端传过来的字符串时,使用Split函数将字符串分隔成数组。根据数组的长度判断命令的种类。基本控制命令长度为3、组的长度判断命令的种类。基本控制命令长度为3、组控制命令长度为4、从控模块控制命令长度为9、场景控制命令长度为19。VB6.0提供了一个Timer控件,通过定时器来实现控制命令的循环监听和处理。程序定义了一个标志位来判断控制命令类型,当接收到客户端数据并进行分隔,赋值等操作以后相对应的标志位被致位,定时器循环检测标志位,当检测对应标志位被置“1”时便进入对应的命令处理程序,处理完以后标志位被置零。

5.3 地址设置

图4 服务器端流程图Fig.4 The flow chart of server software

DALI自动分配地址简介,首先给需要重新分配地址的单元分配一个24位二进制随机地址,然后通过寻找随机地址最小的单元并分配短地址,然后重复寻找直到所有需要设置短地址的单元都设置完。因为24位二进制数比较大,按常规方法寻找的话,花费的时间比较长。从上面地址分配的原理可以看到,在整个地址分配的过程中,最主要是主机24位数据和DALI设备24随机数比较的问题。如何才能找到最小的随机数的设备,这是解决这个问题是关键。比较两个数据的大小方法很多,这里采用是2分算法。实现步骤如下:

1)主机发送FFFFFF与DALI设备比较,因为DALI设备产生的随机肯定比FFFFFF要小的,如果总线后,采用2分算法比较主机数据上存在没有分配地址的设备,则肯定回答YES。否则NO。

2)在上一步中得知总线上有没有分配地址的设备和随机数。2分法基数为8、4、2、1,三字节的数据按半字节划分为6个半字节数,从最高的半字节,假设开始时值Y=8,如果有DALI设备回答YES,则将现值减去2分法基数的下一个数,修改为Y=Y-4,如有DALI设备回答NO,则将现值加上2分法基数的下一个数,修改Y=Y+4,直到2分法基数的值小于1为止。

3)找到最小的随机数的设备后,使用PROGRAM SHORT ADDRESS命令给这个设备分配一个地址。

4)完成地址分配后,使用WITHDRAW退出命令,使已分配地址的设备退出比较命令。

5)重复以上步骤,比较找到其他的DALI设备。直至到发送FFFFFF都没有设备回答YES为止。

6 结束语

随着智能手机行业的发展,智能手机在生活当中充当的角色也越来越重要。把它设计成智能照明控制终端是一种趋势,是丰富智能手机功能的一个设计。本文在Android系统上面开发客户端软件,界面设计符合人们的操作习惯,简单直观。同时开发了服务器端软件,并与DALI网络连接调试通过。实现了文中所述功能。

总之,这样一个设计符合人们对智能家居生活的要求,与此同时将智能手机引入到智能照明系统当中丰富了智能照明系统的控制终端。

[1]况莉莉,李振,衡友跃.基于Android智能家居的探讨[J].淮北职业技术学院学报,2012,11(3):85~86.

[2]李凌宇,许锦标.红外遥控器在DALI系统中的应用设计 [J].现代建筑电气,2010,1(1):19~23.

[3]倪凯等.一种移动终端远程数据访问控制方法.计算机应用与软件,2012(6).

[4]武军,康忠良.Windows套接字在VB,VC,Delphi中的实现.计算机应用研究,2001,18(5):117~119.

猜你喜欢
服务器端控件命令
只听主人的命令
基于.net的用户定义验证控件的应用分析
Linux环境下基于Socket的数据传输软件设计
安装和启动Docker
关于.net控件数组的探讨
移防命令下达后
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
基于嵌入式MINIGUI控件子类化技术的深入研究与应用