佘咸寧 許錦標(biāo)
(廣東工業(yè)大學(xué)自動化學(xué)院,廣東廣州 510006)
智能照明系統(tǒng)應(yīng)用在智能建筑中,不僅能營造出舒適的生活工作環(huán)境,引入現(xiàn)代化的管理方式,而且還能夠節(jié)約能源。傳統(tǒng)的智能家居系統(tǒng),大多采用PC做控制終端,并基于 Internet的遠(yuǎn)程控制,受到Internet地域的限制,使用不是很方便。網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展為智能家居提供了強大動力,智能手機作為控制終端已成必然趨勢。本文設(shè)計一種將Android操作系統(tǒng)的智能手機作為控制終端的DALI智能照明系統(tǒng)。
數(shù)字可尋址照明接口 (DALI,Digital Addressing Lighting Interface)協(xié)議是目前照明領(lǐng)域的國際標(biāo)準(zhǔn)協(xié)議,也是國際電工委員會的標(biāo)準(zhǔn)(IEC60929)。DALI系統(tǒng)采用主從式結(jié)構(gòu),系統(tǒng)最多可以連接64個從控模塊,每個從控模塊都擁有一個特定的地址,該地址在系統(tǒng)初始化時設(shè)定,使用過程中根據(jù)需求可修改從控模塊的地址。從控模塊最多可分為16組 (以組地址區(qū)分),每個模塊可以設(shè)定16個場景,組地址和場景都可以根據(jù)需要設(shè)定。主控模塊與從控模塊之間使用兩條信號線通信,數(shù)據(jù)采集用曼徹斯特編碼方式編碼,信號上升沿表示“1”,下降沿表示“0”,通信速率為1200baud/s。通信的過程中主控模塊使用兩種不同的數(shù)據(jù)幀格式:發(fā)送幀 (主機發(fā)送從機)和接收幀 (從機發(fā)送到主機)。主控模塊發(fā)送信息包括一個起始位,16個數(shù)據(jù)位 (8位地址和8位指令)以及2個停止位;從控模塊的返回幀包括一個起始位8個數(shù)據(jù)位以及兩個停止位。
本文設(shè)計了一種客戶端/服務(wù)器 (C/S)架構(gòu)的照明控制系統(tǒng)。手機客戶端軟件是在目前比較流行的Android操作系統(tǒng)下開發(fā)的。服務(wù)器端軟件是Windows系統(tǒng)下的VB6.0開發(fā)的??蛻舳撕头?wù)器端是通過套接字 (Socket)來建立連接。Android系統(tǒng)下應(yīng)用程序的編程語言是Java,而Java提供了Socket以及 ServerSocket 來實現(xiàn) Socket[3]通信。Windows系統(tǒng)也提供了Winsock控件[4]來支持Socket通信。同時,VB6.0提供MSComm控件來開發(fā)串口通信程序。
整個系統(tǒng)的的設(shè)計簡圖如圖1所示。服務(wù)器端接收到客戶端發(fā)過來控制命令后解析這些命令并調(diào)用相應(yīng)處理程序,然后將控制命令從串口發(fā)送出去。RS232-DALI網(wǎng)關(guān)接收到從服務(wù)器串口發(fā)送過來的控制命令后,就會響應(yīng)從控模塊,整個過程完成了電平的轉(zhuǎn)換以及控制命令的解析。
圖1 系統(tǒng)整體設(shè)計簡圖Fig.1 The overall design of system diagram
客戶端軟件的開發(fā)環(huán)境是實時最新版本的Eclipse,JDK以及Android SDK也都是實時最新的版本。軟件設(shè)計了六個主要控制界面 (如圖2所示)以及一些其他與軟件相關(guān)的界面。主界面 (圖2(a))對應(yīng)一個主Activity,其他五個界面分別對應(yīng)四個Activity分別實現(xiàn)從控模塊查詢與控制、場景控制與設(shè)置、組地址設(shè)置、直接命令等功能。這四個Activity都繼承自主Activity。數(shù)據(jù)的發(fā)送和接收函數(shù)繼承自主Activity。
主Activity是軟件的主界面如圖2(a)所示,兩個滑動條分別完成直接功率調(diào)光和淡光時間設(shè)置,滑動條的每一次滑動將觸發(fā)一次數(shù)據(jù)發(fā)送的命令,服務(wù)器端監(jiān)聽到控制命令后對發(fā)送過來的控制命令進(jìn)行解析,完成對應(yīng)地址的從控模塊直接功率調(diào)光以及淡光時間的設(shè)置。兩個地址選擇框用來設(shè)置地址的模式,某個選擇框的選中代表選擇相應(yīng)地址模式,兩者均未選中表示地址為短地址。地址的選定是通過從文本框手動輸入,最后兩個按鈕實現(xiàn)開燈和關(guān)燈的功能。
主界面是進(jìn)入其他界面的門戶,Android提供專門的菜單鍵,進(jìn)行菜單設(shè)計。軟件設(shè)計了兩層菜單,第一層包括軟件設(shè)置、工具、高級、幫助四個菜單。設(shè)置菜單包含軟件設(shè)置、從控模塊設(shè)置、退出三個子菜單;工具菜單包含燈光亮度、場景、組;高級只包含直接命令一個子菜單;幫助部分包含軟件的相關(guān)信息。Android提供OnCreateOptionMenu進(jìn)行菜單設(shè)計,同時提供了OnOptionItemSelected處理菜單事件。整個軟件的流程如圖3所示。
客戶端與服務(wù)器端是通過Socket建立連接,既有數(shù)據(jù)從客戶端發(fā)送到服務(wù)器端,也有數(shù)據(jù)從服務(wù)器端返回至客戶端,即DALI協(xié)議中的發(fā)送幀與接收幀。前面已經(jīng)提到過Android應(yīng)用程序采用的編程語言是Java。Java提供了許多關(guān)于Socket通信的類和函數(shù),文中客戶端使用了客戶端類Socket以及BufferedWriter和DataInputStream輸入輸出類實現(xiàn)Socket通信??蛻舳嗽O(shè)計了兩個函數(shù),SendCmd(String cmd)和SendRead(String cmd)。SendCmd的發(fā)送單向數(shù)據(jù)沒有返回幀,SendRead既發(fā)送數(shù)據(jù)同時接收服務(wù)器端返回的數(shù)據(jù)。分別設(shè)計兩個函數(shù)的原因是因為DataInputStream的readLine方法在沒有數(shù)據(jù)返回時會造成Socket阻塞。
Java的數(shù)據(jù)類型與Vb的數(shù)據(jù)類型存在一定的差異,數(shù)據(jù)類型的轉(zhuǎn)換比較復(fù)雜。本文統(tǒng)一使用字符串實現(xiàn)客戶端與服務(wù)器端的數(shù)據(jù)交換。將各種發(fā)送數(shù)據(jù)通過特定的符號組合成字符串,經(jīng)客戶端發(fā)送給服務(wù)器端,服務(wù)器端軟件通個分隔函數(shù)將字符串分隔成組合前的信息。因此,數(shù)據(jù)發(fā)送和接收函數(shù)不需要因為數(shù)據(jù)類型的不同而采取不同的函數(shù),同時也省去Java與Vb數(shù)據(jù)類型不一致的處理過程。
圖2 客戶端軟件界面Fig.2 The interface of client software
圖3 客戶端軟件流程圖Fig.3 The flow chart of client software
實現(xiàn)各模塊的類都是主Activity的子類,它們都使用了主Activity的數(shù)據(jù)發(fā)送和接收函數(shù)。各功能模塊的設(shè)計簡介如下:
1)從控單元設(shè)置 (圖2(b))該模塊能完成從控模塊的最大亮度、最小亮度、故障亮度、上電亮度、淡光時間、淡光速率的設(shè)置和查詢。完成版本號、設(shè)備類型、最小功率以及當(dāng)前亮度的查詢。
2)組控制 (圖2(f))該模塊設(shè)計了16個選擇框 (Checkbox),分別代表十六個組。通過選擇框的選擇以及設(shè)置和查詢,能夠?qū)崿F(xiàn)組地址的統(tǒng)一設(shè)置和查詢。
3)場景控制 (圖2(c)、(d))該模塊包括場景的選擇、設(shè)置、查詢功能。場景的設(shè)置和查詢部分設(shè)計了一個對話框,這樣設(shè)計的原因是可以在一個Activity內(nèi)完成所有的功能。
4)直接命令 (圖2(e))這個模塊主要為了方便調(diào)試而設(shè)計的??梢酝ㄟ^對應(yīng)的文本框發(fā)送自定義的命令,同時可以回顯從服務(wù)器端返回的數(shù)據(jù),它發(fā)送的命令非常直觀,可以用來調(diào)試RS232-DALI網(wǎng)關(guān)以及從控模塊。
服務(wù)器端軟件是使用VB6.0開發(fā)的,軟件使用了Windows提供的Winsock和MSComm控件。Winsock控件提供了訪問TCP和UDP網(wǎng)絡(luò)服務(wù)的方便途徑。編寫客戶或服務(wù)器應(yīng)用程序,不必了解TCP的細(xì)節(jié)或調(diào)用低級的Winsock API。通過設(shè)置控件的屬性并調(diào)用其方法就可輕易連接到一臺遠(yuǎn)程機器上去,并且還可雙向交換數(shù)據(jù)。MSComm控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通訊功能。服務(wù)器端支持多個客戶端,基本服務(wù)器只能接受一個連接請求。通過創(chuàng)建Winsock控件數(shù)組,使用一個控件也可以同時接受多個連接請求。利用這種方法,不需要關(guān)閉連接,而只需創(chuàng)建新的控件實例 (通過設(shè)置其索引屬性),然后在新的實例上調(diào)用Accept方法。軟件啟動后開始監(jiān)聽來自客戶端的Socket請求。當(dāng)監(jiān)聽到從客戶端發(fā)送過來的數(shù)據(jù)以后,然后判斷發(fā)送過來的數(shù)據(jù),再調(diào)用相應(yīng)的數(shù)據(jù)處理函數(shù)。在軟件啟動的同時也開啟了定時器,循環(huán)檢測標(biāo)志位,檢測到以后進(jìn)入對應(yīng)的命令處理函數(shù)。軟件的流程如圖4所示。
當(dāng)服務(wù)器端接收到從客戶端傳過來的字符串時,使用Split函數(shù)將字符串分隔成數(shù)組。根據(jù)數(shù)組的長度判斷命令的種類?;究刂泼铋L度為3、組的長度判斷命令的種類?;究刂泼铋L度為3、組控制命令長度為4、從控模塊控制命令長度為9、場景控制命令長度為19。VB6.0提供了一個Timer控件,通過定時器來實現(xiàn)控制命令的循環(huán)監(jiān)聽和處理。程序定義了一個標(biāo)志位來判斷控制命令類型,當(dāng)接收到客戶端數(shù)據(jù)并進(jìn)行分隔,賦值等操作以后相對應(yīng)的標(biāo)志位被致位,定時器循環(huán)檢測標(biāo)志位,當(dāng)檢測對應(yīng)標(biāo)志位被置“1”時便進(jìn)入對應(yīng)的命令處理程序,處理完以后標(biāo)志位被置零。
圖4 服務(wù)器端流程圖Fig.4 The flow chart of server software
DALI自動分配地址簡介,首先給需要重新分配地址的單元分配一個24位二進(jìn)制隨機地址,然后通過尋找隨機地址最小的單元并分配短地址,然后重復(fù)尋找直到所有需要設(shè)置短地址的單元都設(shè)置完。因為24位二進(jìn)制數(shù)比較大,按常規(guī)方法尋找的話,花費的時間比較長。從上面地址分配的原理可以看到,在整個地址分配的過程中,最主要是主機24位數(shù)據(jù)和DALI設(shè)備24隨機數(shù)比較的問題。如何才能找到最小的隨機數(shù)的設(shè)備,這是解決這個問題是關(guān)鍵。比較兩個數(shù)據(jù)的大小方法很多,這里采用是2分算法。實現(xiàn)步驟如下:
1)主機發(fā)送FFFFFF與DALI設(shè)備比較,因為DALI設(shè)備產(chǎn)生的隨機肯定比FFFFFF要小的,如果總線后,采用2分算法比較主機數(shù)據(jù)上存在沒有分配地址的設(shè)備,則肯定回答YES。否則NO。
2)在上一步中得知總線上有沒有分配地址的設(shè)備和隨機數(shù)。2分法基數(shù)為8、4、2、1,三字節(jié)的數(shù)據(jù)按半字節(jié)劃分為6個半字節(jié)數(shù),從最高的半字節(jié),假設(shè)開始時值Y=8,如果有DALI設(shè)備回答YES,則將現(xiàn)值減去2分法基數(shù)的下一個數(shù),修改為Y=Y-4,如有DALI設(shè)備回答NO,則將現(xiàn)值加上2分法基數(shù)的下一個數(shù),修改Y=Y+4,直到2分法基數(shù)的值小于1為止。
3)找到最小的隨機數(shù)的設(shè)備后,使用PROGRAM SHORT ADDRESS命令給這個設(shè)備分配一個地址。
4)完成地址分配后,使用WITHDRAW退出命令,使已分配地址的設(shè)備退出比較命令。
5)重復(fù)以上步驟,比較找到其他的DALI設(shè)備。直至到發(fā)送FFFFFF都沒有設(shè)備回答YES為止。
隨著智能手機行業(yè)的發(fā)展,智能手機在生活當(dāng)中充當(dāng)?shù)慕巧苍絹碓街匾?。把它設(shè)計成智能照明控制終端是一種趨勢,是豐富智能手機功能的一個設(shè)計。本文在Android系統(tǒng)上面開發(fā)客戶端軟件,界面設(shè)計符合人們的操作習(xí)慣,簡單直觀。同時開發(fā)了服務(wù)器端軟件,并與DALI網(wǎng)絡(luò)連接調(diào)試通過。實現(xiàn)了文中所述功能。
總之,這樣一個設(shè)計符合人們對智能家居生活的要求,與此同時將智能手機引入到智能照明系統(tǒng)當(dāng)中豐富了智能照明系統(tǒng)的控制終端。
[1]況莉莉,李振,衡友躍.基于Android智能家居的探討[J].淮北職業(yè)技術(shù)學(xué)院學(xué)報,2012,11(3):85~86.
[2]李凌宇,許錦標(biāo).紅外遙控器在DALI系統(tǒng)中的應(yīng)用設(shè)計 [J].現(xiàn)代建筑電氣,2010,1(1):19~23.
[3]倪凱等.一種移動終端遠(yuǎn)程數(shù)據(jù)訪問控制方法.計算機應(yīng)用與軟件,2012(6).
[4]武軍,康忠良.Windows套接字在VB,VC,Delphi中的實現(xiàn).計算機應(yīng)用研究,2001,18(5):117~119.