基于mfc和的C,S編程簡單實現(xiàn)_第1頁
基于mfc和的C,S編程簡單實現(xiàn)_第2頁
基于mfc和的C,S編程簡單實現(xiàn)_第3頁
基于mfc和的C,S編程簡單實現(xiàn)_第4頁
基于mfc和的C,S編程簡單實現(xiàn)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、摘 要互聯(lián)網(wǎng)技術(shù)的普及,傳感器技術(shù)的快速發(fā)展都為物聯(lián)網(wǎng)發(fā)展提供了賴以發(fā)展的溫床。傳感器是物聯(lián)網(wǎng)的重要組成部分。傳統(tǒng)的傳感器管理系統(tǒng)現(xiàn)場總線的布控是必不可少的,然后將現(xiàn)場設(shè)備連接到計算機進行數(shù)據(jù)處理并向用戶提供顯示和交互界面。其不夠靈活的特性深受用戶詬病。通過將物聯(lián)網(wǎng)引入到遠程管理系統(tǒng)中,近幾年許多新型的傳感器網(wǎng)絡(luò)系統(tǒng)得到了發(fā)展并取得了廣大用戶的認(rèn)可。靈活方便的監(jiān)控方式低廉的系統(tǒng)維護成本漸漸成為新型管理系統(tǒng)的發(fā)展的方向。其底層運用物聯(lián)網(wǎng)傳輸技術(shù)連接現(xiàn)場傳感器及設(shè)備,上層運用互聯(lián)網(wǎng)技術(shù)服務(wù),這就極大消除了現(xiàn)場布線的煩惱,極大減少網(wǎng)絡(luò)硬件的投入和日常的IT維護。同時可輕松實現(xiàn)基于WEB服務(wù)的遠程管理

2、。本課題主要研究各種系統(tǒng)的通用性,提出通用傳感器數(shù)據(jù)庫的解決方案。關(guān) 鍵 詞傳感器,物聯(lián)網(wǎng),數(shù)據(jù)庫AbstractThe popularity of Internet technology and the rapid development of sensor technology provide a hotbed for the development of the internet of things.The sensor is an important part of the Internet of things.Arrangement of field bus is necessary

3、 for the traditional sensor management system.Then connect field device to computer which provides display interfaces and interactive interfaces to process the data.The traditional system is criticized for its inflexible characteristic.Through bringing internet of things in remote management system,

4、developing many new type sensor management systems which have been recognized by users.Flexible and convenient way of monitoring and Fluvial system maintenance costs will lead the development of new type of sensor management system.The underlying use wireless sensor networks connect to field sensors

5、 or equipments.The upper use Internet technology service.This greatly eliminates the field wiring problems and reduce the investment of network hardware and daily IT maintenance.And can easily implement remote management based on WEB service at the same time.This topic mainly studies generality of v

6、arious system , to put forward a solution for common sensor database.KeywordsSensor, Internet of things, Database 目 錄摘 要VAbstractVI目 錄VII一、緒論1(一)課題背景及研究意義1(二)國內(nèi)外研究狀況11 國外物聯(lián)網(wǎng)研究狀況12 國內(nèi)物聯(lián)網(wǎng)研究狀況1(三)本論文主要研究內(nèi)容2(四)本論文組織結(jié)構(gòu)2二、相關(guān)技術(shù)介紹3(一)物聯(lián)網(wǎng)技術(shù)3(二)數(shù)據(jù)庫編程技術(shù)3(三)網(wǎng)絡(luò)編程技術(shù)5三、系統(tǒng)設(shè)計5(一)系統(tǒng)整體結(jié)構(gòu)設(shè)計5(二)約定數(shù)據(jù)格式7(三)傳感器節(jié)點的設(shè)計與模擬實現(xiàn)71

7、 傳感器節(jié)點的設(shè)計72 節(jié)點模擬實現(xiàn)8(四)服務(wù)器的設(shè)計與模擬實現(xiàn)101 服務(wù)器的設(shè)計102 服務(wù)器模擬實現(xiàn)10四、系統(tǒng)測試15(一)數(shù)據(jù)存儲測試15(二)命令下載測試16五、總結(jié)與展望17參考文獻18附 錄19(一) 節(jié)點網(wǎng)絡(luò)編程初始化過程19(二) 節(jié)點觸發(fā)定時器處理過程19(三) 節(jié)點響應(yīng)讀取20(四) 服務(wù)器OnStartrun()函數(shù)21(五) 服務(wù)器getKeyMsg()函數(shù)22謝 辭2423一、緒論(一)課題背景及研究意義近年來隨著微電子技術(shù)的迅猛發(fā)展和快速完善,傳感器得到了越來越廣泛的應(yīng)用。多個傳感器在一定范圍內(nèi)協(xié)同工作,將一段時間內(nèi)收集到的有用的信息傳給服務(wù)器,這樣就構(gòu)成了傳

8、感器網(wǎng)絡(luò)。傳感器網(wǎng)絡(luò)的不斷發(fā)展和完善推動了物聯(lián)網(wǎng)的不斷發(fā)展和完善。物聯(lián)網(wǎng)越來越受到各國的重視,作為新興產(chǎn)業(yè)不管是IBM提出的“智慧地球”概念,還是溫家寶總理在無錫提出的“感知中國”,都意味著物聯(lián)網(wǎng)將成為當(dāng)下和未來十幾年內(nèi)最熱門,最具競爭性和最具發(fā)展前景的產(chǎn)業(yè)之一。物聯(lián)網(wǎng)漸漸成為繼互聯(lián)網(wǎng)浪潮之后又一次偉大的科學(xué)技術(shù)革命。在這種大形勢下,各種物聯(lián)網(wǎng)應(yīng)用的研究成果如雨后春筍般遍地生根發(fā)芽。物聯(lián)網(wǎng)系統(tǒng)可以獲取大量詳實并且可靠的信息,其最大的優(yōu)勢就是獲取信息可以在在任何時間、地點和任何環(huán)境下。物聯(lián)網(wǎng)系統(tǒng)作為一種新型信息獲取系統(tǒng)具有靈活、可靠、便于操作等傳統(tǒng)信息獲取系統(tǒng)沒有的優(yōu)勢,因此物聯(lián)網(wǎng)深受廣大用戶的

9、認(rèn)可,具有極其廣闊的應(yīng)用前景,可被應(yīng)用于制造業(yè)、交通管理、設(shè)備農(nóng)業(yè)、醫(yī)療衛(wèi)生、智能家居、環(huán)境監(jiān)測、國防軍事、反恐抗災(zāi)等與人們息息相關(guān)的領(lǐng)域。(二)國內(nèi)外研究狀況1 國外物聯(lián)網(wǎng)研究狀況自從IBM于2009年提出“智慧的地球”概念之后,美國總統(tǒng)奧巴馬就把“寬帶網(wǎng)絡(luò)等新興技術(shù)”定位為振興經(jīng)濟、確立美國全球競爭優(yōu)勢的關(guān)鍵戰(zhàn)略。2007年,歐盟出臺了RFID在歐盟邁向政策框架的步驟,稱RFID(Radio Frequency Identification Devices)為信息社會發(fā)展進入新階段的新入口。歐盟也于2009年提出了歐盟物聯(lián)網(wǎng)行動計劃,其目的是確保歐盟可以在各國構(gòu)建物聯(lián)網(wǎng)過程中發(fā)揮主導(dǎo)作用。

10、日韓等發(fā)達國家也爭相將物聯(lián)網(wǎng)技術(shù)發(fā)展納入到重要信息產(chǎn)業(yè)發(fā)展的范疇中。2 國內(nèi)物聯(lián)網(wǎng)研究狀況溫家寶總理于2009年8月在無錫提出“感知中國”的概念,標(biāo)志著物聯(lián)網(wǎng)被正式列為我國國家五大新興戰(zhàn)略性產(chǎn)業(yè)之一。雖然物聯(lián)網(wǎng)的概念在中國最近才得到廣泛關(guān)注,但物聯(lián)網(wǎng)的應(yīng)用很早就在中國開展,在RFID方面,2009年中國RFID產(chǎn)業(yè)市場規(guī)模達110億元。在M2M(Machine to Machine)方面,電信運營商積極開展M2M應(yīng)用。如中國移動從2004年開始開展M2M業(yè)務(wù),到2008年M2M終端數(shù)量就已經(jīng)發(fā)展到了229萬。目前,中國的物聯(lián)網(wǎng)產(chǎn)業(yè)的發(fā)展處在初級階段,而且存在很多問題:一個是觀念問題,物聯(lián)網(wǎng)將雖

11、然是未來1020年戰(zhàn)略性新型產(chǎn)業(yè),但是現(xiàn)在僅僅是處于起步階段。但我們的媒體和政府往往急功近利,不夠?qū)嶋H情況,做出脫離實際的宣傳,這不僅不利于物聯(lián)網(wǎng)技術(shù)與產(chǎn)業(yè)的發(fā)展,甚至阻礙發(fā)展。另一個是技術(shù)問題,傳感器是物聯(lián)網(wǎng)的一個基礎(chǔ),由于傳感技術(shù)的多樣性和復(fù)雜性,物聯(lián)網(wǎng)一定比互聯(lián)網(wǎng)和通訊網(wǎng)面臨更多的技術(shù)難題,這需要大量的物力人力經(jīng)過一定時間段的研究才能漸漸克服。還有一個是執(zhí)行問題,物聯(lián)網(wǎng)是一項應(yīng)用技術(shù),政府項目的示范效應(yīng)很重要。未來幾年,真正意義上的全球物聯(lián)網(wǎng)很難實現(xiàn),只能從小型的局域物聯(lián)網(wǎng)等逐步發(fā)展。這就需要政府做好示范作用。(三)本論文主要研究內(nèi)容本課題是基于家庭煤氣監(jiān)測系統(tǒng)的改進項目提出的,目的能夠

12、運用到各種系統(tǒng)中。只要傳感器網(wǎng)絡(luò)端數(shù)據(jù)遵守制定的數(shù)據(jù)格式,就能將數(shù)據(jù)上傳到位于網(wǎng)絡(luò)另一端的服務(wù)器上,服務(wù)器把數(shù)據(jù)存儲到數(shù)據(jù)庫中。同時開發(fā)基于C/S(Client/Server)網(wǎng)絡(luò)架構(gòu)后端網(wǎng)絡(luò)應(yīng)用,用戶可以通過手機、平板電腦上的應(yīng)用監(jiān)測前端數(shù)據(jù)。用戶也可以通過發(fā)布異步命令方式控制前端傳感器或設(shè)備。命令通過網(wǎng)絡(luò)到達服務(wù)器被保存到數(shù)據(jù)庫中,當(dāng)相關(guān)的傳感器或設(shè)備連接服務(wù)器傳送數(shù)據(jù)時自動下載命令。這就實現(xiàn)了異步方式控制前端傳感器或設(shè)備。(四)本論文組織結(jié)構(gòu)本課題研究內(nèi)容是設(shè)計一種通用傳感器數(shù)據(jù)庫系統(tǒng)。本課題設(shè)計的總體目標(biāo)是提出一種通用傳感器數(shù)據(jù)庫系統(tǒng)的方案,并能夠通過軟件編程模擬實現(xiàn)系統(tǒng)框架的搭建和連

13、通,實現(xiàn)數(shù)據(jù)上傳、命令下載等基本功能。本論文共分為五章,具體安排如下:第一章為論文的緒論部分,介紹了課題背景及研究意義,分析了物聯(lián)網(wǎng)網(wǎng)絡(luò)技術(shù)的國內(nèi)外發(fā)展?fàn)顩r。最后介紹了本論文的研究內(nèi)容和工作安排。本課題的研究具有很大的實際應(yīng)用價值。第二章對設(shè)計方案應(yīng)用到的相關(guān)技術(shù)進行簡單的概述,包括傳感器節(jié)點的設(shè)計,數(shù)據(jù)庫編程框架的搭建以及網(wǎng)絡(luò)編程框架的搭建??偠灾@部分這部分主要介紹了模擬系統(tǒng)的準(zhǔn)備和配置工作。第三章首先介紹了系統(tǒng)整體結(jié)構(gòu)設(shè)計,然后約定了通用的,并且介紹了前端傳感器節(jié)點的設(shè)計、傳感器網(wǎng)絡(luò)的構(gòu)建及其模擬軟件的實現(xiàn)以及服務(wù)器端的設(shè)計及其模擬軟件的實現(xiàn)。第四章對系統(tǒng)的連通性進行了測試并且測試了

14、功能的實現(xiàn)。第五章是全文的總結(jié)與展望。二、相關(guān)技術(shù)介紹(一)物聯(lián)網(wǎng)技術(shù)物聯(lián)網(wǎng)被稱為繼計算機、互聯(lián)網(wǎng)之后世界信息產(chǎn)業(yè)發(fā)展的第三次浪潮,成為2010年最受關(guān)注的話題之一。無獨有偶中國和包括美國、歐盟、日韓等發(fā)達國家和地區(qū)都相繼把物聯(lián)網(wǎng)提升為國家戰(zhàn)略級產(chǎn)業(yè),都認(rèn)為通過物聯(lián)網(wǎng)能夠振興本國經(jīng)濟,引領(lǐng)時代的潮流和方向。本課題實際就是一個小型物聯(lián)網(wǎng)系統(tǒng)的設(shè)計。物聯(lián)網(wǎng)即“物物相連的互聯(lián)網(wǎng)”,就是將所有物體通過各種信息傳感設(shè)備或者敏感器件,通過約定協(xié)議與互聯(lián)網(wǎng)連接起來,進行信息交換和通信,實現(xiàn)物與物、物與人之間的信息交互,最終形成提供智能化識別、定位、跟蹤、監(jiān)控和管理服務(wù)的網(wǎng)絡(luò)形式。物聯(lián)網(wǎng)的技術(shù)體系框架如圖1所

15、示,它包括應(yīng)用層技術(shù)、網(wǎng)絡(luò)層技術(shù)、感知層技術(shù)以及公共技術(shù)應(yīng)用非常廣泛。圖1 物聯(lián)網(wǎng)技術(shù)體系框架物聯(lián)網(wǎng)的支撐技術(shù)融合了包括感知技術(shù)、組網(wǎng)技術(shù)、定位技術(shù)、云計算和智能服務(wù)在內(nèi)的多種先進技術(shù)。其中感知技術(shù)主要包括射頻識別技術(shù)、傳感器技術(shù)和機器視覺技術(shù)。組網(wǎng)技術(shù)主要包括基于藍牙、WiFi、PLC、ZigBee和6LoWPAN技術(shù)的無線傳感網(wǎng)絡(luò)技術(shù)等。定位技術(shù)主要包括GPS、GPSOne、RTLS、無線傳感網(wǎng)絡(luò)定位技術(shù)、移動通信網(wǎng)絡(luò)定位技術(shù)等。(二)數(shù)據(jù)庫編程技術(shù)目前,各種編程語言都有自己的數(shù)據(jù)庫編程方法并且各有各自的特點。本課題的模擬系統(tǒng)服務(wù)器端主要是基于Visual C+(簡稱VC+)的數(shù)據(jù)庫開發(fā)。

16、VC+提供了多種多樣的數(shù)據(jù)庫訪問技術(shù)ODBC API、MFC ODBC、DAO、OLE DB和ADO等。這些技術(shù)各有自己的特點,本課題的模擬系統(tǒng)使用MFC ODBC數(shù)據(jù)庫訪問技術(shù),操作比較簡單。傳統(tǒng)的ODBC API編寫應(yīng)用程序需要編寫大量的代碼雖然利于深入理解但是非常繁瑣。而VC+中可以提供MFC ODBC類,其中封裝了大部分ODBC API。這就使得利用MFC來創(chuàng)建ODBC的應(yīng)用程序變得非常簡單。為了便于觀察,本論文模擬系統(tǒng)的服務(wù)器端就是利用了MFC的對話框工程創(chuàng)建的ODBC應(yīng)用程序。主要的配置過程如下:1 安裝Microsoft SQL Server 2012創(chuàng)建數(shù)據(jù)庫和表。2 建立OD

17、BC數(shù)據(jù)源。第一步,打開“ODBC 數(shù)據(jù)源管理器”如圖2所示。第二步,點擊“添加”按鈕,彈出如圖3所示的對話框,在該對話框中選擇安裝數(shù)據(jù)源的驅(qū)動程序,此處選擇“SQL Server”,然后點擊完成按鈕。 圖2 “ODBC數(shù)據(jù)源管理器”對話框 圖3 “數(shù)據(jù)源驅(qū)動程序”對話框第三步,彈出“建立新的數(shù)據(jù)源到SQL Server”對話框,如圖4所示,在“名稱”一欄中輸入數(shù)據(jù)源的名稱,在服務(wù)器一欄中選擇要連接到的SQL Server服務(wù)器,選擇好后,點擊“下一步”按鈕。第四步,緊接著彈出如圖5所示的對話框,在該對話框中設(shè)置數(shù)據(jù)庫,點擊“更改默認(rèn)的數(shù)據(jù)庫”后,在下拉菜單中選擇相應(yīng)的數(shù)據(jù)庫,然后點擊“下一步

18、”按鈕。 圖4 “建立新的數(shù)據(jù)源到SQL Server”對話框 圖5 選擇數(shù)據(jù)庫第五步,在如圖6所示的對話框中設(shè)置一些附加屬性,設(shè)置好后就可以點擊“完成”按鈕,完成對話框數(shù)據(jù)源的建立。第六步,彈出“ODBC Microsoft SQL Server”窗口,窗口列舉了剛剛建立的數(shù)據(jù)源的配置信息,在該窗口中,可以選擇“測試數(shù)據(jù)源.”按鈕,對該數(shù)據(jù)源進行測試連接。 圖6 完成數(shù)據(jù)源的建立 圖7 ODBC數(shù)據(jù)源配置信息(三)網(wǎng)絡(luò)編程技術(shù)套接字是一種通信橋梁連接網(wǎng)絡(luò)中不同主機,起源是美國伯克利大學(xué)針對UNIX系統(tǒng)下設(shè)計的網(wǎng)絡(luò)通信接口。隨著UNIX系統(tǒng)廣泛使用,套接字漸漸發(fā)展為最流行的網(wǎng)絡(luò)通信接口之一。發(fā)

19、展到今天,現(xiàn)在網(wǎng)絡(luò)通信軟件的功能都是基于Socket套接字作為通信接口或者網(wǎng)絡(luò)通信基本操作單元實現(xiàn)的。因此套接字在網(wǎng)絡(luò)編程中發(fā)揮了非常重要的作用。本論文的網(wǎng)絡(luò)應(yīng)用程序就是使用MFC中封裝的套接字類或者直接使用Winsock函數(shù)進行程序開發(fā),編譯器軟件使用Microsoft Visual C+ 6.0。分布在網(wǎng)絡(luò)兩端的雙方都具有自己的套接字,而且它們的IP和端口都會和各自的套接字進行關(guān)聯(lián)。目前最常使用的套接字有兩種適應(yīng)不同的網(wǎng)絡(luò)數(shù)據(jù)傳輸。一種是是流式套接字(SOCK_STREAM),另一種是數(shù)據(jù)報套接字(SOCK_DGRAM)。使用TCP協(xié)議通信的應(yīng)用程序中專用流式套接字,使用UDP協(xié)議進行通信

20、的應(yīng)用程序中專用數(shù)據(jù)報套接字。TCP協(xié)議具有重發(fā)機制,是基于面向連接的可靠連接的通信協(xié)議。UDP協(xié)議不具備重發(fā)機制,它是基于用戶數(shù)據(jù)報協(xié)議,屬于不可靠連接通信協(xié)議,UDP協(xié)議對一些時間要求比較高的網(wǎng)絡(luò)數(shù)據(jù)傳輸方面有著重要的作用。UDP協(xié)議比較適合本課題的系統(tǒng),但是為了便于觀察信息的流動過程,所以模擬系統(tǒng)使用基于TCP協(xié)議的Sockets編程,具體內(nèi)容將在后邊的章節(jié)詳細介紹,三、系統(tǒng)設(shè)計(一)系統(tǒng)整體結(jié)構(gòu)設(shè)計系統(tǒng)整體結(jié)構(gòu)主要由數(shù)據(jù)采集端、服務(wù)器、數(shù)據(jù)顯示端以及網(wǎng)絡(luò)連接四部分組成。如圖8:圖8 系統(tǒng)整體結(jié)構(gòu)框圖系統(tǒng)整體的工作流程如圖9所示圖9 系統(tǒng)工作流程圖定時器根據(jù)用戶設(shè)置的時間間隔驅(qū)動傳感器進

21、行數(shù)據(jù)采集,數(shù)據(jù)采集完成后將數(shù)據(jù)按照約定的格式進行封裝。封裝完成后將數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送給服務(wù)器端。服務(wù)器端本身處在監(jiān)聽狀態(tài),當(dāng)有數(shù)據(jù)過來時,將數(shù)據(jù)進行解析并將數(shù)據(jù)對應(yīng)的存入數(shù)據(jù)庫數(shù)據(jù)表中。數(shù)據(jù)解析會將節(jié)點的ID解析出來,服務(wù)器自動在數(shù)據(jù)庫命令表中搜索與解析ID相同的命令。并將命令按照一定格式發(fā)送回去。當(dāng)傳感器節(jié)點接收到來自服務(wù)器命令時,將命令轉(zhuǎn)換成傳感器識別的命令并發(fā)給傳感器。實現(xiàn)用戶異步操縱傳感器節(jié)點的目的。這種方式會有一定的時延。這就是系統(tǒng)前端的工作流程。整個前端可以看做系統(tǒng)的數(shù)據(jù)采集,后端是應(yīng)用。由于時間關(guān)系應(yīng)用端并沒有進行系統(tǒng)模擬。后端主要是基于C/S(Client/Server)體系結(jié)

22、構(gòu)的應(yīng)用開發(fā)。用戶通過終端上的客戶端軟件進行身份登錄和驗證,客戶端軟件按照用戶的命令向服務(wù)器請求數(shù)據(jù)并對數(shù)據(jù)進行處理多樣化呈現(xiàn)給用戶,比如折線圖、平面圖等。用戶也可以將操縱前端傳感器的命令通過客戶端存儲到服務(wù)器端的數(shù)據(jù)庫命令表中。當(dāng)該傳感器節(jié)點連接服務(wù)器時會把命令下載并在數(shù)據(jù)庫中刪除該信息。(二)約定數(shù)據(jù)格式要將傳感器采集的數(shù)據(jù)存入數(shù)據(jù)庫中,在保證信息不缺失的情況下需要將數(shù)據(jù)統(tǒng)一成一定的格式。為了滿足大部分傳感器存入數(shù)據(jù)的需要,可以將傳感器節(jié)點采集的信息按照一定的格式封裝。定義傳感器節(jié)點采集的數(shù)據(jù)為D =(E,A1, A2, An),E =(M,TIME),M=(ID,TYPE)其中ID是該節(jié)

23、點在數(shù)據(jù)庫中的身份標(biāo)識,TYPE是節(jié)點類型,TIME表示采集數(shù)據(jù)的時間。Aj(j=1,n)表示該節(jié)點中所有傳感器收集的信息。Aj =(type,DATA)其中type表示數(shù)據(jù)的類型,比如溫度、濕度、位置等等,DATA就是采集到的具體信息。除了DATA和TIME其他的信息都可以進行約定,因為他們都是固定的。比如D =(,)表示節(jié)點F001的兩個傳感器在2014年04月20號10點整采集到的信息。其中“F”標(biāo)識節(jié)點所屬組別,“0x02”和“0x02”標(biāo)識該節(jié)點內(nèi)傳感器的類型。(三)傳感器節(jié)點的設(shè)計與模擬實現(xiàn)1 傳感器節(jié)點的設(shè)計為了使節(jié)點具有一定的通用性和擴展性,采用功能模塊板級化設(shè)計思路即分別將微

24、控制器模塊、數(shù)據(jù)采集模塊、以太網(wǎng)通信模塊以及無線通信模塊單獨成板??梢栽O(shè)計如圖10所示的節(jié)點功能結(jié)構(gòu)。圖10 傳感器節(jié)點功能結(jié)構(gòu)所有的控制、任務(wù)調(diào)度、能量計算、功能協(xié)調(diào)、通信協(xié)議、數(shù)據(jù)整合和數(shù)據(jù)存儲等功能都將在微控制器支持下完成,主要包括:(1) 模擬信號調(diào)理、濾波、放大到A/D轉(zhuǎn)換。(2) 將數(shù)字信號暫存于緩存中,并對數(shù)據(jù)按照規(guī)定的協(xié)議格式進行軟件預(yù)處理。(3) 提供接口與RF收發(fā)模塊進行數(shù)據(jù)交換。為了減少系統(tǒng)所消耗的電能延長待機時間,可以通過設(shè)定傳感器采集信息的頻率,在不采集信息的時間內(nèi)關(guān)閉某些不需要的系統(tǒng)部分來實現(xiàn)。各個模塊都可以找到很多可以實現(xiàn)功能的芯片,這里不做詳細的贅述。2 節(jié)點模

25、擬實現(xiàn)由于時間關(guān)系,傳感器節(jié)點無法在短時間內(nèi)做出硬件實現(xiàn)。所以只能通過軟件模擬節(jié)點的工作過程。本論文通過MFC對話框工程的網(wǎng)絡(luò)編程模擬實現(xiàn)傳感器節(jié)點的部分功能。數(shù)據(jù)采集用隨機數(shù)來模擬,網(wǎng)絡(luò)通信橋梁用Winsock實現(xiàn)。使用Microsoft Visual C+6.0(簡稱VC)新建基于對話框的MFC應(yīng)用程序工程。在應(yīng)用程序向?qū)гO(shè)置的第二步選擇支持Windows Socket功能。所有的Winsock函數(shù)都是從動態(tài)鏈接庫ws2_32.dll中導(dǎo)出的,但是VC在默認(rèn)情況沒有與該庫連接。設(shè)置方法是選擇Project|Settings命令,在庫模塊中添加該動態(tài)鏈接庫,這樣程序就可以調(diào)用Winsock函

26、數(shù)了。如圖11所示。圖11 添加動態(tài)鏈接庫設(shè)計對話框如圖12所示。圖12 對話框設(shè)計編寫定時程序模擬傳感器節(jié)點定時采集數(shù)據(jù)的功能,并且隨機數(shù)的產(chǎn)生、數(shù)據(jù)格式的轉(zhuǎn)換、網(wǎng)絡(luò)的連通與發(fā)送都應(yīng)該在定時器觸發(fā)期間內(nèi)完成。MFC中有三個函數(shù)與定時器相關(guān):(1) 定時器設(shè)置函數(shù):SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT*lpfnTimer);(2) 定時器響應(yīng)函數(shù)(響應(yīng)系統(tǒng)定義WM_TIMER消息):OnTimer( UINT nIDEvent );(3) 定時器釋放函數(shù):KillTimer( int nIDEvent )。其中

27、nIDEvent標(biāo)識定時器的ID,nElapse定義了定時器刷新的時間單位是毫秒,最后一個參數(shù)一般設(shè)置為0。在OnInitDialog()函數(shù)中添加SetTimer(110,10000,NULL),表示10秒的定時器表示為110。然后添加定時器響應(yīng)函數(shù),如圖13所示。圖13 添加定時器響應(yīng)函數(shù)在OnInitDialog()函數(shù)中添加網(wǎng)絡(luò)編程的初始化過程。具體代碼查看附錄的(一)。然后是最重要的定時器觸發(fā)時的處理過程,包括數(shù)據(jù)的產(chǎn)生與轉(zhuǎn)換,服務(wù)器的連接,數(shù)據(jù)的發(fā)送。代碼在OnTimer函數(shù)中添加。(一)數(shù)據(jù)的產(chǎn)生與轉(zhuǎn)換:CString head = 001-01-;int data = rand

28、()%1000;/產(chǎn)生隨機數(shù)CString temp;for(;data != 0;)/將隨機數(shù)轉(zhuǎn)換成字符串temp += data%10+0;data /=10;CTime ct;ct = CTime:GetCurrentTime();m_Edit =F+ head+ct.Format(%Y-%m-%d-%H-%M-%S-)+temp;(2) 服務(wù)器的連接sockaddr_in addr;addr.sin_family=AF_INET;addr.sin_port=htons(8080);addr.sin_addr.S_un.S_addr=inet_addr(str.GetBuffer(1);

29、:connect(socket_client,(sockaddr *)&addr,sizeof(sockaddr);(三)數(shù)據(jù)的發(fā)送if (SOCKET_ERROR = send(socket_client,m_Edit.GetBuffer(1),m_Edit.GetLength(),NULL)MessageBox(消息發(fā)送失敗);GetDlgItem(IDC_EDIT1)-EnableWindow(false);return;OnTimer函數(shù)完整代碼看附錄的(二)。發(fā)送消息在OnTimer函數(shù)中實現(xiàn),在“Dig.h”中添加自定義消息:#defineWM_SOCKET WM_USER + 1

30、00添加消息響應(yīng)函數(shù):Afx_msg void OnSocket(WPARAM wParam, LPARAM lParam);在“Dlg.cpp”文件中添加消息映射:ON_MESSAGE(WM_SOCKET , OnSocket)OnSocket函數(shù)的具體實現(xiàn)請看附錄的(三)其實現(xiàn)命令的下載與套接字的關(guān)閉。模擬程序的工作流程:定時器5秒觸發(fā)一次,定時器觸發(fā)后隨機數(shù)生成并轉(zhuǎn)換成規(guī)定的格式。然后創(chuàng)建套接字連接服務(wù)器,連接成功后發(fā)送數(shù)據(jù)。命令下載與套接字的關(guān)閉是異步完成響應(yīng)WM_SOCKET相應(yīng)的系統(tǒng)消息。當(dāng)定時器再次觸發(fā)時會循環(huán)此過程。(四)服務(wù)器的設(shè)計與模擬實現(xiàn)1 服務(wù)器的設(shè)計服務(wù)器端相對比較容

31、易實現(xiàn),有一個網(wǎng)路通信接口,然后就是軟件操縱數(shù)據(jù)包括解析轉(zhuǎn)換和存儲等。最大問題就是需要應(yīng)對大量節(jié)點的訪問,可以增加監(jiān)聽的端口但這樣也會把壓力轉(zhuǎn)嫁給數(shù)據(jù)庫,也可以多件服務(wù)器但也需要考慮負(fù)載均衡的問題,還可以通過多線程技術(shù)但是會占用太多服務(wù)器資源。這需要根據(jù)實際情況采取比較合理的措施。2 服務(wù)器模擬實現(xiàn)首先應(yīng)該數(shù)據(jù)庫的創(chuàng)建,表的設(shè)計如下圖14所示。總共有三張表,第一張為傳感器數(shù)據(jù)表(DataTable)存儲傳感器節(jié)點(假設(shè)每個節(jié)點只有一個傳感器)傳來的數(shù)據(jù)。第二張表(CommandTable)用于存儲用戶控制節(jié)點的命令。第三張表(UserTable)存儲用戶信息。圖14 數(shù)據(jù)庫表DataTable

32、中沒有主鍵將是數(shù)據(jù)量最大的表。CommandTable主鍵是ID(傳感器節(jié)點ID號)能與DataTable中的ID對應(yīng)。UserTable中USER_ID是主鍵,USER_TYPE標(biāo)識用戶的權(quán)限,PASSWORD是用戶在客戶端登陸時用的密碼。然后按照前面所說建立ODBC數(shù)據(jù)源。創(chuàng)建基于對話框的MFC程序,在設(shè)置向?qū)е械诙焦催xWindows Sockets項,最后完成創(chuàng)建。要連接數(shù)據(jù)庫需要插入數(shù)據(jù)庫表的類,這些類都是CRecordSet類派生的,插入的步驟如下:(1) 點擊“InsertNew Class”,彈出“New Class”對話框,輸入名稱,“Base class”一欄中選擇“CDR

33、ecordset”項,如圖15所示。(2) 點擊“OK”后,或彈出“Database Options”對話框,選擇“ODBC”數(shù)據(jù)源,如圖16所示。圖15 插入新類圖16 設(shè)置數(shù)據(jù)庫選項(3) 單擊“OK”,彈出“Select Database Table”對話框,選擇響應(yīng)的表,點擊“OK”完成插入。如圖17所示。(4) 重復(fù)以上步驟,把表“dbo.CommandTable”也插入相關(guān)的記錄集類。圖17 選擇表對話框到此為止所有的配置過程都已經(jīng)結(jié)束了。由于數(shù)據(jù)的解析比較麻煩,所以我們對話框類中定義公有成員函數(shù)getKeyMsg()。用來解析節(jié)點發(fā)送過來的數(shù)據(jù)。發(fā)送數(shù)據(jù)也是在函數(shù)getKeyMs

34、g()中完成的,所以定義公有成員函數(shù)SendMsg(),便于調(diào)用。和節(jié)點的模擬一樣,服務(wù)器端也需要對自定義消息WM_SOCKET進行處理,也用函數(shù)OnSocket()對其進行響應(yīng),過程和前邊描述的一致。設(shè)計對話框的界面如圖18所示。圖18 服務(wù)器對話框IP對應(yīng)的文本框獲取本地ip地址,另一個獲取節(jié)點傳送的消息。為“開啟服務(wù)器”按鈕添加消息響應(yīng)函數(shù)OnStartrun(),在其中實現(xiàn)套接字庫的加載、主機IP的獲取、IP和端口的綁定、監(jiān)聽的開啟以及異步套接字的設(shè)置。通過后表明服務(wù)器已經(jīng)開啟禁用按鈕“開啟服務(wù)器”,如圖19所示。詳細代碼請看附錄中的(四)。圖19 開啟服務(wù)器的運行效果服務(wù)器開啟時設(shè)置

35、了異步套接字,并選擇自定義消息WM_SOCKET中的FD_READ,F(xiàn)D_ACCEPT進行處理,我們用函數(shù)OnSocket()對自定義消息進行響應(yīng),具體過程前邊已經(jīng)提過。OnSocket()函數(shù)的的框架代碼如下:void CSavaDataDlg:OnSocket(WPARAM wParam,LPARAM lParam)SOCKETsock_temp = -1;/臨時存儲套接字sockaddr_in addr;intlen = sizeof(sockaddr_in);charbuf_recv1024 = ;/臨時存儲接收到的消息switch(lParam)case FD_ACCEPT:/接受節(jié)

36、點的連接請求break;case FD_READ:/接節(jié)點發(fā)送的消息break;在FD_ACCEPT中調(diào)用accept()函數(shù)完成連接請求操作,代碼如下:sock_temp = accept(socket_server,(sockaddr *)&addr,&len);if (sock_temp = INVALID_SOCKET)MessageBox(客戶端套接字創(chuàng)建失??!);return;elseMessageBox(有客戶端連接);socket_server是服務(wù)器的套接字,是在“Dlg.h”中定義的保護類型,當(dāng)有節(jié)點連接到服務(wù)器上時會彈窗提示。在FD_READ中調(diào)用公有成員函數(shù)getKey

37、Msg()進行數(shù)據(jù)的處理。函數(shù)原型為void getKeyMsg(CString recv_msg, SOCKET sock)其中recv_msg傳入的是接收到的數(shù)據(jù),sock傳入的是該鏈接節(jié)點的套接字信息。傳入的數(shù)據(jù)都是按照一定順序并通過符號“-”分割,用函數(shù)AfxExtractSubString()能夠吧數(shù)據(jù)輕松分割。執(zhí)行SQL語句將信息存入數(shù)據(jù)庫,服務(wù)器不能主動找到節(jié)點,用戶控制節(jié)點的命令只能在節(jié)點連接數(shù)據(jù)庫的時候進行下載,所以存儲完數(shù)據(jù)之后應(yīng)該查找CommandTable表,確定有沒有該節(jié)點ID的命令,如果有則將命令查詢出來調(diào)用函數(shù)SendMsg()將命令發(fā)送給節(jié)點發(fā)送完成后將該記錄刪

38、除,如果沒有為了便于觀察發(fā)送字符串“No command”。函數(shù)getKeyMsg()的具體代碼請看附錄中的(五)函數(shù)SendMsg()的原型如下:void CSavaDataDlg:SendMsg(SOCKET sock, CString cmd)if ( SOCKET_ERROR = send(sock,cmd,cmd.GetLength(),NULL)AfxMessageBox(命令發(fā)送失敗);return;到這里服務(wù)器端的模擬實現(xiàn)已經(jīng)完成了。服務(wù)器的工作流程:點擊“開啟服務(wù)器”按鈕后進行網(wǎng)絡(luò)通信功能的一般設(shè)定看附錄中的OnStartrun()函數(shù)。開啟成功后將該按鈕禁用。當(dāng)監(jiān)聽到有節(jié)點

39、請求連接時彈出提示并接收數(shù)據(jù)。然后將數(shù)據(jù)進行解析存入數(shù)據(jù)庫中,解析過程中會獲得節(jié)點ID的信息,根據(jù)該信息去命令表中查詢有沒有該節(jié)點的命令,如果有則將命令信息發(fā)送給節(jié)點,如果沒有則發(fā)送字符串“No Command”。發(fā)送成功后關(guān)閉該臨時套接字。四、系統(tǒng)測試(一)數(shù)據(jù)存儲測試圖20 節(jié)點客戶端圖21 服務(wù)器端 圖22 數(shù)據(jù)庫中的數(shù)據(jù)對比節(jié)點端“DATA”的內(nèi)容以及服務(wù)器端“接收數(shù)據(jù)”的內(nèi)容,可知數(shù)據(jù)在網(wǎng)絡(luò)上是傳輸成功的,在對比數(shù)據(jù)庫中相應(yīng)時間對應(yīng)的數(shù)據(jù)可知數(shù)據(jù)存儲成功。到此節(jié)點上傳數(shù)據(jù)的過程已經(jīng)模擬成功。(二)命令下載測試圖23 命令表中的數(shù)據(jù)圖24 節(jié)點接受命令在數(shù)據(jù)庫的“CommandTabl

40、e”添加如圖23的一條數(shù)據(jù),開啟服務(wù)器和節(jié)點模擬器。在節(jié)點模擬器“RECEIVE”中準(zhǔn)確收到了該“YES”命令。這說明從服務(wù)器端的命令下載測試也成功了。到此位置基本的模擬功能已經(jīng)全部實現(xiàn)。五、總結(jié)與展望因為時間緊迫,很遺憾系統(tǒng)并沒有付諸硬件實踐只能通過模擬系統(tǒng)模擬其工作方式,而且整個系統(tǒng)實際是非常龐大和復(fù)雜的,很多東西都沒有考慮,具體的內(nèi)容還需要進行具體的設(shè)計和實地的考察?,F(xiàn)在設(shè)計的數(shù)據(jù)格式只是將信息分類能夠存儲起來,并沒有進行合適的融合,會加大后端應(yīng)用程序的開發(fā)難度。而且也沒有考慮數(shù)據(jù)的加密。因為有一些傳感器信息應(yīng)該是保密的,這就需要自己定義保密算法對數(shù)據(jù)進行保護以免泄露。本論文主要做的就是

41、模擬一下前端半個系統(tǒng)的工作過程,主要是服務(wù)器端的工作方法和流程。整個模擬系統(tǒng)也存在很多缺陷,比如定時器是在節(jié)點模擬器內(nèi)部的無法控制節(jié)點的開斷。只考慮了每個節(jié)點只有一個傳感器的情況,多個傳感器的時候服務(wù)器端并不會處理增加了后端開發(fā)的難度,但有利于保證前端的通用性。雖然實現(xiàn)了多個節(jié)點能夠同時連接服務(wù)器,但是并沒有進行壓力測試,不知道最多能夠支撐幾個節(jié)點的連接,如果節(jié)點數(shù)量龐大需要重新進行程序的設(shè)計,比如用多線程等等。參考文獻1 楊正洪. 智慧城市大數(shù)據(jù)、物聯(lián)網(wǎng)和云計算之應(yīng)用M. 清華大學(xué)出版社,2014.2 梁偉. Visual C+網(wǎng)絡(luò)編程案例實戰(zhàn)M. 清華大學(xué)出版社,2013.3 王震,張小全

42、,張湃. 物聯(lián)網(wǎng)技術(shù)與應(yīng)用教程M. 清華大學(xué)出版社,2013. 4 王華忠. 監(jiān)控與數(shù)據(jù)采集(SCADA)系統(tǒng)及其應(yīng)用M. 電子工業(yè)出版社,2012.5 董耀華,佟銳,孫偉,董麗華. 物聯(lián)網(wǎng)技術(shù)與應(yīng)用M. 上海科學(xué)技術(shù)出版社,2011. 6 景博,張劼,孫勇. 智能網(wǎng)絡(luò)傳感器與無線傳感器網(wǎng)絡(luò)M. 國防工業(yè)出版社,2011.7 朱茵,王軍利,周彤梅. 智能交通系統(tǒng)導(dǎo)論M. 中國人民公安大學(xué)出版社,2007.8 明日科技,宋坤,劉銳寧,李偉明. MFC程序開發(fā)參考大全M. 人民郵電出版社,2007.9 沈煒,徐慧. Visual C+數(shù)據(jù)庫編程技術(shù)與實例M. 人民郵電出版社,2005.10 肖湘蓉

43、,孫星明,陳明剛. 基于信息隱藏的傳感器網(wǎng)絡(luò)數(shù)據(jù)安全傳輸OL. 附 錄(1) 節(jié)點網(wǎng)絡(luò)編程初始化過程WORD version = MAKEWORD(2,0);/定義版本號WSADATA wsadata;/定義WSADATA結(jié)構(gòu)體對象if (WSAStartup(version,&wsadata)MessageBox(加載Winsock.dll失敗);return FALSE;/在頭文件中定義socket_clientsocket_client=socket(AF_INET,SOCK_STREAM,NULL);if (socket_client = INVALID_SOCKET)MessageB

44、ox(套接字創(chuàng)建失敗);return FALSE;if (WSAAsyncSelect(socket_client,this-m_hWnd,WM_SOCKET, FD_READ)MessageBox(異步設(shè)置失敗);return FALSE;(2) 節(jié)點觸發(fā)定時器處理過程switch(nIDEvent) case 110:addr.sin_family=AF_INET;addr.sin_port=htons(8080);addr.sin_addr.S_un.S_addr=inet_addr(str.GetBuffer(1);CString head = 001-01-;int data = r

45、and()%1000;CString temp;for(;data != 0;)temp += data%10+0;data /=10;CTime ct;ct = CTime:GetCurrentTime();if (:connect(socket_client,(sockaddr *)&addr,sizeof(sockaddr)CString str;GetDlgItem(IDC_IP)-GetWindowText(str);GetDlgItem(IDC_TEXT)-SetWindowText(連接成功);GetDlgItem(IDC_EDIT1)-EnableWindow(true);Up

46、dateData(TRUE);m_Edit =F+ head+ct.Format(%Y-%m-%d-%H-%M-%S-)+temp;UpdateData(FALSE);if (SOCKET_ERROR = send(socket_client,m_Edit.GetBuffer(1),m_Edit.GetLength(),NULL)MessageBox(消息發(fā)送失敗);GetDlgItem(IDC_EDIT1)-EnableWindow(false);return;(3) 節(jié)點響應(yīng)讀取void CDataGeneratorDlg:OnSocket(WPARAM wParam, LPARAM lP

47、aram)char cs4096=;if (lParam=FD_READ)CString num = ;if(SOCKET_ERROR = recv(socket_client,cs,4096,0)AfxMessageBox(信息接失敗);return;num = (LPTSTR)cs;GetDlgItem(IDC_RECV)-SetWindowText(num);Sleep(1000);GetDlgItem(IDC_EDIT1)-EnableWindow(false);(4) 服務(wù)器OnStartrun()函數(shù)void CSavaDataDlg:OnStartrun() / TODO: Ad

48、d your control notification handler code hereWORD version = MAKEWORD(2,0);WSADATA wsadata;if(WSAStartup(version,&wsadata)MessageBox(加載Winsock.dll失敗);return;socket_server = socket(AF_INET,SOCK_STREAM,NULL);if (INVALID_SOCKET = socket_server)MessageBox(套接字創(chuàng)建失敗!);return;char hostname20 = ;if (gethostna

49、me(hostname,20)MessageBox(主機名獲取失敗!);/獲取主機名return;HOSTENT *Htent = gethostbyname(hostname);if (Htent = NULL)MessageBox(主機ip獲取失??!);return;LPSTR lpAddr = Htent-h_addr_list0;IN_ADDR inAddr;memmove(&inAddr,lpAddr,4);CString ipAddress = inet_ntoa(inAddr);GetDlgItem(IDC_IP)-SetWindowText(ipAddress);SOCKADDR_IN addr;memset(&addr,0,sizeof(SOCKADDR_IN);/將結(jié)構(gòu)清零addr.sin_family = AF_INET;addr.sin_port = htons(8080);/綁定端口8080addr.sin_addr.S_un.S_addr = inet_addr(ipAddress);/:bind(socket_server,(sockaddr *)&add

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論