傳感器網(wǎng)絡(luò)應(yīng)用程序的建模、仿真與自動(dòng)代碼生成框架
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
無(wú)線傳感器網(wǎng)絡(luò)(Wireless Sensor Networks,WSN)在現(xiàn)場(chǎng)應(yīng)用時(shí),通過無(wú)線信道通信進(jìn)行信息共享和協(xié)作處理。
WSN應(yīng)用目前存在兩種功能分析包,即特定平臺(tái)操作系統(tǒng)和量身定制模型,在應(yīng)用程序開發(fā)階段都存在明顯的缺陷。第一類將應(yīng)用程序遷移到其他平臺(tái)時(shí)很困難,例如從TinyOS遷移到MANTIS或遷移到ZigBee兼容平臺(tái),必須重寫大量代碼并進(jìn)行大量調(diào)試。第二類有許多依賴于平臺(tái)的具體代碼需要開發(fā)和調(diào)試,如果在開發(fā)和集成階段結(jié)束后發(fā)現(xiàn)問題,惟一的解決方法就是基于LED進(jìn)行調(diào)試,極為耗時(shí)。
參考仿真框架
The MathWorks公司構(gòu)建了基于 Simulink的傳感器網(wǎng)絡(luò)模型作為動(dòng)態(tài)系統(tǒng)的基時(shí)仿真器。模型具有兩個(gè)主要組件:無(wú)線信道模型(下文稱為Communication Medium)和Node塊。
Communication Medium塊可以通過C語(yǔ)言實(shí)現(xiàn),可將其修改為重用任意現(xiàn)有信道和連接模型。
Node塊有多個(gè)完全參數(shù)化的mote,包含硬件與軟件平臺(tái)模型。例如包括計(jì)時(shí)器、LED以及應(yīng)用程序的參數(shù)化Stateflow塊。Stateflow是一種有限狀態(tài)機(jī)語(yǔ)言,用于建模、仿真控制邏輯和流程圖。可以用于實(shí)現(xiàn)各mote內(nèi)運(yùn)行的算法(應(yīng)用程序、中間件或設(shè)備驅(qū)動(dòng)器)。
只需修改模板算法(Stateflow 庫(kù)對(duì)象),在Communication Medium塊中設(shè)置節(jié)點(diǎn)的連接參數(shù)即可開始仿真。使用動(dòng)畫狀態(tài)圖、觀測(cè)儀器和顯示器收集統(tǒng)計(jì)數(shù)據(jù),以執(zhí)行算法的功能分析。如果結(jié)果分析表明需要改進(jìn),則可通過改進(jìn)算法實(shí)現(xiàn)。
完成算法的功能分析后,通過算法的Stateflow自動(dòng)為任何受支持的WSN平臺(tái)生成代碼。這是利用RealTime Workshop Embedded Coder軟件的自定義功能完成的,它能為Simulink和Stateflow塊生成可嵌入的ANSI C代碼。
圖1 WSN的一個(gè)簡(jiǎn)單仿真框架
WSN應(yīng)用程序操作系統(tǒng)示例:TinyOS與MANTIS
TinyOS的編程模型基于組件,概念實(shí)體由模塊和配置兩類組件表示,實(shí)現(xiàn)用于聲明命令和事件簽名的接口。事件即軟件抽象,例如接受信息包、完成傳感器取樣等。命令用于觸發(fā)操作,例如傳感器讀取操作或啟動(dòng)無(wú)線電接收和傳輸信息等。TinyOS應(yīng)用程序是使用nesC編寫的,這是C語(yǔ)言的一個(gè)擴(kuò)展。
MANTIS是一種輕量級(jí)、多線程的操作系統(tǒng),能在能源受限的分布式傳感器網(wǎng)絡(luò)上進(jìn)行多任務(wù)處理。調(diào)度程序采用基于優(yōu)先級(jí)的輪叫調(diào)度,支持線程先占(pre-emption),允許操作系統(tǒng)在活動(dòng)線程間自由切換而無(wú)需等待。由于采用了這樣的方法,操作系統(tǒng)對(duì)于關(guān)鍵事件的響應(yīng)速度比TinyOS更快。MANTIS的內(nèi)核和API都是使用標(biāo)準(zhǔn)C語(yǔ)言編寫的。
圖2 WSN應(yīng)用程序建模、仿真和代碼生成框架
實(shí)現(xiàn) WSN 應(yīng)用程序
MANTIS線程和任務(wù)的計(jì)算主體以及TinyOS的命令實(shí)際上都是使用C語(yǔ)言編寫的。在MANTIS中,集成非常直接,因?yàn)镽eal-Time Workshop Embedded Coder的ANSI C輸出可直接用作用戶線程。TinyOS的程序由高級(jí)抽象組成,但這些抽象的主體是使用C語(yǔ)言編寫的,因而只需要一個(gè)代碼轉(zhuǎn)換器,以C語(yǔ)言代碼作為輸入,將代碼分割成不同的部分(包括定義、函數(shù)等),并使用這些部分來(lái)生成nesC代碼。
本文使用The MathWorks公司的 Target Language Compiler(TLC)實(shí)現(xiàn)這樣的代碼轉(zhuǎn)換器。它提供了生成特定平臺(tái)代碼的機(jī)制,可接受來(lái)自ANSI C代碼的部分(例如包含、定義、函數(shù)代碼等),也可為目標(biāo)平臺(tái)添加自定義代碼。使用Stateflow時(shí)無(wú)需考慮通用函數(shù)在TinyOS或MANTIS中的實(shí)際實(shí)現(xiàn),因?yàn)門LC庫(kù)中已經(jīng)實(shí)現(xiàn)了這些函數(shù),可用于任意操作系統(tǒng)。通過使用TLC腳本自動(dòng)生成TinyOS或MANTIS應(yīng)用程序,在無(wú)需修改的前提下為目標(biāo)平臺(tái)編譯和執(zhí)行這些應(yīng)用程序。 并且,TLC可重寫并修改源代碼,分割源代碼并使之適合底層平臺(tái)。這不僅實(shí)現(xiàn)了比編譯器更出色的優(yōu)化,還能方便的在硬件和軟件平臺(tái)之間遷移應(yīng)用程序。