《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 面向環(huán)境監(jiān)測(cè)的無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的軟件設(shè)計(jì)
面向環(huán)境監(jiān)測(cè)的無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的軟件設(shè)計(jì)
張振興 童玲 田雨
摘要: 環(huán)境監(jiān)測(cè)是無線傳感器網(wǎng)絡(luò)的重要應(yīng)用領(lǐng)域,。為搜集某一區(qū)域內(nèi)的環(huán)境數(shù)據(jù),,傳感器節(jié)點(diǎn)需要在無人值守情況下長(zhǎng)時(shí)間地工作在惡劣環(huán)境條件下。傳感器節(jié)點(diǎn)的軟件設(shè)計(jì)為節(jié)點(diǎn)正常工作提供了重要保證,。
Abstract:
Key words :

  引  言

  環(huán)境監(jiān)測(cè)無線傳感器網(wǎng)絡(luò)的重要應(yīng)用領(lǐng)域,。為搜集某一區(qū)域內(nèi)的環(huán)境數(shù)據(jù),,傳感器節(jié)點(diǎn)需要在無人值守情況下長(zhǎng)時(shí)間地工作在惡劣環(huán)境條件下。傳感器節(jié)點(diǎn)的軟件設(shè)計(jì)為節(jié)點(diǎn)正常工作提供了重要保證,。

  1  無線傳感器網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)

  整個(gè)傳感器網(wǎng)絡(luò)是由若干個(gè)采集節(jié)點(diǎn),、1個(gè)匯聚節(jié)點(diǎn)、1個(gè)數(shù)據(jù)中轉(zhuǎn)器以及1個(gè)便于用戶查看和控制的上位機(jī)組成,。系統(tǒng)結(jié)構(gòu)如圖1所示,。采集節(jié)點(diǎn)用于對(duì)環(huán)境數(shù)據(jù)的采集、數(shù)據(jù)的預(yù)處理,,承當(dāng)數(shù)據(jù)的路由,;匯聚節(jié)點(diǎn)負(fù)責(zé)整個(gè)網(wǎng)絡(luò)的開啟和維護(hù),向采集節(jié)點(diǎn)發(fā)送命令,,搜集節(jié)點(diǎn)的數(shù)據(jù)以及和數(shù)據(jù)中轉(zhuǎn)器之間的串口通信,;數(shù)據(jù)中轉(zhuǎn)器承擔(dān)數(shù)據(jù)的中轉(zhuǎn)及轉(zhuǎn)發(fā)上位機(jī)的命令;上位機(jī)是數(shù)據(jù)搜集的終端設(shè)備,,并且可以根據(jù)用戶的需要對(duì)節(jié)點(diǎn)的采集時(shí)間間隔,、休眠時(shí)間間隔,、傳感器的開關(guān)進(jìn)行相應(yīng)設(shè)置。

系統(tǒng)結(jié)構(gòu)

  2 節(jié)點(diǎn)的硬件電路

  為方便數(shù)據(jù)的搜集,,匯聚節(jié)點(diǎn)和采集節(jié)點(diǎn)硬件電路設(shè)計(jì)相同,,只是軟件設(shè)計(jì)有所不同。任意節(jié)點(diǎn)都可作為匯聚節(jié)點(diǎn),,與數(shù)據(jù)中轉(zhuǎn)器通過串口進(jìn)行通信,,來搜集網(wǎng)絡(luò)中其他節(jié)點(diǎn)的數(shù)據(jù)。節(jié)點(diǎn)的硬件結(jié)構(gòu)如圖2所示,。

節(jié)點(diǎn)的硬件結(jié)構(gòu)

  本設(shè)計(jì)選用的核心芯片是TI公司推出的ZigBee芯片CC2430,。它以8051微處理器為內(nèi)核,自身攜帶的射頻收發(fā)器用來實(shí)現(xiàn)無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的通信,,提供了4路I/O口來控制傳感器的打開和關(guān)閉,。傳感器將相應(yīng)的環(huán)境數(shù)據(jù)變成電壓、電流等信號(hào)送給信號(hào)調(diào)理電路,,經(jīng)相關(guān)調(diào)理后送到CC2430的 ADC接口進(jìn)行A/D采樣,,最后CC2430將得到的A/D值存人1個(gè)外接的64 Kb的存儲(chǔ)器中。當(dāng)節(jié)點(diǎn)作為網(wǎng)絡(luò)中的匯聚節(jié)點(diǎn)時(shí),,CC2430的 2路I/O口被設(shè)置成UART0串口Tx和Rx,,用于和數(shù)據(jù)中轉(zhuǎn)器進(jìn)行串口通信。對(duì)于能源供應(yīng)部分,,為保證節(jié)點(diǎn)長(zhǎng)期穩(wěn)定工作,,選用2300 mA的鎳氫充電電池,2組鎳氫電池采用雙電源供電模式,。軟件通過控制2組鎳氫電池的切換實(shí)現(xiàn)對(duì)節(jié)點(diǎn)的輪流供電,,并在電池電壓不足時(shí)控制太陽(yáng)能電池板對(duì)其進(jìn)行充電。

  3 節(jié)點(diǎn)軟件設(shè)計(jì)

  3.1  Z-Stack協(xié)議棧簡(jiǎn)介

  本次的軟件設(shè)計(jì)基于TI公司Z-Stack 2006協(xié)議棧,。Z-Stack 2006是TI公司專門為CC2430芯片設(shè)計(jì)的ZigBee協(xié)議棧,。它由1個(gè)簡(jiǎn)單的單線程的操作系統(tǒng)管理。該操作系統(tǒng)基于任務(wù)調(diào)度機(jī)制,,任務(wù)通過API函數(shù)osalTaskAdd()按照優(yōu)先級(jí)添加到任務(wù)鏈表。任務(wù)的事件觸發(fā)實(shí)現(xiàn)任務(wù)調(diào)度,。每個(gè)任務(wù)最多可定義16個(gè)事件,,每個(gè)事件都對(duì)應(yīng)1個(gè)唯一的事件號(hào)。NextActiveTask()是任務(wù)事件查詢函數(shù),,返回任務(wù)的事件狀態(tài)ActiveTask,,根據(jù)返回的事件值來調(diào)用相應(yīng)的任務(wù)處理函數(shù)ActiveTask()進(jìn)行處理。操作系統(tǒng)任務(wù)調(diào)度如圖3所示,。

操作系統(tǒng)任務(wù)調(diào)度

  主函數(shù)在完成節(jié)點(diǎn)相關(guān)初始化之后會(huì)進(jìn)入無限循環(huán)過程,,該過程會(huì)一直檢測(cè)操作系統(tǒng)的任務(wù)鏈表中是否有事件要進(jìn)行處理,。

  3.2 節(jié)點(diǎn)工作流程

  為便于管理和調(diào)度,節(jié)點(diǎn)所要實(shí)現(xiàn)的功能都是將其定義為事件進(jìn)行處理的,。每個(gè)事件完成相應(yīng)功能,。將事件按一定關(guān)系串接,就能實(shí)現(xiàn)節(jié)點(diǎn)工作時(shí)要完成的系統(tǒng)功能,。采集節(jié)點(diǎn)和匯聚節(jié)點(diǎn)的工作流程如圖4,、圖5所示。

采集節(jié)點(diǎn)和匯聚節(jié)點(diǎn)的工作流程

  匯聚節(jié)點(diǎn)和采集節(jié)點(diǎn)在同一時(shí)刻醒來,。當(dāng)匯聚節(jié)點(diǎn)創(chuàng)建網(wǎng)絡(luò)成功,,并且采集節(jié)點(diǎn)入網(wǎng)成功后,全網(wǎng)節(jié)點(diǎn)處于通信狀態(tài),。匯聚節(jié)點(diǎn)會(huì)通過串口向數(shù)據(jù)中轉(zhuǎn)器發(fā)送1個(gè)表示網(wǎng)絡(luò)準(zhǔn)備就緒的消息,,數(shù)據(jù)中轉(zhuǎn)器接收到該消息之后根據(jù)上位機(jī)的要求決定要不要上傳數(shù)據(jù),以及上傳哪些數(shù)據(jù),。匯聚節(jié)點(diǎn)接收到命令之后會(huì)觸發(fā)相應(yīng)的事件進(jìn)行處理,,先命令采集節(jié)點(diǎn)將相應(yīng)的數(shù)據(jù)上傳給它,再通過觸發(fā)串口事件將數(shù)據(jù)發(fā)送至數(shù)據(jù)中轉(zhuǎn)器,。采集節(jié)點(diǎn)在入網(wǎng)成功以后也處于準(zhǔn)備就緒的狀態(tài),,等待接受匯聚節(jié)點(diǎn)的命令,做相應(yīng)的事件觸發(fā)處理,。

  在每次通信結(jié)束之前,,匯聚節(jié)點(diǎn)會(huì)向數(shù)據(jù)中轉(zhuǎn)器發(fā)送1個(gè)請(qǐng)求休眠的消息,數(shù)據(jù)中轉(zhuǎn)器接收到該消息之后會(huì)按照上位機(jī)的要求對(duì)全網(wǎng)節(jié)點(diǎn)的休眠過程進(jìn)行設(shè)置,。

   3.3  串口通信協(xié)議

  匯聚節(jié)點(diǎn)與數(shù)據(jù)中轉(zhuǎn)器之間的通信是通過串口進(jìn)行的,。串口通信協(xié)議保證數(shù)據(jù)的安全收發(fā),便于匯聚節(jié)點(diǎn)和數(shù)據(jù)中轉(zhuǎn)器對(duì)數(shù)據(jù)進(jìn)行解析和存儲(chǔ)管理,。數(shù)據(jù)中轉(zhuǎn)器和匯聚節(jié)點(diǎn)之間的串口通信數(shù)據(jù)幀格式如下所示:

串口通信數(shù)據(jù)幀格式

  其中,,SOP為起始標(biāo)志符,用1字節(jié)來表示數(shù)據(jù)包的起始,,將這個(gè)字節(jié)定義為0x02,;CMD表示命令I(lǐng)D,用1字節(jié)的數(shù)據(jù)來標(biāo)識(shí)命令消息,。 LEN表示DATA的長(zhǎng)度,,用1字節(jié)來指示DATA位的數(shù)據(jù)的長(zhǎng)度。DATA為具體要發(fā)送的數(shù)據(jù),。FCS是校驗(yàn)位,,這里使用XOR(異或校驗(yàn)),校驗(yàn) CMD,、LEN,、DATA中的所有數(shù)據(jù),。

  當(dāng)匯聚節(jié)點(diǎn)和數(shù)據(jù)中轉(zhuǎn)器通過串口接收到數(shù)據(jù)后,都是通過判別CMD對(duì)數(shù)據(jù)進(jìn)行解析的,。串口數(shù)據(jù)的CMD有如下幾種:

 ?、?x03,數(shù)據(jù)中轉(zhuǎn)器發(fā)送上傳路由表命令,。作為響應(yīng),,匯聚節(jié)點(diǎn)通過串口上傳路由表數(shù)據(jù)的CMD標(biāo)識(shí)為0x83。

 

 ?、?x04,,數(shù)據(jù)中轉(zhuǎn)器發(fā)送上傳鄰居表命令。作為響應(yīng),,匯聚節(jié)點(diǎn)通過串口上傳鄰居表數(shù)據(jù)的CMD標(biāo)識(shí)為0x84,。

  ③0x05,,數(shù)據(jù)中轉(zhuǎn)器發(fā)送上傳采集數(shù)據(jù)命令,。作為響應(yīng),匯聚節(jié)點(diǎn)通過串口上傳采集數(shù)據(jù)時(shí)的CMD標(biāo)識(shí)為0x85,。

 ?、?x89,匯聚節(jié)點(diǎn)發(fā)送至數(shù)據(jù)中轉(zhuǎn)器,,表示網(wǎng)絡(luò)創(chuàng)建成功,,等待命令消息。

 ?、?xF9,,匯聚節(jié)點(diǎn)發(fā)送至數(shù)據(jù)中轉(zhuǎn)器,表示數(shù)據(jù)全部上傳完畢,,等待休眠,。作為響應(yīng),數(shù)據(jù)中轉(zhuǎn)器通過串口向匯聚節(jié)點(diǎn)發(fā)送CMD為0x09的休眠設(shè)置命令,。

  LEN表示數(shù)據(jù)的長(zhǎng)度,,方便數(shù)據(jù)中轉(zhuǎn)器對(duì)接收到的數(shù)據(jù)進(jìn)行空間分配和存儲(chǔ)。FCS是校驗(yàn)位,,用于表征數(shù)據(jù)的準(zhǔn)確性,。

  當(dāng)匯聚節(jié)點(diǎn)接收到串口數(shù)據(jù)時(shí),匯聚節(jié)點(diǎn)會(huì)觸發(fā)自身應(yīng)用層的串口事件,,用于解析發(fā)送過來的命令消息,,然后根據(jù)該命令來觸發(fā)相應(yīng)的事件進(jìn)行處理,。

  3.4 休眠設(shè)置

  實(shí)驗(yàn)證實(shí),,節(jié)點(diǎn)在休眠過程中處于斷網(wǎng)狀態(tài),。因此,為節(jié)省節(jié)點(diǎn)頻繁聯(lián)網(wǎng)帶來的功耗和保證全網(wǎng)節(jié)點(diǎn)工作狀態(tài)同步,,在軟件上設(shè)計(jì)為節(jié)點(diǎn)在聯(lián)網(wǎng)成功后只執(zhí)行通信任務(wù),,而休眠過程中只執(zhí)行采集任務(wù)。當(dāng)節(jié)點(diǎn)采集時(shí)刻到來,,觸發(fā)采集事件,,打開傳感器的開關(guān)對(duì)環(huán)境數(shù)據(jù)進(jìn)行采集,并控制I/O口對(duì)傳感器采集得到的信號(hào)進(jìn)行A/D采樣,,最后將采樣值以SPI方式存入外部存儲(chǔ)器,。在每次通信結(jié)束之前節(jié)點(diǎn)都會(huì)判斷是否有休眠設(shè)置命令,若接收到休眠設(shè)置命令,,節(jié)點(diǎn)則會(huì)按照該設(shè)置進(jìn)行休眠,,直到下一次醒來;若沒接收到命令,,節(jié)點(diǎn)則會(huì)按照上一次的休眠設(shè)置進(jìn)行休眠,。

  數(shù)據(jù)中轉(zhuǎn)器通過串口向匯聚節(jié)點(diǎn)發(fā)送的休眠設(shè)置命令的數(shù)據(jù)幀格式如表1所列。

數(shù)據(jù)幀格式

  Sleeping_Time表示節(jié)點(diǎn)要休眠的時(shí)間,;Collecting_Time表示節(jié)點(diǎn)在休眠過程中的采集時(shí)間間隔,;Current_Time是當(dāng)前的校準(zhǔn)時(shí)間;Sensor_Flag表示傳感器開關(guān)的標(biāo)志,。休眠過程中到達(dá)采集時(shí)刻,,進(jìn)行環(huán)境數(shù)據(jù)的采集、采樣和存儲(chǔ),。向采集節(jié)點(diǎn)發(fā)送當(dāng)前的校準(zhǔn)時(shí)間,,保證節(jié)點(diǎn)采集時(shí)刻精確和時(shí)間的同步。同時(shí),,傳感器的開關(guān)標(biāo)志位可以控制打開或關(guān)閉哪幾路傳感器,,采集用戶感興趣的環(huán)境數(shù)據(jù)。到達(dá)休眠時(shí)刻,,節(jié)點(diǎn)醒來,,連接網(wǎng)絡(luò)。

  3.5 充  電

  為保證鎳氫電池對(duì)節(jié)點(diǎn)長(zhǎng)期供電,,節(jié)點(diǎn)硬件電路設(shè)計(jì)了1個(gè)充電控制電路對(duì)其進(jìn)行充電管理,。CC2430專門提供1個(gè)I/O口對(duì)供電電壓進(jìn)行A/D采樣。當(dāng)供電的電源電壓不足時(shí)(即低于設(shè)定的值),,在軟件上會(huì)通過切換先讓另一組電源對(duì)節(jié)點(diǎn)進(jìn)行供電,,再打開太陽(yáng)能的充電電路對(duì)電源充電。節(jié)點(diǎn)在通信和采集數(shù)據(jù)時(shí)功耗很大,因此在每一次通信和采集數(shù)據(jù)完成之后都會(huì)檢測(cè)當(dāng)前供電電壓值和當(dāng)前的充電電壓值,,根據(jù)2個(gè)電壓值決定要不要進(jìn)行電源切換,、是否對(duì)電源進(jìn)行供電以及充電是否完成。

  3.6 異常處理

  網(wǎng)絡(luò)中節(jié)點(diǎn)在工作時(shí)可能出現(xiàn)一些異常,,因此要對(duì)這些異常作糾錯(cuò)處理,,以保證節(jié)點(diǎn)的正常工作。

  (1)新加入節(jié)點(diǎn)的異步

  在全網(wǎng)節(jié)點(diǎn)處于休眠狀態(tài)時(shí),,若有新的節(jié)點(diǎn)加入網(wǎng)絡(luò),,為保證其網(wǎng)絡(luò)狀態(tài)和其他節(jié)點(diǎn)同步,新加入的節(jié)點(diǎn)在搜索不到網(wǎng)絡(luò)時(shí)會(huì)按照默認(rèn)的休眠設(shè)置進(jìn)行休眠,。休眠醒來繼續(xù)搜索網(wǎng)絡(luò),。以此循環(huán)直到搜索到網(wǎng)絡(luò)。

  (2)數(shù)據(jù)出錯(cuò)

  數(shù)據(jù)中轉(zhuǎn)器通過串口獲得的數(shù)據(jù)都要進(jìn)行校驗(yàn)處理,,若校驗(yàn)出錯(cuò),,則拋棄該數(shù)據(jù)包,命令匯聚節(jié)點(diǎn)重發(fā)數(shù)據(jù),。

  (3)無應(yīng)答

  匯聚節(jié)點(diǎn)對(duì)某一采集節(jié)點(diǎn)發(fā)送上傳數(shù)據(jù)的請(qǐng)求命令,,若該節(jié)點(diǎn)在規(guī)定時(shí)間內(nèi)沒有作出響應(yīng),匯聚節(jié)點(diǎn)會(huì)默認(rèn)該節(jié)點(diǎn)被拋棄,,它將向下一個(gè)節(jié)點(diǎn)發(fā)送上傳數(shù)據(jù)的請(qǐng)求,。

  (4)無確認(rèn)

  匯聚節(jié)點(diǎn)收到采集節(jié)點(diǎn)的數(shù)據(jù)后都會(huì)向該節(jié)點(diǎn)發(fā)送一個(gè)確認(rèn)的消息,表示數(shù)據(jù)已經(jīng)收到,。而采集節(jié)點(diǎn)會(huì)根據(jù)有沒有接收到確認(rèn)消息決定數(shù)據(jù)要不要重發(fā),。

  結(jié)  語(yǔ)

  無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的軟件設(shè)計(jì)很大程度上決定了整個(gè)系統(tǒng)的穩(wěn)定性和長(zhǎng)久性。任務(wù)調(diào)度機(jī)制和異常處理決定系統(tǒng)在工作時(shí)處于穩(wěn)定的狀態(tài),,而節(jié)點(diǎn)的充電管理系統(tǒng)保證了節(jié)點(diǎn)長(zhǎng)期工作的能源供應(yīng),。系統(tǒng)可以按照用戶需要,在野外大量,、準(zhǔn)確地采集數(shù)據(jù),。本設(shè)計(jì)可用于在無人值守情況下長(zhǎng)期監(jiān)測(cè)某一區(qū)域的環(huán)境信息,有著廣闊的應(yīng)用前景,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。