2015-08-27 5 views
1

мой симулятор состоит из одного мобильного узла и трех точек доступа, я хочу определить направление мобильных узлов в соответствии с каждой точкой доступа, Я знаю, как вычислить его, но положение мобильного узла будет меняться со временем ...Где лучше всего объявлять глобальные переменные и периодически проверять?

Я хочу сохранить последнюю позицию мобильного узла до 1 секунды назад .. или периодически проверять его каждую секунду, вопрос в том, где именно лучшая позиция, чтобы поместить мой код, который гарантирует выполнение каждую секунду .... Во-вторых, какой файл исходных кодов лучше объявлять глобальными переменными? любая помощь высоко оценил ...

+0

Что касается вашего второго вопроса: вы должны размещать несвязанные вопросы отдельно. – Rudi

ответ

0

Вы можете использовать периодическое сообщение, запланированное, которое каждый узел планирует для себя. Ввод его на заключительных этапах initialize() в порядке.

Вы можете сделать что-то в линиях:

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); 
     } 
    } 
} 

Обратите внимание, что в этом случае вы получите информацию, которую вы хотите отдельно для каждого узла. Если вы хотите иметь его централизованно, вы должны следовать предложению Руди.

+0

вы сделали замечательный человек, в вашем примере кода я полностью понял, как работают периодические сообщения, прежде чем я не смогу оценить, как они работают, кстати, я должен проверить предложение Руди, может быть, это проще для меня, если я не поеду, это может решить мою проблему .. снова спасибо за ваш быстрый ответ ... –

+0

@peshrawhamahama приветствую :) – user4786271

0

Предполагая, что вы используете INET (которая не упоминалась в вашем вопросе):

Лучшее место для хранения/вычислить скорость вашего узла прямо внутри модуля мобильности, который уже имеет периодический таймер обновления, но зачем вам вообще его вычислять? Интерфейс IMobility уже имеет getCurrentAngularPosition() и getCurrentSpeed(), поэтому вы можете получить как направление движения, так и абсолютное значение скорости узла в любое время, точно так же, как вы можете получить позицию узла. Вы должны проверить, реализует ли ваша модель мобильности выполнение этих функций. Если нет, вы должны их реализовать.

+0

спасибо за ваше объяснение ... вы указали на то, что я действительно хочу, да, я должен проверить модуль мобильности, у которого уже есть периодический таймер, но моя проблема в том, что мне не нужна скорость, я хочу обнаружить мобильный движение направления узла в соответствии с каждой точкой доступа в любое время, которое я хочу, следовательно getCurrentAngularPosition() возвращает что? Я не знаю, что возвращаемое значение соответствует тому, что ?! Я пытаюсь захватить последнюю позицию узла до некоторого времени и получить текущую позицию, затем этими двумя точками и третьим (AP) я могу получить направление узла в соответствии с этой точкой доступа. –

+0

, так как я в сети, я постараюсь ответить на ваши вопросы. @Rudi, пожалуйста, поправьте меня, если я что-то вводит в заблуждение. 'getCurrentAngularPosition()' возвращает угол перемещения узла на основе глобальной системы координат, предположительно лежащей по всему сценарию. Если вы ищете только направление движения, то информация, поступающая из 'getCurrentAngularPosition()', достаточно. Но опять же, зависит от вашего варианта использования. Например, если у вас есть два узла, движущихся параллельно в одном направлении, вы не сможете отличить их. – user4786271

+0

, как вы упомянули выше (getCurrentAngularPosition() возвращает угол перемещения узла на основе глобальной системы координат, предположительно лежащей по всему сценарию), поскольку я вижу, что это не полезно для меня, потому что у меня есть один мобильный узел и три точки доступа, я хочу знать направление движения MN в соответствии с каждой AP отдельно, например, MN может иметь меньше прямого доступа к AP1, но наоборот имеет более непосредственное отношение к AP2 при перемещении ... Поэтому я думаю, что если есть способ использовать getCurrentAngularPosition(), чтобы сделать это, его хороший еще я должен попытаться сделать это сам. С уважением... –

Смежные вопросы