在仿真过程中访问FMU系统变量

时间:2019-05-03 13:35:33

标签: python modelica jmodelica

我有一个正在尝试在JModelica中模拟的FMU。 input参数需要引用JModelica FMU仿真中某些变量的当前状态。但是,我在访问这些文件时遇到了麻烦。

在阅读文档时,我相信可以使用功能.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的{​​{1}}值。

请注意,如果使用固定的输入值运行FMU仿真,则行为正确,因此正确的值确实存储在模型中。

感谢您能帮助我了解这里发生的事情的人。

0 个答案:

没有答案