У меня есть FMU, который я пытаюсь смоделировать в JModelica. Параметр input
должен ссылаться на текущее состояние некоторых переменных в моделировании FMU JModelica. Однако у меня возникают проблемы с доступом к ним.
Читая документацию, мне бы хотелось поверить, что функции .get_variable_nominal()
или .get()
обеспечат доступ к ним, но это не так.
Основная структура кода выглядит следующим образом:
from pyfmi import load_fmu
model = none
def inputFunction(t):
global model
# Get current state of desired variable(s)
variable = model.some_function("object.variable_name")
# Do some mathematical process to get input value
input_value = foo(variable)
return input_value
def main():
global model
# FMU's input variables
inputs = ["list", "of", "input", "variables"]
# Get model from FMU file
model = load_fmu("model_name.fmu")
# Create input object for simulation method
inputObj = (inputs, inputFunction)
# Do some simulation
opts = model.simulate_options()
results = model.simulate(start_time=0, final_time=100.0, input=inputObj, options=opts)
if __name__ == "__main__":
main()
Если вместо .some_function("object.variable_name")
я использую .get_variable_nominal("object.variable_name")
, функция возвращает значение с плавающей запятой 1.0
(мне кажется, я получаю разные произвольные значения, если я указываю другую переменную FMU). Тогда как с .get("object.variable_name")
возвращается ошибка FMUException: Failed to get the Real values.
. Значение, которое я ожидаю в начале симуляции, представляет собой значение float
приблизительно 303
.
Обратите внимание, что моделирование FMU ведет себя правильно, если выполняется с фиксированными входными значениями, поэтому правильные значения действительно сохраняются в модели.
Спасибо всем, кто может помочь мне понять, что здесь происходит.