Dymola 2022参数化仿真脚本resultFile拼接失效问题咨询
Dymola循环仿真结果文件覆盖问题原因与修正
问题原因
- Dymola 2022版本的MOS脚本解释器存在语法限制:不支持在
simulateModel()这类内置仿真命令的命名参数传入位置,直接执行字符串拼接、类型转换这类运算表达式。直接写resultFile="Test"+String(i)时,解释器不会先计算拼接后的字符串再传参,会直接把该表达式识别为非法输入,导致仿真完全无法启动。 - 原代码循环内直接写
a=i;的写法无效:这行脚本不会把参数值传递给已翻译的模型,就算去掉字符串拼接部分能运行,10次循环实际是用同一个默认参数值重复仿真,且因为结果文件名完全一致,每次运行都会覆盖上一次的结果文件,最终只会保留最后一次的仿真输出。
修正方案
把需要传入的参数值、拼接好的结果文件名提前定义为脚本变量,再传入仿真命令;模型参数修改通过simulateModel自带的初始值传参接口实现,不需要重复翻译模型。修正后的可运行代码如下:
openModel("C:/MySimulations/Test1.mo") translateModel("Test1"); for i in 1:10 loop // 提前拼接结果文件名,指定整数转字符串时保留0位小数,避免出现多余空格、小数位 resFile := "Test" + String(i, 0); // 传入提前定义的变量,同时指定要修改的模型参数与对应值 simulateModel( resultFile = resFile, InitialNames = {"a"}, InitialValues = {i} ); end for;
补充说明
- 提前翻译一次模型再跑所有循环的写法,比每次循环都重新翻译模型的仿真效率高很多,适合多参数扫描场景。
- 所有传入内置仿真命令的参数,如果需要经过计算、拼接得到,都建议提前赋值给脚本变量再传入,避免触发旧版本Dymola的脚本解释器语法限制。
内容的提问来源于stack exchange,提问作者Alex Mekx
相关产品推荐
相关产品推荐

