如何用FMPy配置FMU-CS模拟将结果存至RAM并了解存储方式?
使用FMPy实现模拟结果内存存储(替代PyFMI的
result_handling='memory') 1. 实现仅在RAM中存储模拟结果
在FMPy中,默认模拟行为就是将结果直接保存在内存中。如果要明确禁用硬盘写入,只需在调用simulate()函数时设置result_file=None(这也是默认值),彻底避免生成硬盘结果文件,所有数据仅通过RAM存储。
对应你PyFMI的实现代码,FMPy的写法如下:
from fmpy import read_model_description, extract, simulate # 加载FMU并准备模拟环境 model_description = read_model_description('your_model.fmu') unzipdir = extract('your_model.fmu') # 执行模拟,结果仅存于内存 sim_res = simulate( unzipdir, final_time=1.0, result_file=None # 关键参数:禁止写入硬盘,结果直接返回内存 )
sim_res会直接返回包含时间序列和变量结果的字典(或结构化数组),所有数据都在内存中,完全消除硬盘IO开销,非常适合你这种需要多次重复模拟的优化场景。
2. 确认FMU-CS模式下的结果存储方式
使用FMU-CS(协同仿真)模式时,FMPy同样通过result_file=None控制结果存储逻辑:
- 设置该参数后,FMPy不会让FMU-CS进程写入硬盘结果文件,而是通过进程间通信将结果直接传回主进程内存;
- 验证方式:
- 模拟结束后检查工作目录,不会生成
.csv/.mat等结果文件; - 直接查看
sim_res内容,所有模拟数据已加载在内存中,可直接用于后续计算。
- 模拟结束后检查工作目录,不会生成
如果需要进一步优化内存占用,还可以通过output参数指定仅记录需要的变量:
sim_res = simulate( unzipdir, final_time=1.0, result_file=None, output=['time', 'target_var_1', 'target_var_2'] # 仅保留必要变量 )
内容的提问来源于stack exchange,提问作者janpeter
相关产品推荐
相关产品推荐

