Dymola的mos脚本中修改已翻译模型参数的处理机制咨询
Dymola脚本修改翻译后参数的处理逻辑
你使用的是Dymola标准的多工况批量仿真脚本,示例代码如下:
openModel("C:/Dymola/Testing/Test1.mo") translateModel ("Test1"); for i in 1:10 loop a=i; simulate(); system("copy dsres.mat results"+String(i) +".mat"); end for;
你观察到的脚本和GUI的操作逻辑差异,是Dymola对可修改顶层参数的两套触发逻辑导致的,具体处理流程如下:
- 调用
translateModel()完成模型翻译后,Dymola会生成两类产物:一是独立的仿真可执行文件,二是可覆盖参数映射表,表中收录了所有未被final关键字锁定的顶层参数的传递入口,这些参数支持在仿真启动前直接修改,不需要重新编译。 - 脚本中对参数
a的赋值仅修改Dymola工作区的全局变量值,不会触发模型源码的变更标记,Dymola不会判定模型发生了需要重新翻译的改动。 - 后续调用
simulate()时,Dymola会自动将工作区的参数值和翻译时的默认值做比对,将存在差异的参数通过启动命令传递给仿真可执行文件,仿真运行时直接使用新参数值,无需重新翻译。
GUI中翻译后修改参数需要重新翻译,是因为GUI参数编辑面板默认绑定模型源码属性,修改参数会被标记为「模型定义变更」,Dymola为了保证模型源码和编译产物一致性才会强制要求重翻译。如果在GUI的「仿真设置→自定义启动参数」栏直接指定参数值,同样不需要重新翻译即可生效,和脚本行为完全一致。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

