Я изо всех сил пытался интегрировать Fuzzylite в мой симулятор Castalia, поэтому пока существует ошибка, связанная с Console.cpp в папке Fuzzylite src.Чтобы связать Fuzzylite с моим симулятором Castalia, я добавил EXTOPTS в файл makemake под Castalia,
#!/bin/bash
ROOT=`pwd`
# The following options are used by OMNeT's opp_makemake tool
# For explanation and a complete list of options run: opp_makemake -h
OPTS=" -f -r --deep -o CastaliaBin -u Cmdenv -P $ROOT -M release"
# -X excludes a directory from being considered
EXCLUDEDIRS=" -X Simulations -X out -X bin"
# Use options -I -L -l to include external header files or libraries
EXTOPTS="-I /home/utar/Desktop/HY/fuzzylite-6.0/fuzzylite/ -L /home/utar/Desktop/HY/fuzzylite-6.0/fuzzylite/release/bin/ -lfuzzylite"
# Run OMNeT's opp_makemake tool with the above options
opp_makemake $OPTS $EXCLUDEDIRS $EXTOPTS
Тогда, пока компиляция проходит гладко, симуляция просто не может бытьзапустить.После отслеживания файла я могу отследить источник проблемы, который возникает из файла Castalia bin, написанного на Python.Ниже приведен фрагмент кода, который меня интересует:
r_castalia = re.compile("^Castalia\|\s+(.+)$")
r_scenario = re.compile("Scenario:\s(.*)\$repetition=(\d+)$")
r_progress = re.compile("^\*\* Event \#\d+\s+T=(\S+)\s+Elapsed: (\S+)s.+\s(\d+)\% completed")
r_newrun = re.compile("Preparing for running configuration General, run #(\d+)")
r_totalrun = re.compile("Number of runs: (\d+)")
for ini in iniList:
ini_num += 1
baselabel = label = labelList.pop(0)
f = open("omnetpp.tmp","w")
f.write("[General]\n")
f.write("repeat = " + str(options.repeat) + "\n")
for k in sorted(ini.keys()):
f.write(k + " = " + ini[k] + "\n")
f.close();
has_output = 0
print "path to CastaliaBint is : " + pathToCastaliaBin
if sys.version_info > (2,7):
data = subprocess.check_output([pathToCastaliaBin, '-f', 'omnetpp.tmp', '-x', 'General']).split("\n")
#data = subprocess.check_output(["/home/utar/Desktop/Castalia/CastaliaBin", '-f', 'omnetpp.tmp', '-x', 'General']).split("\n")
else:
data = subprocess.Popen([pathToCastaliaBin, '-f', 'omnetpp.tmp', '-x', 'General'], stdout=subprocess.PIPE).communicate()[0].split("\n")
if len(data) > 6: data = data[6]
else:
data = ""
m = r_totalrun.match(data)
print "r_totalrun is : " + str(r_totalrun)
if (m):
runs = "/" + m.group(1)
else:
print "WARNING: unable to determine total simulation runs"
runs = ""
В результате выходные данные показывают мне это:
ПРЕДУПРЕЖДЕНИЕ: невозможно определить общее количество прогонов моделирования
Здесь основное внимание уделяется:
if sys.version_info > (2,7):
data = subprocess.check_output([pathToCastaliaBin, '-f', 'omnetpp.tmp', '-x', 'General']).split("\n")
Потратив некоторое время на выяснение проблемы, выяснилось, что переменные данные показывают следующий вывод с использованием функции печати:
данные - это ['опция параметра] опция <-f> не распознана', '{at /src/Console.cpp::parse () [строка: 134]}', ”,”]
Я понимаю, что CastaliaBin каким-то образом выполняет Console.cpp, который находится в файле src Fuzzylite !!!
Переменная pathToCastaliaBin фактически является путем к / home / utar/ Desktop / Castalia / CastaliaBin, где CastaliaBin - исполняемый файл.
Для нормальных условий, когда библиотека Fuzzylite не включена в Castalia Simulator, когда я набираю CastaliaBin в командной строке, она будет выглядеть следующим образом: Перед включением Fuzzylite
После того, как я связал Fuzzylite с Castalia, он показывает: После включения Fuzzylite
Как вы можете видеть, CastaliaBin каким-то образом выполняет код в Fuzzylite !!!
Поэтому я бы хотел, чтобы кто-нибудь протянул мне руку помощи.Я был бы очень признателен.Заранее спасибо !!!