2

私のシミュレーションは 1 つのモバイル ノードと 3 つのアクセス ポイントで構成されています。各アクセス ポイントに応じてモバイル ノードの方向を検出したいです。計算方法はわかっていますが、モバイル ノードの位置は時間によって変化します...

モバイル ノードの最後の位置を 1 秒前に保存したい..または 1 秒ごとに定期的にチェックする.問題は、毎秒実行されることを保証するコードを配置するのに最適な位置はどこかということです....ソースコードのファイルは、グローバル変数を宣言する方が良いですか? どんな助けでも大歓迎です...

4

2 に答える 2

0

各ノードがそれ自体にスケジュールする定期的なメッセージを利用できます。の最終段階に入れてinitialize()OKです。

次の行で何かを行うことができます。

void initialize(int stage)
{
    if (stage == 3)
    {
        cMessage *pMsg = new cMessage("myPeriodicMessage");
        scheduleAt(simTime()+1.0, pMsg);
    }
}

次にhandleMessage()持っています:

void handleMessage(cMessage *msg)
{
    if (msg->isSelfMessage())
    {
       /* if you have different selfMessages, compare them like below, or use different message kinds and checks accordingly */
       if (strcmp("myPeriodicMessage", msg->getName())==0)
       {
            doPeriodicTaks();
            scheduleAt(simTime()+1.0, pMsg);
       }
    }
}

この方法では、必要な情報がノードごとに個別に取得されることに注意してください。集中管理したい場合は、@Rudi の提案に従う必要があります。

于 2015-08-28T10:44:36.193 に答える
0

INET を使用していると仮定します (質問には記載されていません):

ノードの速度を保存/計算するのに最適な場所は、定期的な更新タイマーが既にあるモビリティ モジュールのすぐ内側ですが、なぜそれを計算する必要があるのでしょうか? IMobilityインターフェースはすでに持っているのでgetCurrentAngularPosition()getCurrentSpeed()ノードの位置を取得できるのと同じように、必要なときにいつでも移動の方向とノード速度の絶対値の両方を取得できます。実際に使用しているモビリティ モデルがこれらの機能を実装しているかどうかを確認する必要があります。そうでない場合は、そこに実装する必要があります。

于 2015-08-28T09:06:26.150 に答える