曾妍
(四川信息職業技術學院 四川 廣元 628040)
基于物聯網的照明控制系統以ZigBee、單片機、傳感器、C#和PHP程序設計為主要技術手段,包括照明控制單元、ZigBee無線傳輸層(含網關)、PC展示及控制層3個層次的現場控制單元、CC2430無線傳輸網絡、ARM網關硬件單元、ARM網關客戶端軟件、基于C#的服務端軟件、基于PHP的展示軟件等6個子系統,用于實現一套模擬城市照明控制系統。
本課題首先規劃了WSN協調器與ARM網關的串口通訊協議及ARM客戶端與PC服務端的TCP/IP通訊協議,然后基于Windows CE 6.0操作系統,運用C#編程語言開發了ARM的客戶端軟件。經測試,客戶端軟件實現了按規劃的協議將協調器上傳數據發往服務端和將服務端下發數據發往協調器的功能,性能穩定,具有一定的實用價值。
1.1.1 系統組成
物聯網照明控制系統由感知層子系統、傳輸層子系統、應用層子系統三個部分組成,如圖1所示。其中,感知層子系統由開關量照明控制節點組成。傳輸層子系統包括基于CC2430的ZigBee無線傳輸網和基于TCP/IP的局域網傳輸網。應用層子程序系統由運行于服務器上的服務端軟件及其它展示軟件組成,本系統包括Web展示軟件和服務器Server軟件。如圖1所示。

圖1 物聯網照明控制系統的組成Fig.1 The composition of the network lighting control system
1.1.2 系統運行過程
在物聯網照明控制系統中,所有感知層節點的控制指令均由應用層子系統通過服務端下發給傳輸層ARM網關客戶端,然后由ARM處理器通過串口下發給CC2430協調器,再由后者通過ZigBee無線網絡下發給CC2430終端節點。執行的操作指令主要包括注冊網絡、獲取網絡參數、下發控制指令等3個方面。
1)注冊網絡
系統啟動后,CC2430協調器首先建立無線網絡,路由器和終端節點在發現網絡后,會主動加入網絡,并上傳網絡參數(物理地址、網絡地址、節點類型等)。
2)獲取網絡參數
系統運行中,為及時發現掉線節點,系統會周期性去詢問節點,要求返回網絡參數。獲取網絡參數的流程。
3)下發控制指令
當需要改變各被控對象的運行狀態時,系統就需要下發各類控制指令。
ARM網關[1]是傳輸層子系統的核心設備,主要完成數據轉發、協議轉換、命令代理和映射、本地存儲等功能,支持無線傳感器網絡內部數據協同和匯聚,支持ZigBee接入、TCP/IP網絡接入,從而橋接無線傳感器網絡與互聯網。
ARM客戶端軟件[2]主要用于實現接收ZigBee無線傳感網絡協調器上傳的數據,然后發送到服務器。同時,對于服務器下發的一些控制命令進行解析,并通過串口傳輸到無線網絡的協調器。
ARM網關整體上采用分層設計方案,體系結構如圖1所示。硬件部分主要包括ZigBee通信節點、S3C2440 ARM主控模塊、USB及網絡等外設模塊。軟件部分包括軟件支持層、應用層。圖2中,軟件支持層由硬件驅動、Windows CE操作系統以及支持Z-Stack的協議棧等構成。應用層由地址適配層、應用協議層、業務邏輯應用程序三部分構成,地址適配層用于Zigbee地址和以太網IP地址與應用層地址的映射,應用協議層是用于規范節點通信的數據幀格式,二者相互配合可實現節點間數據的透明傳輸。

圖2 ARM網關的體系結構Fig.2 The system structure of ARM gateway
本課題所需開發的是軟件部分的應用層軟件,涉及協議轉換、數據轉發、人機交互等功能,宜采用軟件設計中的三層架構進行軟件開發。所謂三層架構,是指數據訪問層、業務邏輯層以及窗體表示層。本課題主要涉及業務邏輯層和窗體表示層的設計與功能實現。
1)透明傳輸,將控制與傳輸分離。協議的規劃不宜采用按功能方式規劃,而應采用分層方式實施,以便明確邊界。對于本系統而言,整個協議從下自上為分三層,如圖3所示。

圖3 自定義協議的層次結構Fig.3 The hierarchical structure of custom protocol
2)本系統WSN類型節點由協調器、路由器、傳感器節點三種組成,拓撲結構有樹狀形、星形網絡等。由于本系統控制點不多、分布范圍較窄,故采用星形網絡拓撲結構。支持ZigBee無線網廣播、點對點通信。
ARM網關通訊協議[3]詳細幀格式規劃包括注冊網絡、獲取網絡參數、返回網絡參數、下發操作指令、上傳操作結果等協議的規劃。
1)注冊網絡通訊協議
注冊網絡[4]是指當終端節點或路由器新加入網絡后,主動向上級節點發送源節點網絡參數的過程。從信息流向來看,注冊網絡的信息是由CC2430終端節點出發,經協調器轉發至PC。
2)獲取網絡參數通訊協議
獲取網絡參數是PC根據人機交互需要,通過WSN協調器下發獲取網絡參數指令,終端節點或路由器收到指令后,向上級節點返回源節點的網絡參數。本系統中只有當節點自動注冊網絡失敗時,才從服務器手動發送指令獲取節點網絡參數。從信息流向來看獲取網絡參數包括從PC到客戶端,再由客戶端發往協調器,最終到路由器和終端節點的下行發送指令,以及上行返回網絡參數兩個方面。
3)返回網絡參數通訊協議
當節點收到由客戶端轉發來自服務端的獲取網絡指令后,自動向客戶端返回節點的網絡參數,再由客戶端向服務端返回數據。
4)下發操作指令通訊協議
本系統中PC下發控制指令,是通過WSN協調器下發開燈或關燈指令,終端節點或路由器收到指令后,向上級節點返回源節點的執行結果。從信號流向來看,指令是由PC發出,經串口發送到客戶端,再由客戶端經串口將指令送入WSN協調器,然后下發到終端節點。
5)上傳操作結果通訊協議
本系統中控制上傳控制指令,是通過WSN協調器上傳到PC下發選擇開燈或關燈指令,終端節點或路由器收到指令后,向上級節點返回源節點的執行結果(包括提取到的溫度、濕度以及燈光亮度參數)。從信號流向來看,指令是由PC發出,經串口送入WSN協調器,然后下發到終端節點,再經串口傳輸到單片機。
業務邏輯層[5]涉及數據處理SerialPortClass.cs,包括搜尋設備可用的串口、打開串口、關閉串口、下發指令并接收數據4種方法。對應方法如表1所示。

表1 SerialPortClass類的方法描述Tab.1 The methods of the SerialPortClass class description
1)SearchSerialPorts方法該方法主要用于搜尋設備可用串口,其詳細代碼如下:public bool SearchSerialPorts(out string[]ports, out string retstr)
{
ports=SerialPort.GetPortNames (); //搜尋可用串口
if(ports!=null)
{
retstr="搜尋到可用串口";
return true;
}
else
{
retstr="無可用串口";
return false;
}
}
2)OpenSerialPort方法
該方法主要用于打開串口,該方法先判斷串口是否已經打開(0--打開串口成功;1--串口被占用;2--打開串口異常;3--打開串口失敗;),然后在串口未被占用的情況下,打開串口。
3)CloseSerialPort方法
該方法主要用于關閉串口,該方法先判斷串口是否已經打開(串口未打開,無需關閉),然后在串口已打開情況下,關閉串口 (0--關閉串口成功;1--串口未打開;2--關閉串口失敗;3--關閉串口異常。
4)SendDataToPort方法
該方法主要用于下發指令并接收數據,定義一個byte[]類型封裝變量cmd,首先判斷串口是否打開。若打開,則通過第一個默認通道發送cmd,并返回true,若未打開,直接返回false。
1)添加窗體文件并設計窗體
窗體表示層[6]的設計,在設計器中選擇 “項目→添加Windons窗體”,打開“添加新項”對話框。 選擇“Windons”模板,添加frmClient.cs窗體,根據需求設計frmClient.cs窗體,如圖4所示。

圖4 創建frmClient.cs窗體界面Fig.4 Create a frmClient.cs form interface
2)frmClient窗體代碼文件(frmClient.cs)的結構
在frmClient.cs中,首先需要定義一些全局變量,實例化有關公共對象,然后編寫諸如連接設備(串口)、斷開設備(串口)、接收數據、轉發數據等事件的處理方法。
1)frmClient_Load事件處理方法
在frmClient窗體加載事件處理過程中,需搜尋并獲取當前可用串口號寫入ComboBox控件cbbSerialPort的Items中并顯示,并設置默認的波特率。其中,通過調用業務邏輯層的Get_Ports方法獲取可用串口。
2)btnConnectCoor_Click事件處理方法
該方法用于連接協調器,首先提取串口名稱、波特率,然后實例化一個串口操作對象并調用業務邏輯層OpenSerialPort方法打開串口,如果打開串口成功,則為已經打開的串口添加DataReceived事件并設置串口連接。如果打開串口不成功,則進行錯誤提示。
3)btnClosePort_Click事件處理方法
該方法用于斷開協調器,首先實例化一個串口操作類對象,然后調用業務邏輯層CloseSerialPort方法關閉串口,如果關閉串口成功,則設置串口連接。如果關閉串口不成功,則進行錯誤提示。
4)btnStartListen_Click事件處理方法
該事件執行啟動上傳功能,要實現該操作需先實例化客戶端和網絡數據流,再連接服務端,通過調用SendMessage方法將網關接入到服務器,并通過串口上傳數據到服務器,同時調用ReceiveMessage方法接收來自服務器發向協調器的指令。
5)btnStopListen_Click事件處理方法
該事件執行停止上傳功能,關閉客戶端與服務器之間的傳輸,并斷開網關接與服務器。
6)btnSendToServer_Click事件處理方法
該事件執行手動上傳功能,通過調用SendMessage方法手動向服務端上傳網關配置。
7)btnCleaeWSN_Click事件處理方法
該事件執行清空WSN無線網絡消息的功能。
8)btnClearTcpIP_Click事件處理方法
該事件執行清空TCP/IP局域網消息功能。
利用VS20005軟件生成SmartHomeClient.exe應用文件,然后連接WinCE 6.0,利用同步軟件將SmartHomeClient.exe應用文件復制到WinCE 6.0操作平臺,然后打開在WinCE 6.0操作平臺中打開SmartHomeClient.exe應用文件。如圖5所示。然后連接協調器和服務端,開啟“啟動上傳”按鈕,協調器向服務端上傳節點數據,服務端下發操作指令,觀察網關是否有數據傳輸。

圖5 ARM網關客戶端軟件界面Fig.5 The ARM gateway client software interface
1)連接服務器
在服務端打開的情況下,開啟“啟動上傳”,連接服務器成功則提示“接入服務器”,并在lbServerMsg中顯示來自服務器的信息。
2)組網
在已連接協調器和服務器的情況下,復位節點,通過協調器向網關發送節點信息,再由網關將節點信息轉發至服務器,進行組網。
3)服務器下發操作指令
服務器通過網關向協調器發送開燈指令,在已經開燈的情況下,服務器通過網關向協調器發送光照、濕度、溫度采集指令。
經測試本系統網關客戶端軟件,實現了數據的上傳和下發功能,達到了設計目的。
本文研究利用ZigBee無線通信技術組建無線網絡,并將其使用于教室、走廊、街道的智能照明控制系統中。無線智能照明系統的設計是為了對建筑的照明設備實現集中統一的管理,將建筑的照明設備按場景分類進行控制,并根據室外光照調節照明設備的照度,從而,使建筑以及室內室外都有一個良好的光環境,并能夠盡可能的節約能源。在智能照明控制系統中,使用無線通信的方式,可以避免有線電纜的鋪設,降低了系統的安裝成本與安裝難度,同時也便于系統的移動,即可以整體的搬遷至另外的環境中進行使用,這樣又在另一層面降低了系統的成本,以及縮短了系統回收利潤的時間。為了達到系統所需要的功能與要求,在本設計中利用了成都無線龍公司的無線單片機系統作為系統的硬件開發平臺,對系統中的節點設備進行了設計,完成了網絡協調器、路由器控制終端設備以及其他網絡節點的原理圖設計。同時利用軟件開發平臺IAR環境,進行了系統的主程序設計,以及主程序流程圖的繪制。利用Microsoft Visual Studio 2005開發環境對控制系統的設計制作,實現了真正的智能化。
[1]劉孟強,夏晶晶,劉俊輝.C#程序設計案例教程[M].北京:清華大學出版社,2011.
[2]王浩.Windows CE(C#)嵌入式應用開發[M].北京:中國水利水電出版社,2010.
[3]黃嘉輝.C#.NET網絡程序設計[M].科學出版社,2004.
[4]宋先斌.C#應用開發[M].北京:清華大學出版社,2010.
[5]鄭耀東.C#從入門到實踐[M].北京:清華大學出版社,2009.
[6]Scott Meyers.Effective C++[M].北京:電子工業出版社,2006.