Я хочу запустить свою симуляцию, не открывая IDE. Я проверил руководство и выполнил шаги, но я застрял.
Я использую omnetpp v5.6.2. Я запускаю mingwenv.cmd в каталоге, где находится мой *.ini, и набираю это:
AFDX.exe -f C:/Workspaces/Github/AFDX/Simulations/AutoNetwork.ini -n C:/Workspaces/Github/AFDX/simulations
Я получил это взамен:
OMNeT++ Discrete Event Simulation (C) 1992-2019 Andras Varga, OpenSim Ltd.
Version: 5.6.2, build: 200518-aa79d0918f, edition: Academic Public License -- NOT FOR COMMERCIAL USE
See the license for distribution terms and warranty disclaimer
Setting up Qtenv...
Loading NED files from C:/Workspaces/Github/AFDX/simulations: 1
Loading images from 'bitmaps': *: 0
Loading images from 'images': *: 0
Loading images from 'C:/omnetpp-5.6.2/images': *: 0 abstract/*: 90 background/*: 4 block/*: 320 device/*: 195 logo/*: 1 maps/*: 9 misc/*: 70 msg/*: 55 old/*: 111 status/*: 28
и это:
Поэтому я также добавил свой каталог src
AFDX.exe -f C:/Workspaces/Github/AFDX/Simulations/AutoNetwork.ini -n "C:/Workspaces/Github/AFDX/simulations;C:/Workspaces/Github/AFDX/src"
На этот раз я заставляю считать все нужные файлы, но все равно не работает:
OMNeT++ Discrete Event Simulation (C) 1992-2019 Andras Varga, OpenSim Ltd.
Version: 5.6.2, build: 200518-aa79d0918f, edition: Academic Public License -- NOT FOR COMMERCIAL USE
See the license for distribution terms and warranty disclaimer
Setting up Qtenv...
Loading NED files from C:/Workspaces/Github/AFDX/simulations: 1
Loading NED files from C:/Workspaces/Github/AFDX/src: 38
Loading images from 'bitmaps': *: 0
Loading images from 'images': *: 0
Loading images from 'C:/omnetpp-5.6.2/images': *: 0 abstract/*: 90 background/*: 4 block/*: 320 device/*: 195 logo/*: 1 maps/*: 9 misc/*: 70 msg/*: 55 old/*: 111 status/*: 28
В отличие от ошибки, на самом деле существует класс AFDX::ConnDef и когда я запускаю симуляцию с помощью IDE, она работает нормально.
Я также добавляю структуру каталогов моего проекта, возможно, это поможет.
|>AFDX
__|>источник
____|>библиотека очереди
______| *.нед
______| *.cc
______| *.ч
____| *.нед
____| *.cc
____| *.ч
____| Материал ConnDef здесь
__|>симуляции
____|>Результаты
____|AFDX.exe
____|AutoNetwork.ini
____|AutoNetwork.ned
____|Макетфайл
__|Макетфайл
Этот вопрос содержит 2 проблемы. Первое было правильно решено вами. Второй (afdx::ConnDef
не найден). Не имеет абсолютно никакого отношения к названию этого вопроса или к файлам NED в целом. Класс ConnDef
либо отсутствует в коде C++, либо вы забыли добавить макрос Define_Module
, либо вы поместили этот класс в глобальное пространство имен вместо того, чтобы включить его в пространство имен afdx
.
Вы предлагаете получать разные результаты при работе из IDE или командной строки. Это может быть только в том случае, если вы запускаете разные исполняемые файлы.
Проверка дерева каталогов показывает, что у вас есть Makefile
и файл AFDX.exe в папке simulations
, поэтому эта папка обозначена как исходная папка, однако в ней НЕТ исходных файлов. С другой стороны, папка src
также является исходная папка, и, хотя вы не указали, я полагаю, что в ней также есть Makefile
и снова EXE-файл, а тот — это исполняемый файл, который содержит код вашей модели и класс afdx::ConnDef
(и IDE также запускает этот исполняемый файл). С другой стороны, вы запускаете EXE-файл из папки simulations
, которая представляет собой пустой EXE-файл без какого-либо кода...
НЕ используйте две исходные папки в проекте одновременно, если вы действительно не понимаете, что делаете. Просто уберите обозначение источника из папки simulations
и удалите туда exe и Makefile.
Используйте EXE в папке src
, чтобы запустить симулятор из командной строки. то есть вы бы сделали что-то вроде
cd simulations
../src/AFDX.exe -n ".;../src" AutoNetwork.ini
Действительно, запуск из IDE или командной строки должен дать точно такие же результаты. Это говорит мне о том, что вы не используете один и тот же исполняемый файл, и поэтому поведение отличается. Смотрите мое редактирование ответа.
О, и, кстати, если бы вы использовали OMNeT++ 5.7, эта версия выводит командную строку, которую она использует, на консоли IDE, поэтому вы можете скопировать/вставить фактическую команду в консоль.
Хорошо, я удаляю обозначение источника и перемещаю AutoNetwork.ned в src. В дополнение к этому мне пришлось добавить пакет в файл ned и обновить файл ini в соответствии с этим. Но теперь это работает. Спасибо!
Я понимаю логику, но я могу успешно запустить эту симуляцию из IDE, ничего не меняя в Conndef. В чем разница, когда не используется IDE?