吳歡歡,秦會斌
(杭州電子科技大學(xué)新型電子器件與應(yīng)用研究所,杭州310018)
隨著城市的發(fā)展,傳統(tǒng)路燈照明問題凸顯,傳統(tǒng)路燈被LED路燈代替是必然的,并且隨著LED路燈智能化的發(fā)展,現(xiàn)場由從單片機采集路燈電流電壓后經(jīng)過主機與上位機進行GPRS數(shù)據(jù)傳輸,從而達到“遙控、遙測、遙訊”的目的。目前智能LED路燈控制箱的研究和發(fā)展,還有上位機軟件的設(shè)計得越發(fā)成熟,相信不久的將來,中小城市的路燈就會普及智能LED路燈照明控制系統(tǒng),而與客戶監(jiān)控直接接觸的客戶界面就會顯得是所有信息表達的關(guān)鍵。
研究目前公司設(shè)計的產(chǎn)品時,發(fā)現(xiàn)目前智能控制系統(tǒng)的LED路燈定位大多是上傳地圖圖片的形式,再根據(jù)圖片的坐標在圖片上進行標注,往往一張圖片的程序占了好幾米長,如果是基于Web服務(wù)器下載的話,數(shù)據(jù)的傳輸也會因為數(shù)據(jù)大而感覺程序比較卡,對于操作體驗就會感覺很不流暢。針對問題,設(shè)計和實現(xiàn)簡單的LED路燈定位系統(tǒng)以達到更好并且有效都路燈進行實時監(jiān)控路燈。
Microsoft Visual Studio 2008是面向 Windows、Vista、Office2007、Web 2.0 的下一代開發(fā)工具,代號“Orcas”,是對Visual Studio 2005一次及時、全面的升級。VS2008引入了250多個新特性,整合了對象、關(guān)系型數(shù)據(jù)庫、XML的訪問方式,語言更加簡潔。使用VS2008可以高效開發(fā)Windows應(yīng)用程序[1]。
JavaScript是一種基于對象(Object)和事件驅(qū)動(Event Driven)并具有安全性能的腳本語言。使用它的目的是與HTML超文本標記語言、Java腳本語言(Java小程序)一起實現(xiàn)在一個Web頁面中鏈接多個對象,與Web客戶交互作用。從而可以開發(fā)客戶端的應(yīng)用程序等[4]。它是通過嵌入或調(diào)入在標準的HTML語言中實現(xiàn)的[5]。
在MFC類層次上,CDHtmlDialog為開發(fā)者提供了創(chuàng)建Webgui的一系列基礎(chǔ)設(shè)施,包括事件機制、窗口行為、以及對HTML文檔操縱接口。MSDN是微軟提供給我們使用VS2008的幫助文檔,在里面CDHtmlDialog類被解釋為:用于創(chuàng)建對話框,使用HTML而不是對話框的資源來實現(xiàn)他們的用戶界面。CDHtmlDialog可以加載HTML顯示來自一個HTML資源或 URL。CDHtmlDialog也可以做與HTML控件的數(shù)據(jù)交換和處理事件從HTML控件,比如按鈕點擊等[2]。
百度地圖 API是一套應(yīng)用程序接口。通過API,只需簡單的操作,即可在自己的應(yīng)用中構(gòu)建功能豐富、個性化的、高效的地圖功能。其中包含了構(gòu)建地圖基本功能的多個接口,提供了諸如位置搜索、周邊查詢、出行路線規(guī)劃等功能服務(wù)。百度地圖API服務(wù)是免費開放的。并提供了基于移動設(shè)備和瀏覽器的兩套API。
在整個智能路燈控制系統(tǒng)中,LED路燈定位系統(tǒng)使整個客戶端軟件的用戶體驗性和方便用戶操作與監(jiān)控無疑提供了一個很直觀、方便的強大功能,基于MFC中CDHtmlDialog類來訪問百度地圖,在通過C++語言來訪問JavaScript來實現(xiàn)路燈在地圖中的定位。整體設(shè)計框圖如1所示。
圖1 定位設(shè)計框圖
圖1中,Web服務(wù)器是提供百度地圖訪問的服務(wù)器,通過自己設(shè)計的基于 CDHtmlDialog類的CMapInfomation對HTML來進行訪問百度地圖,并通過CMapInfomation類中的CallJScript來進行對腳本的訪問,對路燈實際經(jīng)度緯度在地圖進行標注,通過數(shù)據(jù)的交互實現(xiàn)對路燈實時信息進行顯示和控制[6-11]。
在MFC系統(tǒng)工程資源中了插入一個對話框資源,將ID修改為IDD_HTMLMAP,再為這個對話框資源建一個類,類名為 CMapInfomation,基于 CDHtmlDialog類[3],如圖2 所示。
圖2 創(chuàng)建CMapInfomation類界面
在創(chuàng)建完CMapInfomation類之后,這個類的主要作用就是訪問資源為IDR_HTML_MAPINFOMATION的腳本,此腳本內(nèi)容在4.2節(jié)設(shè)計與實現(xiàn)。網(wǎng)頁腳本要調(diào)用C++程序代碼,就必須要實現(xiàn)腳本擴展。實現(xiàn)腳本擴展就是在程序中實現(xiàn)一個IDispatch接口,通過CDHtmlDialog類中的OnGetExternal虛函數(shù)返回此接口指針,在腳本中通過Window.External.xxx(xxx為C++程序函數(shù)名)。在MFC中從CCmdTarget派生的類都可以實現(xiàn)自動化,而不必在MFC工程中引入繁雜的ATL。只要在CMapInfomation類的構(gòu)造函數(shù)中添加EnableAutomation函數(shù)就好。代碼:
在MapInfomation類的代碼中,實現(xiàn)對腳本HTML文檔中所有對象的獲取和函數(shù)關(guān)鍵字的讀取和調(diào)用,使用函數(shù)GetJScript和CallJScript這2個函數(shù),CallJScript這是一個虛函數(shù),也是一個重載函數(shù),他對于傳入腳本函數(shù)的參數(shù)可以多變。
以上關(guān)鍵代碼實現(xiàn)之后,對于LED路燈定位只要實現(xiàn)在C++代碼中用CallJScript調(diào)用addMarker函數(shù),傳入經(jīng)度strLatitude,緯度strLongtitude2個參數(shù)就可以定位,實現(xiàn)代碼:
實現(xiàn)的效果圖如圖3所示。
圖3 路燈定位實現(xiàn)效果圖
在實現(xiàn)上述的定位功能之后,系統(tǒng)會實時對路燈進行監(jiān)控,監(jiān)控的只要是對GPRS傳輸過來信息的一個解析過程,解析的代碼不是本文的介紹重點,就不在這里過多介紹了,下面是介紹在界面對實時監(jiān)控的信息如何來進行操作。
對路燈的實時監(jiān)控,在正常時候就顯示圖3的情況,要了解詳細的路燈信息是就要雙擊標記點,實現(xiàn)后如圖4所示。
HTML主要實現(xiàn)代碼:
在C++程序中主要代碼:
圖4 監(jiān)控見面
當然所說的實時進行路燈監(jiān)控主要是對路燈告警信息的進行監(jiān)控,主要體現(xiàn)是,在對GPRS信息進行解析之后,界面上對控制箱有報警信息的標記會進行跳動,當我點擊跳動時,界面就會顯示出報警的具體信息,從而實現(xiàn)了實時監(jiān)控,如圖5所示。
圖5 具體告警信息顯示圖
面向LED路燈定位的桌面監(jiān)控設(shè)計的實現(xiàn),給實際的智能路燈控制系統(tǒng)帶來了更加直觀的用戶體驗,在與傳統(tǒng)的地圖圖片標注來說,實現(xiàn)了現(xiàn)在實時更新地形地圖狀況,實現(xiàn)了桌面監(jiān)控的實時性和可靠性,為系統(tǒng)的操作帶來了更好的可讀性和可操作性。
[1]孫鑫.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.
[2]丁有和.Visual C++.NET編程實戰(zhàn)[M].天極出版社,2002:3.
[3]王華,葉愛亮,祁力學(xué).Visual C++6.0編程實例與技巧[M].機械工業(yè)出版社,1998.
[4]張長富,黃中敏.JavaScript動態(tài)網(wǎng)頁編程實例手冊[M].海洋出版社,2005:8.
[5]孫素華.DreamWeaver MX 2004完美網(wǎng)頁設(shè)計實戰(zhàn)技巧篇[M].中國青年出版社,2006:1.
[6]李黎明.安陽市路燈智能監(jiān)控系統(tǒng)技術(shù)簡介[J].山西建筑,2012,38(16):132-133.
[7]楊章偉.21天學(xué)通Visual C++[M].電子工業(yè)出版社,2009:36-49.
[8]朱榮輝,吳愛國.基于GPRS的城市照明監(jiān)控系統(tǒng)開發(fā)[J].電器應(yīng)用,2005,24(12):100-103
[9]萬鄉(xiāng)才,梁龍學(xué),呂曉劍.基于GPRS的路燈節(jié)能控制系統(tǒng)的研究與設(shè)計[J].自動化與儀器儀表,2012,2:62-63.
[10]韓斌杰.GPRS原理及其網(wǎng)絡(luò)優(yōu)化[M].北京:機械工業(yè)出版社,2003:15-50.
[11]申利民,翁桂鵬.基于ZigBee的智能小區(qū)LED路燈控制系統(tǒng)設(shè)計[J].中國照明電器,2011,12(2):10-14