如何在OMShell中通过循环动态调用并仿真不同Modelica模型
在OMShell中通过For循环动态调用不同模型实现批量仿真
以下是实现根据迭代变量动态调用不同模型、完成批量仿真的可行脚本,核心是将构造的模型名称字符串转换为OMShell可识别的模型引用:
loadFile("/path/to/my/library/mylibrary.mo"); lst := {"SimRun1", "SimRun2", "SimRun3"}; for run in lst loop dir := "/path/to/save/the/results/"+run; mkdir(dir); cd(dir); // 将拼接后的模型名称字符串转为实际模型引用 ref := stringTypeName("mylibraray.model" + run); // 定义需要输出的仿真变量 simVar := {"weaDat.AirPressure", "weaDat.AirTemp", "weaDat.CloudCover", "weaDat.RelHumidity", "weaDat.WaterInAir", "weaDat.WindDirection", "weaDat.WindSpeed", "weaDat.SkyRadiation", "weaDat.TerrestrialRadiation", "weaDat.add.u1", "weaDat.add.u2", "ZweiPersonenBuero.TAir", "ZweiPersonenBuero.TRad", "dataOut.H_gWin[1]"}; // 启动仿真,指定参数与输出配置 simulate(ref, stopTime=3.1536e7, numberOfIntervals=8760, fileNamePrefix=run, outputFormat = "csv", variableFilter = simVar); end for;
关键说明
stringTypeName()是实现动态模型调用的核心函数,它能将拼接生成的模型名称字符串转换为OMShell可以直接识别的模型引用- 循环中为每个仿真任务创建独立目录,避免不同模型的结果文件互相覆盖
- 可通过修改
lst列表来添加或调整需要仿真的模型后缀,实现灵活的批量任务配置
注:当前simVar变量的格式设置问题尚未解决,需进一步调试以匹配OMShell的变量过滤要求。
内容的提问来源于stack exchange,提问作者Dummer Horst
相关产品推荐
相关产品推荐

