




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2013第九屆“博創(chuàng)杯”全國(guó)大學(xué)生嵌入式設(shè)計(jì)大賽作品設(shè)計(jì)報(bào)告基于zigbee協(xié)議的無(wú)線(xiàn)測(cè)溫系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)DesignandimplementationofwirelesstemperaturemeasuringsystembasedonZigBeeprotocol設(shè)計(jì)報(bào)告參賽編號(hào):參賽學(xué)校:作者:指導(dǎo)教師:是否恩智浦單項(xiàng):是否√
目錄摘要 圖4-1ZigBee協(xié)議棧結(jié)構(gòu)圖所示。圖4-1ZigBee協(xié)議棧結(jié)構(gòu)圖1.物理層物理層由半雙工的無(wú)線(xiàn)收發(fā)器及其接口組成,主要作用是激活和關(guān)閉射頻收發(fā)器;檢測(cè)信道的能量;顯示收到數(shù)據(jù)包的鏈路質(zhì)量;空閑信道評(píng)估;選擇信道頻率;數(shù)據(jù)的接受和發(fā)送。2.媒體訪(fǎng)問(wèn)控制層媒體訪(fǎng)問(wèn)控制(MAC)層建立了一條節(jié)點(diǎn)和與其相鄰的節(jié)點(diǎn)之間可靠的數(shù)據(jù)傳輸鏈路,共享傳輸媒體,提高通信效率。在協(xié)調(diào)器的MAC層,可以產(chǎn)生網(wǎng)絡(luò)信標(biāo),同步網(wǎng)絡(luò)信標(biāo);支持ZigBee設(shè)備的關(guān)聯(lián)和取消關(guān)聯(lián);支持設(shè)備加密;在信道訪(fǎng)問(wèn)方面,采用CSMA/CA信道退避算法,減少了碰撞概率;確保時(shí)隙分配(GTS);支持信標(biāo)使能和非信標(biāo)使能兩種數(shù)據(jù)傳輸模式,為兩個(gè)對(duì)等的MAC實(shí)體提供可靠連接。3.網(wǎng)絡(luò)層基于底層的可靠通信,提供路由、路由發(fā)現(xiàn)、多跳、轉(zhuǎn)發(fā)的功能。ZigBee網(wǎng)絡(luò)可以組成星型、簇樹(shù)型或MESH型網(wǎng)絡(luò)。對(duì)于終端節(jié)點(diǎn)而言,網(wǎng)絡(luò)層的功能只是加入和離開(kāi)網(wǎng)絡(luò);對(duì)于路由器而言,網(wǎng)絡(luò)層的功能是信息的轉(zhuǎn)發(fā),路由發(fā)現(xiàn),建立和維護(hù)路由表和鄰居表,以及構(gòu)造到某節(jié)點(diǎn)的路由任務(wù);而協(xié)調(diào)器網(wǎng)絡(luò)層的任務(wù)主要包括啟動(dòng)和維護(hù)網(wǎng)絡(luò)正常工作,為新加入的節(jié)點(diǎn)分配網(wǎng)絡(luò)地址。4.應(yīng)用層應(yīng)用層包括三部分:應(yīng)用支持子層(APS)、ZigBee設(shè)備對(duì)象(ZDO)和應(yīng)用框架(AF)。應(yīng)用支持子層的任務(wù)是提取網(wǎng)絡(luò)層的信息并將信息發(fā)送到運(yùn)行在節(jié)點(diǎn)上的不同應(yīng)用端點(diǎn)。應(yīng)用支持子層維護(hù)了一個(gè)綁定表,可以定義、增加或移除組信息;完成64位長(zhǎng)地址(IEEE地址)與16位短地址(網(wǎng)絡(luò)地址)一對(duì)一映射;實(shí)現(xiàn)傳輸數(shù)據(jù)的分割與重組;應(yīng)用支持子層連接網(wǎng)絡(luò)層和應(yīng)用層,是它們之間的接口。這個(gè)接口由兩個(gè)服務(wù)實(shí)體提供:APS數(shù)據(jù)實(shí)體(APSDE)和APS管理實(shí)體(APSME)。APS數(shù)據(jù)實(shí)體為網(wǎng)絡(luò)中的節(jié)點(diǎn)提供數(shù)據(jù)傳輸服務(wù),它會(huì)拆分和重組大于最大荷載量的數(shù)據(jù)包。APS管理實(shí)體提供安全服務(wù),節(jié)點(diǎn)綁定,建立和移除組地址,負(fù)責(zé)64位IEEE地址與16位網(wǎng)絡(luò)地址的地址映射[4]。ZigBee設(shè)備對(duì)象負(fù)責(zé)設(shè)備的所有管理工作,包括設(shè)定該設(shè)備在網(wǎng)絡(luò)中的角色(協(xié)調(diào)器、路由器或終端設(shè)備),發(fā)現(xiàn)網(wǎng)絡(luò)中的設(shè)備,確定這些設(shè)備能提供的功能,發(fā)起或響應(yīng)綁定請(qǐng)求,完成設(shè)備之間建立安全的關(guān)聯(lián)等。用戶(hù)在開(kāi)發(fā)ZigBee產(chǎn)品時(shí),需要在ZigBee協(xié)議棧的AF上附加應(yīng)用端點(diǎn),調(diào)用ZDO功能以發(fā)現(xiàn)網(wǎng)絡(luò)上的其他設(shè)備和服務(wù),管理綁定、安全和其他網(wǎng)絡(luò)設(shè)置。ZDO是一個(gè)特殊的應(yīng)用對(duì)象,它駐留在每一個(gè)ZigBee節(jié)點(diǎn)上,其端點(diǎn)編號(hào)固定為0。AF應(yīng)用框架是應(yīng)用層與APS層的接口。它負(fù)責(zé)發(fā)送和接收數(shù)據(jù),并為接收到的數(shù)據(jù)尋找相應(yīng)的目的端點(diǎn)。Zigbee網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)Zigbee的拓?fù)浣Y(jié)構(gòu)42所示,可以分為以下三種:星型、簇樹(shù)型和MESH型。星型拓?fù)渚W(wǎng)絡(luò)結(jié)構(gòu)網(wǎng)絡(luò)由協(xié)調(diào)器組建和維護(hù),其他的設(shè)備都是終端設(shè)備,都直接與協(xié)調(diào)器一對(duì)一通信。在簇樹(shù)型和MESH型拓?fù)渚W(wǎng)路結(jié)構(gòu)中,協(xié)調(diào)器負(fù)責(zé)組建網(wǎng)絡(luò)并決定一些關(guān)鍵的網(wǎng)絡(luò)參數(shù),如網(wǎng)絡(luò)ID,網(wǎng)絡(luò)使用的信道等。網(wǎng)絡(luò)中主要通過(guò)路由器來(lái)拓展網(wǎng)絡(luò)覆蓋范圍。樹(shù)型網(wǎng)絡(luò)中,路由器發(fā)送數(shù)據(jù)是通過(guò)層次的路由方法。樹(shù)型網(wǎng)絡(luò)可以使用網(wǎng)絡(luò)信標(biāo)通信,路由器和終端節(jié)點(diǎn)以跟蹤信標(biāo)的方式與協(xié)調(diào)器通信;也可以使用非信標(biāo)方式通信,終端節(jié)點(diǎn)定時(shí)輪詢(xún)路由器或協(xié)調(diào)器來(lái)提取自己的信息。MESH型網(wǎng)絡(luò)可以進(jìn)行點(diǎn)對(duì)點(diǎn)對(duì)等交流,但是不能使用信標(biāo)。Zigbee設(shè)備都有一個(gè)64位的IEEE地址,IEEE地址是唯一的絕對(duì)地址,設(shè)備可以用這個(gè)地址在PAN中進(jìn)行通信,但在設(shè)備加入網(wǎng)絡(luò)后,協(xié)調(diào)器后會(huì)為它分配一個(gè)16位的網(wǎng)絡(luò)地址,網(wǎng)絡(luò)地址只在該網(wǎng)絡(luò)內(nèi)是唯一的,是相對(duì)地址,設(shè)備也可以用這個(gè)網(wǎng)絡(luò)地址在PAN內(nèi)進(jìn)行通信。從物理功能上分,設(shè)備的類(lèi)型可以分為2種。一種是具有全功能設(shè)備(FullFunctionDevice,F(xiàn)FD),另一種是精簡(jiǎn)功能設(shè)備(ReducedFunctionDevice,RFD)。在PAN(PersonalAreaNetwork)中,全功能設(shè)備可以作為PAN的協(xié)調(diào)器,路由器或作為一個(gè)終端設(shè)備。一個(gè)全功能設(shè)備可以同時(shí)和多個(gè)精簡(jiǎn)功能設(shè)備或全功能設(shè)備通信;對(duì)于一個(gè)精簡(jiǎn)功能設(shè)備來(lái)說(shuō),它只能和一個(gè)全功能進(jìn)行通信[5]。圖4-2星型和簇樹(shù)型網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)ITZ-Stack協(xié)議棧介紹TI公司的協(xié)議棧Z-Stack符合ZigBee2006規(guī)范,功能強(qiáng)大,協(xié)議棧底層已實(shí)現(xiàn),對(duì)于簡(jiǎn)單的應(yīng)用,開(kāi)發(fā)者只需要在應(yīng)用層開(kāi)發(fā)即可。Z-Stack還可通過(guò)ZigBee網(wǎng)絡(luò)無(wú)線(xiàn)下載節(jié)點(diǎn)更新程序,具備定位感知功能等等。以下是Z-Stack的功能。網(wǎng)絡(luò)尋址Z-Stack使用一種分布式的地址分配方式來(lái)分配網(wǎng)絡(luò)地址,這種方式確保所有的網(wǎng)絡(luò)地址在網(wǎng)絡(luò)中是唯一的。網(wǎng)絡(luò)地址是由設(shè)備的父節(jié)點(diǎn)分配的。通過(guò)在Z-Stack中網(wǎng)絡(luò)層中相關(guān)位置的三個(gè)參數(shù),包括最大深度(MAX_DEPTH)、最大子節(jié)點(diǎn)數(shù)(MAX_CHILDREN)和最大路由器數(shù)量(MAX_ROUTERS)按照以下地址分配算法可得到相應(yīng)的網(wǎng)絡(luò)地址[6]。第n個(gè)終端設(shè)備的網(wǎng)絡(luò)地址為:其中:Aparentn的取值范圍:RmCmLm如果Rm=1:CsKipd=1+如果Rm≠1:CsKipMAX_DEPTH指網(wǎng)絡(luò)的層數(shù)。協(xié)調(diào)器在第0層的深度,它的子節(jié)點(diǎn)在第一層,以下就是第二層,以此類(lèi)推。這個(gè)參數(shù)限定了網(wǎng)絡(luò)結(jié)構(gòu)的最大深度。MAX_CHILDREN決定了協(xié)調(diào)器或者路由器可以有幾個(gè)孩子節(jié)點(diǎn)。孩子節(jié)點(diǎn)可以是路由器或者是終端設(shè)備。MAX_ROUTERS數(shù)決定了協(xié)調(diào)器或者路由器下面可以有幾個(gè)路由器子節(jié)點(diǎn)。終端設(shè)備的個(gè)數(shù)=MAX_CHILDREN-MAX_ROUTERS。在Z-Stack中網(wǎng)絡(luò)結(jié)構(gòu)和網(wǎng)絡(luò)深度可在nwk_globals.c文件中設(shè)置,默認(rèn)設(shè)置為HOME_CONTROLS。具體設(shè)置如下:#if(STACK_PROFILE_ID==HOME_CONTROLS)byteCskipRtrs[MAX_NODE_DEPTH+1]={6,6,6,6,6,0};byteCskipChldrn[MAX_NODE_DEPTH+1]={20,20,20,20,20,0};#elif(STACK_PROFILE_ID==GENERIC_STAR)byteCskipRtrs[MAX_NODE_DEPTH+1]={5,5,5,5,5,0};byteCskipChldrn[MAX_NODE_DEPTH+1]={5,5,5,5,5,0};#elif(STACK_PROFILE_ID==NETWORK_SPECIFIC)byteCskipRtrs[MAX_NODE_DEPTH+1]={5,5,5,5,5,0};byteCskipChldrn[MAX_NODE_DEPTH+1]={5,5,5,5,5,0};#endif//STACK_PROFILE_ID目的地址模式有如下幾種值:AddrNotPresent(地址未知模式),Addr16Bit(短地址模式),AddrBroadcast(廣播模式)。這些地址模式都是必要的,因?yàn)樵赯igBee中,數(shù)據(jù)包可以是點(diǎn)對(duì)點(diǎn)發(fā)送(unicast),多點(diǎn)發(fā)送(multicast),也可以是廣播式發(fā)送(broadcast)。接下來(lái)對(duì)各種傳輸模式進(jìn)行簡(jiǎn)要的介紹[7]。一對(duì)一模式一對(duì)一模式是在已知目的地址的情況下使用這種方式。在發(fā)送數(shù)據(jù)的時(shí)候會(huì)包含目的地址信息。在Z-Stack中的尋址方式可以這樣來(lái)設(shè)置:GenericApp_DstAddr.addrMode=Addr16Bit;//以網(wǎng)絡(luò)地址為目的地址進(jìn)行尋址GenericApp_DstAddr.endPoint=10;//目的節(jié)點(diǎn)的端口號(hào)為10GenericApp_DstAddr.addr.shortAddr=0x796f;//目的節(jié)點(diǎn)的網(wǎng)絡(luò)地址廣播模式廣播模式是將數(shù)據(jù)發(fā)送給網(wǎng)絡(luò)中所有的節(jié)點(diǎn)。在程序中地址模式設(shè)定AddrBroadcast。在Z-Stack中的尋址方式可以這樣來(lái)設(shè)置:GenericApp_DstAddr.addrMode=AddrBroadcast;//以廣播的方式進(jìn)行尋址GenericApp_DstAddr.endPoint=10;//目的節(jié)點(diǎn)的端口號(hào)為10GenericApp_DstAddr.addr.shortAddr=0xffff;//目的節(jié)點(diǎn)的網(wǎng)絡(luò)中所有的節(jié)點(diǎn)GenericApp_DstAddr.addr.shortAddr=0xfffd;//目的節(jié)點(diǎn)為網(wǎng)絡(luò)中非睡眠節(jié)點(diǎn)間接接模式當(dāng)?shù)刂纺J皆O(shè)置為AddrNotPresent,說(shuō)明發(fā)送的信息都是發(fā)給協(xié)調(diào)器的,在協(xié)調(diào)器的綁定表中查找相應(yīng)目的地址進(jìn)行一對(duì)一的數(shù)據(jù)發(fā)送。GenericApp_DstAddr.addrMode=(afAddrMode_t)AddrNotPresent;GenericApp_DstAddr.endPoint=10;GenericApp_DstAddr.addr.shortAddr=0;//協(xié)調(diào)器的網(wǎng)絡(luò)地址固定為0x0000;綁定綁定是指一個(gè)節(jié)點(diǎn)與另外一個(gè)或幾個(gè)節(jié)點(diǎn)間建立地址映射的一種尋址方式。在節(jié)點(diǎn)建立綁定之后,發(fā)送數(shù)據(jù)的時(shí)候并不需要知道目的地址是什么,應(yīng)用支持子層會(huì)根據(jù)綁定ID查詢(xún)它的綁定表來(lái)決定目的地址,然后把信息發(fā)送給目的節(jié)點(diǎn)。在Z-Stack中,綁定是通過(guò)如下函數(shù)實(shí)現(xiàn)的:dstAddr.addrMode=Addr16Bit;//首先設(shè)置尋址模式為網(wǎng)絡(luò)地址尋址dstAddr.addr.shortAddr=0x0000;//目的地址為協(xié)調(diào)器的網(wǎng)絡(luò)地址ZDP_EndDeviceBindReq();//發(fā)起綁定請(qǐng)求路由協(xié)議ZigBee的路由協(xié)議是基于A(yíng)dHoc按需距離矢量路由協(xié)議AODV(AdhocOndemandDistanceVector),支持在環(huán)境中移動(dòng)、連接失敗和包丟失的環(huán)境應(yīng)用,它極大的增強(qiáng)了無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的可靠性。當(dāng)一個(gè)路由器收到從一個(gè)節(jié)點(diǎn)發(fā)往另一個(gè)節(jié)點(diǎn)的數(shù)據(jù)包,網(wǎng)絡(luò)層根據(jù)以下步驟來(lái)轉(zhuǎn)發(fā)這個(gè)包:如果目的地是這個(gè)路由的鄰居(包括是其子節(jié)點(diǎn)),這個(gè)包將被直接發(fā)送的目的地;否則,這個(gè)路由器將檢查自己的路由表來(lái)找到相應(yīng)的目的地的路由表記錄。如果有一個(gè)動(dòng)態(tài)路由表記錄,這個(gè)包將轉(zhuǎn)發(fā)到路由表記錄的下一跳地址;如果沒(méi)有,將執(zhí)行一個(gè)路由發(fā)現(xiàn)過(guò)程,過(guò)程結(jié)束后這個(gè)包才會(huì)被發(fā)送。ZigBee網(wǎng)絡(luò)路由具有自我修復(fù)的功能,如果某一路連接斷掉了,將啟用路由發(fā)現(xiàn)過(guò)程,發(fā)現(xiàn)一條新鏈路到目的節(jié)點(diǎn)。ZigBee的終端設(shè)備不執(zhí)行任何的路由功能。如果它想發(fā)送一個(gè)包給任何的其他設(shè)備,它必須通過(guò)它的父節(jié)點(diǎn)來(lái)轉(zhuǎn)發(fā)。同樣的,當(dāng)任何一個(gè)包要發(fā)送給一個(gè)終端設(shè)備時(shí),也由其父節(jié)點(diǎn)來(lái)做響應(yīng)[8]。消息發(fā)送函數(shù)在Z-Stack中,如果給一個(gè)節(jié)點(diǎn)發(fā)送消息,可以用如下函數(shù):if(AF_DataRequest(&GenericApp_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,(byte)osal_strlen(theMessageData)+1,(byte*)&theMessageData,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS)==afStatus_SUCCESS){//Successfullyrequestedtobesent.}else{//Erroroccurredinrequesttosend.}發(fā)送的是指針theMessageData中的字節(jié),字節(jié)數(shù)為(byte)osal_strlen(theMessageData)+1。網(wǎng)絡(luò)的組建過(guò)程協(xié)調(diào)器首先從DEFAULT_CHANLIST列表中選擇使用的信道,如果ZDAPP_CONFIG_PAN_ID的值不等于0xFFFF則選取ZDAPP_CONFIG_PAN_ID為PANID,否則選取IEEE地址的最后兩個(gè)字節(jié)作為PANID。如果啟動(dòng)模式是AutoStart,路由器或者終端設(shè)備上電之后就開(kāi)始搜尋網(wǎng)絡(luò),如果有合適的網(wǎng)絡(luò)并且該網(wǎng)絡(luò)允許加入,那么就會(huì)直接加入該網(wǎng)絡(luò)。如果啟動(dòng)模式是HOLD_AUTO_START,路由器或者終端設(shè)備上電之后必須等待某一特定時(shí)間的發(fā)生來(lái)啟動(dòng)加入網(wǎng)絡(luò)的過(guò)程,這時(shí)協(xié)議棧會(huì)調(diào)用ZDAPP_StartUpFromApp()這個(gè)函數(shù)。如果需要路由器或者終端設(shè)備在電池沒(méi)電或者重啟之后仍然記住以前的網(wǎng)絡(luò)狀態(tài)可以在預(yù)編譯選項(xiàng)添加編譯選項(xiàng)NV_RESTORE。消息接收函數(shù)節(jié)點(diǎn)接收到信息后會(huì)存儲(chǔ)在pkt指針指向的結(jié)構(gòu)體中,具體函數(shù)如下:GenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)可以用*pkt->cmd.Data取出接收到的消息,以下是收到消息的格式的結(jié)構(gòu)體定義。typedefstruct{osal_event_hdr_thdr;uint16groupId;//組IDuint16clusterId;//簇IDafAddrType_tsrcAddr;//源地址byteendPoint;//源節(jié)點(diǎn)端口號(hào)bytewasBroadcast;//是否為廣播方式byteLinkQuality;//鏈路質(zhì)量byteSecurityUse;//是否使用安全模式uint32timestamp;//時(shí)間戳afMSGCommandFormat_tcmd;}afIncomingMSGPacket_t;typedefstruct{byteTransSeqNumber;//序列號(hào)uint16DataLength;//收到信息長(zhǎng)度byte*Data;//收到信息的指針}afMSGCommandFormat_t;android套件開(kāi)發(fā)1.0環(huán)境搭建abdroid開(kāi)發(fā)環(huán)境搭建的流程較為常見(jiàn),在此只簡(jiǎn)單進(jìn)行描述性說(shuō)明。安裝所需要的工具套件AndroidSDKEclipseIDEforJavaEEDevelopersJDK安裝好之后進(jìn)行編程開(kāi)發(fā)。android套件開(kāi)發(fā)1.0環(huán)境套件如圖4-3所示圖4-3Android套件開(kāi)發(fā)1.0環(huán)境套件手機(jī)客戶(hù)端示意圖如圖4-4所示圖4-4手機(jī)終端測(cè)溫軟件VC++6.0MFC庫(kù)開(kāi)發(fā)環(huán)境編程基于VC++6.0MFC庫(kù)進(jìn)行測(cè)溫界面的開(kāi)發(fā),并實(shí)現(xiàn)向手機(jī)客戶(hù)端傳輸數(shù)據(jù)的功能,如圖4-5所示,具體程序見(jiàn)附錄。圖4-5PC中測(cè)溫界面
硬件設(shè)計(jì)本系統(tǒng)涉及的基本硬件有:zigbee通信模塊CC2530、無(wú)線(xiàn)測(cè)溫模塊DS18b20、手機(jī)和電腦終端,如圖5-1所示。無(wú)線(xiàn)測(cè)溫模塊DS18b20無(wú)線(xiàn)測(cè)溫模塊DS18b20zigbee通信模塊CC2530終端模塊手機(jī)、電腦圖5-1系統(tǒng)整體硬件組成無(wú)線(xiàn)測(cè)溫模塊DS18B20DS18B20的內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM,溫度傳感器,非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL,配置寄存器。如圖5-2所示。圖5-2DS18B2064位光刻ROM的前8位是DS18B20的自身代碼,接下來(lái)的48位為連續(xù)的數(shù)字代碼,最后的8位是對(duì)前56位的CRC校驗(yàn)。64-位的光刻ROM又包括5個(gè)ROM的功能命令:讀ROM,匹配ROM,跳躍ROM,查找ROM和報(bào)警查找。DS18B20中的溫度傳感器可完成對(duì)溫度的測(cè)量,以12位轉(zhuǎn)化為例,用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。12位數(shù)據(jù)存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,5這位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FE6FH,-55℃的數(shù)字輸出為FC90H。DS18B20的配置寄存器如表5-1所示。表5-1:配置寄存器結(jié)構(gòu)TMR1R011111表5-1中各位的意義如下:低五位一直都是"1",TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20出廠(chǎng)時(shí)該位被設(shè)置為0,用戶(hù)不做改動(dòng)。R1和R0用來(lái)設(shè)置分辨率。DS18B20引腳如圖5-3所示。圖5-3DS18B20引腳圖其中:GND為電源地;DQ為數(shù)字信號(hào)輸入/輸出端;VDD為外接供電電源輸入端(在寄生電源接線(xiàn)方式時(shí)接地)。ZigBee無(wú)線(xiàn)通信、微處理器模塊可用于對(duì)待測(cè)點(diǎn)的溫度進(jìn)行采集,并通過(guò)無(wú)線(xiàn)方式將溫度數(shù)據(jù)發(fā)送給協(xié)調(diào)器節(jié)點(diǎn)。CC2530協(xié)調(diào)器節(jié)點(diǎn)由微處理器和無(wú)線(xiàn)通信模塊組成,他通過(guò)串口線(xiàn)直接與上位機(jī)相連,上位機(jī)使用電腦,然后可以通過(guò)ARM11平臺(tái)安裝多點(diǎn)測(cè)溫客戶(hù)端進(jìn)行在線(xiàn)監(jiān)測(cè)或者使用支持安卓的手機(jī)。CC2530如圖5-4所示。圖5-4CC2530CC2530是一個(gè)真正的系統(tǒng)芯片(SOC)COMS解決方案,這種解決方能夠降低成本,提高性能,并滿(mǎn)足以ZigBee為基礎(chǔ)的2.4GHzISM波段應(yīng)用低功耗的要求??紤]到溫度傳感器模塊工作時(shí),需要將采集的溫度信息和時(shí)間信息存儲(chǔ),故擴(kuò)展外部FLASH芯片ST-M25PE16和時(shí)鐘芯片S35190A。在天線(xiàn)設(shè)計(jì)方面,使用了TI的參考設(shè)計(jì)方案—反向F型天線(xiàn)。CC2530硬件結(jié)構(gòu)如圖5-5所示。圖5-5溫度傳感器模塊硬件結(jié)構(gòu)圖CC2530包括了1個(gè)高性能的2.4GHzDSSS(直接序列擴(kuò)頻)射頻收發(fā)器核心和1個(gè)8051控制器,它具有32/64/128kB可選擇的編程閃存和8kB的RAM,還包括ADC、定時(shí)器、睡眠模式定時(shí)器、上電復(fù)位電路、掉電檢測(cè)電路和21個(gè)可編程I/O引腳,這樣很容易實(shí)現(xiàn)通信模塊的小型化。CC2530是一款功耗相當(dāng)?shù)偷膯纹瑱C(jī),功耗模式3下電流消耗僅0.2μA,在32k晶體時(shí)鐘下運(yùn)行,電流消耗小于1μA。CC2530芯片使用直接正交上變頻發(fā)送數(shù)據(jù)?;鶐盘?hào)的同相分量和正交分量由DAC轉(zhuǎn)換成模擬信號(hào),經(jīng)過(guò)低通濾波,變頻到所設(shè)定的信道上。當(dāng)需要發(fā)送數(shù)據(jù)時(shí),先將要發(fā)送的數(shù)據(jù)寫(xiě)入128B的發(fā)送緩存中,包頭是通過(guò)硬件產(chǎn)生的。最后經(jīng)過(guò)低通濾波器和上變頻的混頻后,將射頻信號(hào)被調(diào)制到2.4GHz,后經(jīng)天線(xiàn)發(fā)送出去。CC2530有兩個(gè)端口分別為T(mén)X/RX,RF端口不需要外部的收發(fā)開(kāi)關(guān),芯片內(nèi)部已集成了收發(fā)開(kāi)關(guān)。CC2530的存儲(chǔ)器ST-M25PE16是4線(xiàn)的SPI通信模式的FLASH,可以整塊擦除,最大可以存儲(chǔ)2M個(gè)字節(jié)。工作電壓為2.7v到3.6v。CC2530溫度傳感器模塊反向F型天線(xiàn)采用TI公司公布的2.4GHz倒F型天線(xiàn)設(shè)計(jì)。天線(xiàn)的最大增益為+3.3dB,天線(xiàn)面積為25.7×7.5mm。該天線(xiàn)完全能夠滿(mǎn)足CC2530工作頻段的要求(CC2530工作頻段為2.400GHz~2.480GHz)。CC2530芯片引腳如圖5-6所示。圖5-6CC2530芯片引腳CC2530芯片引腳功能如下:AVDD128電源(模擬)2-V–3.6-V模擬電源連接AVDD227電源(模擬)2-V–3.6-V模擬電源連接AVDD324電源(模擬)2-V–3.6-V模擬電源連接AVDD429電源(模擬)2-V–3.6-V模擬電源連接AVDD521電源(模擬)2-V–3.6-V模擬電源連接AVDD631電源(模擬)2-V–3.6-V模擬電源連接DCOUPL40電源(數(shù)字)1.8V數(shù)字電源去耦。不使用外部電路供應(yīng)。DVDD139電源(數(shù)字)2-V–3.6-V數(shù)字電源連接DVDD210電源(數(shù)字)2-V–3.6-V數(shù)字電源連接GND-接地接地襯墊必須連接到一個(gè)堅(jiān)固的接地面。GND1,2,3,4未使用的連接到GNDP0_019數(shù)字I/O端口0.0P0_118數(shù)字I/O端口0.1P0_217數(shù)字I/O端口0.2P0_316數(shù)字I/O端口0.3P0_415數(shù)字I/O端口0.4P0_514數(shù)字I/O端口0.5P0_613數(shù)字I/O端口0.6P0_712數(shù)字I/O端口0.7P1_011數(shù)字I/O端口1.0-20-mA驅(qū)動(dòng)能力P1_19數(shù)字I/O端口1.1-20-mA驅(qū)動(dòng)能力P1_28數(shù)字I/O端口1.2P1_37數(shù)字I/O端口1.3P1_46數(shù)字I/O端口1.4P1_55數(shù)字I/O端口1.5P1_638數(shù)字I/O端口1.6P1_737數(shù)字I/O端口1.7P2_036數(shù)字I/O端口2.0P2_135數(shù)字I/O端口2.1P2_234數(shù)字I/O端口2.2P2_333數(shù)字I/O模擬端口2.3/32.768kHzXOSCP2_432數(shù)字I/O模擬端口2.4/32.768kHzXOSCRBIAS30模擬I/O參考電流的外部精密偏置電阻RESET_N20數(shù)字輸入復(fù)位,活動(dòng)到低電平RF_N26RFI/ORX期間負(fù)RF輸入信號(hào)到LNARF_P25RFI/ORX期間正RF輸入信號(hào)到LNAXOSC_Q122模擬I/O32-MHz晶振引腳1或外部時(shí)鐘輸入XOSC_Q223模擬I/O32-MHz晶振引腳2CC2530芯片的結(jié)構(gòu)如圖5-7所示圖5-7CC2530芯片結(jié)構(gòu)圖CC2530硬件系統(tǒng)的設(shè)計(jì)較為簡(jiǎn)單,電路如圖5-8所示。圖5-8CC2530電路圖終端PC機(jī)及手機(jī)本系統(tǒng)對(duì)于終端模塊的要求不高,PC終端目前主流的配置即可滿(mǎn)足需求,手機(jī)終端要求為andriod平臺(tái),版本2.2以上即可。
軟件設(shè)計(jì)總體設(shè)計(jì)軟件設(shè)計(jì)是在硬件設(shè)計(jì)的基礎(chǔ)上構(gòu)建的,是對(duì)確定硬件的系統(tǒng)操作面向應(yīng)用的開(kāi)發(fā)。軟件設(shè)計(jì)主要是實(shí)現(xiàn)各個(gè)模塊的數(shù)據(jù)通信,以及各個(gè)操作的實(shí)時(shí)對(duì)應(yīng)?;趜igbee無(wú)線(xiàn)測(cè)溫系統(tǒng)的軟件部分主要有三個(gè)模塊:DS18B20的數(shù)據(jù)采集模塊、CC2530無(wú)線(xiàn)通信模塊、終端顯示模塊——PC機(jī)和客戶(hù)手機(jī)端??傮w框架圖如圖6-1所示:采集數(shù)據(jù)采集數(shù)據(jù)處理數(shù)據(jù)服務(wù)器手機(jī)監(jiān)控界面上位機(jī)監(jiān)控界面圖6-1系統(tǒng)總體框架DS18B20數(shù)據(jù)采集模塊數(shù)據(jù)采集模塊程序流程如圖6-2所示。數(shù)據(jù)處理讀出數(shù)據(jù)數(shù)據(jù)寫(xiě)入18B2018B20初始劃化數(shù)據(jù)處理讀出數(shù)據(jù)數(shù)據(jù)寫(xiě)入18B2018B20初始劃化圖6-2數(shù)據(jù)采集模塊流程圖數(shù)據(jù)采集模塊關(guān)鍵函數(shù)設(shè)計(jì)如下:voidinit_1820(void)//初始化DS18B20voidwrite_1820(UINT8x)//寫(xiě)入相應(yīng)的數(shù)據(jù)UINT8read_1820(void)//從18B20讀數(shù)據(jù){return(temp);}voidread_data(UINT8*pSensorValue)//讀取溫度voidDataChange(UINT8*pSensorValue,UINT8*pChBuf)//數(shù)據(jù)處理voidds18b20_main(){while(1){read_data(sensor_data_value);//讀取溫度DataChange(sensor_data_value,ch);//數(shù)據(jù)處理Delay_nus(10000);}}CC2530無(wú)線(xiàn)通信模塊CC2530初始化后,傳感器節(jié)點(diǎn)會(huì)依據(jù)ZigBee協(xié)議搜尋網(wǎng)絡(luò),并請(qǐng)求加入節(jié)點(diǎn)。請(qǐng)求得到確定后,傳感器節(jié)點(diǎn)會(huì)將自身的地址發(fā)送給協(xié)調(diào)器,并自動(dòng)與協(xié)調(diào)器建立綁定。在接受到數(shù)據(jù)傳送請(qǐng)求之后,傳感器節(jié)點(diǎn)就會(huì)將溫度值按時(shí)傳給協(xié)調(diào)器。程序流程如圖6-3所示。圖6-3傳感器節(jié)點(diǎn)的程序流程設(shè)備初始化完畢后,協(xié)調(diào)器新建無(wú)線(xiàn)網(wǎng)絡(luò)。如果新建網(wǎng)絡(luò)成功,允許協(xié)調(diào)器設(shè)定為綁定。此時(shí),協(xié)調(diào)器檢測(cè)是否有節(jié)點(diǎn)要求加入網(wǎng)絡(luò),如果接收到節(jié)點(diǎn)的加入請(qǐng)求,協(xié)調(diào)器會(huì)記錄下節(jié)點(diǎn)的地址,并建立綁定,同時(shí)向節(jié)點(diǎn)發(fā)出傳送數(shù)據(jù)請(qǐng)求,得到節(jié)點(diǎn)的確認(rèn)后,協(xié)調(diào)器開(kāi)始接收數(shù)據(jù),最后通過(guò)無(wú)線(xiàn)發(fā)送給上位機(jī)。協(xié)調(diào)器的程序流程如圖6-4所示。圖6-4圖協(xié)調(diào)器的流程圖關(guān)鍵函數(shù)及數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如下:(1)設(shè)備的描述程序中,兩種設(shè)備被配置:傳感器和中心收集設(shè)備。中心收集設(shè)備作為協(xié)調(diào)器或路由器啟動(dòng),描述為:constSimpleDescriptionFormat_tzb_SimpleDesc={MY_ENDPOINT_ID,//端點(diǎn)MY_PROFILE_ID,//ProfileIDDEV_ID_COLLECTOR,//設(shè)備IDDEVICE_VERSION_COLLECTOR,//設(shè)備版本0,//保留NUM_IN_CMD_COLLECTOR,//輸入命令數(shù)量(cId_t*)zb_InCmdList,//輸入命令列表NUM_OUT_CMD_COLLECTOR,//輸出命令數(shù)量(cId_t*)NULL//輸出命令列表};傳感器設(shè)備的描述為:constSimpleDescriptionFormat_tzb_SimpleDesc={MY_ENDPOINT_ID,//端點(diǎn)MY_PROFILE_ID,//ProfileIDDEV_ID_SENSOR,//設(shè)備IDDEVICE_VERSION_SENSOR,//設(shè)備版本0,//保留NUM_IN_CMD_SENSOR,//輸入命令數(shù)量(cId_t*)zb_InCmdList,//輸入命令列表NUM_OUT_CMD_SENSOR,//輸出命令數(shù)量(cId_t*)zb_OutCmdList//輸出命令列表};(2)節(jié)點(diǎn)類(lèi)型的確定if(keys&HAL_KEY_SW_1){……logicalType=ZG_DEVICETYPE_COORDINATOR;……}if(keys&HAL_KEY_SW_2){……logicalType=ZG_DEVICETYPE_ROUTER;……}(3)發(fā)現(xiàn)和綁定傳感器設(shè)備加入網(wǎng)絡(luò)后將試圖發(fā)現(xiàn)和綁定它自己到一個(gè)中心收集設(shè)備。如果發(fā)現(xiàn)個(gè)收集設(shè)備,它將選擇第一個(gè)響應(yīng)的中心收集設(shè)備建立綁定;如果沒(méi)有發(fā)現(xiàn)收集節(jié)點(diǎn),那么它將不斷進(jìn)行搜索。用osal_start_timer(MY_START_EVT,myStartRetryDelay)函數(shù)設(shè)置一個(gè)時(shí)間事件,該事件處理如下:If(event&MY_FIND_COLLECTER_EVT){//繼續(xù)發(fā)送綁定Zb_BindDevice(TRUE,SENSOR_REPORT_CMD_ID,(uint8*)NULL);}zb_HandleOsalEvent()函數(shù)是專(zhuān)門(mén)為用戶(hù)留下的事件處理函數(shù)??梢钥闯觯绻麤](méi)有建立綁定,則傳感器設(shè)備將周期性的發(fā)送綁定請(qǐng)求。voidzb_HandleOsalEvent(uint16event){uint8pData[2];if(event&MY_START_EVT){zb_StartRequest();}網(wǎng)絡(luò)啟動(dòng)建立成功后,中心收集設(shè)備必須進(jìn)入允許綁定模式,才能對(duì)傳感器發(fā)送的綁定請(qǐng)求做出響應(yīng)。本設(shè)計(jì)中,確定中心設(shè)備的啟動(dòng)模式之后,按下按鍵總開(kāi)關(guān)以使設(shè)備進(jìn)入綁定模式。(4)數(shù)據(jù)包的發(fā)送和接收綁定建立成功后,傳感器設(shè)備將根據(jù)定義的時(shí)間間隔周期地采集溫度傳感器通過(guò)報(bào)告命令發(fā)送給收集設(shè)備。該報(bào)告命令要求收集設(shè)備應(yīng)答,通過(guò)函數(shù)zb_SendDataConfirm()可以指示應(yīng)答。如果傳感器設(shè)備有一個(gè)應(yīng)答沒(méi)有接收到,則傳感器設(shè)備將移除與它的綁定,重新發(fā)現(xiàn)和綁定。通過(guò)函數(shù)zb_HandleOsalEvent()完成用戶(hù)定義的事件。if(event&MY_REPORT_TEMP_EVT){//讀取溫度值pData[0]=TEMP_REPORT;pData[1]=myApp_ReadTemperature();zb_SendDataRequest(0xFFFE,SENSOR_REPORT_CMD_ID,2,pData,0,AF_ACK_REQUEST,0);osal_start_timerEx(sapi_TaskID,MY_REPORT_TEMP_EVT,myTempReportPeriod);}if(event&MY_FIND_COLLECTOR_EVT){//Findandbindtoacollectordevicezb_BindDevice(TRUE,SENSOR_REPORT_CMD_ID,(uint8*)NULL);}收集節(jié)點(diǎn)接收到傳感器設(shè)備發(fā)送的數(shù)據(jù)包后,通過(guò)串口傳輸?shù)絇C機(jī)。該過(guò)程通過(guò)接收數(shù)據(jù)指示函數(shù)zb_ReceiveDataIndication()完成。CONSTuint8strDevice[]="0x";voidzb_ReceiveDataIndication(uint16source,uint16command,uint16len,uint8*pData){uint8buf[32];uint8*pBuf;uint8tmpLen;uint8sensorReading;if(command==SENSOR_REPORT_CMD_ID){//讀取傳感器數(shù)據(jù)sensorReading=pData[1];//寫(xiě)信息到串口}}手機(jī)終端顯示模塊本模塊主要實(shí)現(xiàn)PC機(jī)與客戶(hù)端手機(jī)的數(shù)據(jù)通信,程序流程如圖6-5所示。圖6-5終端模塊流程圖手機(jī)客戶(hù)端程序主要部分如下://溫度監(jiān)控對(duì)話(huà)框privateAlertDialog.BuilderdialogTemp;privateEditTextmTemp1;privateEditTextmTemp2;privateEditTextmTemp3;privateEditTextmTemp4;Socketsocket=null;privateStringTempStr[];//用于存放溫度數(shù)值privateStringAlarmFlag[];//用于報(bào)警標(biāo)識(shí)privateStringLedFlag[];//用于燈狀態(tài)標(biāo)識(shí)……dialogTemp=newAlertDialog.Builder(this);publicstaticStringbytes2HexString(byte[]b){…………………}Messagemessage=newMessage();//生成消息,并賦予ID值;myHandler.sendMessage(message);//投遞消息privatevoidMySend(Stringmessage){…………………}elseif(dlgIndex==1)//溫度監(jiān)控界面{……………….}case1://定時(shí)向server發(fā)送請(qǐng)求事件 if(dlgIndex==0){ MySend("DDDDD");//主界面 } elseif(dlgIndex==1)//溫度監(jiān)控界面 { MySend("TTTTT"); } publicvoidonClick(Viewv){ et=(EditText)layout.findViewById(R.id.et_serverip);//連接dialog中ip地址輸入框 dialogConnect.setPositiveButton("連接",newDialogInterface.OnClickListener()//設(shè)置確定的按鍵dialogConnect.setNegativeButton("取消",newDialogInterface.OnClickListener(){//設(shè)置取消按鍵 dialogConnect.setCancelable(false);//設(shè)置按返回鍵是否響應(yīng)返回 dialogConnect.show();}elseif(v.getId()==R.id.btn_temp){//溫度監(jiān)控對(duì)話(huà)框 dialogTemp.setTitle("遠(yuǎn)程溫度監(jiān)測(cè)");Resourcesr=this.getResources();Drawabled=r.getDrawable(R.drawable.tmp);dialogTemp.setIcon(d);mTemp1=(EditText)layout.findViewById(R.id.tmp_et1);mTemp2=(EditText)layout.findViewById(R.id.tmp_et2);mTemp3=(EditText)layout.findViewById(R.id.tmp_et3);mTemp4=(EditText)layout.findViewById(R.id.tmp_et4);dialogTemp.setNegativeButton("返回上級(jí)",newDialogInterface.OnClickListener(){//設(shè)置取消按鍵publicvoidrun(){ } elseif(v.getId()==R.id.led1){ //當(dāng)按鈕第一次被點(diǎn)擊時(shí)候響應(yīng)的事件 if(mTbtnLed1.isChecked()) { MySend("11D11"); mTextShow.setText("您按下了1號(hào)開(kāi)關(guān),1號(hào)燈被點(diǎn)亮!"); }//當(dāng)按鈕再次被點(diǎn)擊時(shí)候響應(yīng)的事件 else { MySend("11D00"); mTextShow.setText("您按下了1號(hào)開(kāi)關(guān),1號(hào)燈被熄滅!"); } } elseif(v.getId()==R.id.led2){ //當(dāng)按鈕第一次被點(diǎn)擊時(shí)候響應(yīng)的事件 if(mTbtnLed2.isChecked()) { MySend("22D11"); mTextShow.setText("您按下了2號(hào)開(kāi)關(guān),2號(hào)燈被點(diǎn)亮!"); }//當(dāng)按鈕再次被點(diǎn)擊時(shí)候響應(yīng)的事件 else { MySend("22D00"); mTextShow.setText("您按下了2號(hào)開(kāi)關(guān),2號(hào)燈被熄滅!"); } } elseif(v.getId()==R.id.led3){ //當(dāng)按鈕第一次被點(diǎn)擊時(shí)候響應(yīng)的事件 if(mTbtnLed3.isChecked())//當(dāng)按鈕再次被點(diǎn)擊時(shí)候響應(yīng)的事件 { } 上位機(jī)監(jiān)控模塊當(dāng)啟動(dòng)上位機(jī)軟件的時(shí)候,路由器自動(dòng)與上位機(jī)軟件發(fā)生連接,當(dāng)連接通過(guò)的時(shí)候,上位機(jī)軟件開(kāi)始接收從節(jié)點(diǎn)采集到的信息。并在上位機(jī)軟件上顯示出來(lái),當(dāng)收到的溫度值超出一點(diǎn)范圍的時(shí)候,上位機(jī)會(huì)發(fā)出相應(yīng)的警告,提醒使用者注意此時(shí)溫度出現(xiàn)異常。圖6-6上位機(jī)監(jiān)控軟件流程關(guān)鍵函數(shù)設(shè)計(jì)如下:BOOLCWsnPcMonitorDlg::OnInitDialog()//獲取本機(jī)Ip地址voidCWsnPcMonitorDlg::OnBtnSend()//數(shù)據(jù)的發(fā)送voidCWsnPcMonitorDlg::ReceiveDataAnalysis()//顯示溫度計(jì) voidCWsnPcMonitorDlg::OnOnClickIswitchrockerx()//讀取數(shù)據(jù)voidCWsnPcMonitorDlg::OnBtnStopFlash()//溫度變化曲線(xiàn)voidCWsnPcMonitorDlg::OnBtnStopListen()//服務(wù)器監(jiān)聽(tīng)voidCWsnPcMonitorDlg::OnIPAddress()//此段代碼:獨(dú)立的獲取本機(jī)IP地址和計(jì)算機(jī)名BOOLCWsnPcMonitorDlg::InitNetwork()//創(chuàng)建服務(wù)器端套接字,綁定到本地一個(gè)端口上voidCWsnPcMonitorDlg::OnNetEvent(WPARAMwParam,LPARAMlParam)//調(diào)用WinsockAPI函數(shù),得到網(wǎng)絡(luò)事件類(lèi)型voidCWsnPcMonitorDlg::OnAccept(SOCKETCurSock)//接受連接請(qǐng)求,并保存與發(fā)起連接請(qǐng)求的客戶(hù)端進(jìn)行通信SocketvoidCWsnPcMonitorDlg::OnClose(SOCKETCurSock)//結(jié)束與相應(yīng)的客戶(hù)端的通信釋放相應(yīng)源voidCWsnPcMonitorDlg::OnReceive(SOCKETCurSock)//向客戶(hù)端發(fā)送回應(yīng)數(shù)據(jù)intCWsnPcMonitorDlg::Send(SOCKETfd,char*szText,intlen)//發(fā)送信息
系統(tǒng)測(cè)試系統(tǒng)基本構(gòu)架搭建完成后,需要對(duì)各個(gè)環(huán)節(jié)進(jìn)行測(cè)試,以確保系統(tǒng)是否能正常運(yùn)行。在完成基本測(cè)試后再?gòu)闹锌偨Y(jié)出系統(tǒng)的不足及后期開(kāi)發(fā)應(yīng)該注意的部分。系統(tǒng)測(cè)試主要對(duì)硬件電路板及軟件程序進(jìn)行測(cè)試。首先對(duì)硬件電路板進(jìn)行檢測(cè)。硬件調(diào)試比較簡(jiǎn)單,分別對(duì)各個(gè)功能模塊進(jìn)行上電前的電路檢測(cè),檢查電路的焊接是否正確,是否有虛焊現(xiàn)象發(fā)生,器件引腳是否接反接錯(cuò),各個(gè)過(guò)孔的尺寸是否符合實(shí)際要求等。隨后再進(jìn)行上電檢測(cè),用萬(wàn)用表測(cè)試是否有短路現(xiàn)象,電源通電情況是否正常,各個(gè)模塊是否能夠正常工作等。系統(tǒng)軟件調(diào)試比較復(fù)雜,需要對(duì)各個(gè)子程序進(jìn)行在線(xiàn)調(diào)試。每完成一個(gè)系統(tǒng)程序設(shè)計(jì)時(shí),都需要對(duì)其進(jìn)行調(diào)試,而調(diào)試的關(guān)鍵是建立在硬件電路板
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 擋墻涵洞勞務(wù)分包合同
- 會(huì)議室出租協(xié)議書(shū)
- 整棟房屋買(mǎi)賣(mài)合同
- 給排水外網(wǎng)施工方案
- 汕尾露臺(tái)花園施工方案
- TCSHB 0018-2024 全釩液流電池碳塑復(fù)合雙極板技術(shù)規(guī)范
- 硬化襯砌固定邊坡施工方案
- 隧道一級(jí)邊坡平臺(tái)施工方案
- 雞西市屋面鋼結(jié)構(gòu)施工方案
- 高品質(zhì)住宅建設(shè)標(biāo)準(zhǔn)報(bào)批稿
- 工作創(chuàng)新意識(shí)不強(qiáng)的整改措施【5篇】
- 冬小麥種植技術(shù)及病蟲(chóng)害防治課件
- 污水處理廠(chǎng)設(shè)備的維修與保養(yǎng)方案
- 小城鎮(zhèn)建設(shè)形考作業(yè)1-4
- GB/T 36118-2018氣體除菌用聚四氟乙烯微濾膜折疊式過(guò)濾芯
- GB/T 34618-2017蒸汽疏水系統(tǒng)在線(xiàn)閥門(mén)內(nèi)漏溫度檢測(cè)方法
- GB/T 12807-2021實(shí)驗(yàn)室玻璃儀器分度吸量管
- 水的組成發(fā)現(xiàn)史
- 葫蘆絲基礎(chǔ)教程-課件
- 優(yōu)秀-敦煌壁畫(huà)課件
- 普法講座-治安管理處罰法課件
評(píng)論
0/150
提交評(píng)論