如何在JModelica输出文件中仅保存相关变量?
解决JModelica仅保存指定仿真变量的问题
好问题!JModelica确实支持只保存你需要的变量输出,这个设置其实就在仿真配置里,只是可能没在手册里特别显眼。下面给你几种实用的实现方法:
方法1:调用simulate()时直接指定output参数
这是最直接的方式,在调用仿真函数时,通过output参数传入你想要保存的变量列表就行。比如你的模型变量是[a,b,c,d,e,f,g,time],只保留a,b,time的话,代码示例如下:
from pymodelica import compile_fmu from pyfmi import load_fmu # 编译你的模型为FMU my_fmu = compile_fmu("YourModelName", "your_model_file.mo") model = load_fmu(my_fmu) # 仿真时指定要保存的变量 simulation_result = model.simulate( start_time=0, final_time=3600, # 假设是1小时的长时间仿真 output=['a', 'b', 'time'] )
这样生成的输出文件(或者内存里的仿真结果对象)就只会包含你指定的三个变量,能大幅减少文件体积。
方法2:通过SimulationOptions配置输出变量
如果需要复用相同的输出配置,你可以创建SimulationOptions对象,设置output_variables属性,再传给仿真函数:
from pymodelica import SimulationOptions, simulate # 创建仿真配置对象 sim_opts = SimulationOptions() # 指定要保存的变量列表 sim_opts['output_variables'] = ['a', 'b', 'time'] # 传入配置进行仿真 simulation_result = simulate( "YourModelName", "your_model_file.mo", options=sim_opts, start_time=0, final_time=3600 )
注意事项
- 变量名必须和模型中定义的完全一致,包括大小写、嵌套路径(比如模型里的子模块变量要写
SubModel.a)。 time变量默认通常会被包含,但为了保险起见,建议显式加入列表,避免遗漏。- 如果是已经编译好的FMU,也可以在加载后通过
model.set_output_variable(['a', 'b', 'time'])来指定输出变量,再执行仿真。
这些方法都能有效解决复杂模型长时间仿真输出文件过大的问题,根据你的工作流选合适的就行~
内容的提问来源于stack exchange,提问作者alkey
相关产品推荐
相关产品推荐

