周 順,張西紅,殷承浩
(軍械工程學(xué)院計算機(jī)工程系,石家莊 050003)
TinyOS具有微型化、支持輕量級并發(fā)操作、靈活、低功耗等優(yōu)點,已經(jīng)被成千上萬的研發(fā)人員采用,應(yīng)用于范圍廣闊的無線傳感器網(wǎng)絡(luò)中。TinyOS的設(shè)計特點主要體現(xiàn)在以下三個方面:(1)基于組件的編程模型;(2)基于事件觸發(fā)的并發(fā)執(zhí)行模型;(3)采用基于主動消息的通信模型。最初TinyOS是由C語言實現(xiàn)的,后來采用nesC語言實現(xiàn)。nesC對C語言進(jìn)行了擴(kuò)展,將組件化思想與事件驅(qū)動的并發(fā)執(zhí)行模型結(jié)合起來,提高了應(yīng)用開發(fā)的方便性和執(zhí)行的有效性。
在TinyOS中,每個應(yīng)用程序通常由頂層配置、核心處理模塊和其他組件組成。每個應(yīng)用程序僅有一個頂層配置,在頂層配置中,說明該應(yīng)用所要使用的組件及組件間的接口關(guān)系。一般而言,與應(yīng)用的頂層配置相對應(yīng)的存在一個模塊,以頂層配置名+M.nc命名,此模塊就是該應(yīng)用的核心處理模塊。如果一個應(yīng)用程序只需頂層配置將幾個系統(tǒng)組件裝配起來就可實現(xiàn)所需的功能,那么,就不必自定義核心處理模塊,但所用的系統(tǒng)組件中必有一個作為核心處理模塊存在。應(yīng)用程序的功能決定了所要包含的組件,組件間通過接口進(jìn)行連接,上層組件調(diào)用下層組件的命令,下層組件向上觸發(fā)事件。應(yīng)用程序總體框架如圖1所示。
圖1 應(yīng)用程序總體框架
一個完整的TinyOS程序就是一個由若干組件按一定層次關(guān)系裝配而成的復(fù)合組件。TinyOS程序模型如圖2所示。在TinyOS程序模型中,處于最上層的是Main組件。該組件由操作系統(tǒng)提供,傳感器上電復(fù)位后會首先執(zhí)行該組件中的函數(shù),其主要功能是初始化硬件、啟動任務(wù)調(diào)度器以及執(zhí)行用戶組件的初始化函數(shù)。每個TinyOS程序至少應(yīng)該具有一個用戶組件,該用戶組件通過接口調(diào)用下層組件提供的服務(wù),實現(xiàn)程序功能,如數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)收發(fā)等。用戶組件的開發(fā)為TinyOS程序設(shè)計的重點。TinyOS提供一些常用組件,如執(zhí)行組件、傳感器組件、通信組件。執(zhí)行組件用于控制LED指示燈、繼電器、步進(jìn)電機(jī)等硬件模塊;傳感器組件用于采集環(huán)境數(shù)據(jù),如溫度、亮度等;通信組件則實現(xiàn)與其它節(jié)點通信。TinyOS提供了兩種通信組件:通過無線電收發(fā)器通信的組件和通過UART口通信的組件,后者僅應(yīng)用于槽節(jié)點中。硬件抽象層對上層組件屏蔽了底層硬件的特性,從而實現(xiàn)上層組件的硬件無關(guān)性,以方便程序移植。
圖2 TinyOS基于組件的程序模型
本應(yīng)用程序sense模擬從傳感器主板上的照片傳感器上獲取光強(qiáng)度值,通過ADC組件將模擬信號轉(zhuǎn)換為數(shù)字信號,以二進(jìn)制數(shù)值的形式將其低三位值顯示在微粒LED上。其實現(xiàn)模塊文件為SenseM.nc,配置文件為 Sense.nc。
首先,進(jìn)行實現(xiàn)模塊的編寫,代碼如下:
(1)將所編寫的程序文件sense放在c:/Tiny-OS/cygwin/opt/TinyOS-1.x/apps目錄下。
(2)打開一個cygwin。
輸入命令“cd:/TinyOS/cygwin/opt/TinyOS-1.x/apps/sense”,進(jìn)入應(yīng)用程序所放目錄,而后運行命令“make pc”,系統(tǒng)自動編譯程序并會在sense目錄下生成一個pc文件夾,其中就是生成的main.exe。
最后輸入命令“build/pc/main.exe-gui 10”(這里的10指設(shè)置了10個傳感器節(jié)點),程序會自動連接圖形化界面TinyViz,如圖3所示。
圖3 連接圖形化界面
(3)不要關(guān)閉cygwin,再打開一個cygwin。
進(jìn) 入 目 錄 :c:/tinyos/cygwin/opt/TinyOS -1.x/tools/java/net/TinyOS/sim
運行命令:“make”
再運行命令:“java net.TinyOS.sim.TinyViz”
此時,系統(tǒng)將自動打開TinyViz界面,其上顯示的是10個節(jié)點亮燈情況,并顯示調(diào)試dbg信息,如圖4所示。
圖4 TinyViz中模擬節(jié)點采光
在圖4TinyViz界面中顯示10個節(jié)點的亮燈情況。在還未運行時每個節(jié)點上都有紅、黃、綠三種不同顏色燈。當(dāng)點擊上方的綠色箭頭按鈕時,仿真軟件即開始進(jìn)行模擬,模擬中可以看到10個節(jié)點中不停地閃爍,模擬獲取光強(qiáng)度值。其中黃燈代表最低位值,綠燈代表第二位值,紅燈代表最高位值。根據(jù)紅、綠、黃的亮燈情況來模擬節(jié)點所獲取的光強(qiáng)度數(shù)值(二進(jìn)制數(shù)值)。同時,在右方Debug信息欄里會顯示節(jié)點獲取光強(qiáng)度值及亮燈情況,上方delay進(jìn)度條可調(diào)節(jié)延遲時間,左邊Plugins菜單中可以選擇右邊信息框中想要顯示的其他信息。
[1]劉營,于宏毅.基于TinyOS的無線傳感器網(wǎng)絡(luò)應(yīng)用程序開發(fā)技術(shù)[J].傳感器與微系統(tǒng),2007,26(3):93-96.
[2]孫利民,李建中,陳渝,等.無線傳感器網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,2005:319-390.
[3]邱桂芳,孫宏宇等.傳感器網(wǎng)絡(luò)研究及初步實現(xiàn)[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.