劉洪雷, 馬建設(shè), 蘇 萍
(清華大學(xué),北京 100084)
近年來,智能家居的概念滲透到了生活的各個(gè)方面,智能照明更是其中的主力軍,其在打造安全、節(jié)能、舒適、高效的照明環(huán)境方面發(fā)揮著越來越大的作用。智能照明中對(duì)燈具的控制,主要是通過尋址的方式實(shí)現(xiàn),如DALI協(xié)議,在主機(jī)發(fā)送指令之前,需要為各個(gè)從機(jī)分配地址并在主機(jī)內(nèi)注冊(cè)[1]。在分配地址時(shí),現(xiàn)行的方式往往是在產(chǎn)品生產(chǎn)時(shí),為從機(jī)燒錄程序時(shí)燒錄入不同的地址,或者在從機(jī)上設(shè)置撥碼盤等方式進(jìn)行分配地址。這不但大大影響了燈具的生產(chǎn)效率,同時(shí)也造成了安裝時(shí)的極大的不便利。而其他的一些自動(dòng)組網(wǎng)的方法,一種需要按照接入網(wǎng)絡(luò)的時(shí)間不同實(shí)現(xiàn)自動(dòng)組網(wǎng),另一種搶占式組網(wǎng)則會(huì)大大降低網(wǎng)絡(luò)利用效率,容易引發(fā)阻塞[2]。而且更重要的是,如果燈具失效,為保證通信,更換后的燈具不得不采用同之前相同的地址,這不但造成了相當(dāng)?shù)牟槐憷⑶以斐闪藢?duì)于一般家庭用戶操作的不可實(shí)現(xiàn)性[3]。因此如何實(shí)現(xiàn)一種可靠的自動(dòng)分配地址并組網(wǎng)的方法,將對(duì)智能照明的推廣有著重要的意義。
常用于家庭或者寫字樓內(nèi)的照明網(wǎng)絡(luò),具有多對(duì)多的形式,即不同的主機(jī)可以同時(shí)控制所有的通信燈具,而主機(jī)在控制功能上是相同的,系統(tǒng)可簡化為一對(duì)多的控制方式,如圖1所示。
圖1 網(wǎng)絡(luò)拓?fù)鋱DFig.1 Network topology
圖1中master為主機(jī),各個(gè)燈具節(jié)點(diǎn)以任意方式連接到總線上,可以為樹狀、網(wǎng)狀或者星型等,網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)保證網(wǎng)內(nèi)任何一個(gè)節(jié)點(diǎn)(包括主機(jī))發(fā)出的命令都可以被其他節(jié)點(diǎn)(包括主機(jī))收到。而為了能夠?qū)崿F(xiàn)基本的通訊和組網(wǎng)功能,主機(jī)和燈具應(yīng)具有表1中所述功能。
表1 節(jié)點(diǎn)功能要求Table 1 Function request of the nodes
所謂網(wǎng)絡(luò)的自動(dòng)構(gòu)成,即自動(dòng)完成燈具的地址分配,并在主機(jī)內(nèi)注冊(cè)。
由于系統(tǒng)是一對(duì)多的控制方式,主機(jī)發(fā)出的命令以廣播的形式廣播到網(wǎng)絡(luò)內(nèi)的每一個(gè)燈具,而燈具的反饋命令除總機(jī)收到之外,其余燈具也能接收。因此,實(shí)現(xiàn)自動(dòng)組網(wǎng)的關(guān)鍵在于燈具接收到主機(jī)的組網(wǎng)命令之后,可以產(chǎn)生不同的反饋時(shí)間,以類似時(shí)分的方式,在各自得到的通信時(shí)間區(qū)間內(nèi)完成地址的分配和注冊(cè)。
為了得到不同的反饋時(shí)間,需要一個(gè)不同的基碼。而燈具內(nèi)的控制芯片剛好可以提供這樣一個(gè)基碼。芯片制作廠商在生產(chǎn)芯片時(shí),會(huì)為芯片寫入一個(gè)全球唯一識(shí)別碼(UID,unique ID),每個(gè)芯片的號(hào)碼均有不同。所以,在組網(wǎng)時(shí),燈具首先應(yīng)按照各自命令將識(shí)別碼讀出,然后再接收到主機(jī)發(fā)出的組網(wǎng)命令時(shí),方可以識(shí)別碼為基碼,產(chǎn)生不同的反饋時(shí)間,并在此時(shí)間區(qū)間內(nèi)完成地址分配和注冊(cè)。該時(shí)間長短以8到12倍的通信周期為宜(一個(gè)通信周期為主機(jī)和從機(jī)完成一次相互通信的時(shí)間)。
唯一識(shí)別碼(UID)為儲(chǔ)存在芯片上的一系列二進(jìn)制數(shù)據(jù),通常有幾十位。以STC某款芯片為例,其UID由7組8位二進(jìn)制數(shù)構(gòu)成。若單以該UID碼的差異來進(jìn)行時(shí)間劃分,則可以劃分256即7.2×1016個(gè)時(shí)間區(qū)間,這樣的數(shù)量級(jí),即使對(duì)于周期為微秒級(jí)的傳輸協(xié)議也是無法實(shí)現(xiàn)的,因?yàn)閮蓚€(gè)傳輸時(shí)間段的間隔可能達(dá)到7.2×1016/1000/1000/3600=2×107秒,這樣的時(shí)間間隔是無法被接受的。所以,必須對(duì)該數(shù)值進(jìn)行加權(quán)處理。處理時(shí),將0X00 00 00 00 00 00 00到0XFF FF FF FF FF FF FF區(qū)間段劃分為若干小區(qū)域,而不同的UID值會(huì)落入不同的小區(qū)域,區(qū)域的劃分應(yīng)保證落入每個(gè)區(qū)域內(nèi)的UID數(shù)量盡可能相等,同時(shí)應(yīng)保證第一個(gè)區(qū)域和最后一個(gè)區(qū)域的時(shí)間差在一個(gè)可接受的時(shí)間范圍內(nèi)。
劃分時(shí),常常采用類哈希(hash)表方法處理,欲劃分為N個(gè)時(shí)間段,則hash處理[5]:UID hash N。不過此處并不是一個(gè)完全的hash,因?yàn)閔ash以除以N處理之后的余數(shù)作為劃分依據(jù),而此處的類hash以除以N之后的除數(shù)作為劃分依據(jù)。該劃分將使UID落入各個(gè)不同的區(qū)域,然后對(duì)落入此區(qū)域內(nèi)的芯片分配一個(gè)相同的注冊(cè)時(shí)間。然后,若是簡單的進(jìn)行hash處理,既有可能導(dǎo)致有些區(qū)域內(nèi)落入大量的數(shù)值,而有些區(qū)域內(nèi)落入的數(shù)值極少,則hash處理的意義不大。
為了能夠進(jìn)行有效的hash,需要首先進(jìn)行采樣,抽取一定數(shù)量的芯片,讀取UID值,并得出其大致分布,由此得出UID值中對(duì)區(qū)間劃分影響最大的位數(shù),即首先得出UID集中分布的一個(gè)大區(qū)間,然后對(duì)該區(qū)間進(jìn)行hash處理,則可以有效防止大量數(shù)據(jù)落入同一區(qū)間內(nèi)。
為了能夠?qū)ID值進(jìn)行統(tǒng)計(jì),首先,我們需要建立一個(gè)完整的二叉樹來存放數(shù)據(jù)。以STC某款芯片為例,由于STC芯片內(nèi)的UID為56位,故需建立一個(gè)完整57級(jí)二叉樹,頂層為0(或1),二叉樹建立如圖2所示。
圖2 存儲(chǔ)UID數(shù)據(jù)的二叉樹Fig.2 Binary tree of UID data
二叉樹每一層上的鍵(key)代表的即為UID相應(yīng)位數(shù)的值,每一個(gè)值(value)代表該孩子出現(xiàn)的次數(shù)[6]。Value初始化為0,建立好二叉樹后,應(yīng)對(duì)欲采用的STC芯片做抽樣處理,取出一定數(shù)量的芯片并讀取UID后,對(duì)每一位UID出現(xiàn)時(shí)二叉樹上對(duì)應(yīng)的鍵的值做加一處理。如果某位數(shù)對(duì)UID值的分布影響不大,則該數(shù)的大部分為0或者大部分為1,否則,0和1的數(shù)量應(yīng)該大致相等,也即該位數(shù)統(tǒng)計(jì)值中0和1的數(shù)量越相近,則該位數(shù)對(duì)UID分布影響越大,反映在二叉樹上,即左右孩子值越相近。將整個(gè)抽樣芯片數(shù)值處理完成后,遍歷二叉樹,對(duì)任意相鄰左右孩子value值做商,用大值除以小值得到C1,C2,C3……,然后在內(nèi)存中建立一二維map表存儲(chǔ)之,見表2。
表2 二叉樹鍵值比較表Table 2 Comparison of the Key in binary tree
第一行表示其在二叉樹中的層數(shù),第二行表示其左右孩子的商值。商值初始化時(shí)賦值為0,然后二叉樹中每層相鄰左右孩子做商后填入,如同層有更小的值,則覆蓋原值,如果沒有,則丟棄,遍歷二叉樹后,該map即表示每層對(duì)UID分布的影響圖。為了能夠?qū)r(shí)間段劃分為N段,對(duì)于二進(jìn)制數(shù)而言,至少需要n=log2N位二進(jìn)制數(shù)。從該表中挑選出C值最小的n層,則可以查找出對(duì)劃分時(shí)間區(qū)段影響最大的UID值中的n位,得到一個(gè)新的n位的ID值。此時(shí),對(duì)此新的ID進(jìn)行類hash處理,則可有效提高區(qū)間劃分平均性和有效性。
本文在實(shí)現(xiàn)時(shí)以DALI協(xié)議為例,搭建系統(tǒng)平臺(tái)。
DALI協(xié)議是用于照明系統(tǒng)控制的開放式異步串行數(shù)字通信協(xié)議。DALI系統(tǒng)采用主從式結(jié)構(gòu),系統(tǒng)最多可以連接64個(gè)從機(jī)單元[7],每個(gè)DALI從機(jī)使用唯一的個(gè)體標(biāo)識(shí)地址,該地址在系統(tǒng)初始化時(shí)設(shè)定,使用過程中根據(jù)需要修改從機(jī)的地址,其主要特征如下:
(1)采用異步串行通信;
(2)雙線差分驅(qū)動(dòng);
(3)信息傳輸速率1200kb/s,半雙工傳輸;
(4)編碼形式采用曼徹斯特編碼[8].
按照DALI協(xié)議具體要求網(wǎng)絡(luò)鏈接結(jié)束后,組網(wǎng)前,主機(jī)內(nèi)存儲(chǔ)足量的地址,建立地址池。組網(wǎng)時(shí),主機(jī)發(fā)出命令,所有從機(jī)接收到命令后,會(huì)將自身狀態(tài)設(shè)置為組網(wǎng)狀態(tài)(置位標(biāo)志位fNet),此時(shí)只進(jìn)行組網(wǎng)操作,然后根據(jù)STC芯片提供的UID地址讀取出UID,并按照上文所述算法將UID簡化為n為ID,并判斷ID所在區(qū)間,然后根據(jù)所在區(qū)間得到一個(gè)時(shí)間基數(shù)b,然后由b乘以10倍通信周期(協(xié)議通信周期為833μs×30=24990μs≈0.25ms),約為0.25ms,因此可以取3ms為基,再收到主機(jī)的注冊(cè)命令后,各個(gè)燈具將在3ms,6ms……的時(shí)間進(jìn)行向主機(jī)發(fā)送反饋信息。DALI協(xié)議中,通過6位地址位控制64個(gè)燈具,因此我們可以劃分512個(gè)區(qū)間段,遠(yuǎn)遠(yuǎn)滿足協(xié)議要求。而3×512=1536ms,也即兩秒鐘之內(nèi)將完成網(wǎng)絡(luò)的自動(dòng)組網(wǎng),符合我們的要求。發(fā)送前,首先讀取總線狀態(tài),如果總線繁忙,則等待2個(gè)周期,若總線空閑,則可進(jìn)行收發(fā),其中反饋信息中,將自身UID的后7位作為臨時(shí)地址反饋給主機(jī)進(jìn)行通信,主機(jī)收到該反饋信息后,將從自身儲(chǔ)存的地址池中取出一個(gè)地址,作為主機(jī)信息的數(shù)據(jù)位部分,按照之前收到的臨時(shí)地址和從機(jī)進(jìn)行通信,然后從機(jī)收到該地址后儲(chǔ)存入自身flash,并且主機(jī)也將此信息存入自身flash中,而沒有向主機(jī)發(fā)送反饋信息的燈具將會(huì)忽略主機(jī)后續(xù)發(fā)送的數(shù)據(jù)。至此,一個(gè)燈具的地址分配及注冊(cè)完成[2]。完整的流程圖如圖3所示。
圖3 系統(tǒng)注冊(cè)流程圖Fig.3 Process of registering
如果某個(gè)燈具失效,則需要更換燈具。將燈具更換后,主機(jī)首先發(fā)送報(bào)檢命令,此時(shí)所有的燈具將按照上文所述算法在不同時(shí)間進(jìn)行報(bào)檢,報(bào)檢時(shí),所有燈具收到命令后會(huì)將自身狀態(tài)置位為報(bào)檢,而主機(jī)收到報(bào)檢燈具的地址。對(duì)于無故障燈具,也即原先即存在與網(wǎng)絡(luò)中的燈具,主機(jī)內(nèi)是存有其地址的,因此總機(jī)可以對(duì)此進(jìn)行識(shí)別并對(duì)其發(fā)送標(biāo)志,將燈具狀態(tài)修改為正常。此時(shí),主機(jī)可以獲得所有無故障燈具的地址,然后從地址池中挑選與此不同的地址作為新更換的燈具的地址,而此時(shí)最新更換的燈具和原來存在的無故障燈具通過標(biāo)志位是否為報(bào)檢便可進(jìn)行區(qū)分,此時(shí),僅對(duì)標(biāo)志位為報(bào)檢的燈具進(jìn)行地址分配即可完成。
基于DALI協(xié)議的要求,需要搭建主機(jī)和燈具的硬件平臺(tái)。為了實(shí)現(xiàn)主機(jī)人機(jī)交互和數(shù)據(jù)通信的功能,主機(jī)采用ARM開發(fā)板,板載S3C2440A芯片,核為ARM920T,板載64M SDRAM,128M掉電非易失NAND FLASH[9]。從機(jī)模塊是DALI協(xié)議中的接收模塊,在每盞LED燈具上均應(yīng)配備,因此能否降低燈具成本,從機(jī)模塊的設(shè)計(jì)尤為重要。鑒于成本及功能的綜合考慮,選用STC12LE5204AD作為從機(jī)的主控芯片,該芯片內(nèi)置4K FLASH,可以滿足系統(tǒng)要求[10]。而算法中提及的UID即為該STC芯片的UID。主控芯片的主要作用是接收來自總線的數(shù)據(jù)進(jìn)行判斷并反饋[4]。主控芯片在地址匹配成功之后將執(zhí)行來自主機(jī)的命令,其實(shí)現(xiàn)過程是通過將主機(jī)命令轉(zhuǎn)換為不同的PWM波形,然后將此波形傳輸給LED驅(qū)動(dòng)芯片L3404HVMA,從而實(shí)現(xiàn)對(duì)LED燈組的控制。燈具電路板見圖4[11]。
圖4 燈具電路板Fig.4 The PCB board
主機(jī)內(nèi)采用u/cos操作系統(tǒng),通過在系統(tǒng)下建立任務(wù)及移植DALI協(xié)議,可以方便的實(shí)現(xiàn)4.2節(jié)中介紹的操作流程[12]。通過主機(jī)操作相應(yīng)組網(wǎng)命令時(shí),程序設(shè)定從機(jī)在得到地址后亮燈,實(shí)驗(yàn)時(shí),采用32組燈進(jìn)行驗(yàn)證,燈幾乎在同一時(shí)間內(nèi)陸續(xù)亮起,無明顯的等待時(shí)間。
通過以上方法,可以方便的實(shí)現(xiàn)智能照明產(chǎn)品自組網(wǎng)絡(luò),該方法大大提高了產(chǎn)品的自動(dòng)性和智能性,同時(shí)也可以廣泛應(yīng)用于其他智能家居產(chǎn)品,同時(shí),可以方便的實(shí)現(xiàn)產(chǎn)品出現(xiàn)故障后的更換產(chǎn)品時(shí)的組網(wǎng)工作。并且,通過實(shí)驗(yàn)驗(yàn)證,以該方法組成的小型網(wǎng)絡(luò),可以在幾秒內(nèi)即可完成網(wǎng)絡(luò)的組建。
[1] 張?jiān)儡? 吳明光. 智能照明系統(tǒng)控制網(wǎng)絡(luò)的研究[J]. 照明工程學(xué)報(bào), 2004,15(4): 16~18.
[2] 段曙彬,高安邦.LON智能節(jié)點(diǎn)開發(fā)及組網(wǎng)研究[J].哈爾濱理工大學(xué)學(xué)報(bào),2006,11(1):100~104.
[3] 王秀錦, 馬劍. 智能化照明[J]. 照明工程學(xué)報(bào), 2003, 14(2): 52~55.
[4] 張文成,王景存,袁雪萍.基于DALI協(xié)議的智能調(diào)光主控模塊設(shè)計(jì)[J].計(jì)算機(jī)與現(xiàn)代化,2011(1):155~158.
[5] 嚴(yán)蔚敏, 吳偉民. 數(shù)據(jù)結(jié)構(gòu)(第2版)[M].北京:清華大學(xué)出版社, 2007.
[6] 韓家煒, Kamber M, 裴健,等. 數(shù)據(jù)挖掘概念與技術(shù)(第3版)[M].北京:機(jī)械工業(yè)出版社, 2012.
[7] 廣州周立功單片機(jī)發(fā)展有限公司.DALI規(guī)范指南[M].廣州周立功單片機(jī)發(fā)展有限公司,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的嵌入式系統(tǒng)組網(wǎng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 測(cè)控技術(shù), 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系統(tǒng)電平轉(zhuǎn)換電路的實(shí)現(xiàn)[J].低壓電器,2006(3):29~32.
[12] 賈冬穎, 王巍. 基于STC單片機(jī) LED 智能照明系統(tǒng)的設(shè)計(jì)[J]. 照明工程學(xué)報(bào), 2010,21(2): 71~73.