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

使用FMPy运行Simcenter导出FMU时出现NaN值问题求助

FMU在FMPy中运行多步后返回NaN的问题求助

场景与问题描述

  • 运行环境:Azure容器中使用FMPy运行Simcenter导出的FMU,步长设为5e-7
  • 架构:FMU与本地Simulink模型构成循环反馈回路,要求每次仅运行FMU一步,返回结果至Simulink并保持FMU活跃(实现参考FMPy的continue_simulation.py示例)
  • 异常表现:Simulink直接运行FMU一切正常,但改为Matlab函数块路由至容器后,第7步开始结果与直接运行差异极大,第10步输出变为NaN
  • 当前simulate_fmu()配置参数:
filename
model_description
fmu_instance
input
initialize=False
start_time=0(下次计划设为5e-7)
stop_time=5e-7(下次计划设为1e-6)
step_size=5e-7
terminate=False
set_stop_time=False

求助问题

  1. 针对该分步运行、保持FMU活跃的场景,应使用FMPy中的哪些变量/参数?
  2. 如何解决FMU运行多步后返回NaN的问题?

问题1:分步运行场景的FMPy参数配置

针对每次运行一步、保持FMU活跃的场景,核心参数与配置逻辑如下:

  • 必须保留的参数:
    • fmu_instance:必须复用同一个实例,不能每次重新创建,这是维持FMU活跃状态的核心
    • initialize=False:首次初始化后,后续步骤不能再调用初始化,避免重置FMU内部状态
    • terminate=False:每次运行结束后不终止实例,确保后续可继续调用
  • 必须修正的参数:
    • start_time:每次运行必须设为上一次运行的结束时间(比如第一次start=0,stop=5e-7;第二次start=5e-7,stop=1e-6,以此类推),固定为0会导致FMU重复计算同一时间段,内部状态混乱
    • stop_time:必须设为start_time + step_size,保证每次仅运行一个步长
    • set_stop_time=True:需要启用该参数,确保FMU更新内部的停止时间,否则可能沿用初始值导致计算异常
  • 建议补充的参数:
    • solver:如果是ModelExchange类型的FMU,指定与Simulink一致的求解器(如'CVode'),避免求解器差异引发结果偏差
    • output:明确指定需要输出的变量,减少不必要的计算开销

问题2:NaN值问题的排查与解决方法

结合场景,NaN通常由FMU内部状态异常或计算逻辑冲突导致,可按以下步骤处理:

  1. 修正时间参数配置
    立即调整start_time和stop_time为连续递增的时间(每次start=上一次stop,stop=start+step_size),同时设置set_stop_time=True。之前固定start_time=0会导致FMU反复从初始状态计算,内部状态积累错误最终溢出为NaN,这是最可能的原因。
  2. 验证输入数据的连续性
    • 检查Simulink速率转换模块输出的输入值,确保没有跳变、NaN或不合理的数值传入FMU
    • 确认输入数据的时间戳与FMU当前的start_time完全匹配,避免时间错位引发计算异常
  3. 检查FMU状态一致性
    • 复用fmu_instance时,确保没有误调用重置FMU状态的API,比如reset()
    • 通过FMPy的get_real()、get_integer()等API,对比Simulink直接运行时和容器中FMU的内部状态,定位差异点
  4. 调整步长与求解器设置
    • 尝试微调步长(如改为4.9e-7),避免步长与FMU内部求解器的时间步冲突导致数值不稳定
    • 如果是ModelExchange FMU,尝试切换求解器或调整容差参数(如relative_tolerance=1e-6)
  5. 检查FMU导出配置
    • 确认Simcenter导出FMU时的求解器、步长设置与FMPy中使用的一致
    • 导出时启用状态保存选项,确保FMU能正确保留内部状态用于分步运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:37:32