使用OMPython的setParameters修改参数Nass报错的技术咨询
解决OMPython修改Modelica参数Nass的错误问题
根据错误提示,参数Nass属于结构性、final、protected类型,或者绑定了非常量表达式,无法用setParameters()直接修改。需要改用OpenModelica底层API设置参数,再重新构建模型,具体操作如下:
核心修正步骤
- 用
OMCSessionZMQ的sendExpression调用原生setParameterValue函数设置参数 - 参数修改后必须重新调用
buildModel()编译模型,确保参数生效
修正后的完整代码
from OMPython import ModelicaSystem from OMPython import OMCSessionZMQ omc = OMCSessionZMQ() modelpath="C:/work/code/modelica/" Nom_fichier_mo="CyclicLoading.mo" Nom_fich="CyclicLoading" fich_res_Modelica_mat="Resultat_av_CyclicLoading.mat" mod=ModelicaSystem(modelpath+Nom_fichier_mo,Nom_fich,["Modelica","CyclicLoading"]) # 先设置参数再构建模型 omc.sendExpression('setParameterValue(CyclicLoading, Nass, 12000)', parsed=False) mod.buildModel() Directory_cd=omc.sendExpression("cd()") resultatSimluation=mod.simulate(resultfile=f"{fich_res_Modelica_mat}") Solution_var=mod.getSolutions()
如果需要先构建模型再修改参数,可调整为:
from OMPython import ModelicaSystem from OMPython import OMCSessionZMQ omc = OMCSessionZMQ() modelpath="C:/work/code/modelica/" Nom_fichier_mo="CyclicLoading.mo" Nom_fich="CyclicLoading" fich_res_Modelica_mat="Resultat_av_CyclicLoading.mat" mod=ModelicaSystem(modelpath+Nom_fichier_mo,Nom_fich,["Modelica","CyclicLoading"]) mod.buildModel() # 修改参数后重新编译模型 omc.sendExpression('setParameterValue(CyclicLoading, Nass, 12000)', parsed=False) mod.buildModel() Directory_cd=omc.sendExpression("cd()") resultatSimluation=mod.simulate(resultfile=f"{fich_res_Modelica_mat}") Solution_var=mod.getSolutions()
关键说明
setParameterValue(CyclicLoading, Nass, 12000)是OpenModelica原生函数,可处理setParameters()无法修改的特殊参数parsed=False确保表达式按原始格式传递给OpenModelica解析- 重新调用
buildModel()是必须步骤,否则参数修改不会生效
内容的提问来源于stack exchange,提问作者Faruk
相关产品推荐
相关产品推荐

