吳歡歡,秦會斌
(杭州電子科技大學新型電子器件與應用研究所,杭州310018)
隨著城市的發展,傳統路燈照明問題凸顯,傳統路燈被LED路燈代替是必然的,并且隨著LED路燈智能化的發展,現場由從單片機采集路燈電流電壓后經過主機與上位機進行GPRS數據傳輸,從而達到“遙控、遙測、遙訊”的目的。目前智能LED路燈控制箱的研究和發展,還有上位機軟件的設計得越發成熟,相信不久的將來,中小城市的路燈就會普及智能LED路燈照明控制系統,而與客戶監控直接接觸的客戶界面就會顯得是所有信息表達的關鍵。
研究目前公司設計的產品時,發現目前智能控制系統的LED路燈定位大多是上傳地圖圖片的形式,再根據圖片的坐標在圖片上進行標注,往往一張圖片的程序占了好幾米長,如果是基于Web服務器下載的話,數據的傳輸也會因為數據大而感覺程序比較卡,對于操作體驗就會感覺很不流暢。針對問題,設計和實現簡單的LED路燈定位系統以達到更好并且有效都路燈進行實時監控路燈。
Microsoft Visual Studio 2008是面向 Windows、Vista、Office2007、Web 2.0 的下一代開發工具,代號“Orcas”,是對Visual Studio 2005一次及時、全面的升級。VS2008引入了250多個新特性,整合了對象、關系型數據庫、XML的訪問方式,語言更加簡潔。使用VS2008可以高效開發Windows應用程序[1]。
JavaScript是一種基于對象(Object)和事件驅動(Event Driven)并具有安全性能的腳本語言。使用它的目的是與HTML超文本標記語言、Java腳本語言(Java小程序)一起實現在一個Web頁面中鏈接多個對象,與Web客戶交互作用。從而可以開發客戶端的應用程序等[4]。它是通過嵌入或調入在標準的HTML語言中實現的[5]。
在MFC類層次上,CDHtmlDialog為開發者提供了創建Webgui的一系列基礎設施,包括事件機制、窗口行為、以及對HTML文檔操縱接口。MSDN是微軟提供給我們使用VS2008的幫助文檔,在里面CDHtmlDialog類被解釋為:用于創建對話框,使用HTML而不是對話框的資源來實現他們的用戶界面。CDHtmlDialog可以加載HTML顯示來自一個HTML資源或 URL。CDHtmlDialog也可以做與HTML控件的數據交換和處理事件從HTML控件,比如按鈕點擊等[2]。
百度地圖 API是一套應用程序接口。通過API,只需簡單的操作,即可在自己的應用中構建功能豐富、個性化的、高效的地圖功能。其中包含了構建地圖基本功能的多個接口,提供了諸如位置搜索、周邊查詢、出行路線規劃等功能服務。百度地圖API服務是免費開放的。并提供了基于移動設備和瀏覽器的兩套API。
在整個智能路燈控制系統中,LED路燈定位系統使整個客戶端軟件的用戶體驗性和方便用戶操作與監控無疑提供了一個很直觀、方便的強大功能,基于MFC中CDHtmlDialog類來訪問百度地圖,在通過C++語言來訪問JavaScript來實現路燈在地圖中的定位。整體設計框圖如1所示。

圖1 定位設計框圖
圖1中,Web服務器是提供百度地圖訪問的服務器,通過自己設計的基于 CDHtmlDialog類的CMapInfomation對HTML來進行訪問百度地圖,并通過CMapInfomation類中的CallJScript來進行對腳本的訪問,對路燈實際經度緯度在地圖進行標注,通過數據的交互實現對路燈實時信息進行顯示和控制[6-11]。
在MFC系統工程資源中了插入一個對話框資源,將ID修改為IDD_HTMLMAP,再為這個對話框資源建一個類,類名為 CMapInfomation,基于 CDHtmlDialog類[3],如圖2 所示。

圖2 創建CMapInfomation類界面
在創建完CMapInfomation類之后,這個類的主要作用就是訪問資源為IDR_HTML_MAPINFOMATION的腳本,此腳本內容在4.2節設計與實現。網頁腳本要調用C++程序代碼,就必須要實現腳本擴展。實現腳本擴展就是在程序中實現一個IDispatch接口,通過CDHtmlDialog類中的OnGetExternal虛函數返回此接口指針,在腳本中通過Window.External.xxx(xxx為C++程序函數名)。在MFC中從CCmdTarget派生的類都可以實現自動化,而不必在MFC工程中引入繁雜的ATL。只要在CMapInfomation類的構造函數中添加EnableAutomation函數就好。代碼:


在MapInfomation類的代碼中,實現對腳本HTML文檔中所有對象的獲取和函數關鍵字的讀取和調用,使用函數GetJScript和CallJScript這2個函數,CallJScript這是一個虛函數,也是一個重載函數,他對于傳入腳本函數的參數可以多變。


以上關鍵代碼實現之后,對于LED路燈定位只要實現在C++代碼中用CallJScript調用addMarker函數,傳入經度strLatitude,緯度strLongtitude2個參數就可以定位,實現代碼:

實現的效果圖如圖3所示。

圖3 路燈定位實現效果圖
在實現上述的定位功能之后,系統會實時對路燈進行監控,監控的只要是對GPRS傳輸過來信息的一個解析過程,解析的代碼不是本文的介紹重點,就不在這里過多介紹了,下面是介紹在界面對實時監控的信息如何來進行操作。
對路燈的實時監控,在正常時候就顯示圖3的情況,要了解詳細的路燈信息是就要雙擊標記點,實現后如圖4所示。
HTML主要實現代碼:

在C++程序中主要代碼:


圖4 監控見面
當然所說的實時進行路燈監控主要是對路燈告警信息的進行監控,主要體現是,在對GPRS信息進行解析之后,界面上對控制箱有報警信息的標記會進行跳動,當我點擊跳動時,界面就會顯示出報警的具體信息,從而實現了實時監控,如圖5所示。

圖5 具體告警信息顯示圖
面向LED路燈定位的桌面監控設計的實現,給實際的智能路燈控制系統帶來了更加直觀的用戶體驗,在與傳統的地圖圖片標注來說,實現了現在實時更新地形地圖狀況,實現了桌面監控的實時性和可靠性,為系統的操作帶來了更好的可讀性和可操作性。
[1]孫鑫.VC++深入詳解[M].北京:電子工業出版社,2006.
[2]丁有和.Visual C++.NET編程實戰[M].天極出版社,2002:3.
[3]王華,葉愛亮,祁力學.Visual C++6.0編程實例與技巧[M].機械工業出版社,1998.
[4]張長富,黃中敏.JavaScript動態網頁編程實例手冊[M].海洋出版社,2005:8.
[5]孫素華.DreamWeaver MX 2004完美網頁設計實戰技巧篇[M].中國青年出版社,2006:1.
[6]李黎明.安陽市路燈智能監控系統技術簡介[J].山西建筑,2012,38(16):132-133.
[7]楊章偉.21天學通Visual C++[M].電子工業出版社,2009:36-49.
[8]朱榮輝,吳愛國.基于GPRS的城市照明監控系統開發[J].電器應用,2005,24(12):100-103
[9]萬鄉才,梁龍學,呂曉劍.基于GPRS的路燈節能控制系統的研究與設計[J].自動化與儀器儀表,2012,2:62-63.
[10]韓斌杰.GPRS原理及其網絡優化[M].北京:機械工業出版社,2003:15-50.
[11]申利民,翁桂鵬.基于ZigBee的智能小區LED路燈控制系統設計[J].中國照明電器,2011,12(2):10-14