You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FMPy调用FMI3.0 FMU无法获取实例化组件内变量值的问题

问题分析与解决

你遇到的核心问题是FMI 3.0标准的FMU在FMPy仿真时仅返回time数组,无法获取顶层输出变量Psurp,但FMI 2.0版本正常,且该问题仅在访问实例化组件内部变量赋值的顶层输出时出现。以下是具体排查和解决步骤:

1. 确认FMU中的变量是否正确导出

先用FMPy的dump()函数查看FMI 3.0 FMU的完整变量列表,确认Psurp是否被包含在内:

from fmpy import dump

dump('TestFMU3.fmu')

如果输出中找不到Psurp,说明Dymola导出FMI 3.0时未将该变量标记为输出。此时需要:

  • 在Modelica代码中给Psurp显式添加output修饰符(当前代码仅注释标注,语法上需补全:output Modelica.Units.SI.Power Psurp;)
  • 导出FMI 3.0时,在Dymola的变量选择步骤中,手动将Psurp添加到输出变量列表,或勾选"Include all variables"选项

2. 直接指定组件内部变量作为输出

若顶层Psurp确实未被正确导出,可以跳过顶层变量,直接传入组件内部目标变量的完整路径作为输出参数:

result = simulate_fmu(
    'TestFMU3.fmu',
    validate=False,
    start_time=0,
    stop_time=10,
    solver="CVode",
    output_interval=5,
    record_events=False,
    output=['gri.gri.y'],  # 使用组件内部变量的完整路径
)
df = pd.DataFrame.from_dict(result)

FMI 3.0与FMI 2.0的变量路径规则基本一致,但部分工具导出时可能调整层级命名,需以dump()输出的实际路径为准。

3. 检查Dymola的FMI 3.0导出配置

Dymola对FMI 3.0的默认导出逻辑可能与FMI 2.0存在差异:

  • 确认导出时未启用"Flatten model"选项,该选项可能改变变量的层级结构
  • 检查FMI类型(Co-Simulation/Model Exchange)与仿真时的设置一致,可在simulate_fmu中手动指定fmi_type='CoSimulation'

4. 升级FMPy版本

若以上步骤无效,可能是FMPy对FMI 3.0的支持存在版本bug,尝试升级到最新版:

pip install --upgrade fmpy

内容的提问来源于stack exchange,提问作者Praseeth Prabhakar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:11:17