水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 計(jì)算機(jī)專(zhuān)業(yè)_第1頁(yè)
水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 計(jì)算機(jī)專(zhuān)業(yè)_第2頁(yè)
水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 計(jì)算機(jī)專(zhuān)業(yè)_第3頁(yè)
水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 計(jì)算機(jī)專(zhuān)業(yè)_第4頁(yè)
水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 計(jì)算機(jī)專(zhuān)業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

摘要在現(xiàn)今21世紀(jì)人類(lèi)社會(huì),科學(xué)技術(shù)飛速發(fā)展,我們正在朝著高科技的方向前進(jìn),但是地球的資源是有限的。我們?cè)谌侔l(fā)展的同時(shí),環(huán)境問(wèn)題也變得越來(lái)越嚴(yán)峻。地球上大約有十三億八千六百萬(wàn)立方千米,其中的百分之九十六點(diǎn)五存在于海洋中,淡水只有三千五百萬(wàn)萬(wàn)立方千米。而全球共有大約70億人口,這造成了水資源的嚴(yán)重缺乏,水成了非常寶貴的資源。因此對(duì)水質(zhì)的監(jiān)測(cè)是現(xiàn)今一個(gè)相當(dāng)重要的課題。在如今的和平時(shí)期,電子硬件和軟件技術(shù)也發(fā)生了巨大的變化,我們有了更加靈敏的各種高精度傳感器,網(wǎng)絡(luò)技術(shù)更加發(fā)展迅速,這使得水質(zhì)監(jiān)測(cè)變得更加及時(shí)和準(zhǔn)確。本文主要研究了基于樹(shù)莓派、PC和手機(jī)的水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。該系統(tǒng)的服務(wù)器運(yùn)行在Windows操作系統(tǒng)下,通過(guò)無(wú)線網(wǎng)絡(luò)連接樹(shù)莓派端和手機(jī)端,實(shí)現(xiàn)了遠(yuǎn)程水質(zhì)數(shù)據(jù)的模擬采集、水質(zhì)數(shù)據(jù)傳輸、水質(zhì)數(shù)據(jù)顯示和水質(zhì)數(shù)據(jù)的分析和水質(zhì)數(shù)據(jù)的保存。本文研究的水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)旨在充分利用現(xiàn)有的設(shè)備和資源,實(shí)現(xiàn)了遠(yuǎn)程監(jiān)測(cè)水質(zhì)實(shí)時(shí)上報(bào)的目的。本文首先講述了課題的研究背景、目的和國(guó)內(nèi)外的研究現(xiàn)狀,接著分析了水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)的實(shí)際需求并論述了系統(tǒng)實(shí)現(xiàn)的可行性,然后介紹了本文研究的水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)中用到的相關(guān)技術(shù),最后詳細(xì)論述了水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)中各個(gè)功能模塊的設(shè)計(jì)和實(shí)現(xiàn)方法。關(guān)鍵詞:環(huán)境問(wèn)題;水質(zhì)監(jiān)測(cè);網(wǎng)絡(luò)傳輸;DesignandimplementationofwaterqualitymonitoringdataacquisitionsystemAbstract Intoday'stwenty-firstCentury,humansociety,scienceandtechnologyaredevelopingrapidly,wearemovinginthedirectionofhigh-tech,buttheearth'sresourcesarelimited.Whilewearedevelopingatfullspeed,environmentalissueshavebecomequiteimportant.Thereareabout1billion386millioncubickilometersofearth,96.5%ofwhichareintheocean,andonly35millioncubickilometersoffreshwater.Whiletheglobaltotalpopulationofabout7billion,whichcausedaseriouslackofwaterresources,waterisaveryvaluableresource.Therefore,themonitoringofwaterqualityisaveryimportanttopictoday.Intoday'seraofpeace,electronichardwareandsoftwaretechnologyhasundergonetremendouschanges,wehaveallkindsofhighprecisionsensormoresensitive,morerapiddevelopmentofnetworktechnology,whichmakesthewaterqualitymonitoringbecomemoretimelyandaccurate. Thispapermainlystudiesthedesignandimplementationofwaterqualitymonitoringdataacquisitionsystembasedonraspberrypie,PCandmobilephone.TheserverrunningundertheWindowsoperatingsystemwithraspberrypieandmobilephonethroughawirelessnetwork,toachievethepreservationofwaterqualitydataanalysisandremotewaterqualitydatacollection,datatransmission,simulationofwaterqualitydataandwaterqualitydataofthe.Thedataacquisitionsystemofwaterqualitymonitoringinthispaperaimstomakefulluseoftheexistingequipmentandresources,andachievesthegoalofremotemonitoringandreal-timereportingofwaterquality. Thispaperdescribesthepurposeandresearchstatusathomeandabroad,researchbackground,andthenanalyzestheactualdemandofwaterqualitymonitoringdataacquisitionsystemanddiscussesthefeasibilityofthesystem,andthenintroducestherelatedtechnologyusedinwaterqualitymonitoringdataacquisitionsysteminthisstudy,finallydiscussesthedesignandrealizationmethodofeachfunctionthewaterqualitymonitoringdataacquisitionsystemmodule.KeyWords:Environmentalproblems;waterqualitymonitoring;networktransmission;目錄摘要 [12]。Qt既可以用來(lái)開(kāi)發(fā)GUI程序,也可用于開(kāi)發(fā)非GUI程序,例如控制臺(tái)工具和服務(wù)器。Qt是面向?qū)ο蟮目蚣?,使用特殊的代碼生成擴(kuò)展(稱(chēng)為元對(duì)象編譯器(MetaObjectCompiler,moc))以及一些宏,易于擴(kuò)展,允許組件編程。Qt的最重要的優(yōu)點(diǎn)在于它能夠跨平臺(tái)使用,Qt支持Windows、Linux、Solaris,SunOS,HP-UX等操作系統(tǒng)。Qt是面向?qū)ο蟮目蚣?,它的封裝機(jī)制非常精妙,這使得其模塊化程度達(dá)到了一個(gè)很高的層次,有豐富的API和良好的重用性,它有將近250個(gè)C++類(lèi)。難能可貴的一點(diǎn)是對(duì)嵌入式平臺(tái)具有良好的支持,具體表現(xiàn)在Qt可以直接操控framebuff,這種做法使得嵌入式產(chǎn)品的圖形界面非常美觀,觀賞性提升了不止一個(gè)檔次。Qt/Embedded的特性是可以直接在Framebuffer上顯示圖形接口,反應(yīng)的速度更快REF_Ref452029436\r\h[9]。 本設(shè)計(jì)上層程序采用Qt編寫(xiě)界面與控制端,程序使用Qt編寫(xiě)界面。Qt是一個(gè)基于C++的跨平臺(tái)的UI和應(yīng)用開(kāi)發(fā)框架,它包括一套跨平臺(tái)的類(lèi)庫(kù)、一整套整合的開(kāi)發(fā)工具和一個(gè)跨平臺(tái)的集成開(kāi)發(fā)環(huán)境(IDE)。使用Qt,我們可以有效的重用代碼,使用一個(gè)代碼庫(kù)既可以適配14個(gè)或者更多的主要的桌面、嵌入式和移動(dòng)平臺(tái)。3.3手機(jī)端程序設(shè)計(jì) 在目前社會(huì),手機(jī)已經(jīng)成了人們?nèi)粘I畈荒茈x開(kāi)的工具,利用手機(jī)技術(shù)來(lái)為本設(shè)計(jì)服務(wù)將使得整個(gè)設(shè)計(jì)更加完美。目前手機(jī)系統(tǒng)大致分為Android操作系統(tǒng)和iOS操作系統(tǒng)以及其它等。本設(shè)計(jì)主要依賴(lài)于Qt在安卓系統(tǒng)上的技術(shù)應(yīng)用。Qt在Android上的模塊主要如表3.3所示。表3.3Qt模塊在Android上的支持情況模塊Qt5.2Qt5.3QtCore支持支持QtMultimedia音頻、視頻、相機(jī)音頻、視頻、相機(jī)QtNetwork支持支持QtQuickControls不支持安卓Native風(fēng)格不支持安卓Native風(fēng)格QtSQLSQliteSQLiteQtWebKit不支持不支持QtWidgets支持支持QtGUIQMLQtQuick支持支持 因此利用Qt在Android上開(kāi)發(fā)應(yīng)用程序完全可行,可以設(shè)計(jì)出和桌面應(yīng)用相媲美的APP程序。3.4控制芯片的選擇在前期我們打算直接使用STM32單片機(jī)進(jìn)行開(kāi)發(fā),STM32單片機(jī)簡(jiǎn)單易上手,功能豐富,資料相對(duì)齊全,同時(shí)也是我眾多單片機(jī)中運(yùn)用的比較熟悉的一款,STM32F103型的單片機(jī)主頻最高能到80Mhz左右,一般的程序應(yīng)該沒(méi)有問(wèn)題,我們選用ALIENTEKMiniSTM32開(kāi)發(fā)板,其上配有STM32F103RBT6,性?xún)r(jià)比較高,擁有128KBFLASH、20KBSRAM、2個(gè)SPI、3個(gè)串口、一個(gè)CAN、2個(gè)12位的ADC(16通道)、RTC、DMA、4個(gè)16位定時(shí)器、51個(gè)可用的I/O腳等REF_Ref452029436\r\h[10]。但是由于后期加入的算法異常龐大,并且STM32驅(qū)動(dòng)攝像頭本身就將消耗巨大資源,所以最終選擇放棄。接下來(lái),我們轉(zhuǎn)戰(zhàn)ARM單片機(jī),恰巧手上有一款友善之臂的ARM開(kāi)發(fā)板,核心是三星的Exynos4412,是Coratx-A9的處理器,性能相當(dāng)強(qiáng)勁,但后期在實(shí)踐的過(guò)程中,由于資料和源碼實(shí)在太少,教程又難以找到,所以最終放棄。很早就知道有一款A(yù)RM開(kāi)發(fā)板,是創(chuàng)客們的首選,它的資料相當(dāng)豐富,而且社區(qū)相當(dāng)龐大,在全球各地都有不少發(fā)燒友用它做出各種神奇的作品。因此最終我們選擇了樹(shù)莓派。本次待選擇的開(kāi)發(fā)硬件如圖3.4所示。圖3.4開(kāi)發(fā)硬件選擇3.5TCP/IP技術(shù)TCP/IP技術(shù)的中文叫法是傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,也叫做網(wǎng)絡(luò)通訊協(xié)議,這是Internet的最基礎(chǔ)的協(xié)議、Internet網(wǎng)國(guó)際連接的基礎(chǔ)。它由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。這個(gè)協(xié)議定義了電子設(shè)備連接互聯(lián)網(wǎng)的方法,傳輸數(shù)據(jù)的標(biāo)準(zhǔn)。該協(xié)議有4層層級(jí)結(jié)構(gòu),大概的意思說(shuō)就是:TCP主要負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯?wèn)題,有問(wèn)題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全的傳輸?shù)侥康牡?。而IP給了因特網(wǎng)的每一臺(tái)聯(lián)網(wǎng)設(shè)備一個(gè)地址。ISO制定的OSI參考模型非常的龐大、復(fù)雜,因此引起了很多人的批評(píng)。鑒于此技術(shù)人員們自己開(kāi)發(fā)出了TCP/IP協(xié)議棧。TCP/IP協(xié)議棧是美國(guó)國(guó)防部高級(jí)研究計(jì)劃局計(jì)算機(jī)網(wǎng)(AdvancedResearchProjectsAgencyNetwork,ARPANET)和其后繼因特網(wǎng)使用的參考模型。在不斷的發(fā)展后,最終ARPANET發(fā)展成為全球規(guī)模最大的互連網(wǎng)絡(luò)-因特網(wǎng)。TCP/IP參考模型主要分為四個(gè)層次:應(yīng)用層、傳輸層、網(wǎng)絡(luò)互連層和主機(jī)到網(wǎng)絡(luò)層。整個(gè)socket信息傳輸過(guò)程如圖3.5所示。圖3.5socket通信流程3.5.1QtSocket技術(shù) 這里我們使用QtSocket的TCP通信編程。通常的Socket的通信異常復(fù)雜,包括bind()、listen()、connect()、accept()、read()、write()、close()等函數(shù)。使用起來(lái)相當(dāng)復(fù)雜,需要經(jīng)過(guò)建立三次握手。這里我們使用的QtSocket簡(jiǎn)化了大部分的操作,抽象出來(lái)了QtSocket類(lèi)供我們調(diào)用,屏蔽了一些底層的代碼,使socket通信更加簡(jiǎn)單。 在服務(wù)器端我們需要建立QTcpServer類(lèi),然后調(diào)用listen函數(shù)監(jiān)聽(tīng)從任何IP地址和特定端口過(guò)來(lái)的連接。然后利用connect函數(shù)建立信號(hào)和槽連接。原型如下:connect(tcpServer,SIGNAL(newConnection()),this,SLOT(newConnect()));當(dāng)有新的連接到來(lái)時(shí),觸發(fā)此槽函數(shù),發(fā)送信號(hào)newConnection(),然后調(diào)用newConnect()函數(shù)。這時(shí)我們可以在該函數(shù)中處理連接過(guò)來(lái)的socket信息,不用去管連接的建立過(guò)程,這些工作都被qt在底層做好了,方便了應(yīng)用程序的快速開(kāi)發(fā)。 在客戶端我們需要建立QTcpSocket類(lèi),然后調(diào)用connectToHost函數(shù)連接服務(wù)器。然后我們可以在程序的任何地方調(diào)用write()函數(shù)向socket中寫(xiě)入數(shù)據(jù),qt會(huì)自動(dòng)將數(shù)據(jù)上傳到服務(wù)器。3.6CRC校驗(yàn)技術(shù) CRC校驗(yàn)即是循環(huán)冗余校驗(yàn)碼,是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯(cuò)校驗(yàn)碼,它的特點(diǎn)明顯,可以任意設(shè)定校驗(yàn)字段和信息字段的長(zhǎng)度,是一種數(shù)據(jù)傳輸檢錯(cuò)功能,校驗(yàn)時(shí)對(duì)數(shù)據(jù)進(jìn)行多項(xiàng)式計(jì)算,把得到的結(jié)果添加到傳輸幀的后面,接收方也同樣進(jìn)行相同的算法,以保證數(shù)據(jù)傳輸?shù)耐暾院驼_性。 這里我們采用在嵌入式開(kāi)發(fā)中經(jīng)常用到的CRC-16校驗(yàn)。首先我們將CRC寄存器的值設(shè)置為FFFF,然后將數(shù)據(jù)的第一個(gè)8-bit字符與16位CRC寄存器的最后8位進(jìn)行異或,然后把結(jié)果存入CRC寄存器。這時(shí)再講CRC寄存器向右邊移動(dòng)一位,最高位補(bǔ)一個(gè)0,移出最低位并且進(jìn)行檢查。如果最低位是0,在繼續(xù)讓CRC寄存器向右移動(dòng),重復(fù)進(jìn)行最高位補(bǔ)0,依次移動(dòng),并且檢查移出的最低位,如果最低位是1,那么將CRC寄存器與多項(xiàng)式碼進(jìn)行異或操作。重復(fù)進(jìn)行上述步驟,直到8次移位操作全部進(jìn)行完畢,這樣就完成了一個(gè)8-bit的數(shù)據(jù)操作,如果數(shù)據(jù)過(guò)多,則再次進(jìn)行上述操作,直到全部數(shù)據(jù)異或完畢,則CRC寄存器內(nèi)的值就是生成的校驗(yàn)值。3.7本地?cái)?shù)據(jù)庫(kù)存儲(chǔ)技術(shù)本文使用SQLite數(shù)據(jù)庫(kù)技術(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)。SQLite是一款輕型的數(shù)據(jù)庫(kù),遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),該數(shù)據(jù)庫(kù)是嵌入式的,可以在許多嵌入式產(chǎn)品中使用,具有占用資源小的特點(diǎn),支持Windows/Linux/Unix等操作系統(tǒng),而且還能和多種程序語(yǔ)言結(jié)合,處理速度非常快。SQlite是一個(gè)進(jìn)程內(nèi)的庫(kù),它能夠自給自足,不需要其他服務(wù)器,無(wú)需配置的數(shù)據(jù)庫(kù)引擎。不需要任何配置意味著無(wú)需安裝或者管理,就能夠運(yùn)行,非常適合嵌入式的開(kāi)發(fā)。SQlite數(shù)據(jù)庫(kù)是存儲(chǔ)在本地的磁盤(pán)文件,意味著移植與跨平臺(tái)非常方便。該數(shù)據(jù)庫(kù)非常小巧,是輕量級(jí)的,完全配置時(shí)小于400kb,而且不需要任何的外部依賴(lài)。SQlite完全兼容ACID,允許從多個(gè)進(jìn)程或線程安全訪問(wèn)。3.8VisualStudio和VisualGDB平臺(tái) 在開(kāi)發(fā)arm處理器程序時(shí),通常的方式大都是在Linux操作系統(tǒng)下進(jìn)行,但是樹(shù)莓派作為個(gè)人微型電腦,可以允許在多個(gè)平臺(tái)開(kāi)發(fā)應(yīng)用程序,支持目前已知的多種編程語(yǔ)言。因此,為了本設(shè)計(jì)的代碼能夠跨平臺(tái),故采用PC平臺(tái)進(jìn)行開(kāi)發(fā),編程語(yǔ)言采用C++語(yǔ)言。 Visualstudio是美國(guó)Microsoft公司開(kāi)發(fā)的編程工具集合。功能非常強(qiáng)大,它集成了一個(gè)軟件在開(kāi)發(fā)過(guò)程中所用到的大部分工具,包括代碼管理工具,集成開(kāi)發(fā)環(huán)境,編譯運(yùn)行調(diào)試工具。其所開(kāi)發(fā)的代碼可以在所有微軟的操作系統(tǒng)平臺(tái)上運(yùn)行。最新版本是基于.NETFramework4.5.2。 Visualstudio給了程序開(kāi)發(fā)人員很多的便利之處,能夠讓其快速的進(jìn)行應(yīng)用程序開(kāi)發(fā),其還能夠讓個(gè)人程序與團(tuán)隊(duì)程序進(jìn)行共享,保證團(tuán)隊(duì)開(kāi)發(fā)的整個(gè)系統(tǒng)能夠保持同步更新,其軟件編程環(huán)境也取得了巨大的突破,具有良好的用戶體驗(yàn),編程人員不在拘束于編程過(guò)程中出現(xiàn)的一些令人惱怒的小麻煩,讓編程人員專(zhuān)注于代碼的編寫(xiě)。 Visualstudio具有功能異常強(qiáng)大的程序調(diào)試功能,能夠精確定位程序代碼所出現(xiàn)的問(wèn)題。 如上所述,只有visualstudio無(wú)法開(kāi)發(fā)其他操作系統(tǒng)下的程序,因此還需要插件的支持。在這里我們使用visualGDB插件進(jìn)行程序的開(kāi)發(fā)。VisualGDB插件允許我們?cè)赪indows操作系統(tǒng)下使用編程工具開(kāi)發(fā)Linux程序。VisualGDB的原理是,通過(guò)ssh連接Linux主機(jī),利用ssh下達(dá)Linux命令和程序文件。VisualGDB的配置菜單如圖3.4所示。圖3.6visualGDB配置界面 在visualGDB界面內(nèi)我們可以選擇創(chuàng)建Qt程序,插件會(huì)自動(dòng)通過(guò)ssh連接我們的Linux操作系統(tǒng)主機(jī)樹(shù)莓派開(kāi)發(fā)板。如果我們沒(méi)有在樹(shù)莓派上安裝Qt的類(lèi)庫(kù),插件會(huì)自動(dòng)幫助我們安裝相關(guān)插件。然后就可以像在PC上開(kāi)發(fā)程序一樣開(kāi)發(fā)Linux程序。3.9本章小結(jié)本章主要介紹了水質(zhì)監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng)所使用的主要技術(shù)和開(kāi)發(fā)框架。4系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 系統(tǒng)整體采用C/S(客戶端/服務(wù)器)模式,客戶端分為水質(zhì)數(shù)據(jù)監(jiān)測(cè)端和手機(jī)協(xié)助端,服務(wù)器端在本地計(jì)算機(jī)硬件上。 在前面的功能需求分析中已經(jīng)詳細(xì)的介紹了系統(tǒng)的各個(gè)功能模塊。系統(tǒng)主要包括水質(zhì)監(jiān)測(cè)數(shù)據(jù)的模擬產(chǎn)生、水質(zhì)監(jiān)測(cè)數(shù)據(jù)的無(wú)線傳輸、水質(zhì)監(jiān)測(cè)數(shù)據(jù)的顯示以及水質(zhì)監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ),同時(shí)有手機(jī)端的應(yīng)用程序制作。這里我們具體劃分,將系統(tǒng)整個(gè)分為三部分進(jìn)行說(shuō)明:樹(shù)莓派端、PC端、手機(jī)端。 整個(gè)程序框架如圖4.1所示。圖4.1系統(tǒng)整體框架4.1樹(shù)莓派端模塊設(shè)計(jì) 樹(shù)莓派端主要負(fù)責(zé)水質(zhì)數(shù)據(jù)的產(chǎn)生和水質(zhì)數(shù)據(jù)的發(fā)送。是整個(gè)系統(tǒng)最底層的部分。4.1.1水質(zhì)監(jiān)測(cè)數(shù)據(jù)的模擬產(chǎn)生模塊該模塊將模擬真實(shí)環(huán)境下水中各項(xiàng)重要數(shù)據(jù),包括ph值,溶解氧,鹽度,溫度等相關(guān)數(shù)值。這些數(shù)值極大的反映了水質(zhì)狀況的好壞,影響到水質(zhì)變化的主要因素。在實(shí)際的生產(chǎn)應(yīng)用中,水質(zhì)監(jiān)測(cè)的范圍非常大,水中存在的物質(zhì)也非常多,由于本設(shè)計(jì)采用模擬的方式不變產(chǎn)生所有的水質(zhì)數(shù)據(jù),因此這里選取了四個(gè)比較有代表性的數(shù)據(jù)來(lái)反應(yīng)水質(zhì)狀況,實(shí)際還會(huì)加入更多的監(jiān)測(cè)類(lèi)別,這里取決于傳感器的種類(lèi)和數(shù)量。4.1.2水質(zhì)監(jiān)測(cè)數(shù)據(jù)的無(wú)線傳輸模塊 該模塊負(fù)責(zé)客戶端與服務(wù)器端之間的無(wú)線連接與數(shù)據(jù)加密傳輸,將來(lái)自客戶端的數(shù)據(jù)進(jìn)行加密然后通過(guò)無(wú)線的方式發(fā)送到服務(wù)器端。主要采用無(wú)線網(wǎng)絡(luò)傳輸?shù)姆绞竭M(jìn)行數(shù)據(jù)交互。 數(shù)據(jù)傳輸在本設(shè)計(jì)中占有非常大的比重,保證數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性是非常重要的任務(wù),因此需要選擇合適的數(shù)據(jù)傳輸方式,并且還要有很好的數(shù)據(jù)加密方式。4.2PC端模塊設(shè)計(jì) PC端主要負(fù)責(zé)數(shù)據(jù)的接收和轉(zhuǎn)發(fā)、顯示、存儲(chǔ),以及信息共享。4.2.1水質(zhì)監(jiān)測(cè)數(shù)據(jù)的接收模塊 接收模塊主要負(fù)責(zé)連接樹(shù)莓派客戶端和手機(jī)客戶端,并分析它們發(fā)送過(guò)來(lái)的數(shù)據(jù),解析發(fā)送過(guò)來(lái)的不同信息與他們進(jìn)行互動(dòng)。4.2.2水質(zhì)監(jiān)測(cè)數(shù)據(jù)的顯示模塊 該模塊負(fù)責(zé)將傳輸過(guò)來(lái)的數(shù)據(jù)進(jìn)行顯示,并且將變化的數(shù)據(jù)以圖表的方式不斷的顯示在屏幕上,從而非常方便的看到水質(zhì)數(shù)據(jù)的實(shí)時(shí)變化。該模塊是我們?nèi)藱C(jī)交互的重要界面,用來(lái)實(shí)時(shí)反映水質(zhì)數(shù)據(jù)的具體辯護(hù),將簡(jiǎn)單的數(shù)字序列轉(zhuǎn)化為易懂的圖表,更加直觀。 因此我們需要選取合適的圖表樣式,針對(duì)不斷變化的數(shù)據(jù),折線圖將是一個(gè)非常好的選擇。由于這些數(shù)據(jù)是實(shí)時(shí)變化的,因此圖表也應(yīng)該能夠適應(yīng)這種變化。4.2.3水質(zhì)監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)模塊 該模塊將服務(wù)器端接收到的水質(zhì)監(jiān)測(cè)數(shù)據(jù)進(jìn)行存儲(chǔ),直接將數(shù)據(jù)存儲(chǔ)為數(shù)據(jù)庫(kù)文件,便于后面拿去分析其中存儲(chǔ)的數(shù)據(jù)。 將水質(zhì)數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中是非常高效的數(shù)據(jù)存儲(chǔ)方式,便于數(shù)據(jù)在各個(gè)設(shè)備上進(jìn)行交互。有了數(shù)據(jù)存儲(chǔ)模塊將使得該系統(tǒng)更加完善,這做到了數(shù)據(jù)的采集顯示存儲(chǔ)等一系列功能,完全保證了數(shù)據(jù)的安全性、可讀性和可追溯性。4.3手機(jī)端模塊設(shè)計(jì) 該模塊具有輔助整個(gè)系統(tǒng)的作用,在監(jiān)測(cè)人員不方便時(shí)可以臨時(shí)與服務(wù)器進(jìn)行交互,達(dá)到隨時(shí)隨地與服務(wù)器進(jìn)行通信,保證整個(gè)系統(tǒng)永遠(yuǎn)處于監(jiān)控之中。 手機(jī)端應(yīng)用程序的設(shè)計(jì)為該系統(tǒng)錦上添花,手機(jī)目前是我們非常重要的信息交互工具,將數(shù)據(jù)發(fā)送到手機(jī)上更加使得這個(gè)系統(tǒng)方便。 想象一下,只要用手機(jī)就能登錄系統(tǒng),隨時(shí)隨地就能夠查看遠(yuǎn)在天邊的水質(zhì)數(shù)據(jù),第一時(shí)間獲得資源,將會(huì)是一件非常棒的事情。因此有必要去實(shí)現(xiàn)這個(gè)功能。4.4各模塊的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)4.4.1樹(shù)莓派端程序設(shè)計(jì)樹(shù)莓派在此處用作客戶端用于監(jiān)測(cè)水質(zhì)數(shù)據(jù)。該客戶端主要負(fù)責(zé)數(shù)據(jù)的產(chǎn)生和傳輸,其界面如圖4.2所示。圖4.2樹(shù)莓派UI界面 從圖中可以看出,左端顯示了實(shí)時(shí)的水質(zhì)數(shù)據(jù)信息,可以方便與服務(wù)器端進(jìn)行對(duì)比,右邊是設(shè)計(jì)的傳輸測(cè)試模塊,在這里可以輸入需要傳輸?shù)臏囟戎担琍h值,鹽度值,溶解氧值,然后點(diǎn)擊發(fā)送就可以將數(shù)據(jù)發(fā)送到服務(wù)器端,服務(wù)器端接收到數(shù)據(jù)后會(huì)將其顯示出來(lái),以此便可以很方便的測(cè)試數(shù)據(jù)傳輸是否正確,監(jiān)測(cè)整個(gè)系統(tǒng)是否工作正常。首先程序運(yùn)行時(shí)先創(chuàng)建整個(gè)初始化界面,然后建立TCP連接,根據(jù)已知的服務(wù)器地址,請(qǐng)求服務(wù)器進(jìn)行必要的應(yīng)答,一旦得到服務(wù)器的應(yīng)答便會(huì)建立連接,并等待數(shù)據(jù)的傳送。重點(diǎn)介紹數(shù)據(jù)產(chǎn)生部分,這里采用模擬的方式。假定水質(zhì)監(jiān)測(cè)的傳感器每隔1s監(jiān)測(cè)一次水質(zhì)。因此程序中設(shè)定了一個(gè)一秒的定時(shí)器,每當(dāng)定時(shí)器時(shí)間到時(shí)便會(huì)根據(jù)算法產(chǎn)生水質(zhì)數(shù)據(jù)。水質(zhì)數(shù)據(jù)的產(chǎn)生算法如下: qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); inttempH=60,tempL=-20; intphH=14,phL=0; intsoltH=70,soltL=20; into2H=10,o2L=0; inttempture=tempL+qrand()%(tempH-tempL); intph=phL+qrand()%(phH-phL); intsolt=soltL+qrand()%(soltH-soltL); into2=o2L+qrand()%(o2H-o2L); 可以看出數(shù)據(jù)是根據(jù)當(dāng)前時(shí)間隨機(jī)數(shù)產(chǎn)生的, 這種計(jì)算方法能夠保證產(chǎn)生的數(shù)據(jù)即是隨機(jī)的,同時(shí)又有一定可信度,具有一定的真實(shí)性。 緊接著將產(chǎn)生的四項(xiàng)數(shù)據(jù)通過(guò)TCP方式發(fā)送到遠(yuǎn)端的服務(wù)器中: QByteArrayblock; QDataStreamout(&block,QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_5_3); out<<(quint16)0; out<<QString("Raspberry,%1,%2,%3,%4").arg(tempture).arg(ph).arg(solt).arg(o2); out.device()->seek(0); out<<(quint16)(block.size()-sizeof(quint16)); tcpClient->write(block); 這里規(guī)定了通信的協(xié)議,以“Raspberry”開(kāi)頭代表連接的是水質(zhì)監(jiān)測(cè)的客戶端,服務(wù)器會(huì)根據(jù)這個(gè)標(biāo)志進(jìn)行相應(yīng)的動(dòng)作。4.4.2PC端程序設(shè)計(jì)整個(gè)程序以QWidget為主窗口,上端左邊顯示應(yīng)用程序的名稱(chēng)和版本號(hào),右邊有一些應(yīng)用程序常用的功能按鈕。中間層采用三個(gè)按鈕用來(lái)分別顯示三個(gè)功能界面。分別是監(jiān)測(cè)地圖界面,此界面在程序剛打開(kāi)時(shí)顯示,數(shù)據(jù)顯示界面則會(huì)顯示采集到的數(shù)據(jù),存儲(chǔ)分析界面則會(huì)進(jìn)行一些簡(jiǎn)單的數(shù)據(jù)分析。整個(gè)界面主體上分成兩部分,上部分主要用來(lái)包含應(yīng)用程序名稱(chēng)和一些快捷和設(shè)置圖標(biāo)。下部分主要用來(lái)顯示具體的水質(zhì)監(jiān)測(cè)信息。監(jiān)測(cè)地圖界面如圖4.3所示。在此界面下,可以顯示和選擇連接進(jìn)來(lái)的客戶端地址,如圖顯示的是06IP地址的客戶端,下方則顯示了此客戶端采集到的數(shù)據(jù)。最下面顯示了整個(gè)系統(tǒng)采集的地圖。圖4.3服務(wù)器監(jiān)測(cè)地圖界面 數(shù)據(jù)采集界面如圖4.4所示。在此界面下顯示了采集到的數(shù)據(jù)的圖表轉(zhuǎn)換,可以很方便的查看數(shù)據(jù)的變化情況,非常直觀和形象。圖4.4服務(wù)器數(shù)據(jù)顯示界面 存儲(chǔ)分析界面如圖4.5所示,在此界面下顯示了從數(shù)據(jù)庫(kù)獲取到的已經(jīng)采集的水質(zhì)數(shù)據(jù),并且可以對(duì)數(shù)據(jù)做進(jìn)一步的分析和研究工作。圖4.5服務(wù)器存儲(chǔ)分析界面 查找方式如圖4.6所示,非常快捷和準(zhǔn)確。圖4.6查找方式 服務(wù)器端程序運(yùn)行時(shí),在創(chuàng)建界面后開(kāi)始在本地計(jì)算機(jī)上建立tcp/ip連接,不斷的偵聽(tīng)來(lái)自所有IP地址6666端口的連接,一旦有連接進(jìn)入,服務(wù)器端便會(huì)創(chuàng)建一個(gè)socket,并將這個(gè)socket放在一個(gè)列表中,將數(shù)據(jù)存儲(chǔ)起來(lái),對(duì)其他模塊可以使用。運(yùn)行代碼如下圖所示:clientConnection=NULL;socketList=newQList<QTcpSocket*>;serverIP=QString("05");serverPort=QString("6666");if(serverPort.isEmpty()){QMessageBox::warning(this,tr("Warnning"),tr("端口號(hào)不能為空"));}tcpServer=newQTcpServer(this);if(!tcpServer->listen(QHostAddress::Any,serverPort.toInt())){QMessageBox::warning(this,tr("Warnning"),tcpServer->errorString());}connect(tcpServer,SIGNAL(newConnection()),this,SLOT(updateStatus()));connect(tcpServer,SIGNAL(newConnection()),this,SLOT(screateServerSocket()));//有新的連接到來(lái),則開(kāi)始創(chuàng)建套接字}可以看出程序一直在偵聽(tīng)連接進(jìn)來(lái)的客戶端。4.2.4服務(wù)器端數(shù)據(jù)顯示 服務(wù)器端首先從socket列表中尋找開(kāi)頭是“Raspberry”的socket,然后讀取該socket的所有信息,包括其IP地址,各項(xiàng)水質(zhì)監(jiān)測(cè)數(shù)據(jù)。并將數(shù)據(jù)顯示在界面的QLabel中,同時(shí)數(shù)據(jù)還會(huì)發(fā)送給在程序開(kāi)始運(yùn)行創(chuàng)建的四個(gè)圖表,四個(gè)圖表則負(fù)責(zé)將數(shù)據(jù)以圖形化的方式顯示出來(lái)。 這里利用了Qt自帶的QPaint類(lèi),并在此基礎(chǔ)上進(jìn)行繼承創(chuàng)作新的類(lèi),實(shí)現(xiàn)一個(gè)將數(shù)據(jù)轉(zhuǎn)化為圖像的功能,并且不斷的將接收到的數(shù)據(jù)繪制出來(lái)。 這一部分程序描繪了圖表程序的創(chuàng)建過(guò)程:voidWidget::setupCustomPlot(QCustomPlot*customPlot){customPlot->legend->setVisible(true);customPlot->legend->setFont(QFont("Helvetica",9));customPlot->addGraph();//bluelinecustomPlot->graph(0)->setPen(QPen(Qt::blue));customPlot->graph(0)->setBrush(QBrush(QColor(0,0,255,20)));QSharedPointer<QCPAxisTickerTime>timeTicker(newQCPAxisTickerTime);timeTicker->setTimeFormat("%h:%m:%s");customPlot->xAxis->setTicker(timeTicker);customPlot->axisRect()->setupFullAxesBox();customPlot->xAxis->setLabel("時(shí)間");customPlot->xAxis2->setVisible(true);customPlot->xAxis2->setTickLabels(false);customPlot->yAxis2->setVisible(true);customPlot->yAxis2->setTickLabels(false);customPlot->graph(0)->rescaleAxes();connect(customPlot->xAxis,SIGNAL(rangeChanged(QCPRange)),customPlot->xAxis2,SLOT(setRange(QCPRange)));connect(customPlot->yAxis,SIGNAL(rangeChanged(QCPRange)),customPlot->yAxis2,SLOT(setRange(QCPRange)));customPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom|QCP::iSelectPlottables);} 從該函數(shù)中可以看出程序設(shè)置了字體的大小和格式,設(shè)置了畫(huà)筆和畫(huà)刷的顏色,定義了X軸為時(shí)間,并以時(shí)分秒的形式顯示,并且隱藏了圖表的Y軸,設(shè)置X軸隨著時(shí)間進(jìn)行更新和移位。if(key-lastPointKey>0.002)//atmostaddpointevery2ms{myTempCustomPlot->graph(0)->addData(key,strlist.at(i).toInt(&ok,10));}myTempCustomPlot->xAxis->setRange(key,8,Qt::AlignRight);myTempCustomPlot->replot();} 這里進(jìn)行了數(shù)據(jù)的繪圖操作,利用addData函數(shù),將從樹(shù)莓派獲取的數(shù)據(jù)繪制在圖標(biāo)上。 首先在程序創(chuàng)建之初,便已經(jīng)建立了名為waterdata的數(shù)據(jù)庫(kù),當(dāng)程序接收到水質(zhì)監(jiān)測(cè)數(shù)據(jù)時(shí),程序便會(huì)將接收到的實(shí)時(shí)水質(zhì)監(jiān)測(cè)數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在本地文件中。用特別的程序打開(kāi)數(shù)據(jù)庫(kù)文件可看到存儲(chǔ)的數(shù)據(jù)如圖4.3所示。圖4.7數(shù)據(jù)庫(kù)文件 Qt自帶有一個(gè)與數(shù)據(jù)庫(kù)系統(tǒng)操作語(yǔ)言相互轉(zhuǎn)換的方法類(lèi),使得整個(gè)數(shù)據(jù)的存儲(chǔ)變得非常方便,方法如下代碼所示:QSqlErrorWidget::createDB(){QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("waterdata.db");if(!db.open())returndb.lastError();QStringListtables=db.tables();if(tables.contains("water",Qt::CaseInsensitive))returnQSqlError();QSqlQuerymySqlQuery;if(!mySqlQuery.exec(QLatin1String("createtablewater(idintegerprimarykey,tempinteger,phinteger,soltinteger,o2integer)")))returnmySqlQuery.lastError();returnQSqlError();} 數(shù)據(jù)庫(kù)創(chuàng)建完成后就會(huì)在數(shù)據(jù)接收到的同時(shí)將其存儲(chǔ)起來(lái)。 addWaterData(strlist.at(0).toInt(&ok,10),strlist.at(1).toInt(&ok,10),strlist.at(2).toInt(&ok,10),strlist.at(3).toInt(&ok,10)); 該函數(shù)將socket中的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)中,函數(shù)原型如下所示:QSqlErrorWidget::addWaterData(inttemp,intph,intsolt,into2){QSqlQueryq;if(!q.prepare(QLatin1String("insertintowater(temp,ph,solt,o2)values(?,?,?,?)")))returnq.lastError();q.addBindValue(temp);q.addBindValue(ph);q.addBindValue(solt);q.addBindValue(o2);q.exec();returnQSqlError();}4.2.3手機(jī)端應(yīng)用程序?qū)崿F(xiàn) 手機(jī)端同樣采用Qt進(jìn)行編程,充分利用了Qt的跨平臺(tái)特性,手機(jī)端在這里作為輔助程序,輔助服務(wù)器進(jìn)行數(shù)據(jù)的觀察,它比服務(wù)器端更加便攜,但仍然依賴(lài)于服務(wù)器端,當(dāng)手機(jī)端與服務(wù)器端連接建立時(shí),手機(jī)端會(huì)向服務(wù)器端請(qǐng)求水質(zhì)監(jiān)測(cè)數(shù)據(jù),服務(wù)器端在接到以“Phone”開(kāi)頭的socket時(shí),便將接收到的水質(zhì)監(jiān)測(cè)數(shù)據(jù)發(fā)送給手機(jī)端,手機(jī)端在接收到服務(wù)器端發(fā)送會(huì)的數(shù)據(jù)后進(jìn)行顯示,顯示界面如圖4.4所示。圖4.8手機(jī)程序UI界面 由于Qt的可移植性和代碼重用性非常高,因此手機(jī)端的程序借鑒了PC端的程序,并且在界面上做了一些大的調(diào)整,以適應(yīng)手機(jī)界面。tempValue=newQLabel(this);phValue=newQLabel(this);soltValue=newQLabel(this);o2Value=newQLabel(this); 程序首先創(chuàng)建了四個(gè)QLabel用來(lái)存儲(chǔ)和顯示服務(wù)器發(fā)送過(guò)來(lái)的數(shù)據(jù),然后再講數(shù)據(jù)用圖表顯示出來(lái),如上圖所示。這里圖表做了一些改動(dòng),X軸只會(huì)顯示分和秒,并且接收到的數(shù)據(jù)只是手機(jī)此時(shí)請(qǐng)求的數(shù)據(jù),并不是實(shí)時(shí)的,這里與實(shí)時(shí)的數(shù)據(jù)存在一定的時(shí)間偏差,這也是由于手機(jī)端的請(qǐng)求有延時(shí)造成的,無(wú)法做到真正的時(shí)間同步。4.5本章小結(jié) 本章主要討論了水質(zhì)監(jiān)測(cè)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。首先在整體上大致講解了整個(gè)系統(tǒng)的功能模塊設(shè)計(jì);然后下面又以較大的篇幅具體講解了各功能模塊的具體實(shí)現(xiàn)思路和方法。5總結(jié)與展望在設(shè)計(jì)后期完成時(shí),本文對(duì)各模塊的協(xié)同做了多次的模擬實(shí)驗(yàn),首先是在數(shù)據(jù)生成端,在樹(shù)莓派模塊上,我們用特定的數(shù)據(jù)進(jìn)行發(fā)送,同時(shí)觀察PC端和手機(jī)端數(shù)據(jù)接收情況。在數(shù)次實(shí)驗(yàn)后,發(fā)現(xiàn)數(shù)據(jù)接收并沒(méi)有出現(xiàn)異常,證明了各個(gè)模塊的正常工作。同時(shí)我們對(duì)整個(gè)設(shè)計(jì)進(jìn)行了長(zhǎng)時(shí)間穩(wěn)定工作的測(cè)試,首先讓整個(gè)系統(tǒng)持續(xù)工作數(shù)天,同時(shí)觀察數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)情況,發(fā)現(xiàn)數(shù)據(jù)量持續(xù)增加,數(shù)據(jù)庫(kù)文件持續(xù)增大,但是仍然在可接受范圍之內(nèi)。這證明了設(shè)計(jì)的穩(wěn)定性達(dá)到了我們的要求,可以用于正式的使用。5.1樹(shù)莓派端軟件測(cè)試總結(jié) 樹(shù)莓派端程序測(cè)試我們分成了兩種情況進(jìn)行測(cè)試。一種情況是軟件工作正常,能夠與服務(wù)器建立連接,觀察程序的穩(wěn)定性和準(zhǔn)確率。在這種情況下,樹(shù)莓派的數(shù)據(jù)產(chǎn)生并未出現(xiàn)任何差錯(cuò),生成數(shù)據(jù)與發(fā)送數(shù)據(jù)保持一致。 另一種情況是我們關(guān)閉PC端服務(wù)器端軟件,觀察樹(shù)莓派端程序運(yùn)行情況,發(fā)現(xiàn)程序會(huì)提示無(wú)法找到服務(wù)器并拒絕發(fā)送數(shù)據(jù),這與設(shè)計(jì)之初的目的相符,一方面這種做法有利于提示服務(wù)器發(fā)生了錯(cuò)誤,便于排查,另一方面也使客戶端不至于空發(fā)數(shù)據(jù)造成資源的浪費(fèi)。5.2PC端軟件測(cè)試總結(jié) PC端是整個(gè)程序的橋梁,具有承上啟下的作用,在整個(gè)系統(tǒng)中都具有很大的作用。因此測(cè)試過(guò)程更加的詳細(xì),以保證系統(tǒng)能夠穩(wěn)定的運(yùn)行。 我們首先測(cè)試了數(shù)據(jù)的接收情況,再由樹(shù)莓派發(fā)送了10000組數(shù)據(jù)后,將原數(shù)據(jù)與接收到的數(shù)據(jù)進(jìn)行比對(duì)后發(fā)現(xiàn),未存在誤差,基本證明了在有限的時(shí)間內(nèi)系統(tǒng)還是能夠穩(wěn)定的運(yùn)行,不會(huì)出現(xiàn)數(shù)據(jù)傳輸與接收錯(cuò)誤。 緊接著我們進(jìn)行了數(shù)據(jù)顯示的測(cè)試,這個(gè)測(cè)試起來(lái)比較困難,因?yàn)閿?shù)據(jù)一直在變化,因此我們測(cè)試了數(shù)據(jù)在較低的發(fā)送頻率下的數(shù)據(jù)顯示情況,在肉眼可辨別的情況下,數(shù)據(jù)顯示基本正常。 最后我們進(jìn)行了數(shù)據(jù)存儲(chǔ)的測(cè)試,將存儲(chǔ)起來(lái)的數(shù)據(jù)文件與樹(shù)莓派數(shù)據(jù)進(jìn)行比較后發(fā)現(xiàn),數(shù)據(jù)基本保持一致,未出現(xiàn)任何誤差,基本斷定,數(shù)據(jù)存儲(chǔ)沒(méi)有任何問(wèn)題。5.3手機(jī)端軟件測(cè)試總結(jié) 對(duì)手機(jī)端的測(cè)試和PC端的測(cè)試基本相同,同樣進(jìn)行了數(shù)次的接收和顯示的測(cè)試,測(cè)試結(jié)果和預(yù)期效果基本一致,這說(shuō)明軟件程序沒(méi)有bug,在硬件能夠正常工作的情況下,軟件還是能夠以較穩(wěn)定的方式運(yùn)行下去。整個(gè)系統(tǒng)的設(shè)計(jì)過(guò)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論