畢業(yè)設(shè)計(論文):智能環(huán)境監(jiān)控系統(tǒng)設(shè)計_第1頁
畢業(yè)設(shè)計(論文):智能環(huán)境監(jiān)控系統(tǒng)設(shè)計_第2頁
畢業(yè)設(shè)計(論文):智能環(huán)境監(jiān)控系統(tǒng)設(shè)計_第3頁
畢業(yè)設(shè)計(論文):智能環(huán)境監(jiān)控系統(tǒng)設(shè)計_第4頁
畢業(yè)設(shè)計(論文):智能環(huán)境監(jiān)控系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

畢業(yè)設(shè)計說明書(論文)作者:學(xué)號:學(xué)院:計算機(jī)工程學(xué)院專業(yè):通信工程題目:智能環(huán)境監(jiān)控系統(tǒng)設(shè)計指導(dǎo)者:(姓名)(專業(yè)技術(shù)職務(wù))評閱者:(姓名)(專業(yè)技術(shù)職務(wù))20年月畢業(yè)設(shè)計說明書(論文)中文摘要針對智能環(huán)境監(jiān)控系統(tǒng),開發(fā)了無線傳感器網(wǎng)絡(luò)硬件傳感器節(jié)點(diǎn)、執(zhí)行器節(jié)點(diǎn)和上位機(jī)監(jiān)控軟件。節(jié)點(diǎn)通過無線傳感器節(jié)點(diǎn)來采集環(huán)境光照強(qiáng)度和溫度,判斷參數(shù)是否超出正常范圍并智能控制執(zhí)行器使環(huán)境參數(shù)恢復(fù)到正常范圍。同時把傳感節(jié)點(diǎn)信息發(fā)送給協(xié)調(diào)器,無線傳感器網(wǎng)絡(luò)中的協(xié)調(diào)器節(jié)點(diǎn)和上位機(jī)通過串口進(jìn)行數(shù)據(jù)通信,以監(jiān)測和控制無線傳感器網(wǎng)絡(luò)。采用VisualC++6.0編程語言,在MFC的基于對話框模式下通過編輯MSComm控件實(shí)現(xiàn)了串口通信,利用各種相關(guān)類函數(shù)及自編函數(shù)、數(shù)據(jù)庫連接等在上位機(jī)界面上實(shí)現(xiàn)了傳感器網(wǎng)絡(luò)拓?fù)鋱D顯示、節(jié)點(diǎn)傳感量數(shù)據(jù)顯示、控制傳感器節(jié)點(diǎn)等主要功能。關(guān)鍵詞無線傳感器網(wǎng)絡(luò),環(huán)境監(jiān)控,串口通信畢業(yè)設(shè)計說明書(論文)外文摘要TitleDesignofIntelligentenvironmentmonitoringsystemAbstractThetopicfocusonthedesignof

nodesofnetworkandactuator,PCsoftwareinintelligentenvironmentalmonitoringsystemofwirelesssensornetworks.Wirelesssensornetworkthroughthewirelesssensornodetocollecttheenvironmentaltemperatureandlightintensity,judgingwhethertheparameterisoutsideofthenormalrangeandintelligentcontrolofactuatormakestheenvironmentparametersreturnedtonormalrange.Atthesametimethenodemessagetothecoordinator,wirelesssensornetworksinthecoordinatornodeandthehostcomputerthroughserialdatacommunications,tomonitorandcontrolthewirelesssensornetwork.ThesoftwareusestheVisualC++6.0programlanguage,basedonthedialogboxinMFCmodebyeditingtheMSCommserialcommunicationcontrol,usingavarietyofrelatedfunctionandwritingfunction,databaseconnection,thehostcomputerinterfacerealizationofsensornetworktopologydisplay,nodesensingvolumedatadisplay,controlsensornodemainlyfunction.Keywordswirelesssensornetworks,environmentalmonitoring,serialcommunication畢業(yè)設(shè)計說明書(論文)第II頁共II頁畢業(yè)設(shè)計說明書(論文)第Ⅰ頁共I頁目錄TOC\o"1-2"\u1引言 11.1課題研究背景及意義 11.2國內(nèi)外研究與發(fā)展現(xiàn)狀 11.3課題研究的主要內(nèi)容 41.4小結(jié) 42智能環(huán)境監(jiān)控系統(tǒng)總體方案設(shè)計 42.1系統(tǒng)總體設(shè)計框圖 42.2上位機(jī)軟件總體設(shè)計 52.3系統(tǒng)硬件總體設(shè)計 72.4小結(jié) 83軟件詳細(xì)設(shè)計 83.1軟件總體結(jié)構(gòu) 83.2界面設(shè)計 93.3主界面主要附屬功能實(shí)現(xiàn) 153.4自定義WSN串口通信協(xié)議 213.5傳感器數(shù)據(jù)顯示 233.6數(shù)據(jù)庫實(shí)現(xiàn) 253.7小結(jié) 284智能環(huán)境控制系統(tǒng)硬件詳細(xì)設(shè)計 284.1溫度采集模塊設(shè)計 284.2光照采集模塊設(shè)計 294.3執(zhí)行器模塊設(shè)計 304.4硬件程序設(shè)計 314.5小結(jié) 365系統(tǒng)測試 375.1硬件測試 375.2軟件測試 39結(jié)論 41致謝 42參考文獻(xiàn) 43畢業(yè)設(shè)計說明書(論文)第4頁共44頁1引言1.1課題研究背景及意義無線傳感器網(wǎng)絡(luò)(WirelessSensorNetwork,WSN)是當(dāng)前國際上備受關(guān)注的由多學(xué)科交叉的新興前沿研究熱點(diǎn)領(lǐng)域[1]。無線傳感器網(wǎng)絡(luò)是由部署在監(jiān)測區(qū)域內(nèi)大量的廉價小型或微型無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)組成,通過無線通信形成一個多跳的自組織智能網(wǎng)絡(luò)系統(tǒng)[2]。傳感器網(wǎng)絡(luò)綜合了傳感器技術(shù)、嵌入式計算技術(shù)、無線網(wǎng)絡(luò)通信技術(shù)、分布式信息處理技術(shù)以及微機(jī)電技術(shù)等,能夠通過各類集成化的微型傳感器協(xié)作地實(shí)時監(jiān)測、感知和采集各種環(huán)境或監(jiān)測對象的信息,通過嵌入式系統(tǒng)對信息進(jìn)行處理,并通過隨機(jī)自組織無線通信網(wǎng)絡(luò)以多跳中繼方式將信息傳送到終端用戶,從而實(shí)現(xiàn)無處不在的計算理念[3]。其應(yīng)用前景非常廣闊,現(xiàn)正逐步深入到人類生活的各個領(lǐng)域,比如國防軍事、反恐抗災(zāi)、環(huán)境監(jiān)測、交通管理、工程安全、醫(yī)療護(hù)理、建筑結(jié)構(gòu)、健康監(jiān)測等。環(huán)境監(jiān)測控制是一類典型的無線傳感器網(wǎng)絡(luò)應(yīng)用,早在2002年英特爾公司就率先在俄勒岡州建立了世界上第一個無線葡萄園,并獲得了成功[4]。環(huán)境監(jiān)測系統(tǒng)幫助管理人員對設(shè)備和現(xiàn)場進(jìn)行實(shí)時監(jiān)控,預(yù)防故障發(fā)生或在故障發(fā)生后能提供及時的資料。自動監(jiān)測系統(tǒng)可以減少配備人員的數(shù)量并提高監(jiān)測業(yè)務(wù)的效率?,F(xiàn)有自動監(jiān)測系統(tǒng)大都采用有線技術(shù)進(jìn)行傳感器網(wǎng)絡(luò)的組建。這類方案擴(kuò)展性能差,布線煩瑣,線路容易老化,更換起來也十分不方便。采用無線方式構(gòu)建環(huán)境監(jiān)測系統(tǒng),則可以避免這些不必要的麻煩。而且,無線方式相對靈活,只要在有效范圍內(nèi),傳感器終端可以依據(jù)要求隨意安放[5]。ZigBee是一種新興的近距離、低復(fù)雜度、低功耗、低數(shù)據(jù)速率、低成本的無線網(wǎng)絡(luò)技術(shù),主要用于近距離無線連接傳輸。它依據(jù)IEEE802.15.4標(biāo)準(zhǔn),在數(shù)千個微小的傳感器之間相互協(xié)調(diào)實(shí)現(xiàn)通信。這種技術(shù)在樓宇自動化、工業(yè)監(jiān)控領(lǐng)域具有非常廣闊的市場空間[6]。因此,基于ZigBee的智能環(huán)境監(jiān)控系統(tǒng)的設(shè)計在環(huán)境監(jiān)控中有很大的應(yīng)用價值和前景。1.2國內(nèi)外研究與發(fā)展現(xiàn)狀目前,由傳感器、微處理器和無線通信接口組成的無線傳感器網(wǎng)絡(luò)得到了空前的發(fā)展。由大量的無線傳感網(wǎng)絡(luò)節(jié)點(diǎn)自組織組成的無線傳感網(wǎng)絡(luò)能夠廣泛應(yīng)用于環(huán)境科學(xué)、醫(yī)療健康、空間探索、智能家居、軍事、交通、采礦和災(zāi)難拯救等各個領(lǐng)域,無線傳感網(wǎng)絡(luò)已成為下一代“計算無處不在”的關(guān)鍵技術(shù)。傳感器網(wǎng)絡(luò)的研究起步于20世紀(jì)90年代末期。從2000年起,國際上開始出現(xiàn)一些有關(guān)傳感器網(wǎng)絡(luò)研究結(jié)果的報道。目前傳感器網(wǎng)絡(luò)已經(jīng)引起了世界許多國家的軍事部門、工業(yè)界和學(xué)術(shù)界的極大關(guān)注。美國自然科學(xué)基金委員會2003年制定了傳感器網(wǎng)絡(luò)研究計劃,投資3400萬美元,支持相關(guān)基礎(chǔ)理論的研究。美國很多大學(xué)都已開展傳感器網(wǎng)絡(luò)的研究,其中最具代表性的是加州大學(xué)伯克利分校和Intel公司聯(lián)合成立的“智能塵?!睂?shí)驗(yàn)室,它的目標(biāo)是為美國軍方提供能夠在一立方毫米的體積內(nèi)能自動感知和通信設(shè)備原型的研制。2001年中科院依托上海微系統(tǒng)所成立微系統(tǒng)研究與發(fā)展中心,引領(lǐng)院內(nèi)的相關(guān)工作,并通過該中心在無線傳感網(wǎng)絡(luò)的方向上陸續(xù)部署了若干重大研究項(xiàng)目和方向性項(xiàng)目,參加單位包括上海微系統(tǒng)所、聲學(xué)所、微電子所、半導(dǎo)體所、電子所、軟件所、中科大等十余個校所,初步建立傳感網(wǎng)絡(luò)系統(tǒng)研究平臺,在無線智能傳感網(wǎng)絡(luò)通信技術(shù)、微型傳感器、傳感器節(jié)點(diǎn)、簇點(diǎn)和應(yīng)用系統(tǒng)等方面取得很大的進(jìn)展。2004年9月相關(guān)成果在北京進(jìn)行了大規(guī)模外場演示,部分成果已在實(shí)際工程系統(tǒng)中使用。國內(nèi)的許多高校也掀起了無線傳感網(wǎng)的研究熱潮。清華大學(xué)、中國科技大學(xué)、浙江大學(xué)、華中科技大學(xué)、天津大學(xué)、南開大學(xué)、北京郵電大學(xué)、東北大學(xué)、西北工業(yè)大學(xué)、西南交通大學(xué)、沈陽理工大學(xué)和上海交通大學(xué)等單位紛紛開展了有關(guān)無線傳感網(wǎng)方面的基礎(chǔ)研究工作。一些企業(yè)如中興通訊公司等單位也加入無線傳感網(wǎng)研究的行列[7]。國內(nèi)外對溫室環(huán)境控制技術(shù)的研究較早,始于上世紀(jì)70年代,先是采用模擬式的組合儀表,采集現(xiàn)場信息并進(jìn)行指示、記錄和控制。80年代末出現(xiàn)了分布式控制系統(tǒng),現(xiàn)階段開發(fā)和研究集中于計算機(jī)數(shù)據(jù)采集控制系統(tǒng)的多因子綜合控制系統(tǒng)、多數(shù)據(jù)融合技術(shù)等。目前,世界各國的環(huán)境控制技術(shù)發(fā)展很快,一些國家在實(shí)現(xiàn)自動化的基礎(chǔ)上正向著完全自動化、無人化的方向發(fā)展[8]。環(huán)境監(jiān)控應(yīng)用的典型案例有:夏威夷大學(xué)在夏威夷火山國家公園部署了WSN進(jìn)行生態(tài)環(huán)境監(jiān)測,用來監(jiān)測那些瀕臨滅種的植物所在地的微小氣候變化,以揭示為何特定物種只能生存在某些特定環(huán)境中[9]。韓國研究人員ByungrakSon,Yong-SorkHer,KyuwonShim將WSN部署到山地旅游區(qū),來監(jiān)測旅游者的數(shù)目[10]。監(jiān)測海燕生存環(huán)境及其在氣候變化時行為的GDI項(xiàng)目[11]。該系統(tǒng)將傳感器獲取的溫度、濕度和氣壓等環(huán)境信息以多跳路由的方式發(fā)送到監(jiān)測管理中心,管理中心使用這些信息可以在不干擾野生動植物正常生活的情況下監(jiān)視其活動和生存環(huán)境。美國學(xué)者RichardBeckwith,DanTeibel,PatBowen將無線傳感器網(wǎng)絡(luò)放置在葡萄園中[12]。通過對葡萄園環(huán)境的監(jiān)測來提高作物的品質(zhì)。研究者通過與農(nóng)業(yè)領(lǐng)域的專家合作,分析了濕度、溫度和病蟲害對葡萄成熟度和品質(zhì)的影響。澳洲的科學(xué)家利用無線傳感器網(wǎng)絡(luò)來探測北澳大利亞蟾蜍的分布情況[13]。由于蟾蜍的叫聲響亮而獨(dú)特,因此利用聲音作為檢測特征非常有效。科研人員將采集到的信號在節(jié)點(diǎn)上就地處理,然后將處理后的少量結(jié)果數(shù)據(jù)發(fā)揮控制中心。通過處理,就可以大致了解蟾蜍的分布、棲息情況。美國研究者F.J.Pierce,T.V.Elliott在華盛頓東部的農(nóng)場部署了環(huán)境監(jiān)測無線傳感器網(wǎng)絡(luò)[14]。該系統(tǒng)除了自身的監(jiān)測功能外還與相應(yīng)的控制系統(tǒng)相結(jié)合,當(dāng)測得的環(huán)境溫度低于某個預(yù)先設(shè)定的臨界值時,系統(tǒng)可以自動啟動溫控設(shè)備,防止出現(xiàn)凍害。國內(nèi)中國礦業(yè)大學(xué)學(xué)者王曉東、趙曉光等研制了用于煤礦環(huán)境監(jiān)測的環(huán)境監(jiān)測的無線傳感器網(wǎng)絡(luò)系統(tǒng)[15]。該系統(tǒng)基于加州大學(xué)伯克利分校的TMoteSKY節(jié)點(diǎn)和TinyOS操作系統(tǒng),可以用來監(jiān)測煤礦內(nèi)部的環(huán)境變化,同時還能實(shí)現(xiàn)礦工的定位。重慶大學(xué)的研究者王韜、蘇勤亮、唐松、唐浦釗將無線傳感器網(wǎng)絡(luò)應(yīng)用到了西雙版納的自然保護(hù)區(qū)內(nèi)[16]。該系統(tǒng)結(jié)合了GPRS、GIS、紅外夜視和GPS等技術(shù),實(shí)現(xiàn)了自然保護(hù)區(qū)生態(tài)環(huán)境信息的監(jiān)測、動物活動路線規(guī)律的跟蹤、新動物的發(fā)現(xiàn)、火災(zāi)等自然災(zāi)害的預(yù)警、以及巡護(hù)管理等功能。電子科技大學(xué)、中國空氣動力研究與發(fā)展中心以及北京航天指揮控制中心的研究人員,利用無線傳感器網(wǎng)絡(luò)進(jìn)行大型風(fēng)洞測控環(huán)境的監(jiān)測,對旋轉(zhuǎn)機(jī)構(gòu),氣源系統(tǒng)、風(fēng)洞運(yùn)行系統(tǒng),以及其他沒有基礎(chǔ)設(shè)施而有線傳感器系統(tǒng)安裝又不方便或不安全的應(yīng)用環(huán)境進(jìn)行全方位檢測[17]。成都無線龍通訊科技有限公司和北京市奧爾斯電子科技有限公司已開發(fā)出無線傳感器網(wǎng)絡(luò)智能監(jiān)控軟件,分別是C51RF-WSN監(jiān)控軟件V3.00和奧爾斯物聯(lián)網(wǎng)綜合教學(xué)實(shí)驗(yàn)平臺。近幾年隨著無線傳感器網(wǎng)絡(luò)的不斷發(fā)展,以及軟硬件設(shè)備的逐漸成熟。世界范圍內(nèi)環(huán)境監(jiān)控領(lǐng)域無線傳感器網(wǎng)絡(luò)的應(yīng)用越來越廣泛,新技術(shù)和新想法不斷涌現(xiàn),相信在環(huán)境和農(nóng)業(yè)監(jiān)控領(lǐng)域會有廣泛的應(yīng)用前景。1.3課題研究的主要內(nèi)容本課題圍繞智能環(huán)境監(jiān)控系統(tǒng)進(jìn)行分析和設(shè)計。針對以CC2430芯片為核心的傳感器節(jié)點(diǎn)組成的傳感器網(wǎng)絡(luò)系統(tǒng),設(shè)計出節(jié)點(diǎn)的硬件控制部分,編寫嵌入式程序完成節(jié)點(diǎn)的智能控制功能。采用VisualC++6.0應(yīng)用程序開發(fā)環(huán)境,編寫程序完成監(jiān)控傳感器網(wǎng)絡(luò)的上位機(jī)軟件。研究的主要內(nèi)容有:a)節(jié)點(diǎn)的硬件設(shè)計,包括各個傳感器設(shè)計、信息處理模塊、電源模塊和控制執(zhí)行器模塊設(shè)計;b)采用ZigBee點(diǎn)對多點(diǎn)通信技術(shù)協(xié)議,應(yīng)用無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)計方案;c)對傳感器節(jié)點(diǎn)進(jìn)行程序編寫的IAR嵌入式工作平臺;d)軟件設(shè)計基本概念和過程;e)單片機(jī)與計算機(jī)的串口通信技術(shù);f)VisualC++6.0應(yīng)用程序開發(fā)環(huán)境;g)軟件和硬件調(diào)試。1.4小結(jié)本章對無線傳感器網(wǎng)絡(luò)作了簡要介紹,闡述了智能環(huán)境監(jiān)控系統(tǒng)近幾年的發(fā)展?fàn)顩r,結(jié)合本課題給出了課題研究的主要內(nèi)容。從中可以了解到智能環(huán)境監(jiān)控系統(tǒng)的應(yīng)用已經(jīng)發(fā)展到多方領(lǐng)域,其實(shí)際應(yīng)用價值正逐漸凸顯。2智能環(huán)境監(jiān)控系統(tǒng)總體方案設(shè)計2.1系統(tǒng)總體設(shè)計框圖電源模塊電源模塊處理器模塊無線射頻模塊(CC2430)溫度采集模塊(DS18B20)光照采集模塊(光敏電阻)溫度執(zhí)行器(風(fēng)扇)光照執(zhí)行器(臺燈)無線傳感器節(jié)點(diǎn)協(xié)調(diào)器(CC2430)用戶界面(上位機(jī)軟件)WSN串口圖2.1智能環(huán)境監(jiān)控系統(tǒng)設(shè)計框圖如圖2.1,智能環(huán)境監(jiān)控系統(tǒng)分為無線傳感器網(wǎng)絡(luò)硬件部分和上位機(jī)監(jiān)控軟件部分。硬件部分主要由無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)組成。節(jié)點(diǎn)根據(jù)傳感器采集到的數(shù)據(jù)進(jìn)行判斷環(huán)境參數(shù)是否異常,如果異常則啟動執(zhí)行器使環(huán)境參數(shù)恢復(fù)到預(yù)設(shè)值。同時節(jié)點(diǎn)把信息發(fā)送給網(wǎng)絡(luò)協(xié)調(diào)器,由網(wǎng)絡(luò)協(xié)調(diào)器把數(shù)據(jù)整合通過串口發(fā)送到上位機(jī)軟件。上位機(jī)軟件對接收到的數(shù)據(jù)進(jìn)行顯示,記錄各個時間的環(huán)境參數(shù)變化。用戶可以通過上位機(jī)軟件設(shè)定環(huán)境參數(shù)的上下限,手動打開或關(guān)閉執(zhí)行器。同時把接收到的數(shù)據(jù)和操作執(zhí)行器的記錄記錄到數(shù)據(jù)庫,方便查詢。2.2上位機(jī)軟件總體設(shè)計2.2.1功能需求對于智能環(huán)境監(jiān)控系統(tǒng),上位機(jī)軟件具備的基本功能是實(shí)時顯示網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),監(jiān)測各傳感器節(jié)點(diǎn)采集到的數(shù)據(jù)、執(zhí)行器的狀態(tài)并對傳感器進(jìn)行必要的控制。實(shí)時顯示傳感器狀態(tài)實(shí)時顯示傳感器狀態(tài)實(shí)時顯示傳感器網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)發(fā)送命令和激勵信號結(jié)構(gòu)數(shù)據(jù)庫實(shí)時記錄數(shù)據(jù)結(jié)構(gòu)上位機(jī)軟件圖2.2智能監(jiān)測無線傳感器網(wǎng)絡(luò)軟件功能如圖2.2,上位機(jī)軟件主要具備四大功能:實(shí)時顯示傳感器狀態(tài)、實(shí)時顯示傳感器網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、發(fā)送命令和激勵信號、數(shù)據(jù)庫實(shí)時記錄數(shù)據(jù)。借助于IAR嵌入式程序開發(fā)平臺和VisualC++6.0開發(fā)環(huán)境,以上功能均具有可行性。上位機(jī)與協(xié)調(diào)器通信在硬件上通過在兩者間連接串口線實(shí)現(xiàn),軟件上則在VisualC++6.0環(huán)境下對MSComm控件的OnComm事件進(jìn)行程序編寫完成。協(xié)調(diào)器節(jié)點(diǎn)與上位機(jī)之間相互傳送數(shù)據(jù)采用自定義數(shù)據(jù)幀格式可更加貼合用戶需求。自定義串口通信協(xié)議涉及協(xié)調(diào)器與上位機(jī)兩方的程序編寫,通俗的說是一種“事前約定”,在約定中對數(shù)據(jù)格式、同步方式、傳送速度、傳送步驟、檢錯方式以及控制字符定義等做出統(tǒng)一規(guī)定,協(xié)調(diào)器和上位機(jī)必須共同遵守。為此,需在IAR環(huán)境下完成對協(xié)調(diào)器程序的編寫,使其能夠?qū)ι衔粰C(jī)發(fā)來的數(shù)據(jù)包根據(jù)協(xié)議約定進(jìn)行提取識別,進(jìn)而響應(yīng)相應(yīng)的命令;在VisualC++6.0環(huán)境完成對上位機(jī)軟件相關(guān)程序編寫,使其能對協(xié)調(diào)器發(fā)來的數(shù)據(jù)包根據(jù)協(xié)議約定進(jìn)行提取識別以監(jiān)測整個無線傳感器網(wǎng)絡(luò)。2.2.2軟件總體框架根據(jù)軟件的需求分析設(shè)計出軟件的幾大模塊,其框架如圖2.3所示,從中我們可以看到各模塊之間的內(nèi)在聯(lián)系。操作控制模塊操作控制模塊分析模塊監(jiān)視顯示模塊數(shù)據(jù)庫模塊圖2.3智能環(huán)境監(jiān)控系統(tǒng)軟件框架圖操作控制模塊:通過監(jiān)控軟件實(shí)現(xiàn)對系統(tǒng)的基本設(shè)置,主要包括設(shè)置串口號、串口波特率、校驗(yàn)類型、設(shè)置環(huán)境參數(shù)的上下限等。另外可對指定節(jié)點(diǎn)發(fā)送命令或激勵信號。監(jiān)視顯示模塊:對無線傳感器網(wǎng)絡(luò)進(jìn)行監(jiān)測,實(shí)時顯示網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)并能根據(jù)用戶設(shè)置將指定節(jié)點(diǎn)采集的溫度、光照,執(zhí)行器狀態(tài)等基本信息進(jìn)行可視化顯示。分析模塊:對采集的各種監(jiān)測數(shù)據(jù)進(jìn)行處理。數(shù)據(jù)庫模塊:保存歷史實(shí)測數(shù)據(jù),執(zhí)行器運(yùn)行狀態(tài)歷史等。2.2.3各模塊任務(wù)分配針對操作控制模塊,主要任務(wù)是在MFC環(huán)境下通過編輯MSComm控件的各種屬性,使得用戶可選擇性設(shè)置各種串行口通信參數(shù)。另外編程實(shí)現(xiàn)向傳感器節(jié)點(diǎn)發(fā)送控制命令的功能。針對監(jiān)視顯示模塊,主要任務(wù)運(yùn)用MFC中各控件的編程方法及一些必要的繪圖知識在界面顯示各傳感器節(jié)點(diǎn)信息、繪制實(shí)時網(wǎng)絡(luò)拓?fù)鋱D。針對分析模塊,主要任務(wù)是對采集來的各種監(jiān)測數(shù)據(jù)進(jìn)行處理。針對數(shù)據(jù)庫模塊,主要任務(wù)是運(yùn)用VisualC++與數(shù)據(jù)庫的連接技術(shù),完成VisualC++到數(shù)據(jù)庫的數(shù)據(jù)存儲以及數(shù)據(jù)庫表格在VisualC++界面上的顯示。2.3系統(tǒng)硬件總體設(shè)計2.3.1節(jié)點(diǎn)功能分析智能環(huán)境監(jiān)控系統(tǒng)無線傳感器節(jié)點(diǎn),能夠?qū)崟r監(jiān)測、傳遞環(huán)境信息,調(diào)節(jié)環(huán)境參數(shù),支持無線通信。節(jié)點(diǎn)可以通過無線傳感器網(wǎng)絡(luò)建立連接,通過傳感器采集環(huán)境數(shù)據(jù)。判斷環(huán)境參數(shù)是否正常,若不正常,則啟動執(zhí)行器調(diào)節(jié)環(huán)境參數(shù)。同時使用串口把數(shù)據(jù)傳到上位機(jī)軟件進(jìn)行處理。這些功能可概括如下:(1)節(jié)點(diǎn)數(shù)據(jù)采集:通過溫度傳感器、光照傳感器實(shí)時采集數(shù)據(jù)。(2)節(jié)點(diǎn)通信協(xié)議:采用無線通信ZigBee中SPP(簡單包協(xié)議)協(xié)議完成端到端的數(shù)據(jù)傳輸。(3)節(jié)點(diǎn)數(shù)據(jù)分析:分析采集到的環(huán)境數(shù)據(jù),判斷是否超出預(yù)設(shè)值的上下限。若超出預(yù)設(shè)值,則啟動執(zhí)行器使環(huán)境恢復(fù)正常。(4)執(zhí)行器模塊:受分析模塊的控制。執(zhí)行器模塊信息采集模塊執(zhí)行器模塊信息采集模塊節(jié)點(diǎn)數(shù)據(jù)分析執(zhí)行器模塊執(zhí)行器模塊SPP協(xié)議串口圖2.4節(jié)點(diǎn)功能結(jié)構(gòu)圖2.3.2節(jié)點(diǎn)硬件組成節(jié)點(diǎn)硬件由無線傳感器節(jié)點(diǎn)模塊、處理器模塊、無線射頻模塊、執(zhí)行控制器模塊和電源模塊組成。其中,無線傳感器模塊由溫度傳感器DS18B20模塊、光照傳感器光敏電阻模塊組成。處理器和無線射頻模塊采用CC2430芯片。執(zhí)行控制器模塊由電磁繼電器和風(fēng)扇臺燈組成。電源模塊分為兩部分,CC2430芯片由兩節(jié)電池供電,繼電器風(fēng)扇由220V交流電供電。由無線傳感器節(jié)點(diǎn)采集環(huán)境數(shù)據(jù)信息,通過處理器處理判斷,控制環(huán)境。同時通過無線射頻模塊把節(jié)點(diǎn)狀態(tài)發(fā)送給數(shù)據(jù)接收模塊,數(shù)據(jù)接收模塊通過串口把數(shù)據(jù)發(fā)送給上位機(jī)軟件。2.4小結(jié)本章對智能環(huán)境監(jiān)控系統(tǒng)做了總體設(shè)計,包括上位機(jī)軟件和硬件的總體設(shè)計。根據(jù)各部分的功能需求,設(shè)計了總體設(shè)計框架及其功能模塊,明確了為實(shí)現(xiàn)各功能需要完成的具體任務(wù)。3軟件詳細(xì)設(shè)計3.1軟件總體結(jié)構(gòu)3.1.1軟件界面總體框架圖主界面主界面菜單欄工具欄TAB1TAB2端口設(shè)置閥值設(shè)置其他節(jié)點(diǎn)屬性節(jié)點(diǎn)樹拓?fù)鋱D閥值與控制數(shù)據(jù)庫圖3.1智能監(jiān)測無線傳感器網(wǎng)絡(luò)系統(tǒng)軟件界面總體框架圖3.1.2軟件各部分介紹根據(jù)圖3.1所示的軟件界面總體框架圖,對圖中各部分做簡要介紹如下:菜單欄:菜單欄提供一些必要的操作。本軟件菜單欄提供的操作有:設(shè)置(端口設(shè)置,閥值設(shè)置)、通訊(查看串口,打開串口,關(guān)閉串口)、視圖(拓?fù)鋱D,閥值與控制,數(shù)據(jù)庫)等。工具欄:工具欄選取菜單欄中常用操作,通過編輯按鈕實(shí)現(xiàn)菜單欄中的部分功能,是菜單欄選項(xiàng)的一種快捷操作。本軟件工具欄“復(fù)制”了菜單欄選項(xiàng)中的“查看串口”、“端口設(shè)置”、“打開串口”、“關(guān)閉串口”等功能。Tab控件1:Tab控件可在程序運(yùn)行時選擇打開選項(xiàng)卡中對應(yīng)的窗口,操作簡單,較友好。Tab控件1下設(shè)兩個窗口,分別為節(jié)點(diǎn)樹窗口和節(jié)點(diǎn)屬性窗口。節(jié)點(diǎn)樹窗口截取拓?fù)鋱D窗口中顯示的拓?fù)鋱D,方便用戶在做控制與測試網(wǎng)絡(luò)時,直接獲取網(wǎng)絡(luò)拓?fù)湫畔?;?jié)點(diǎn)屬性窗口對指定的傳感器節(jié)點(diǎn)顯示其網(wǎng)絡(luò)屬性及所含傳感器感測的數(shù)據(jù)。Tab控件2:Tab控件2下設(shè)三個子窗口,分別為拓?fù)鋱D窗口、閥值與控制窗口和數(shù)據(jù)庫窗口。拓?fù)鋱D窗口顯示當(dāng)前傳感器網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu);閥值與控制窗口對指定節(jié)點(diǎn)的環(huán)境參數(shù)上下限的設(shè)定、繼電器的開關(guān)控制;數(shù)據(jù)庫窗口用于顯示實(shí)時更新的數(shù)據(jù)表。3.2界面設(shè)計3.2.1概述基于更加貼合用戶需求的思想,本軟件共設(shè)計了7個界面,分別是智能環(huán)境監(jiān)控系統(tǒng)軟件主界面、系統(tǒng)設(shè)置子界面、傳感器網(wǎng)絡(luò)節(jié)點(diǎn)樹子界面、傳感器網(wǎng)絡(luò)節(jié)點(diǎn)屬性子界面、傳感器網(wǎng)絡(luò)拓?fù)鋱D子界面、傳感器網(wǎng)絡(luò)閥值設(shè)置與控制界面、數(shù)據(jù)庫子界面。以下是對各界面作的詳細(xì)說明。3.2.2主界面建立一個MFCAppWizard[exe]工程,工程名稱為“wsnd”,采用基于對話框模式,各設(shè)置采用默認(rèn)狀態(tài),進(jìn)入一個系統(tǒng)自生成的工程。主界面的樣式如圖3.2所示,ID為IDD_WSND_DIALOG,標(biāo)題為“智能環(huán)境監(jiān)控系統(tǒng)”。主界面共放置三個控件,分別是一個MSComm控件和兩個Tab控件。由于VisualC++集成開發(fā)環(huán)境在默認(rèn)情況下,不會包含MSComm控件,所以使用MSComm控件必須先將其加載到VisualC++集成開發(fā)環(huán)境。在VisualC++主界面中,單擊【工程】|【添加工程】|【ComponentsandControls】|【RegisteredActiveXControls】|【MicrosoftCommunicationsControl,version6.0】|【Insert】|【確定】|【OK】|【結(jié)束】即可將MSComm控件加載進(jìn)VisualC++工具箱中供使用。圖3.2智能環(huán)境監(jiān)控系統(tǒng)軟件主界面表3-1為主界面控件的設(shè)置表。表3-1主界面控件設(shè)置表控件ID標(biāo)題功能MSComm控件IDC_MSCOMM1無上位機(jī)與協(xié)調(diào)器串口通信所需Tab控件1IDC_TABFORMER無顯示節(jié)點(diǎn)樹及節(jié)點(diǎn)屬性窗口Tab控件2IDC_TABLATTER無顯示拓?fù)鋱D、閥值與控制、數(shù)據(jù)庫窗口3.2.3端口設(shè)置子界面在工程中插入一個新的對話框,ID為IDD_DIALOG_PORTSET,標(biāo)題為“端口設(shè)置”。其界面如圖3.3所示,共放置8個控件,分別為3個靜態(tài)文本控件、3個組合框控件、2個按鈕控件。圖3.3系統(tǒng)設(shè)置子界面表3-2為端口設(shè)置子界面控件設(shè)置表。表3-2端口設(shè)置子界面控件設(shè)置表控件ID標(biāo)題功能靜態(tài)文本1IDC_STATICCOM端口提示作用靜態(tài)文本2IDC_STATIC波特率提示作用靜態(tài)文本3IDC_STATIC校驗(yàn)類型提示作用組合框1IDC_COMBO_COM無列出COM口供選擇組合框2IDC_COMBO_BAUDRATE無列出波特率供選擇組合框3IDC_COMBO_PARITY無列出校驗(yàn)類型供選擇按鈕1IDOK確定確定當(dāng)前的系統(tǒng)設(shè)置按鈕2IDCANCEL取消取消當(dāng)前的系統(tǒng)設(shè)置3.2.4傳感器網(wǎng)絡(luò)節(jié)點(diǎn)樹子界面在工程中插入一個新的對話框,ID為IDD_DIALOG_NODETREE,如圖3.4所示。設(shè)置其屬性樣式為“Chind”,為作為主界面Tab控件1的第一個顯示窗口做準(zhǔn)備。圖3.4節(jié)點(diǎn)樹子界面表3-3為傳感器網(wǎng)絡(luò)節(jié)點(diǎn)樹子界面控件設(shè)置表。表3-3傳感器網(wǎng)絡(luò)節(jié)點(diǎn)樹子界面控件設(shè)置表控件ID標(biāo)題功能樹形控件IDC_TREE_NODETREE無顯示節(jié)點(diǎn)樹按鈕1IDC_BUTTON_NTSTOP暫停刷新暫停節(jié)點(diǎn)樹動態(tài)更新按鈕2IDC_BUTTON_NTSX刷新中節(jié)點(diǎn)樹動態(tài)更新3.2.5節(jié)點(diǎn)屬性子界面在工程中插入一個新的對話框,ID為IDD_DIALOG_NODEPROPERTY,設(shè)置其屬性樣式為“Child”,為作為主界面Tab控件1的第二個顯示窗口做準(zhǔn)備。其界面如圖3.5所示,共放置24個控件,分別是11個靜態(tài)文本控件、8個編輯框控件、1個組合框控件、4個按鈕控件。圖3.5節(jié)點(diǎn)屬性子界面表3-4為節(jié)點(diǎn)屬性子界面主要控件設(shè)置表。表3-4節(jié)點(diǎn)屬性子界面主要控件設(shè)置表控件ID功能編輯框1IDC_EDIT_NPNODEADD顯示節(jié)點(diǎn)地址編輯框2IDC_EDIT_NPNODETYPE顯示節(jié)點(diǎn)網(wǎng)絡(luò)類型編輯框3IDC_EDIT_NPNMADD顯示節(jié)點(diǎn)MAC地址編輯框4IDC_EDIT_NPFNMADD顯示父結(jié)點(diǎn)MAC地址編輯框5IDC_EDIT_NPSENNUM顯示傳感器類型編輯框6IDC_EDIT_NPTEMPER顯示溫度值編輯框7IDC_EDIT_NPLIGHT顯示光電值編輯框8IDC_EDIT_NPJDQ顯示繼電器狀態(tài)組合框IDC_COMBO_NPNODESELECT列出活動的節(jié)點(diǎn)供選擇3.2.6拓?fù)鋱D子界面在工程中插入一個新的對話框,ID為IDD_DIALOG_TOPUTABPAGE,設(shè)置其屬性樣式為“Child”,為作為主界面Tab控件2的第一個顯示窗口做準(zhǔn)備。其界面如圖3.6所示,共放置10個控件,分別是3個靜態(tài)文本控件、5個圖像控件、1個按鈕控件、1個編輯框控件。圖3.6拓?fù)鋱D子界面按鈕控件的ID為IDC_BUTTON_TOPUCD,標(biāo)題為“拓?fù)鋱D保存”。主要控件的設(shè)置如表3-5所示。表3-5拓?fù)鋱D子界面主要控件設(shè)置控件ID類型功能圖像控件1IDC_STATIC_PICTOPU矩形顯示拓?fù)鋱D圖像控件2IDC_STATIC_PICDANGER圖標(biāo)顯示危險圖標(biāo)編輯框控件IDC_EDIT_DANGER無顯示危險信息3.2.7閥值與控制子界面在工程中插入一個新的對話框,ID為IDD_DIALOG_CONTROL,設(shè)置其屬性樣式為“Child”,為作為主界面Tab控件2的第二個顯示窗口做準(zhǔn)備。其界面如圖3.7所示,共放置22個控件,分別是10個靜態(tài)文本控件、2個組框控件、4個單選按鈕控件、1個按鈕控件、1個組合框。圖3.7閥值與控制子界面表3-6為閥值與控制子界面主要控件設(shè)置表。表3-6閥值與控制子界面主要控件設(shè)置表控件ID標(biāo)題功能編輯框1IDC_WENDUMAX_EDIT無顯示溫度最大值編輯框2IDC_GUANGZHAOMAX_EDIT無顯示光照最大值編輯框3IDC_WENDUMIN_EDIT無顯示溫度最小值編輯框4IDC_GUANGZHAOMIN_EDIT無顯示光照最小值單選按鈕1IDC_OPENFENGSHAN開控制電扇開單選按鈕2IDC_OPENFENGSHAN開控制臺燈開單選按鈕3IDC_CLOSEFENGSHAN關(guān)控制電扇關(guān)單選按鈕4IDC_CLOSETAIDENG關(guān)控制臺燈關(guān)按鈕1IDC_CONTROL_OK確定確定數(shù)據(jù)發(fā)送組合框IDC_COMBO_Nodesel無列出節(jié)點(diǎn)供選擇3.2.8數(shù)據(jù)庫子界面在工程中插入一個新的對話框,ID為IDD_DIALOG_DBTABPAGE,設(shè)置其屬性樣式為“Child”,為作為主界面Tab控件2的第四個顯示窗口做準(zhǔn)備。其界面如圖3.8所示,共放置3個控件,分別是1個列表框控件、2個按鈕控件。圖3.8數(shù)據(jù)庫子界面表3-7為數(shù)據(jù)庫子界面控件設(shè)置表。表3-7數(shù)據(jù)庫子界面控件設(shè)置表控件ID標(biāo)題功能列表框IDC_LIST_DB無顯示表單選按鈕1IDC_BUTTON_DBDATA歷史實(shí)測數(shù)據(jù)打開“歷史實(shí)測數(shù)據(jù)表”單選按鈕2IDC_BUTTON_DBYZ當(dāng)前閾值打開“閾值表”3.3主界面主要附屬功能實(shí)現(xiàn)3.3.1菜單欄用戶與應(yīng)用程序的交互通常是通過菜單欄中的命令實(shí)行的,因此,菜單在應(yīng)用程序中占有很重要的位置。本軟件是基于對話框模式的,故程序沒有自動生成菜單欄,需要自行添加。單擊【插入】|【資源】|【Menu】|【新建】即可向當(dāng)前工程添加一個新菜單,默認(rèn)ID為IDR_MENU1。打開工作空間中的ResourceView選項(xiàng)卡,可對此新菜單做編輯。如圖3.9所示為本軟件菜單欄菜單項(xiàng)。圖3.9菜單欄菜單項(xiàng)表3-8為菜單欄的詳細(xì)設(shè)置表。表3-8菜單欄的詳細(xì)設(shè)置表一級菜單標(biāo)題一級菜單ID二級菜單標(biāo)題二級菜單ID設(shè)置(&S)無系統(tǒng)設(shè)置ID_Menu_PortSet閾值設(shè)置ID_Menu_FZSet通訊(&C)無查看串口ID_Menu_PortSee打開串口ID_Menu_PortOpen關(guān)閉串口ID_Menu_PortClose視圖(&V)無拓?fù)鋱DID_MENU_TOPUVIEW閥值與控制ID_MENU_CONTROL數(shù)據(jù)庫ID_MENU_DATABASE對菜單欄進(jìn)行各菜單項(xiàng)設(shè)置后,在主對話框?qū)傩灾袑⒉藛芜x為IDR_MENU1,這樣在運(yùn)行程序時菜單欄方可見。另外,需對菜單欄編輯響應(yīng)事件方可發(fā)揮其功用。在菜單資源中右擊菜單項(xiàng),選擇建立類向?qū)?,選擇COMMAND消息,添加對應(yīng)的功能函數(shù)。對主要菜單項(xiàng)編程如下:(1)“端口設(shè)置”菜單項(xiàng)對照“界面設(shè)計”中的“端口設(shè)置”對話框,參看“端口設(shè)置”菜單項(xiàng)代碼如下:voidCWsndDlg::OnMenuPortSet()//串口參數(shù)設(shè)置:串口號,波特率,校驗(yàn)位{ CStringstrStatus,strTemp; if(m_Portset.DoModal()==IDOK) { if(m_Portset.m_Com=="COM1") myCom=1;elseif(m_Portset.m_Com=="COM2") myCom=2;elseif(m_Portset.m_Com=="COM3") myCom=3;elseif(m_Portset.m_Com=="COM4") myCom=4;elseif(m_Portset.m_Com=="COM5") myCom=5;elseif(m_Portset.m_Com=="COM6") myCom=6; else if(m_Portset.m_Com=="COM7") myCom=7;elseif(m_Portset.m_Com=="COM8") myCom=8;elseif(m_Portset.m_Com=="COM9") myCom=9;elseif(m_Portset.m_Com=="COM10") myCom=10; if(m_Portset.m_Baudrate=="2400") myBaudRate="2400";elseif(m_Portset.m_Baudrate=="4800") myBaudRate="4800";elseif(m_Portset.m_Baudrate=="9600") myBaudRate="9600";elseif(m_Portset.m_Baudrate=="19200") myBaudRate="19200";elseif(m_Portset.m_Baudrate=="38400") myBaudRate="38400";elseif(m_Portset.m_Baudrate=="57600") myBaudRate="57600";elseif(m_Portset.m_Baudrate=="115200") myBaudRate="115200"; if(m_Portset.m_Parity=="無校驗(yàn)") myParity="N"; elseif(m_Portset.m_Parity=="偶校驗(yàn)") myParity="O"; elseif(m_Portset.m_Parity=="奇校驗(yàn)") myParity="E"; CStringstrPara,strTemp;//串口參數(shù) strPara="COM"; strTemp.Format("%d",myCom); strPara+=strTemp; strPara+=","; strPara+=myBaudRate; strPara+=","; strPara+=myParity; AfxMessageBox(strPara); UpdateData(FALSE);}}(2)“查看串口”菜單項(xiàng)查看串口的功能通過訪問注冊表信息來實(shí)現(xiàn),主要代碼如下:voidCWsndDlg::OnMenuPortSee()//查看串口{ //TODO:Addyourcommandhandlercodehere CStringstrCommArr; CStringstrTemp; HKEYhKey; intrtn; rtn=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Hardware\\DeviceMap\\SerialComm",NULL,KEY_READ,&hKey);//打開注冊表 if(rtn==ERROR_SUCCESS) { inti=0; charportName[256],commName[256]; DWORDdwLong,dwSize; while(1) { dwSize=sizeof(portName); dwLong=dwSize; rtn=RegEnumValue(hKey,i,portName,&dwLong,NULL,NULL,(PUCHAR)commName,&dwSize); strCommArr=commName; if(rtn==ERROR_NO_MORE_ITEMS)//枚舉串口 break; strTemp+=strCommArr; strTemp+="可用!"; strTemp+="\15\12"; i++;} RegCloseKey(hKey);} AfxMessageBox(strTemp);}添加以上代碼后,PC機(jī)連接串口,點(diǎn)擊“查看串口”,得其效果如圖3.10所示。圖3.10查看可用端口(3)“打開串口”菜單項(xiàng)打開串口功能所用關(guān)鍵代碼為:voidCWsndDlg::OnMenuPortOpen()//打開串口{ //TODO:Addyourcommandhandlercodehere CStringstrPara;//串口參數(shù) myComm.SetCommPort(myCom);//指定串口號myCom strPara=myBaudRate; strPara+=","; strPara+=myParity; strPara+=",8,1"; myComm.SetSettings(strPara);//通信參數(shù)設(shè)置 myComm.SetInBufferSize(1024);//指定接收緩沖區(qū)大小 myComm.SetInBufferCount(0);//清空接收緩沖區(qū) myComm.SetInputMode(1);//設(shè)置數(shù)據(jù)為二進(jìn)制獲取方式 myComm.SetInputLen(41);//設(shè)置每次讀取長度為41個字節(jié) myComm.SetRThreshold(1);//OnComm事件門限值 myComm.SetPortOpen(1);//打開串口 AfxMessageBox("串口打開成功!");}添加以上代碼后,已查看端口可用,點(diǎn)擊“打開端口”,得其效果如圖3.11所示。圖3.11串口打開成功(4)“關(guān)閉串口”菜單項(xiàng)關(guān)閉串口功能所用關(guān)鍵代碼為:myComm.SetPortOpen(0);//關(guān)閉串口“視圖”菜單下的“拓?fù)鋱D”菜單項(xiàng)拓?fù)鋱D菜單項(xiàng)的關(guān)鍵代碼如下:voidCWsndDlg::OnMenuTopuview()//拓?fù)鋱D菜單項(xiàng){ //TODO:Addyourcommandhandlercodehere m_tab2.SetCurSel(0); m_topu.ShowWindow(true);m_kz.ShowWindow(false); m_sjk.ShowWindow(false);}3.3.2工具欄同插入菜單欄的方法,插入一個工具欄,ID為IDR_TOOLBAR。雙擊工具欄上的按鈕,設(shè)置ID號即完成一個工具欄按鈕的新建任務(wù)。選取功效易讀的圖標(biāo),引入為工程的Icon資源。選取作用的對象,通過單擊【編輯】|【復(fù)制】或【粘貼】可將圖標(biāo)加載進(jìn)工具欄對應(yīng)按鈕,使界面更加美觀可讀。如圖3.12所示為本軟件工具欄外觀圖。工具欄按鈕從左到右依次復(fù)制了菜單欄的“查看端口”、“端口設(shè)置”、“打開串口”、“關(guān)閉串口”等功能。圖3.12工具欄外觀圖只需將工具欄按鈕的ID改成相應(yīng)菜單項(xiàng)的ID,即可使按鈕具有對應(yīng)菜單項(xiàng)的功能。至此,最后的問題是工具欄的顯示問題以及“工具按鈕提示”的顯示問題。(1)雖然添加了工具欄資源并對其按鈕ID做了編輯,但僅此在運(yùn)行程序時工具欄是不可見的,更無法對其按鈕操作。在主對話框初始化代碼段中添加如下代碼使工具欄可視化:cToolBar.Create(this);//創(chuàng)建工具欄cToolBar.LoadToolBar(IDR_TOOLBAR);//裝載工具欄資源cToolBar.LoadBitmap(IDB_BIT_toolbar);cToolBar.ShowWindow(SW_SHOW);//顯示窗口cToolBar.SetBarStyle(CBRS_ALIGN_TOP|CBRS_TOOLTIPS|CBRS_FLYBY);//設(shè)置工具欄風(fēng)格(頂端??俊⒐鈽?biāo)在按鈕上停留顯示工具提示和命令描述)RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);(2)工具欄按鈕提示可在其屬性中添加。但程序運(yùn)行時鼠標(biāo)移到按鈕區(qū)域時不會有提示信息,原因是在基于對話框模式下,“工具欄提示”的相應(yīng)代碼沒有被系統(tǒng)封裝,需手動添加。而在基于單文檔模式下,就沒有這種顧慮。添加代碼及過程如下:a.在wsndDlg.h文件的//{{AFX_MSG(CWSNJKDlg)…//}}AFX_MSG之后添加: afx_msgBOOLOnToolTipText(UINTnID,NMHDR*pNMHDR,LRESULT*pResult); DECLARE_MESSAGE_MAP()b.在wsndDlg.cpp文件的消息映射函數(shù)最后添加:ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW,0,0xFFFF,OnToolTipText)//用于工具欄按鈕//顯示信息ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA,0,0xFFFF,OnToolTipText)//用于工具欄按鈕//顯示信息c.在在wsndDlg.cpp文件中添加:BOOLCWsndDlg::OnToolTipText(UINT,NMHDR*pNMHDR,LRESULT*pResult){ASSERT(pNMHDR->code==TTN_NEEDTEXTA||pNMHDR->code==TTN_NEEDTEXTW);//ifthereisatoplevelroutingframethenletithandlethemessage if(GetRoutingFrame()!=NULL)returnFALSE;//tobethoroughwewillneedtohandleUNICODEversionsofthemessagealso!! TOOLTIPTEXTA*pTTTA=(TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW*pTTTW=(TOOLTIPTEXTW*)pNMHDR; TCHARszFullText[512]; CStringstrTipText; UINTnID=pNMHDR->idFrom; if(pNMHDR->code==TTN_NEEDTEXTA&&(pTTTA->uFlags&TTF_IDISHWND)||pNMHDR->code==TTN_NEEDTEXTW&&(pTTTW->uFlags&TTF_IDISHWND)) { //idFromisactuallytheHWNDofthetool nID=::GetDlgCtrlID((HWND)nID);} if(nID!=0)//willbezeroonaseparator { AfxLoadString(nID,szFullText);//#include<afxpriv.h>forAfxLoadString strTipText=szFullText;#ifndef_UNICODE if(pNMHDR->code==TTN_NEEDTEXTA) {lstrcpyn(pTTTA->szText,strTipText,sizeof(pTTTA->szText));} else {_mbstowcsz(pTTTW->szText,strTipText,sizeof(pTTTW->szText));}#else if(pNMHDR->code==TTN_NEEDTEXTA) {_wcstombsz(pTTTA->szText,strTipText,sizeof(pTTTA->szText));} else {lstrcpyn(pTTTW->szText,strTipText,sizeof(pTTTW->szText));}#endif *pResult=0; //bringthetooltipwindowaboveotherpopupwindows::SetWindowPos(pNMHDR->hwndFrom,HWND_TOP,0,0,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); returnTRUE;}}3.3.3主界面Tab控件本軟件共設(shè)有兩個Tab控件,參考主界面從左往右分別簡稱為Tab控件1、Tab控件2。軟件設(shè)計中主界面Tab控件需要實(shí)現(xiàn)以下功能:(1)Tab控件1可根據(jù)用戶選擇,顯示“節(jié)點(diǎn)樹”對話框及“節(jié)點(diǎn)屬性”對話框兩者之一。(2)Tab控件2可根據(jù)用戶選擇,顯示“拓?fù)鋱D”對話框、“閥值與控制”對話框及“數(shù)據(jù)庫”對話框三者之一。為此,共分三步完成。第一步:新建五個對話框,標(biāo)題分別是“節(jié)點(diǎn)樹”、“節(jié)點(diǎn)屬性”、“拓?fù)鋱D”、“閥值與控制”、“數(shù)據(jù)庫”,其樣式均為“Child”。建立步驟如“界面設(shè)計”中所述。第二步:為每個對話框建立一個新類。雙擊對話框,在跳出的對話框中選擇“建立一個新類”,輸入自定義的類名,選擇基類,確定后即建立了一個新類。五個對話框的類名及基類對應(yīng)表如表3-9所示。表3-9Tab控件下對話框類名與基類對應(yīng)表對話框標(biāo)題對話框ID對話框類名對話框基類節(jié)點(diǎn)樹IDD_DIALOG_NODETREECNodetreeCDialog節(jié)點(diǎn)屬性IDD_DIALOG_NODEPROPERTYCNodepropertyCDialog拓?fù)鋱DIDD_DIALOG_TOPUTABPAGECTabPage1CDialog閥值與控制IDD_DIALOG_CONTROLCControlCDialog數(shù)據(jù)庫IDD_DIALOG_DBTABPAGECTabPage3CDialog第三步:編程實(shí)現(xiàn)Tab控件對相應(yīng)對話框的調(diào)用顯示。a.聲明Tab控件變量分別為m_tab1、m_tab2。b.在主對話框wsndDLG.h頭文件中聲明被調(diào)用對話框的實(shí)例。CNodepropertym_nodeproperty;//節(jié)點(diǎn)屬性實(shí)例CNodetreem_nodetree;//節(jié)點(diǎn)樹實(shí)例CTabPage1m_topu;//拓?fù)鋱D實(shí)例CControlm_kz;//閥值與控制實(shí)例CTabPage3m_sjk;//數(shù)據(jù)庫實(shí)例c.在主對話框OnInitDialog()函數(shù)中添加代碼進(jìn)行子對話框的顯示設(shè)置。以Tab控件1為例,代碼如下://設(shè)置Tab控件1m_tab1.InsertItem(0,_T("節(jié)點(diǎn)樹"));//添加選項(xiàng)卡一m_tab1.InsertItem(1,_T("節(jié)點(diǎn)屬性"));//添加選項(xiàng)卡二//關(guān)聯(lián)對話框,并且將IDC_TABFORMER控件設(shè)為父窗口m_nodetree.Create(IDD_DIALOG_NODETREE,GetDlgItem(IDC_TABFORMER));m_nodeproperty.Create(IDD_DIALOG_NODEPROPERTY,GetDlgItem(IDC_TABFORMER));//獲得IDC_TABFORMER客戶區(qū)大小CRectrc;m_tab1.GetClientRect(&rc);//調(diào)整子對話框在父窗口中的位置rc.top-=20;rc.bottom-=20;rc.left-=20;rc.right-=2;//設(shè)置子對話框尺寸并移動到指定位置m_nodetree.MoveWindow(&rc);m_nodeproperty.MoveWindow(&rc);//分別設(shè)置隱藏和顯示m_nodetree.ShowWindow(true);m_nodeproperty.ShowWindow(false);//設(shè)置默認(rèn)的選項(xiàng)卡m_tab1.SetCurSel(0);d.通過編輯Tab控件的OnSelchange事件實(shí)現(xiàn)Tab控件的選擇性顯示子對話框功能。以Tab控件1為例,編碼如下:voidCWsndDlg::OnSelchangingTabformer(NMHDR*pNMHDR,LRESULT*pResult)//第一個Tab控件選項(xiàng)卡選擇{ //TODO:Addyourcontrolnotificationhandlercodehere intCurSel1=m_tab1.GetCurSel();switch(CurSel1){case0:m_nodetree.ShowWindow(false);m_nodeproperty.ShowWindow(true);break;case1:m_nodetree.ShowWindow(true);m_nodeproperty.ShowWindow(false);break;default:;} *pResult=0;}3.4自定義WSN串口通信協(xié)議3.4.1概述通信協(xié)議是指通信雙方的一種約定,在約定中對數(shù)據(jù)格式、同步方式、傳送速度、傳送步驟、檢錯方式以及控制字符定義等做出統(tǒng)一規(guī)定,通信雙方必須共同遵守[18]。目前,采用的串行通信協(xié)議有兩類:異步通信和同步通信。同步通信協(xié)議又分為面向字符、面向比特、面向字節(jié)計數(shù)3種[17]。由于異步通信每次發(fā)送一個字符都加起始位及停止位等附加位,使其通信效率比較低,因此異步通信一般用在數(shù)據(jù)速率較慢的場合(如小于10.2kbit/s)。本軟件采用同步通信協(xié)議,面向字節(jié)計數(shù)。3.4.2自定義WSN串口通信參數(shù)在串口通信前,必須設(shè)置串行口的通信參數(shù),包括通信的波特率、數(shù)據(jù)位數(shù)、起始位、停止位及奇偶校驗(yàn)位等。對于單片機(jī)來說,有些參數(shù)是固定的,如數(shù)據(jù)位數(shù)是8位,起始位是1位,停止位是1位??勺兊膮?shù)只有波特率和奇偶校驗(yàn)類型。上位機(jī)端在使用MFC中MSComm控件進(jìn)行串口通信編程時,系統(tǒng)默認(rèn)的串口波特率數(shù)值、數(shù)據(jù)位數(shù)、停止位數(shù)分別為9600、8、1。此外還要約定通信的數(shù)據(jù)格式、設(shè)置好串口號等。如圖3.13為本軟件串口通信協(xié)議約定的上行數(shù)據(jù)包格式,圖3.14為下行數(shù)據(jù)包格式。包頭Start1字節(jié)節(jié)點(diǎn)地址Address2字節(jié)節(jié)點(diǎn)Mac地址Mac8字節(jié)父節(jié)點(diǎn)Mac地址PaMac8字節(jié)節(jié)點(diǎn)網(wǎng)絡(luò)類型NetType1字節(jié)傳感器類型Type1字節(jié)傳感器包尾End1字節(jié)‘#’‘C’—協(xié)調(diào)器‘R’—路由器‘E’—終端設(shè)備WD—溫度GZ—光照‘@’測量光照值2字節(jié)測量溫度值2字節(jié)繼電器狀態(tài)1字節(jié)00—關(guān)01—開圖3.13上位機(jī)串口接收的數(shù)據(jù)包格式包頭Start1字節(jié)節(jié)點(diǎn)地址Address2字節(jié)節(jié)點(diǎn)Mac地址Mac8字節(jié)節(jié)點(diǎn)網(wǎng)絡(luò)類型NetType1字節(jié)傳感器類型Type1字節(jié)控制量包尾End1字節(jié)‘#’‘C’—協(xié)調(diào)器‘R’—路由器‘E’—終端設(shè)備WD—溫度GZ—光照‘@’溫度最大值2字節(jié)溫度最小值2字節(jié)光照最大值2字節(jié)光照最小值2字節(jié)繼電器狀態(tài)1字節(jié)00—關(guān)01—開圖3.14上位機(jī)串口發(fā)送的數(shù)據(jù)包格式3.4.3串口接收數(shù)據(jù)實(shí)現(xiàn)MSComm是Microsoft提供的一個ActiveX控件,用于簡化串口程序開發(fā),試用MSComm控件,用戶不必了解復(fù)雜的API函數(shù),通過MSComm控件的屬性、方法和事件,就可以和思想串口操作的大部分功能。MSComm控件只提供一個OnComm事件,該事件在串口狀態(tài)發(fā)生改變時觸發(fā)。例如,用戶在發(fā)送和接收數(shù)據(jù)時,將觸發(fā)OnComm事件。發(fā)送數(shù)據(jù)時,事件返回數(shù)值1;接收數(shù)據(jù)時,事件返回數(shù)值2[19]。串口接收數(shù)據(jù)的關(guān)鍵代碼如下:voidCWsndDlg::OnOnCommMscomm1(){ CStringstrDis,strSum; BYTErxdata[2048]; COleSafeArraysafearray1; VARIANTinput1; longlen1,k; CStringstradd="";//臨時地址讀取變量 switch(myComm.GetCommEvent()) { case2://收到RTHreshold個字符 input1=myComm.GetInput();//讀取輸入緩沖區(qū)的字符,讀取字節(jié)數(shù)為SetRTHreshold()設(shè)置的值 safearray1=input1; len1=safearray1.GetOneDimSize();//得到有效數(shù)據(jù)長度 for(k=0;k<len1;k++) safearray1.GetElement(&k,rxdata+k); for(k=0;k<len1;k++) { if(rxdata[k]==35)//判斷是否是以包首字符“#”開頭 { for(intn=k;n<len1;n++) {if(rxdata[n]==40)//包尾字符“@”結(jié)束的字符串 break; BYTEbt=*(char*)(rxdata+n);//字符型 strDis.Format("%c",bt);//將字符送入臨時變量strSum存放 strSum+=strDis; }}} strDis=""; stradd=strSum.Mid(1,4);//截取字符串,第一個參數(shù)為截取位置,第二個參數(shù)為截取長度。 intj; if(stradd=="0002")//節(jié)點(diǎn)1 { j=1; Transfer(strSum,j);//對節(jié)點(diǎn)j更新} if(stradd=="0003")//節(jié)點(diǎn)2 { j=2; Transfer(strSum,j);//對節(jié)點(diǎn)j更新 }}voidCWsndDlg::Transfer(CStringstrSum,intnum)//節(jié)點(diǎn)數(shù)據(jù)傳輸函數(shù),將接收到的//數(shù)據(jù)按地址放入對應(yīng)節(jié)點(diǎn){ CNode::nodeadd[num]=strSum.Mid(1,4); CNode::nodemac[num]=strSum.Mid(5,16); CNode::fnodemac[num]=strSum.Mid(21,16); CNode::nodetype[num]=strSum.Mid(37,1); ……}3.5傳感器數(shù)據(jù)顯示3.5.1傳感器數(shù)據(jù)顯示實(shí)現(xiàn)思想實(shí)時顯示傳感器數(shù)據(jù)功能的實(shí)現(xiàn)思想主要是以下幾點(diǎn):第一:借助MFC中的MSComm控件,將協(xié)調(diào)器節(jié)點(diǎn)通過串口傳來的數(shù)據(jù)包整包收下,存放于一個CString變量(假設(shè)為m_str)中;第二:建立一個全局類,類中保存由m_str轉(zhuǎn)換截取后的各節(jié)點(diǎn)的所有信息,另外還有一些標(biāo)志性變量(如用于判斷該節(jié)點(diǎn)是否存在的變量);第三:根據(jù)用戶選擇,將全局類中對應(yīng)節(jié)點(diǎn)信息顯示在“節(jié)點(diǎn)屬性”對話框的各編輯框中,并進(jìn)行實(shí)時更新。3.5.2傳感器數(shù)據(jù)顯示實(shí)現(xiàn)過程如圖3.15所示為顯示傳感器數(shù)據(jù)功能實(shí)現(xiàn)過程框架。開始開始用戶選擇節(jié)點(diǎn)按下GO按鈕(定時開始)按下STOP按鈕(定時結(jié)束)定時時間到顯示節(jié)點(diǎn)信息是是否否圖3.15傳感器數(shù)據(jù)功能實(shí)現(xiàn)過程框架3.5.3傳感器數(shù)據(jù)顯示實(shí)現(xiàn)(1)通過MSComm控件的OnComm事件接收協(xié)調(diào)器節(jié)點(diǎn)串口發(fā)來的數(shù)據(jù),賦給一個CString變量,此變量即為“上位機(jī)經(jīng)串口接收數(shù)據(jù)編程實(shí)現(xiàn)”中所述的strSum變量。(2)用于保存各節(jié)點(diǎn)信息的全局類的建立a.單擊【插入】|【類】,輸入類名為CNode,所屬基類為CWinThread,完成后即得到Node.h和Node.cpp文件。在Node.h中對靜態(tài)數(shù)據(jù)成員聲明如下:staticCStringnodeadd[10];staticCStringnodemac[10];staticCStringfnodemac[10];staticCStringnodetype[10];staticCStringsentype[10];staticCStringsenlight[10];staticCStringsentemper[10];staticCStringZTstate[10];staticintZTtemper;staticintZTlight;staticCStringmaxtemper[10];staticCStringmintemper[10];staticCStringmaxlight[10];staticCStringminlight[10];staticintRTflag;b.在Node.cpp文件中對靜態(tài)數(shù)據(jù)成員初始化,需要注意的是必須在類外初始化。主要代碼如下:CStringCNode::nodeadd[10]={"空","空","空","空","空","空","空","空","空","空"};CStringCNode::nodetype[10]={"空","空","空","空","空","空","空","空","空","空"};CStringCNode::sentype[10]={"空","空","空","空","空","空","空","空","空","空"};CStringCNode::nodemac[10]={"空","空","空","空","空","空","空","空","空","空"};…..(3)用戶選擇性查看節(jié)點(diǎn)信息用戶根據(jù)自己的選擇,查看實(shí)時更新的節(jié)點(diǎn)信息。在此,實(shí)時顯示需啟動定時器,調(diào)用SetTimer函數(shù)。MFC中SetTimer函數(shù)原型為:UINTSetTimer(UINTnIDEvent,UINTnElapse,void(CALLBACKEXPORT*lpfnTimer)(HWND,UINT,YINT,DWORD)),第一個參數(shù)為定時器ID,多個定時器時,可以通過該ID判斷是哪個定時器;第二個參數(shù)為時間間隔,單位為毫秒;第三個參數(shù)為回調(diào)函數(shù),NULL表示當(dāng)定時至1000ms時,系統(tǒng)自動觸發(fā)對話框的OnTimer事件。在Nodeproperty.cpp文件中添加如下代碼:CStringCNodeproperty::OnSelchangeComboNpnodeselect()//獲得用戶選擇的節(jié)點(diǎn){ CStringstrTemp; intiindex=m_ComboNP.GetCurSel();m_ComboNP.GetLBText(iindex,strTemp); //SetTimer(1,1000,NULL);returnstrTemp;}voidCNodeproperty::OnButtonNpjudge()//判斷按鈕按下的奇偶次數(shù){ switch(m_start) { case1: SetTimer(1,1000,NULL); SetDlgItemText(IDC_BUTTON_NPJUDGE,"STOP");m_start=0;break;case0:KillTimer(1);SetDlgItemText(IDC_BUTTON_NPJUDGE,"GO");m_start=1;break;}}voidCNodeproperty::OnTimer(UINTnIDEvent)//更新指定節(jié)點(diǎn)的信息{ switch(nIDEvent) {case1:for(int;j=0;j<=1;j++){if(OnSelchangeComboNpnodeselect()==CNode::nodeadd[j]){//if(CNode::content[j]==1){ //m_NpNetnum=CNode::netnum[j]; m_NpNodeadd=CNode::nodeadd[j]; m_Npnodetype=CNode::sentype[j]; m_NpNmadd=CNode::nodemac[j]; m_NpFnmadd=CNode::fnodemac[j]; m_NPsentype=CNode::nodetype[j]; m_NpLight=CNode::senlight[j]; m_NpTemper=CNode::sentemper[j]; if(CNode::ZTstate[j]=="00"){m_NPztstate="關(guān)";}else{m_NPztstate="開";}UpdateData(false);//更新,將關(guān)聯(lián)變量的值更新到控件上}}}}}3.6數(shù)據(jù)庫實(shí)現(xiàn)本軟件采用VisualC++與Access的ADO連接,對數(shù)據(jù)庫中各表進(jìn)行插入數(shù)據(jù)的操作,利用MFC中的列表控件的各種方法將數(shù)據(jù)庫中各表的內(nèi)容直觀的展現(xiàn)在用戶眼前。ADO數(shù)據(jù)庫開發(fā)的一般流程是首先初始化COM庫,引入ADO庫定義文件;然后用Connection對象連接數(shù)據(jù)庫;再利用建立好的連接,通過Connection、Command對象執(zhí)行SQL語句,或利用Recordset對象取得結(jié)果記錄集進(jìn)行查詢、處理;最后使用完畢后關(guān)閉連接釋放對象[20]。(1)數(shù)據(jù)庫表設(shè)計數(shù)據(jù)庫建立的兩個數(shù)據(jù)庫表如下:表3.10為歷史實(shí)測數(shù)據(jù)表,表3.11為歷史控制數(shù)據(jù)表3.10為歷史實(shí)測數(shù)據(jù)表字段名稱字段類型時間文本節(jié)點(diǎn)地址文本節(jié)點(diǎn)Mac地址文本父節(jié)點(diǎn)Mac地址文本節(jié)點(diǎn)網(wǎng)絡(luò)類型文本傳感器類型文本光照強(qiáng)度文本溫度文本繼電器狀態(tài)文本表3.11為歷史控制數(shù)據(jù)表字段名稱字段類型時間文本節(jié)點(diǎn)地址文本節(jié)點(diǎn)Mac地址文本節(jié)點(diǎn)網(wǎng)絡(luò)類型文本傳感器類型文本溫度最大值文本溫度最小值文本光照最大值文本光照最小值文本繼電器狀態(tài)文本(2)數(shù)據(jù)庫數(shù)據(jù)載入歷史實(shí)測數(shù)據(jù)在串口通信協(xié)議處插入數(shù)據(jù)表,在此以對“歷史實(shí)測數(shù)據(jù)表”的處理為例闡述此類操作的方法。a.引入ADO類。在StdAfx.h文件中添加如下代碼將msado15.dll動態(tài)鏈接庫導(dǎo)入到程序中。代碼如下:#import"c:\programfiles\commonfiles\system\ado\msado15.dll"\no_namespace\rename("EOF","adoEOF")b.聲明一個智能指針,代碼如下:_ConnectionPtr m_pConnection;//聲明變量,用于數(shù)據(jù)庫_RecordsetPtr m_pRecordset3;c.記錄數(shù)據(jù)到數(shù)據(jù)庫代碼如下:m_pConnection.CreateInstance(__uuidof(Connection));//創(chuàng)建數(shù)據(jù)庫實(shí)例 try { //打開本地Access庫數(shù)據(jù)庫.mdbm_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=數(shù)據(jù)庫.mdb","","",adModeUnknown); } catch(_com_errore) {AfxMessageBox("數(shù)據(jù)庫連接失敗,確認(rèn)數(shù)據(jù)庫數(shù)據(jù)庫.mdb是否在當(dāng)前路徑下!");} m_pRecordset3.CreateInstance(__uuidof(Recordset)); CTimetime;time=CTime::GetCurrentTime(); CStringstrTime; strTime=time.Format("%Y-%m-%d%H:%M:%S");//在ADO操作中建議語句中要常用try...catch()來捕獲錯誤信息,//因?yàn)樗袝r會經(jīng)常出現(xiàn)一些意想不到的錯誤。 try {m_pRecordset3->Open("SELECT*FROM歷史實(shí)測數(shù)據(jù)", m_pConnection.GetInterfacePtr(), //獲取庫接庫的IDispatch指針 adOpenDynamic, adLockOptimistic, adCmdText); } catch(_com_error*e) {AfxMessageBox(e->ErrorMessage());} longCount=m_pRecordset3->GetRecordCount(); if(Count>=100)//最多100條記錄 { //刪除記錄 try { m_pRecordset3->MoveFirst();//從0開始 m_pRecordset3->Delete(adAffectCurrent);//參數(shù)adAffectCurre

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論