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

合并多FMU生成FMU容器时报ModelStructure/Outputs错误如何解决

问题原因

该错误由合并后生成的FMU的modelDescription.xml文件结构不符合FMI标准导致,核心是<ModelStructure>下的<Outputs>节点条目数和实际定义的输出变量数量不匹配,和你给出的报错提示ModelStructure/Outputs must have exactly one entry for each variable with causality="output"完全对应:

  • FMPy的FMU合并功能默认逻辑存在缺陷,若合并时未显式指定对外暴露的输出映射,会出现子FMU的output变量没有被同步添加到<Outputs>节点下的情况
  • 部分场景下合并逻辑会重复添加同一个输出变量的条目,导致<Outputs>下的条目数多于实际output变量数,也会触发该校验规则

解决方法

临时修复方案(直接修改生成的FMU)

  1. 将导出的最终FMU文件后缀改为.zip,解压得到全部文件
  2. 打开根目录下的modelDescription.xml文件,先统计所有<ScalarVariable>节点中属性为causality="output"的变量总数,记为N
  3. 找到<ModelStructure>节点下的<Outputs>子节点,统计其下<Unknown>条目的数量:
    • 若条目数小于N:逐个核对遗漏的output变量,为每个缺失的变量补充对应<Unknown>条目,条目index属性填写对应output变量的valueReference值
    • 若条目数大于N:删除重复的<Unknown>条目,保证每个output变量仅对应一个条目
  4. 将所有修改后的文件重新打包为ZIP格式,修改后缀为.fmu,重新校验即可通过

永久规避方案(调整合并脚本)

在调用FMPy的合并接口时,显式指定所有需要对外暴露的输出映射,从根源避免条目不匹配问题,参考代码如下:

from fmpy.fmu_container import create_fmu_container

# 定义三个子FMU的本地路径
sub_fmus = [
    './pandapower_grid.fmu',
    './csv_data1.fmu',
    './csv_data2.fmu'
]

# 显式定义所有对外输出的映射关系,variable为子FMU内的变量名,name为合并后FMU的对外变量名
external_outputs = [
    {'variable': 'pandapower_grid.bus1_voltage', 'name': 'grid_bus1_voltage'},
    {'variable': 'csv_data1.temperature', 'name': 'env_temperature'},
    {'variable': 'csv_data2.power_load', 'name': 'building_power_load'}
]

# 生成合并FMU时传入outputs参数
create_fmu_container(sub_fmus, './merged_total.fmu', outputs=external_outputs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 22:24:01