我正在尝试使用 OMPython 中的 setParameter 更改参数,我已加载 Modelica 模型并解决了它。我想用其他数值更改参数,但收到错误消息:
|信息 | setParameters() failed : 无法设置以下信号“Nass”,它似乎是结构性的、最终的、受保护的或评估的或具有非常量的绑定,使用 sendExpression(setParameterValue(CyclicLoading, Nass, 12000),解析= false)并使用 buildModel() API 重建模型
setParameter 引入之前的 OMPython 代码:
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()
Directory_cd=omc.sendExpression("cd()")
resultatSimluation=mod.simulate(resultfile=f"{fich_res_Modelica_mat}")
Solution_var=mod.getSolutions()
引入setParameter后的OMPython代码:
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()
**mod.setParameters("Nass=12000") **
Directory_cd=omc.sendExpression("cd()")
resultatSimluation=mod.simulate(resultfile=f"{fich_res_Modelica_mat}")
Solution_var=mod.getSolutions()
尝试通过使用开放 modelica Python API 命令更改开放 modelica 代码中给出的参数。导致错误消息: |信息 | setParameters() failed : 无法设置以下信号“Nass”,它似乎是结构性的、最终的、受保护的或评估的或具有非常量的绑定,使用 sendExpression(setParameterValue(CyclicLoading, Nass, 12000),解析=false)并使用 buildModel() API 重建模型
根据 Modelica 规范,在很多情况下不允许更改参数。
对于以下型号
HelloWorld
model HelloWorld "Model"
Real x(start=1, fixed = true);
parameter Real a = 1; // Changable parameter
Real y[N];
parameter Integer N = 2; // Structural parameter
final parameter Real b = 3; // Final parameter
protected
parameter Real c = 4; // Protected parameter
public
parameter Real d = 2*a; // Evaluated parameter
model M
parameter Real e = 5; // Changable parameter
end M;
M m(e=d); // Non-constant binding of e
equation
der(x) = a*b*c*d*x;
for i in 1:N loop
y[i] = time;
end for;
end HelloWorld;
只允许改变参数
a
的值。
在没有看到您的 Modelica 模型的情况下,我假设您在尝试更改时遇到了其中一种情况
Nass
。
谢谢你的帖子。实际上我的参数应该是可以更改的,但是我在代码的开头定义了一些变量,这使得参数不可更改,因为它们放置在 Real 变量之后。我将参数放在 Real 变量之前,现在它可以工作了。
Before:
Real fs,F_s,F_e,fe,fm,fu;
parameter Real Rz=200 "Peak-to-valley height(micro meters)"; // Table 18.8
parameter Integer Nass=15000;
After:
parameter Real Rz=200 "Peak-to-valley height(micro meters)"; // Table 18.8
parameter Integer Nass=15000;
Real fs,F_s,F_e,fe,fm,fu;