Отображение проблемы в модуле журнала симулятора Omnet ++

Использую жилы-4а2. Во-первых, я выполнил сценарий только с транспортными средствами. Теперь я добавил в свой пример RSU. Мне нужно, чтобы каждый RSU получал данные, отображал сообщение в журнале модуля Omnet ++. Как и для узлов, когда они получают данные, я добавил жирную строку в функцию onData () TraCIDemp11p следующим образом:

void TraCIDemoRSU11p::onData(WaveShortMessage* wsm) {

    findHost()->getDisplayString().updateWith("r=16,green");

    annotations->scheduleErase(1, annotations->drawLine(wsm->getSenderPos(), mobi->getCurrentPosition(), "blue"));

    **EV << " I am an RSU and I have received a data !  \n";**

    //if (!sentMessage) sendMessage(wsm->getWsmData());
}

Моя проблема в том, что «Я RSU, и я получил данные!» Не отображается в модуле журнала. Когда RSU получает данные, это то, что отображается в модуле журнала omnet ++:

** Event #4802  t=9.004337832007  RSUExampleScenario.node[4].nic.phy80211p (PhyLayer80211p, id=161), on `data' (Mac80211Pkt, id=669)
node[4]::PhyLayer80211p: AirFrame encapsulated, length: 1326

person Fariha    schedule 06.10.2016    source источник


Ответы (2)


Я не знаю, знаете ли вы, как работает onData.

По умолчанию onData вызывается только тогда, когда один пакет с именем данные прибыли в одном автомобиле / узле или RSU (через handleLowerMsg).

В вашем случае в RSU так необходимы:

  1. Автомобилям / узлам требуется appl.sendData. с истинным

  2. Призывы к отправке пакетов с имя данные

  3. Дальность связи с автомобилями / узлы и RSU. По умолчанию диаметр составляет 1 км.

Хороший тест - создать небольшую сетку с помощью randomTrips.py и установить RSU в центре, где все узлы могут этого достичь.

-Большой за один комментарий, поэтому я делаю новый ответ - Удачи!

person João Batista    schedule 10.10.2016
comment
Спасибо за эту информацию. В моем сценарии все это выполнено: функция onData () RSU и узлы вызываются через handleLowerMsg в BaseWaveApplLayer. В показанном сообщении omnet ++ rsu получает данные от узлов: # 4802 9.004337832007 node [4] - ›rsu [4] data id = 675 kind = 22003 length = 166 bytes Итак, моя проблема, почему onData () RSU не выполняется при получении данных? - person Fariha; 10.10.2016
comment
Вы используете прожилки по умолчанию или внесли какие-то изменения? - person João Batista; 10.10.2016
comment
Я основан на примере Veins-4a2, но я изменил прикладной уровень узлов и RSU в соответствии со своим сценарием. А уровни приложения (TraCIDemo11p.h et TraCIDemoRSU11p.h) включают: #include veins / modules / application / ieee80211p / BaseWaveApplLayer.h, который содержит функцию handleLowerMsg (), которая вызывает onData (). - person Fariha; 11.10.2016
comment
Возможно, вы частично изменили жилы, и теперь нет вызова onData. Поместите некоторые из ваших handleLowerMsg и другие, и, может быть, я найду где ошибка. Вы не хотите обновлять Veins до Veins 4.4 ( нужна СУМО 0.25.0)? Вы можете увидеть в Tkenv некоторые данные пакета, полученные для некоторого узла (, как можно увидеть здесь)? - person João Batista; 11.10.2016
comment
Это код handleLowerMsg () в BaseWaveApplLayerDTNRSU, имя которого я изменил: / ** void BaseWaveApplLayerDTNRSU :: handleLowerMsg (cMessage * msg) {WaveShortMessage * wsm = dynamic_cast ‹WaveShortMessage *› (msg) АССЕРТ (WSM); EV ‹***************************************************************************************************************************************************************************************************************************************** EV ‹ если (std :: string (wsm- ›getName ()) == маяк) {onBeacon (wsm); } else if (std :: string (wsm- ›getName ()) == data) {onData (wsm); } - person Fariha; 12.10.2016
comment
иначе, если (std :: string (wsm- ›getName ()) == ack) {onACK (wsm); } else {DBG ‹* неизвестное сообщение (‹* wsm- ›getName () ‹*) получено \ n; } удалить (сообщение); } ** / - person Fariha; 12.10.2016
comment
В TraCIDemoRSU у меня есть: #include veins / modules / application / ieee80211pDTNRSU / BaseWaveApplLayerDTNRSU.h. Код onData () RSU очень прост, когда он получает данные, я бы хотел, чтобы он отображал сообщение, поэтому я изменил его следующим образом: - person Fariha; 12.10.2016
comment
void TraCIDemoRSU :: onData (WaveShortMessage * wsm) {findHost () - ›getDisplayString (). updateWith (r = 16, зеленый); аннотации- ›scheduleErase (1, аннотации-› drawLine (wsm- ›getSenderPos (), mobi-› getCurrentPosition (), синий)); - person Fariha; 12.10.2016
comment
EV ‹* Test_EV: Я RSU, и я получил данные! \ N; - person Fariha; 12.10.2016
comment
} Когда я выполнил моделирование, я заметил, что RSU получает данные от узлов (как я показал в предыдущих обзорах). Итак, обычно, когда он получает данные, он должен отображать сообщение (записанное в функции). - person Fariha; 12.10.2016
comment
Я попытался выполнить моделирование с самого начала, чтобы узнать, в чем ошибка. Я смоделировал исходную версию Veins-4a2, в которой работает функция onData () RSU. Затем я только изменил карту erlangen своей картой (которую я сгенерировал для файлов .rou, .net и .poly из sumo-0.22.0, и она хорошо работает). Итак, я сохранил прикладной уровень veins-4a2 (TraCIDemo11p и TraCIDemoRSU11p) с новой картой и провел симуляцию. - person Fariha; 12.10.2016
comment
Фактически, у меня та же проблема, что прикладной уровень RSU не выполняется (я добавил exit (3) в функцию onData () TraCIDemoRSU11p, и симуляция не завершается с ошибкой. - person Fariha; 12.10.2016
comment
Итак, почему, если мы изменим карту по умолчанию, прикладной уровень RSU не будет выполняться? - person Fariha; 12.10.2016
comment
Ваш код, вероятно, вызывает метод OnData BaseWaveApplLaye‌ rDTNRSU.h, который ничего не делает, нравится этот. Вы можете добавить один handleLowerMsg в TraCIDemoRSU11p или добавить код в onData из BaseWaveApplLaye‌ rDTNRSU.h и убедиться, что один из них вызывается. С exit (1), как показано ниже, симуляция обязательно завершится, если вызывается метод. std::cout << endl << "RSU received onData" << endl; exit(1); - person João Batista; 12.10.2016
comment
В моем сценарии я создал две другие папки (которые представляют мои уровни приложения для узлов / RSU), которые я назвал dtnRSU для узлов и TraCIDemoRSU для RSU. Два уровня приложения вызывают BaseWaveApplLayerDTNRSU, который заменяет BaseWaveApplLayer по умолчанию. В omnetpp.ini я указал: .rsu [] .applType = TraCIDemoRSU и .node [] .applType = dtnRSU - person Fariha; 13.10.2016
comment
Как я объяснил выше, когда узел / RSU получает данные, он вызывает handleLowerMsg в BaseWaveApplLayerDTNRSU.cc, чтобы выполнить функцию onData (), которая объявлена ​​в dtnRSU для узлов и TraCIDemoRSU для RSU. Проблема заключается в том, что когда узел получает данные от другого узла, его onData выполняется (** Событие № 4815 t = 9.0044578726 RSUExampleScenario.node [2] .appl (dtnRSU, id = 146), на «данных» (WaveShortMessage, id = 694)) - person Fariha; 13.10.2016
comment
И когда RSU получает данные от узла, его прикладной уровень не выполняется. Я добавил handleLowerMsg в TraCIDemoRSU, но напрасно. Я потратил год на работу с венами, чтобы реализовать архитектуру DTN, и мне действительно нужно добавить RSU в свой сценарий. - person Fariha; 13.10.2016
comment
Здравствуйте, у меня есть вся идея / код, но я не могу понять, где ошибка, из-за того, что не вызывается onData. Если хотите, можете разместить ссылку со всем кодом (в Dropbox, Github или любых других). Со всем кодом, может быть, я смогу вам помочь. Удачи : )! - person João Batista; 13.10.2016
comment
Здравствуйте, большое спасибо за вашу помощь :) Это ссылка для загрузки моего кода: www.transfernow.net/14iq50u2kw4y. Вы увидите, что прикладной уровень RSU не вызывается в сценарии, но вызывается из BaseWaveApplLayerDTNRSU. Жду вашего ответа :) - person Fariha; 14.10.2016
comment
Здравствуйте, я просмотрел ваш код и внес несколько тестов / изменений (как вы можете видеть здесь. Я сравнил ваши veins-4a2 с выпущенными. Вы внесли некоторые изменения в ядро ​​Veins, это плохая идея (здесь и здесь) думаю, что это для вашего сценария (testqgis) работает.Но проблема в сценарии (файл rou, net и poly). - person João Batista; 15.10.2016
comment
Вы можете протестировать с помощью эрлангена, который будет работать. Попробуйте начать с небольшого сценария или с эрлангена и после изменений для большого сценария. Вы можете создать небольшой сценарий с помощью randomTrips.py. Удачи : ) - person João Batista; 15.10.2016
comment
Посмотрите все мои изменения, может быть, вам в чем-то поможет. - person João Batista; 15.10.2016
comment
Я протестировал версию, которую вы изменили, и она работает с картой эрлангена. Но проблема в карте testqgis. Я не понимаю, в чем проблема в файлах (testqgis.rou, testqgis.net и testqgis.poly), которые препятствуют выполнению прикладного уровня RSU. - person Fariha; 17.10.2016
comment
Фактически, на своей карте я создал сценарий с картой Лиона, Франция, по которому автомобили (в моем случае - велосипеды) перемещаются от велосипедной станции к другой велосипедной станции. Я много раз тратил на это в предыдущие месяцы. Итак, я хочу понять проблему файлов testqgis, чтобы знать, могу ли я исправить их для выполнения моей симуляции. - person Fariha; 17.10.2016

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

Распечатайте сообщение с DBG, EV или cout

DBG << "Test_DBG: I am an RSU and I have received a data!\n";
EV << "Test_EV: I am an RSU and I have received a data!\n";
std::cout << "Test_cout: I am an RSU and I have received a data!\n"

После установки сообщения на печать используйте один код для завершения моделирования.

// terminate the simulation with error code 3
   exit(3);

или используйте ASSERT

 ASSERT2(0,"Test: I'm RSU");

Если симуляция завершится с ошибкой, вы будете уверены, что onData выполняется, в противном случае onData не вызывается ни в одной части вашего кода.

-Извините, у меня нет репутации, чтобы добавить всего один комментарий- Удачи!

person João Batista    schedule 07.10.2016
comment
Спасибо за ответ, я проверил, добавив ASSERT, но мое моделирование продолжает работать. Хауэрвер, я определил вызов функции onData () в своем коде. - person Fariha; 10.10.2016