Dymola执行simulateMultiResultsModel命令遇参数不可设置警告
解决Dymola simulateMultiResultsModel提示“freqHz is not a settable parameter after translation”的问题
问题场景
使用Dymola 2023版本,执行官方文档提供的批次仿真命令:
(ok, traj) = simulateMultiResultsModel("Modelica.Mechanics.Rotational.Examples.CoupledClutches", stopTime=1.2, numberOfIntervals=10, resultFile="CoupleCluches", initialNames={"freqHz"}, initialValues=[0.1;0.2;0.3;0.4], resultNames={"J1.w","J3.w"});
尝试通过修改freqHz参数批量获取J1.w和J3.w的仿真结果时,收到警告:Warning: freqHz is not a settable parameter after translation,且确认问题与Python接口无关,直接在Dymola中执行示例命令也会触发该警告。
原因分析
- 模型参数的可设置性限制:
CoupledClutches模型中的freqHz是Sine组件(drive)的参数,默认情况下,Dymola在翻译模型时可能会将这类参数内联优化,使其变为不可动态修改的固定值。 - 库模型的参数属性:官方库中的模型参数可能未默认开启“可设置”属性,导致无法通过批次仿真命令直接调整。
解决方案
方案1:修改目标参数的可设置属性
- 打开
Modelica.Mechanics.Rotational.Examples.CoupledClutches模型,定位到drive(即Sine类型的驱动组件)。 - 找到该组件的
freqHz参数,右键选择Set Modification,在弹出窗口中勾选Settable选项,确保参数在模型翻译后仍允许修改。 - 将修改后的模型另存为自定义版本(避免改动官方库文件),再执行原仿真命令。
方案2:关闭参数内联优化选项
- 在Dymola中依次点击
Options > Simulation > Translation。 - 取消勾选Inline parameters或类似的参数内联优化选项,阻止Dymola在翻译阶段固定参数值。
- 重新执行批次仿真命令,验证警告是否消失。
方案3:改用循环仿真替代批次命令
如果上述方案无效,可通过循环调用simulateExtendedModel实现批量仿真:
// 定义要测试的参数值列表 freqList = {0.1, 0.2, 0.3, 0.4}; // 存储所有仿真结果 resultTrajectories = {}; for freq in freqList loop // 动态修改参数 setParameter("Modelica.Mechanics.Rotational.Examples.CoupledClutches.drive.freqHz", freq); // 执行单次仿真 (simOk, resFile) = simulateExtendedModel("Modelica.Mechanics.Rotational.Examples.CoupledClutches", stopTime=1.2, numberOfIntervals=10, resultFile="CoupleClutches_" + String(freq)); // 读取目标变量结果 j1wData = readResult(resFile, "J1.w"); j3wData = readResult(resFile, "J3.w"); // 存入结果集合 resultTrajectories = resultTrajectories + {{j1wData, j3wData}}; end for;
内容的提问来源于stack exchange,提问作者Sheikh Hussain
相关产品推荐
相关产品推荐

