一种应用于智能照明的自动组网方法

2014-04-09 05:10:28刘洪雷马建设
照明工程学报 2014年2期
关键词:二叉树灯具命令

刘洪雷, 马建设, 苏 萍

(清华大学,北京 100084)

1 引言

近年来,智能家居的概念渗透到了生活的各个方面,智能照明更是其中的主力军,其在打造安全、节能、舒适、高效的照明环境方面发挥着越来越大的作用。智能照明中对灯具的控制,主要是通过寻址的方式实现,如DALI协议,在主机发送指令之前,需要为各个从机分配地址并在主机内注册[1]。在分配地址时,现行的方式往往是在产品生产时,为从机烧录程序时烧录入不同的地址,或者在从机上设置拨码盘等方式进行分配地址。这不但大大影响了灯具的生产效率,同时也造成了安装时的极大的不便利。而其他的一些自动组网的方法,一种需要按照接入网络的时间不同实现自动组网,另一种抢占式组网则会大大降低网络利用效率,容易引发阻塞[2]。而且更重要的是,如果灯具失效,为保证通信,更换后的灯具不得不采用同之前相同的地址,这不但造成了相当的不便利并且造成了对于一般家庭用户操作的不可实现性[3]。因此如何实现一种可靠的自动分配地址并组网的方法,将对智能照明的推广有着重要的意义。

2 网络的基本构成

常用于家庭或者写字楼内的照明网络,具有多对多的形式,即不同的主机可以同时控制所有的通信灯具,而主机在控制功能上是相同的,系统可简化为一对多的控制方式,如图1所示。

图1 网络拓扑图Fig.1 Network topology

图1中master为主机,各个灯具节点以任意方式连接到总线上,可以为树状、网状或者星型等,网络的拓扑结构保证网内任何一个节点(包括主机)发出的命令都可以被其他节点(包括主机)收到。而为了能够实现基本的通讯和组网功能,主机和灯具应具有表1中所述功能。

表1 节点功能要求Table 1 Function request of the nodes

所谓网络的自动构成,即自动完成灯具的地址分配,并在主机内注册。

3 自动组网原理

由于系统是一对多的控制方式,主机发出的命令以广播的形式广播到网络内的每一个灯具,而灯具的反馈命令除总机收到之外,其余灯具也能接收。因此,实现自动组网的关键在于灯具接收到主机的组网命令之后,可以产生不同的反馈时间,以类似时分的方式,在各自得到的通信时间区间内完成地址的分配和注册。

为了得到不同的反馈时间,需要一个不同的基码。而灯具内的控制芯片刚好可以提供这样一个基码。芯片制作厂商在生产芯片时,会为芯片写入一个全球唯一识别码(UID,unique ID),每个芯片的号码均有不同。所以,在组网时,灯具首先应按照各自命令将识别码读出,然后再接收到主机发出的组网命令时,方可以识别码为基码,产生不同的反馈时间,并在此时间区间内完成地址分配和注册。该时间长短以8到12倍的通信周期为宜(一个通信周期为主机和从机完成一次相互通信的时间)。

4 时间段划分的数据处理及算法

唯一识别码(UID)为储存在芯片上的一系列二进制数据,通常有几十位。以STC某款芯片为例,其UID由7组8位二进制数构成。若单以该UID码的差异来进行时间划分,则可以划分256即7.2×1016个时间区间,这样的数量级,即使对于周期为微秒级的传输协议也是无法实现的,因为两个传输时间段的间隔可能达到7.2×1016/1000/1000/3600=2×107秒,这样的时间间隔是无法被接受的。所以,必须对该数值进行加权处理。处理时,将0X00 00 00 00 00 00 00到0XFF FF FF FF FF FF FF区间段划分为若干小区域,而不同的UID值会落入不同的小区域,区域的划分应保证落入每个区域内的UID数量尽可能相等,同时应保证第一个区域和最后一个区域的时间差在一个可接受的时间范围内。

划分时,常常采用类哈希(hash)表方法处理,欲划分为N个时间段,则hash处理[5]:UID hash N。不过此处并不是一个完全的hash,因为hash以除以N处理之后的余数作为划分依据,而此处的类hash以除以N之后的除数作为划分依据。该划分将使UID落入各个不同的区域,然后对落入此区域内的芯片分配一个相同的注册时间。然后,若是简单的进行hash处理,既有可能导致有些区域内落入大量的数值,而有些区域内落入的数值极少,则hash处理的意义不大。

为了能够进行有效的hash,需要首先进行采样,抽取一定数量的芯片,读取UID值,并得出其大致分布,由此得出UID值中对区间划分影响最大的位数,即首先得出UID集中分布的一个大区间,然后对该区间进行hash处理,则可以有效防止大量数据落入同一区间内。

为了能够对UID值进行统计,首先,我们需要建立一个完整的二叉树来存放数据。以STC某款芯片为例,由于STC芯片内的UID为56位,故需建立一个完整57级二叉树,顶层为0(或1),二叉树建立如图2所示。

图2 存储UID数据的二叉树Fig.2 Binary tree of UID data

二叉树每一层上的键(key)代表的即为UID相应位数的值,每一个值(value)代表该孩子出现的次数[6]。Value初始化为0,建立好二叉树后,应对欲采用的STC芯片做抽样处理,取出一定数量的芯片并读取UID后,对每一位UID出现时二叉树上对应的键的值做加一处理。如果某位数对UID值的分布影响不大,则该数的大部分为0或者大部分为1,否则,0和1的数量应该大致相等,也即该位数统计值中0和1的数量越相近,则该位数对UID分布影响越大,反映在二叉树上,即左右孩子值越相近。将整个抽样芯片数值处理完成后,遍历二叉树,对任意相邻左右孩子value值做商,用大值除以小值得到C1,C2,C3……,然后在内存中建立一二维map表存储之,见表2。

表2 二叉树键值比较表Table 2 Comparison of the Key in binary tree

第一行表示其在二叉树中的层数,第二行表示其左右孩子的商值。商值初始化时赋值为0,然后二叉树中每层相邻左右孩子做商后填入,如同层有更小的值,则覆盖原值,如果没有,则丢弃,遍历二叉树后,该map即表示每层对UID分布的影响图。为了能够将时间段划分为N段,对于二进制数而言,至少需要n=log2N位二进制数。从该表中挑选出C值最小的n层,则可以查找出对划分时间区段影响最大的UID值中的n位,得到一个新的n位的ID值。此时,对此新的ID进行类hash处理,则可有效提高区间划分平均性和有效性。

5 具体实现方式

本文在实现时以DALI协议为例,搭建系统平台。

5.1 DALI协议基本要求

DALI协议是用于照明系统控制的开放式异步串行数字通信协议。DALI系统采用主从式结构,系统最多可以连接64个从机单元[7],每个DALI从机使用唯一的个体标识地址,该地址在系统初始化时设定,使用过程中根据需要修改从机的地址,其主要特征如下:

(1)采用异步串行通信;

(2)双线差分驱动;

(3)信息传输速率1200kb/s,半双工传输;

(4)编码形式采用曼彻斯特编码[8].

5.2 组网流程

按照DALI协议具体要求网络链接结束后,组网前,主机内存储足量的地址,建立地址池。组网时,主机发出命令,所有从机接收到命令后,会将自身状态设置为组网状态(置位标志位fNet),此时只进行组网操作,然后根据STC芯片提供的UID地址读取出UID,并按照上文所述算法将UID简化为n为ID,并判断ID所在区间,然后根据所在区间得到一个时间基数b,然后由b乘以10倍通信周期(协议通信周期为833μs×30=24990μs≈0.25ms),约为0.25ms,因此可以取3ms为基,再收到主机的注册命令后,各个灯具将在3ms,6ms……的时间进行向主机发送反馈信息。DALI协议中,通过6位地址位控制64个灯具,因此我们可以划分512个区间段,远远满足协议要求。而3×512=1536ms,也即两秒钟之内将完成网络的自动组网,符合我们的要求。发送前,首先读取总线状态,如果总线繁忙,则等待2个周期,若总线空闲,则可进行收发,其中反馈信息中,将自身UID的后7位作为临时地址反馈给主机进行通信,主机收到该反馈信息后,将从自身储存的地址池中取出一个地址,作为主机信息的数据位部分,按照之前收到的临时地址和从机进行通信,然后从机收到该地址后储存入自身flash,并且主机也将此信息存入自身flash中,而没有向主机发送反馈信息的灯具将会忽略主机后续发送的数据。至此,一个灯具的地址分配及注册完成[2]。完整的流程图如图3所示。

图3 系统注册流程图Fig.3 Process of registering

5.3 更换灯具时的处理

如果某个灯具失效,则需要更换灯具。将灯具更换后,主机首先发送报检命令,此时所有的灯具将按照上文所述算法在不同时间进行报检,报检时,所有灯具收到命令后会将自身状态置位为报检,而主机收到报检灯具的地址。对于无故障灯具,也即原先即存在与网络中的灯具,主机内是存有其地址的,因此总机可以对此进行识别并对其发送标志,将灯具状态修改为正常。此时,主机可以获得所有无故障灯具的地址,然后从地址池中挑选与此不同的地址作为新更换的灯具的地址,而此时最新更换的灯具和原来存在的无故障灯具通过标志位是否为报检便可进行区分,此时,仅对标志位为报检的灯具进行地址分配即可完成。

5.4 硬件平台的搭建及实验

基于DALI协议的要求,需要搭建主机和灯具的硬件平台。为了实现主机人机交互和数据通信的功能,主机采用ARM开发板,板载S3C2440A芯片,核为ARM920T,板载64M SDRAM,128M掉电非易失NAND FLASH[9]。从机模块是DALI协议中的接收模块,在每盏LED灯具上均应配备,因此能否降低灯具成本,从机模块的设计尤为重要。鉴于成本及功能的综合考虑,选用STC12LE5204AD作为从机的主控芯片,该芯片内置4K FLASH,可以满足系统要求[10]。而算法中提及的UID即为该STC芯片的UID。主控芯片的主要作用是接收来自总线的数据进行判断并反馈[4]。主控芯片在地址匹配成功之后将执行来自主机的命令,其实现过程是通过将主机命令转换为不同的PWM波形,然后将此波形传输给LED驱动芯片L3404HVMA,从而实现对LED灯组的控制。灯具电路板见图4[11]。

图4 灯具电路板Fig.4 The PCB board

主机内采用u/cos操作系统,通过在系统下建立任务及移植DALI协议,可以方便的实现4.2节中介绍的操作流程[12]。通过主机操作相应组网命令时,程序设定从机在得到地址后亮灯,实验时,采用32组灯进行验证,灯几乎在同一时间内陆续亮起,无明显的等待时间。

6 结语

通过以上方法,可以方便的实现智能照明产品自组网络,该方法大大提高了产品的自动性和智能性,同时也可以广泛应用于其他智能家居产品,同时,可以方便的实现产品出现故障后的更换产品时的组网工作。并且,通过实验验证,以该方法组成的小型网络,可以在几秒内即可完成网络的组建。

[1] 张岳军, 吴明光. 智能照明系统控制网络的研究[J]. 照明工程学报, 2004,15(4): 16~18.

[2] 段曙彬,高安邦.LON智能节点开发及组网研究[J].哈尔滨理工大学学报,2006,11(1):100~104.

[3] 王秀锦, 马剑. 智能化照明[J]. 照明工程学报, 2003, 14(2): 52~55.

[4] 张文成,王景存,袁雪萍.基于DALI协议的智能调光主控模块设计[J].计算机与现代化,2011(1):155~158.

[5] 严蔚敏, 吴伟民. 数据结构(第2版)[M].北京:清华大学出版社, 2007.

[6] 韩家炜, Kamber M, 裴健,等. 数据挖掘概念与技术(第3版)[M].北京:机械工业出版社, 2012.

[7] 广州周立功单片机发展有限公司.DALI规范指南[M].广州周立功单片机发展有限公司,2005.

[8] JIANG Wei, DING Li, JIANG Yujian, et al. Research on the Device Auto Networking and Key Technologies of the Entertainment Lighting System (Pt.1)[J]. Entertainment Technology,2011,4:006.

[9] 肖利平, 孙岩, 陈桂生,等. 基于ARM的嵌入式系统组网设计与实现[J]. 测控技术, 2007, 6(8):58~60.

[10] WU Wei, WU Mingguang,LIU Yanpeng. A Design of Embedded DALI Controller[C]. 2006 IEEE International Conference on Industrial Informatics, INDIN’06, 1237~1240 (in chinese).

[11] 张旭东,缪希仁.DALI系统电平转换电路的实现[J].低压电器,2006(3):29~32.

[12] 贾冬颖, 王巍. 基于STC单片机 LED 智能照明系统的设计[J]. 照明工程学报, 2010,21(2): 71~73.

猜你喜欢
二叉树灯具命令
CSP真题——二叉树
电脑报(2022年37期)2022-09-28 05:31:07
只听主人的命令
灯具
建筑与预算(2022年2期)2022-03-08 08:40:58
二叉树创建方法
◆ 灯具
灯具
建筑与预算(2020年9期)2020-10-13 12:06:18
◆ 灯具
建筑与预算(2020年8期)2020-09-04 08:28:56
移防命令下达后
一种由层次遍历和其它遍历构造二叉树的新算法
这是人民的命令