2016-08-17 4 views
1

Я получаю странное поведение в простой совместной симуляции, которую я пытаюсь настроить. Я настраиваю энергетическую модель здания в EnergyPlus для тестирования FMU, созданного JModelica. Тем не менее, энергетическая модель здания будет зависать на этапе совместного моделирования. Затем я запустил FMU в JModelica и получил некоторые очень странные результаты.Значения переменных FMU не соответствуют вводу

Код Modelica является:

model CallAdd 
    input Real FirstInput(start=0); 
    input Real SecondInput(start=0); 
    output Real FMUOutput(start=0); 
    function CAdd 
     input Real x(start=0); 
     input Real y(start=0); 
     output Real z(start=0); 
     external "C" annotation(Library = "CAdd", LibraryDirectory = "modelica://CallAdd"); 
    end CAdd; 
equation 
    FMUOutput = CAdd(FirstInput,SecondInput); 
    annotation(uses(Modelica(version = "3.2.1"))); 
end CallAdd; 

Вышеуказанные ссылки кода "Cadd", который является файл библиотеки для с кодом "CAdd.c":

double CAdd(double x, double y){ 
    double answer; 
    answer = x + y; 
    return answer; 
} 

который составляется в библиотеку файл с ниже двух команд в CMD:

gcc -c CAdd.c -o CAdd.o 
ar rcs libCAdd.a CAdd.o 

Я могу запустить приведенный выше пример OpenModelica с wrapp и он отлично работает.

Затем я использовал JModelica для компиляции вышеуказанного в качестве FMU для совместного моделирования. Код JModelica компиляции является:

# Import the compiler function 
from pymodelica import compile_fmu 

# Specify Modelica model and model file (.mo or .mop) 
model_name = "CallAdd" 
mo_file = "CallAdd.mo" 

# Compile the model and save the return argument, for use later if wanted 
my_fmu = compile_fmu(model_name, mo_file, target="cs") 

Затем я моделировал FMU и получил странные результаты с кодом JModelica Python:

from pyfmi import load_fmu 
import numpy as np 
import matplotlib.pyplot as plt 

modelName = 'CallAdd' 
numSteps = 100 
timeStop = 20 

# Load FMU created with the last script 
myModel = load_fmu(modelName+'.fmu') 

# Load options 
opts = myModel.simulate_options() 

# Set number of timesteps 
opts['ncp'] = numSteps 

# Set up input, needs more than one value to interpolate the input over time. 
t = np.linspace(0.0,timeStop,numSteps) 
u1 = np.sin(t) 
u2 = np.empty(len(t)); u2.fill(5.0) 
u_traj = np.transpose(np.vstack((t,u1,u2))) 
input_object = (['FirstInput','SecondInput'],u_traj) 

# Internalize results 
res = myModel.simulate(final_time=timeStop, input = input_object, options=opts) 
# print 'res: ', res 

# Internalize individual results 
FMUTime = res['time'] 
FMUIn1 = res['FirstInput'] 
FMUIn2 = res['SecondInput'] 
FMUOut = res['FMUOutput'] 

plt.figure(2) 
FMUIn1Plot = plt.plot(t,FMUTime[1:],label='FMUTime') 
# FMUIn1Plot = plt.plot(t,FMUIn1[1:],label='FMUIn1') 
# FMUIn2Plot = plt.plot(t,FMUIn2[1:],label='FMUIn2') 
# FMUOutPlot = plt.plot(t,FMUOut[1:],label='FMUOut') 
plt.grid(True) 
plt.legend() 
plt.ylabel('FMU time [s]') 
plt.xlabel('time [s]') 
plt.show() 

что привело к заговору в результате «FMUTime» против питона «т ": FMU Time does not match simulation time

В дополнение к этому странному поведению входные данные« FirstInput »и« SecondInput »в результатах FMU не совпадают с u1 и u2, указанными в коде python. Я надеюсь, что кто-то может помочь мне лучше понять, что происходит.

Бест,

Джастин

+0

Любая причина, по которой вы излишне увеличиваете сложность с помощью модуля C только для того, чтобы добавить два «двойника»? – Olaf

+0

@Olaf Да, это простая конфигурация гораздо более крупной модели, в которой мы используем c-код для вызова модели python. –

+0

Извините, но это также звучит странно. Но поскольку я действительно не знаю modelica и как он интегрируется с Python, я оставляю это на этом. – Olaf

ответ

0

После @ предложение ChristianAndersson чтобы обновить мою установку JModelica была решена проблема, описанная в моем вопросе выше.

JModelica 1.17.0 был выпущен в декабре 2015 года

JModelica-SDK-1.12.0 был выпущен в феврале 2016 года и построен из исходного кода, которая зафиксировала проблему и предоставила мне с ожидаемым Результаты.

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

  • Нет связанных вопросов^_^