OpenModelica中mSenFac参数(isChangeable=False)的修改及OMPython调用问题
OpenModelica中修改Buildings库不可变参数mSenFac的解决方案
1. 是否可以将mSenFac的isChangeable设置为True?
可以,有两种可行方式:
- 直接修改库源码:找到
Buildings.Fluid.MixingVolumes.MixingVolume里mSenFac的定义,把isChangeable=false改成isChangeable=true。缺点是更新Buildings库后修改会丢失,且影响所有使用该组件的模型。 - 局部重载组件:在你的模型里自定义一个继承自
MixingVolume的组件,重载mSenFac参数并设置isChangeable=true,再用这个自定义组件替换原模型中被Buildings.ThermalZones.ReducedOrder.RC调用的MixingVolume。这种方法不会改动库本身,更安全。
2. 有没有其他通过OMPython设置mSenFac的方法?
如果不想修改库或重载组件,试试以下几种方法:
- 实例化前修改参数属性:在构建模型前,先用
sendExpression修改参数的可变性,再执行构建:# 修改参数的isChangeable属性并赋值 mod.sendExpression("setComponentModifier(BuildingModels.oneElement.thermalZoneOneElement, mSenFac = {isChangeable=true, start=5})") # 重新构建模型 mod.buildModel("BuildingModels.oneElement") - 允许修改不可变参数:用
setParameterValue时加上allowUnchangeable=true参数,强制修改不可变参数:mod.sendExpression("setParameterValue(BuildingModels.oneElement.thermalZoneOneElement.mSenFac, 5, allowUnchangeable=true)") # 重新编译生效 mod.buildModel("BuildingModels.oneElement") - 校验参数路径:确认你写的参数完整路径完全正确,比如
thermalZoneOneElement是否确实属于BuildingModels.oneElement,路径错误会导致命令完全无效。
内容的提问来源于stack exchange,提问作者Farnaz
相关产品推荐
相关产品推荐

