<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 面向環(huán)境監(jiān)測(cè)的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的軟件設(shè)計(jì)

          面向環(huán)境監(jiān)測(cè)的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的軟件設(shè)計(jì)

          作者: 時(shí)間:2010-07-02 來(lái)源:網(wǎng)絡(luò) 收藏
          主函數(shù)在完成相關(guān)初始化之后會(huì)進(jìn)入無(wú)限循環(huán)過(guò)程,該過(guò)程會(huì)一直檢測(cè)操作系統(tǒng)的任務(wù)鏈表中是否有事件要進(jìn)行處理。

          3.2工作流程

          為便于管理和調(diào)度,所要實(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)在同一時(shí)刻醒來(lái)。當(dāng)匯聚節(jié)點(diǎn)創(chuàng)建成功,并且采集節(jié)點(diǎn)入網(wǎng)成功后,全網(wǎng)節(jié)點(diǎn)處于通信狀態(tài)。匯聚節(jié)點(diǎn)會(huì)通過(guò)串口向數(shù)據(jù)中轉(zhuǎn)器發(fā)送1個(gè)表示準(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ù)上傳給它,再通過(guò)觸發(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)的休眠過(guò)程進(jìn)行設(shè)置。

          3.3 串口通信協(xié)議

          匯聚節(jié)點(diǎn)與數(shù)據(jù)中轉(zhuǎn)器之間的通信是通過(guò)串口進(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ù)幀格式如下所示:



          其中,SOP為起始標(biāo)志符,用1字節(jié)來(lái)表示數(shù)據(jù)包的起始,將這個(gè)字節(jié)定義為0x02;CMD表示命令I(lǐng)D,用1字節(jié)的數(shù)據(jù)來(lái)標(biāo)識(shí)命令消息。LEN表示DATA的長(zhǎng)度,用1字節(jié)來(lái)指示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)器通過(guò)串口接收到數(shù)據(jù)后,都是通過(guò)判別CMD對(duì)數(shù)據(jù)進(jìn)行解析的。串口數(shù)據(jù)的CMD有如下幾種:

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

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

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

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

          ⑤0xF9,匯聚節(jié)點(diǎn)發(fā)送至數(shù)據(jù)中轉(zhuǎn)器,表示數(shù)據(jù)全部上傳完畢,等待休眠。作為響應(yīng),數(shù)據(jù)中轉(zhuǎn)器通過(guò)串口向匯聚節(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ā)送過(guò)來(lái)的命令消息,然后根據(jù)該命令來(lái)觸發(fā)相應(yīng)的事件進(jìn)行處理。

          3.4 休眠設(shè)置

          實(shí)驗(yàn)證實(shí),節(jié)點(diǎn)在休眠過(guò)程中處于斷網(wǎng)狀態(tài)。因此,為節(jié)省節(jié)點(diǎn)頻繁聯(lián)網(wǎng)帶來(lái)的功耗和保證全網(wǎng)節(jié)點(diǎn)工作狀態(tài)同步,在為節(jié)點(diǎn)在聯(lián)網(wǎng)成功后只執(zhí)行通信任務(wù),而休眠過(guò)程中只執(zhí)行采集任務(wù)。當(dāng)節(jié)點(diǎn)采集時(shí)刻到來(lái),觸發(fā)采集事件,打開(kāi)的開(kāi)關(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)行休眠,直到下一次醒來(lái);若沒(méi)接收到命令,節(jié)點(diǎn)則會(huì)按照上一次的休眠設(shè)置進(jìn)行休眠。


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();