2017-03-15 14 views
-1

私はOMNeT ++ - 4.6、sumo-0.22.0とVeins-4a2を使用します。RSUはfinish()関数で送信メッセージを受け取らない

私のシナリオでは、すべてのノードによって確立されたパスがRSUから別のものになるように、.rou.xmlファイルを変更しました。ノードはメッセージを作成し、指定した生成タイマーに従ってバッファに格納します。その後、ノードは送信タイマーに従ってRSU(送信元、宛先、または遭遇したRSU)にメッセージを送信します。

私の目標は、すべてのノードがそのバッファを空にするためにシミュレーションを終了するときにメッセージを送信し、シミュレーションで作成されたすべてのメッセージが送信されることです。このシナリオを実行する

、Iは、(仕上げにいくつかの命令を追加した)ノードのアプリケーション層で機能:私はこのような対応するノードのバッファに格納されたすべてのパケットを送る:

for (i = 0 ; i < bufferSize ; i++) { 

    msg = myBuffer.m[i]; 
    wsm->setWsmData(msg.c_str()); 
    sendMessage(wsm->getWsmData()); 
} 

問題finish()関数で送信されたメッセージはRSUで受信されませんが、シミュレーションのすべてのノードが離れるとRSUである宛先に到着します。

  • これらのメッセージが宛先であるRSUによって受信されなかった理由を理解する必要がありますか?

  • シミュレーションを終了する前に、保存されたすべてのメッセージを送信する別のソリューションはありますか?

答えて

2

WLANを使用してメッセージを送信する場合、ノードは通常、チャネルにアクセスする前に待機する必要があります。それまでは、メッセージはキューに入れられています。ノードが破棄される直前にメッセージをエンキューすると、メッセージが送信されなくなる可能性は非常に高いです。

+0

ありがとうございます。ですから、ノードにアクセスしてすべてのメッセージを送信し、シミュレーションを終了した後にノードを待機させる方法はありますか? – Fariha

+0

このようなコードは現在フレームワークには含まれていません。それを書くことは難しいことではありませんが、ネットワークシミュレーションはもはや道路交通シミュレーションと同じように振る舞いません。あなたのシミュレーションモデルに応じて、これは問題になるかもしれません(またはそうでないかもしれません)。 –

+0

私のシミュレーションのこの時点では問題ではないかもしれませんが、私はこのシナリオを実行する必要があります。私はノードのアプリケーション層のfinish()関数にコードを書くかどうかを知る必要がありますか?フレームワークで私が何を変えることができますか? RSUからのACKを受信して​​送信パケットが送信されるまでノードを強制的に待機させるにはどうすればよいですか? finish()メソッドでsleep()関数を使用してパケットアクセスチャネルを待って送信することはできますか? – Fariha

関連する問題