文源盛
【摘要】 在短波網(wǎng)項目中,仿真技術(shù)作為一種低成本,高準確性的方法得到廣泛使用。通過仿真技術(shù),設(shè)計者可以在短波通信系統(tǒng)設(shè)計時就能驗證通信流程的正確性以及模擬網(wǎng)絡(luò)建成以后的使用性能效益,為網(wǎng)絡(luò)設(shè)計提供必要的依據(jù)。在眾多的仿真技術(shù)中,半實物仿真通過部分模塊與實際網(wǎng)絡(luò)環(huán)境進行交互,更能貼近現(xiàn)實網(wǎng)絡(luò)環(huán)境,更能反映出實際網(wǎng)絡(luò)的性能。本文主要介紹如何在短波項目中使用omnet仿真平臺通過網(wǎng)口與仿真程序進行數(shù)據(jù)交互實現(xiàn)半實物仿真,并且介紹其中注意的問題。
【關(guān)鍵詞】 短波網(wǎng) 半實物仿真 omnet
一、概述
短波網(wǎng)項目中,仿真技術(shù)是一種低成本高準確性的方法。通過仿真技術(shù),設(shè)計者可以在短波通信系統(tǒng)設(shè)計時就能驗證通信流程的正確性以及模擬網(wǎng)絡(luò)建成以后的使用性能,為網(wǎng)絡(luò)設(shè)計提供必要的依據(jù)。
在眾多的仿真技術(shù)中,半實物仿真通過部分模塊與實際網(wǎng)絡(luò)環(huán)境進行交互,更能貼近現(xiàn)實網(wǎng)絡(luò)環(huán)境,更能反映出實際網(wǎng)絡(luò)的性能。omnet是一個基于離散事件,組建模塊化的網(wǎng)絡(luò)仿真平臺。
由于其清晰的圖形界面,簡單的消息交互機制以及提供了大量的成熟的通信仿真模塊,它已經(jīng)廣泛應(yīng)用于短波網(wǎng)項目中。在使用omnet進行半實物仿真的過程中,經(jīng)常會碰到需要通過網(wǎng)口Socket與仿真程序進行數(shù)據(jù)交互的情況,本文主要為了解決以上問題,介紹了如何使用omnet實現(xiàn)Socket接口與仿真程序交互數(shù)據(jù)。
二、實現(xiàn)原理
要說明Socket與omnet仿真程序如何實現(xiàn)數(shù)據(jù)交換,先簡要介紹omnet中消息的分發(fā)機制。
omnet仿真平臺的消息分發(fā)機制是通過一個叫cSchedule的類來實現(xiàn)。當仿真程序初始化的時,omnet仿真平臺會生成一個公有的cSchedule類實例。這實例負責(zé)把各個仿真類對象所發(fā)送的消息,按照其應(yīng)該到達的時間,按時有效的傳遞到各個實例的handleMessage函數(shù)中,以便對消息進行處理。
oment的仿真平臺對以上過程進行了妥善的封裝,對于使用者來說是透明的,使用者只需關(guān)心消息到達以后如何處理,如何編寫handleMessage函數(shù)。
要實現(xiàn)Socket接口與omnet仿真程序數(shù)據(jù)交互,則需要把已有的cSchedule類實例進行改造,使其不單單只為omnet的仿真類傳遞消息,還能接受來自網(wǎng)口Socket的數(shù)據(jù),并且以handleMessage的形式交給用戶處理。
omnet++4.0為實現(xiàn)這目標提供了cSocketRTScheduler類。cSocketRTScheduler類使網(wǎng)口的傳輸數(shù)據(jù)與仿真程序接收到的消息的接口一致。網(wǎng)絡(luò)實際數(shù)據(jù)與程序中的虛擬數(shù)據(jù)均來源于自身模塊的omnet消息通知handlemessag函數(shù),用戶不用特意區(qū)分消息的來源,實現(xiàn)透明傳輸?shù)哪康摹?/p>
三、使用方法
既然cSocketRTScheduler類已經(jīng)幫我們完成了大部分工作,剩下的我們需要完成的工作包括:
3.1加入cSocketRTScheduler類。
拷貝SocketRTScheduler.cc和SocketRTScheduler.h文件到目標工程目錄下。
3.2創(chuàng)建并指定cMessage實例用來表示通過Socket網(wǎng)口傳遞的消息。
調(diào)用函數(shù)new cMessage并取一個特定名字表示該消息,如名字為“rtEvent”則使用
cMessage rtEvent = new cMessage(“rtEvent”);
3.3替換omnet中的cSchedule類實例為cSocketRTScheduler類。
通過simulation類的getScheduler函數(shù)獲取當前的cSchedule類實例,并用check_and_cast使其轉(zhuǎn)化為cSocketRTScheduler類,具體使用如下:
cScheduler*pcScheduler = simulation.getScheduler();
cSocketRTScheduler*rtScheduler=check_and_ cast
3.4使cSchedule類與消息和緩沖區(qū)建立連接。
調(diào)用cSocketRTSchedule的setInterfaceModule函數(shù)實現(xiàn)與omnet消息和緩沖區(qū)建立連接,其中setInterfaceModule函數(shù)的聲明如表1所示。
3.5配置文件中指定cSocketRTScheduler類
在配置文件指定用cSocketRTScheduler類替代cSchedule類,在omnetpp.ini中添加如下配置代碼。
scheduler-class =”cSocketRTScheduler”
3.6指定本程序監(jiān)聽網(wǎng)絡(luò)Socket端口號
最后是要指定監(jiān)聽網(wǎng)口的端口號,cSocketRTSchedule類指定了一個屬性“socketrtscheduler-port”代表網(wǎng)口的端口號,其默認值為4242,可以通過配置文件omnetpp.ini中進行配置,具體添加如下配置代碼到該文件中。
socketrtscheduler-port = 60001
四、數(shù)據(jù)收發(fā)
4.1數(shù)據(jù)接收
由于數(shù)據(jù)的接收統(tǒng)一到handleMessage函數(shù)中,數(shù)據(jù)接收與omnet仿真中的消息處理相類似。
調(diào)用handleMessage函數(shù)。
先判斷接收到的消息是否是自消息,再判斷接收到的消息是為與網(wǎng)口消息相關(guān)聯(lián)的omnet消息。
訪問接收緩沖區(qū),進行數(shù)據(jù)處理。
4.2數(shù)據(jù)發(fā)送
數(shù)據(jù)發(fā)送只需調(diào)用cSocketRTScheduler的sendBytes即可發(fā)送消息。其函數(shù)聲明如圖2 所示。
五、注意事項
當使用了cSocketRTScheduler作為cSchedule后,仿真的時序和現(xiàn)實的時序?qū)y(tǒng)一,即仿真的時間間隔和現(xiàn)實時間間隔將會相等。
仿真程序的休眠將會使得仿真程序的時間與實際時間不一致,導(dǎo)致產(chǎn)生不可預(yù)料的錯誤,因此不推薦在進行串口半實物仿真程序中進行休眠。
參 考 文 獻
[1]操敏,李文峰,袁兵;基于OMNeT++的傳感器網(wǎng)絡(luò)仿真 中國論文科技在線 2011;
[2]石為人,黃河,鮮曉東;OMNeT++與NS2在無線傳感器網(wǎng)絡(luò)仿真中的比較研究 計算機科學(xué)2008Vol.35
[3]黃健強,鞠建波;半實物仿真技術(shù)研究現(xiàn)狀及發(fā)展趨勢 艦船電子工程Vol.31No.75