周 順,張西紅,殷承浩
(軍械工程學(xué)院計(jì)算機(jī)工程系,石家莊 050003)
TinyOS具有微型化、支持輕量級(jí)并發(fā)操作、靈活、低功耗等優(yōu)點(diǎn),已經(jīng)被成千上萬(wàn)的研發(fā)人員采用,應(yīng)用于范圍廣闊的無(wú)線傳感器網(wǎng)絡(luò)中。TinyOS的設(shè)計(jì)特點(diǎn)主要體現(xiàn)在以下三個(gè)方面:(1)基于組件的編程模型;(2)基于事件觸發(fā)的并發(fā)執(zhí)行模型;(3)采用基于主動(dòng)消息的通信模型。最初TinyOS是由C語(yǔ)言實(shí)現(xiàn)的,后來(lái)采用nesC語(yǔ)言實(shí)現(xiàn)。nesC對(duì)C語(yǔ)言進(jìn)行了擴(kuò)展,將組件化思想與事件驅(qū)動(dòng)的并發(fā)執(zhí)行模型結(jié)合起來(lái),提高了應(yīng)用開(kāi)發(fā)的方便性和執(zhí)行的有效性。
在TinyOS中,每個(gè)應(yīng)用程序通常由頂層配置、核心處理模塊和其他組件組成。每個(gè)應(yīng)用程序僅有一個(gè)頂層配置,在頂層配置中,說(shuō)明該應(yīng)用所要使用的組件及組件間的接口關(guān)系。一般而言,與應(yīng)用的頂層配置相對(duì)應(yīng)的存在一個(gè)模塊,以頂層配置名+M.nc命名,此模塊就是該應(yīng)用的核心處理模塊。如果一個(gè)應(yīng)用程序只需頂層配置將幾個(gè)系統(tǒng)組件裝配起來(lái)就可實(shí)現(xiàn)所需的功能,那么,就不必自定義核心處理模塊,但所用的系統(tǒng)組件中必有一個(gè)作為核心處理模塊存在。應(yīng)用程序的功能決定了所要包含的組件,組件間通過(guò)接口進(jìn)行連接,上層組件調(diào)用下層組件的命令,下層組件向上觸發(fā)事件。應(yīng)用程序總體框架如圖1所示。

圖1 應(yīng)用程序總體框架
一個(gè)完整的TinyOS程序就是一個(gè)由若干組件按一定層次關(guān)系裝配而成的復(fù)合組件。TinyOS程序模型如圖2所示。在TinyOS程序模型中,處于最上層的是Main組件。該組件由操作系統(tǒng)提供,傳感器上電復(fù)位后會(huì)首先執(zhí)行該組件中的函數(shù),其主要功能是初始化硬件、啟動(dòng)任務(wù)調(diào)度器以及執(zhí)行用戶組件的初始化函數(shù)。每個(gè)TinyOS程序至少應(yīng)該具有一個(gè)用戶組件,該用戶組件通過(guò)接口調(diào)用下層組件提供的服務(wù),實(shí)現(xiàn)程序功能,如數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)收發(fā)等。用戶組件的開(kāi)發(fā)為T(mén)inyOS程序設(shè)計(jì)的重點(diǎn)。TinyOS提供一些常用組件,如執(zhí)行組件、傳感器組件、通信組件。執(zhí)行組件用于控制LED指示燈、繼電器、步進(jìn)電機(jī)等硬件模塊;傳感器組件用于采集環(huán)境數(shù)據(jù),如溫度、亮度等;通信組件則實(shí)現(xiàn)與其它節(jié)點(diǎn)通信。TinyOS提供了兩種通信組件:通過(guò)無(wú)線電收發(fā)器通信的組件和通過(guò)UART口通信的組件,后者僅應(yīng)用于槽節(jié)點(diǎn)中。硬件抽象層對(duì)上層組件屏蔽了底層硬件的特性,從而實(shí)現(xiàn)上層組件的硬件無(wú)關(guān)性,以方便程序移植。

圖2 TinyOS基于組件的程序模型
本應(yīng)用程序sense模擬從傳感器主板上的照片傳感器上獲取光強(qiáng)度值,通過(guò)ADC組件將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),以二進(jìn)制數(shù)值的形式將其低三位值顯示在微粒LED上。其實(shí)現(xiàn)模塊文件為SenseM.nc,配置文件為 Sense.nc。
首先,進(jìn)行實(shí)現(xiàn)模塊的編寫(xiě),代碼如下:



(1)將所編寫(xiě)的程序文件sense放在c:/Tiny-OS/cygwin/opt/TinyOS-1.x/apps目錄下。
(2)打開(kāi)一個(gè)cygwin。
輸入命令“cd:/TinyOS/cygwin/opt/TinyOS-1.x/apps/sense”,進(jìn)入應(yīng)用程序所放目錄,而后運(yùn)行命令“make pc”,系統(tǒng)自動(dòng)編譯程序并會(huì)在sense目錄下生成一個(gè)pc文件夾,其中就是生成的main.exe。
最后輸入命令“build/pc/main.exe-gui 10”(這里的10指設(shè)置了10個(gè)傳感器節(jié)點(diǎn)),程序會(huì)自動(dòng)連接圖形化界面TinyViz,如圖3所示。

圖3 連接圖形化界面
(3)不要關(guān)閉cygwin,再打開(kāi)一個(gè)cygwin。
進(jìn) 入 目 錄 :c:/tinyos/cygwin/opt/TinyOS -1.x/tools/java/net/TinyOS/sim
運(yùn)行命令:“make”
再運(yùn)行命令:“java net.TinyOS.sim.TinyViz”
此時(shí),系統(tǒng)將自動(dòng)打開(kāi)TinyViz界面,其上顯示的是10個(gè)節(jié)點(diǎn)亮燈情況,并顯示調(diào)試dbg信息,如圖4所示。

圖4 TinyViz中模擬節(jié)點(diǎn)采光
在圖4TinyViz界面中顯示10個(gè)節(jié)點(diǎn)的亮燈情況。在還未運(yùn)行時(shí)每個(gè)節(jié)點(diǎn)上都有紅、黃、綠三種不同顏色燈。當(dāng)點(diǎn)擊上方的綠色箭頭按鈕時(shí),仿真軟件即開(kāi)始進(jìn)行模擬,模擬中可以看到10個(gè)節(jié)點(diǎn)中不停地閃爍,模擬獲取光強(qiáng)度值。其中黃燈代表最低位值,綠燈代表第二位值,紅燈代表最高位值。根據(jù)紅、綠、黃的亮燈情況來(lái)模擬節(jié)點(diǎn)所獲取的光強(qiáng)度數(shù)值(二進(jìn)制數(shù)值)。同時(shí),在右方Debug信息欄里會(huì)顯示節(jié)點(diǎn)獲取光強(qiáng)度值及亮燈情況,上方delay進(jìn)度條可調(diào)節(jié)延遲時(shí)間,左邊Plugins菜單中可以選擇右邊信息框中想要顯示的其他信息。
[1]劉營(yíng),于宏毅.基于TinyOS的無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā)技術(shù)[J].傳感器與微系統(tǒng),2007,26(3):93-96.
[2]孫利民,李建中,陳渝,等.無(wú)線傳感器網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,2005:319-390.
[3]邱桂芳,孫宏宇等.傳感器網(wǎng)絡(luò)研究及初步實(shí)現(xiàn)[J].微計(jì)算機(jī)應(yīng)用,2007(4):350-353.
[4]Levis P,LeeN TOSSM:a simulator for TinyOS networks[EB/OL].(2005 -12 -25)[2009 -10 -12].http:∥www.tinyos.net/tinyos-1.x/doc/nido.pdf.