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

PyFMI运行Simulink导出FMU报步长需非负且可被0.2整除如何解决

PyFMI运行Simulink导出FMU步长报错解决方案

报错根因:你导出的FMU内置了Simulink的固定步长求解器,步长固定为0.2,要求所有仿真步长、通信步长必须为0.2的非负整数倍,你之前使用的0.02、0.004步长,以及initialize方法传入的0.1终止时间均不满足该要求,因此触发报错。

以下为3种可行解决方案,按需选择即可:

方案1:调整simulate方法参数适配现有FMU

你当前默认配置里ncp=500代表均匀输出500个通信点,步长为总仿真时长/500,默认不符合0.2的整除要求,两种修改方式:

  • 指定ncp为符合要求的值:仿真总时长/0.2 = 通信点数量,例如总仿真时长为10s时,ncp设为50即可,调用示例:
model.simulate(start_time=0, final_time=10, options={'ncp': 50})
  • 关闭均匀通信点输出:不需要固定间隔输出结果时,将ncp设为0,由FMU内置求解器控制步长,调用示例:
model.simulate(start_time=0, final_time=10, options={'ncp': 0})

方案2:调整手动步进的参数

如果使用do_step手动控制仿真流程,需要保证初始化的终止时间、每次步进的步长均为0.2的整数倍,示例代码:

# 初始化时终止时间设为0.2的整数倍即可
model.initialize(start_time=0, stop_time=10)
current_time = 0
step_size = 0.2 # 步长取0.2的整数倍即可,如0.4、1.0都符合要求
while current_time < 10:
    model.do_step(current_time, step_size)
    current_time += step_size

你之前调用model.do_step(0, 1.0)本身步长是符合要求的,问题出在初始化时传入的终止时间0.1不符合规则,才会持续报错。

方案3:修改Simulink导出配置(适配更小步长需求)

如果确实需要更小的通信步长,回到Simulink修改FMU导出配置:将求解器的固定步长修改为你需要的最小粒度(如0.004),重新导出FMU后,0.004、0.02等步长即可满足整除要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:36:06